struct irq_domain *hpet_create_irq_domain(int hpet_id) { struct irq_domain *parent; struct irq_alloc_info info; struct msi_domain_info *domain_info; if (x86_vector_domain == NULL) return NULL; domain_info = kzalloc(sizeof(*domain_info), GFP_KERNEL); if (!domain_info) return NULL; *domain_info = hpet_msi_domain_info; domain_info->data = (void *)(long)hpet_id; init_irq_alloc_info(&info, NULL); info.type = X86_IRQ_ALLOC_TYPE_HPET; info.hpet_id = hpet_id; parent = irq_remapping_get_ir_irq_domain(&info); if (parent == NULL) parent = x86_vector_domain; else hpet_msi_controller.name = "IR-HPET-MSI"; return msi_create_irq_domain(NULL, domain_info, parent); }
static struct irq_domain *dmar_get_irq_domain(void) { static struct irq_domain *dmar_domain; static DEFINE_MUTEX(dmar_lock); mutex_lock(&dmar_lock); if (dmar_domain == NULL) dmar_domain = msi_create_irq_domain(NULL, &dmar_msi_domain_info, x86_vector_domain); mutex_unlock(&dmar_lock); return dmar_domain; }
struct irq_domain *ti_sci_inta_msi_create_irq_domain(struct fwnode_handle *fwnode, struct msi_domain_info *info, struct irq_domain *parent) { struct irq_domain *domain; ti_sci_inta_msi_update_chip_ops(info); domain = msi_create_irq_domain(fwnode, info, parent); if (domain) irq_domain_update_bus_token(domain, DOMAIN_BUS_TI_SCI_INTA_MSI); return domain; }
/** * fsl_mc_msi_create_irq_domain - Create a fsl-mc MSI interrupt domain * @np: Optional device-tree node of the interrupt controller * @info: MSI domain info * @parent: Parent irq domain * * Updates the domain and chip ops and creates a fsl-mc MSI * interrupt domain. * * Returns: * A domain pointer or NULL in case of failure. */ struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode, struct msi_domain_info *info, struct irq_domain *parent) { struct irq_domain *domain; if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS) fsl_mc_msi_update_dom_ops(info); if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS) fsl_mc_msi_update_chip_ops(info); domain = msi_create_irq_domain(fwnode, info, parent); if (domain) domain->bus_token = DOMAIN_BUS_FSL_MC_MSI; return domain; }