GICV3-ITS-PCI msi-domain
its_pci_msi_init
its_pci_of_msi_init
its_pci_msi_init_one
pci_msi_create_irq_domain(handle, &its_pci_msi_domain_info, parent)
pci_msi_domain_update_dom_ops(info);
...pci_msi_domain_ops_default
domain = msi_create_irq_domain(fwnode, info, parent);
msi_domain_update_dom_ops(info);
...msi_domain_ops_default
irq_domain_create_hierarchy(fwnode, &msi_domain_ops, info)
irq_domain_create_tree(fwnode, ops, host_data);
__irq_domain_add(fwnode, 0, ~0, 0, ops, host_data)
domain->host_data = host_data;
static struct msi_domain_info its_pci_msi_domain_info = {
.flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX,
.ops = &its_pci_msi_ops,
.chip = &its_msi_irq_chip,
};
static struct msi_domain_ops its_pci_msi_ops = {
.msi_prepare = its_pci_msi_prepare,
};
static struct msi_domain_ops pci_msi_domain_ops_default = {
.set_desc = pci_msi_domain_set_desc,
.msi_check = pci_msi_domain_check_cap,
.handle_error = pci_msi_domain_handle_error,
};