• Jiang Liu's avatar
    irqdomain: Introduce new interfaces to support hierarchy irqdomains · f8264e34
    Jiang Liu authored
    We plan to use hierarchy irqdomain to suppport CPU vector assignment,
    interrupt remapping controller, IO-APIC controller, MSI interrupt
    and hypertransport interrupt etc on x86 platforms. So extend irqdomain
    interfaces to support hierarchy irqdomain.
    
    There are already many clients of current irqdomain interfaces.
    To minimize the changes, we choose to introduce new version 2 interfaces
    to support hierarchy instead of extending existing irqdomain interfaces.
    
    According to Thomas's suggestion, the most important design decision is
    to build hierarchy struct irq_data to support hierarchy irqdomain, so
    hierarchy irqdomain related data could be saved in struct irq_data.
    With support of hierarchy irq_data, we could also support stacked
    irq_chips. This is most useful in case of set_affinity().
    
    The new hierarchy irqdomain introduces following interfaces:
    1) irq_domain_alloc_irqs()/irq_domain_free_irqs(): allocate/release IRQ
       and related resources.
    2) __irq_domain_alloc_irqs(): a special version to support legacy IRQs.
    3) irq_domain_activate_irq()/irq_domain_deactivate_irq(): program
       interrupt controllers to activate/deactivate interrupt.
    
    There are also several help functions to ease irqdomain implemenations:
    1) irq_domain_get_irq_data(): get irq_data associated with a specific
       irqdomain.
    2) irq_domain_set_hwirq_and_chip(): save irqdomain specific data into
       irq_data.
    3) irq_domain_alloc_irqs_parent()/irq_domain_free_irqs_parent(): invoke
       parent irqdomain's alloc/free callbacks.
    
    We also changed irq_startup()/irq_shutdown() to invoke
    irq_domain_activate_irq()/irq_domain_deactivate_irq() to program
    interrupt controller when start/stop interrupts.
    
    [ tglx: Folded parts of the later patch series in ]
    Signed-off-by: default avatarJiang Liu <jiang.liu@linux.intel.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Grant Likely <grant.likely@linaro.org>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Yingjoe Chen <yingjoe.chen@mediatek.com>
    Cc: Yijing Wang <wangyijing@huawei.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    f8264e34
irqdomain.c 30.4 KB