diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h index 7fc42784becbf2ee4e4779d06b9345be6c8ccf06..8144d61e5693e7ca96d4272e0b21909d0a99a705 100644 --- a/arch/arm/include/asm/mach/pci.h +++ b/arch/arm/include/asm/mach/pci.h @@ -21,6 +21,9 @@ struct device; struct hw_pci { #ifdef CONFIG_PCI_DOMAINS int domain; +#endif +#ifdef CONFIG_PCI_MSI + struct msi_controller *msi_ctrl; #endif struct pci_ops *ops; int nr_controllers; @@ -46,6 +49,9 @@ struct hw_pci { struct pci_sys_data { #ifdef CONFIG_PCI_DOMAINS int domain; +#endif +#ifdef CONFIG_PCI_MSI + struct msi_controller *msi_ctrl; #endif struct list_head node; int busnr; /* primary bus number */ diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 17a26c17f7f5731d78d257e7facd0080bba12d5f..ff2be3a22e1d11b27a5c41744f7de2bd130fe750 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -18,6 +18,15 @@ static int debug_pci; +#ifdef CONFIG_PCI_MSI +struct msi_controller *pcibios_msi_controller(struct pci_dev *dev) +{ + struct pci_sys_data *sysdata = dev->bus->sysdata; + + return sysdata->msi_ctrl; +} +#endif + /* * We can't use pci_get_device() here since we are * called from interrupt context. @@ -470,6 +479,9 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw, #ifdef CONFIG_PCI_DOMAINS sys->domain = hw->domain; +#endif +#ifdef CONFIG_PCI_MSI + sys->msi_ctrl = hw->msi_ctrl; #endif sys->busnr = busnr; sys->swizzle = hw->swizzle;