diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h index 7fc42784becb..8144d61e5693 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 17a26c17f7f5..ff2be3a22e1d 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;