• Thomas Gleixner's avatar
    genirq/msi: Provide msi_create/free_device_irq_domain() · 27a6dea3
    Thomas Gleixner authored
    Now that all prerequsites are in place, provide the actual interfaces for
    creating and removing per device interrupt domains.
    
    MSI device interrupt domains are created from the provided
    msi_domain_template which is duplicated so that it can be modified for the
    particular device.
    
    The name of the domain and the name of the interrupt chip are composed by
    "$(PREFIX)$(CHIPNAME)-$(DEVNAME)"
    
      $PREFIX:   The optional prefix provided by the underlying MSI parent domain
                 via msi_parent_ops::prefix.
      $CHIPNAME: The name of the irq_chip in the template
      $DEVNAME:  The name of the device
    
    The domain is further initialized through a MSI parent domain callback which
    fills in the required functionality for the parent domain or domains further
    down the hierarchy. This initialization can fail, e.g. when the requested
    feature or MSI domain type cannot be supported.
    
    The domain pointer is stored in the pointer array inside of msi_device_data
    which is attached to the domain.
    
    The domain can be removed via the API or left for disposal via devres when
    the device is torn down. The API removal is useful e.g. for PCI to have
    seperate domains for MSI and MSI-X, which are mutually exclusive and always
    occupy the default domain id slot.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
    Acked-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20221124232325.678838546@linutronix.de
    27a6dea3
msi.c 40.2 KB