• Thomas Gleixner's avatar
    genirq/msi: Provide struct msi_parent_ops · b78780d9
    Thomas Gleixner authored
    MSI parent domains must have some control over the MSI domains which are
    built on top. On domain creation they need to fill in e.g. architecture
    specific chip callbacks or msi domain ops to make the outermost domain
    parent agnostic which is obviously required for architecture independence
    etc.
    
    The structure contains:
    
        1) A bitfield which exposes the supported functional features. This
           allows to check for features and is also used in the initialization
           callback to mask out unsupported features when the actual domain
           implementation requests a broader range, e.g. on x86 PCI multi-MSI
           is only supported by remapping domains but not by the underlying
           vector domain. The PCI/MSI code can then always request multi-MSI
           support, but the resulting feature set after creation might not
           have it set.
    
        2) An optional string prefix which is put in front of domain and chip
           names during creation of the MSI domain. That allows to keep the
           naming schemes e.g. on x86 where PCI-MSI domains have a IR- prefix
           when interrupt remapping is enabled.
    
        3) An initialization callback to sanity check the domain info of
           the to be created MSI domain, to restrict features and to
           apply changes in MSI ops and interrupt chip callbacks to
           accomodate to the particular MSI parent implementation and/or
           the underlying hierarchy.
    
    Add a conveniance function to delegate the initialization from the
    MSI parent domain to an underlying domain in the hierarchy.
    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.382485843@linutronix.de
    b78780d9
msi.c 35.6 KB