lkml.org 
[lkml]   [2015]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:irq/core] irqdomain: Add non-hierarchy helper irq_domain_set_info
    Commit-ID:  5f22f5c668204f3af7557018b2ad6cf2074defac
    Gitweb: http://git.kernel.org/tip/5f22f5c668204f3af7557018b2ad6cf2074defac
    Author: Stefan Agner <stefan@agner.ch>
    AuthorDate: Sat, 16 May 2015 11:44:13 +0200
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitDate: Mon, 18 May 2015 17:32:43 +0200

    irqdomain: Add non-hierarchy helper irq_domain_set_info

    This adds the helper irq_domain_set_info() in a non-domain hierarchy
    variant. This allows to use the helper for generic chip since not
    all chips using generic chip support domain hierarchy.

    Signed-off-by: Stefan Agner <stefan@agner.ch>
    Cc: marc.zyngier@arm.com
    Cc: linux@arm.linux.org.uk
    Cc: u.kleine-koenig@pengutronix.de
    Cc: olof@lixom.net
    Cc: arnd@arndb.de
    Cc: daniel.lezcano@linaro.org
    Cc: mark.rutland@arm.com
    Cc: pawel.moll@arm.com
    Cc: robh+dt@kernel.org
    Cc: ijc+devicetree@hellion.org.uk
    Cc: galak@codeaurora.org
    Cc: mcoquelin.stm32@gmail.com
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: shawn.guo@linaro.org
    Cc: kernel@pengutronix.de
    Cc: jason@lakedaemon.net
    Link: http://lkml.kernel.org/r/1431769465-26867-2-git-send-email-stefan@agner.ch
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    include/linux/irqdomain.h | 8 ++++----
    kernel/irq/irqdomain.c | 21 +++++++++++++++++++++
    2 files changed, 25 insertions(+), 4 deletions(-)

    diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
    index 676d730..744ac0e 100644
    --- a/include/linux/irqdomain.h
    +++ b/include/linux/irqdomain.h
    @@ -258,6 +258,10 @@ int irq_domain_xlate_onetwocell(struct irq_domain *d, struct device_node *ctrlr,
    /* V2 interfaces to support hierarchy IRQ domains. */
    extern struct irq_data *irq_domain_get_irq_data(struct irq_domain *domain,
    unsigned int virq);
    +extern void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
    + irq_hw_number_t hwirq, struct irq_chip *chip,
    + void *chip_data, irq_flow_handler_t handler,
    + void *handler_data, const char *handler_name);
    #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
    extern struct irq_domain *irq_domain_add_hierarchy(struct irq_domain *parent,
    unsigned int flags, unsigned int size,
    @@ -281,10 +285,6 @@ extern int irq_domain_set_hwirq_and_chip(struct irq_domain *domain,
    irq_hw_number_t hwirq,
    struct irq_chip *chip,
    void *chip_data);
    -extern void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
    - irq_hw_number_t hwirq, struct irq_chip *chip,
    - void *chip_data, irq_flow_handler_t handler,
    - void *handler_data, const char *handler_name);
    extern void irq_domain_reset_irq_data(struct irq_data *irq_data);
    extern void irq_domain_free_irqs_common(struct irq_domain *domain,
    unsigned int virq,
    diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
    index 7fac311..41bf6dc 100644
    --- a/kernel/irq/irqdomain.c
    +++ b/kernel/irq/irqdomain.c
    @@ -1232,6 +1232,27 @@ struct irq_data *irq_domain_get_irq_data(struct irq_domain *domain,
    return (irq_data && irq_data->domain == domain) ? irq_data : NULL;
    }

    +/**
    + * irq_domain_set_info - Set the complete data for a @virq in @domain
    + * @domain: Interrupt domain to match
    + * @virq: IRQ number
    + * @hwirq: The hardware interrupt number
    + * @chip: The associated interrupt chip
    + * @chip_data: The associated interrupt chip data
    + * @handler: The interrupt flow handler
    + * @handler_data: The interrupt flow handler data
    + * @handler_name: The interrupt handler name
    + */
    +void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
    + irq_hw_number_t hwirq, struct irq_chip *chip,
    + void *chip_data, irq_flow_handler_t handler,
    + void *handler_data, const char *handler_name)
    +{
    + irq_set_chip_and_handler_name(virq, chip, handler, handler_name);
    + irq_set_chip_data(virq, chip_data);
    + irq_set_handler_data(virq, handler_data);
    +}
    +
    static void irq_domain_check_hierarchy(struct irq_domain *domain)
    {
    }

    \
     
     \ /
      Last update: 2015-05-18 18:21    [W:4.030 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site