MIPS: PCI: Support for CONFIG_PCI_DOMAINS_GENERIC
Introduce support for CONFIG_PCI_DOMAINS_GENERIC, allowing for platforms to make use of generic PCI domains instead of the MIPS-specific implementation. The set_pci_need_domain_info function is introduced to abstract away the removed need_domain_info field in struct pci_controller, and pcibios_scanbus is adjusted to use the pci_domain_nr accessor instead of directly accessing the index field. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14341/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
Родитель
23dac14d05
Коммит
88555b4819
|
@ -2995,6 +2995,9 @@ config HT_PCI
|
|||
config PCI_DOMAINS
|
||||
bool
|
||||
|
||||
config PCI_DOMAINS_GENERIC
|
||||
bool
|
||||
|
||||
source "drivers/pci/Kconfig"
|
||||
|
||||
#
|
||||
|
|
|
@ -39,10 +39,12 @@ struct pci_controller {
|
|||
struct resource *busn_resource;
|
||||
unsigned long busn_offset;
|
||||
|
||||
#ifndef CONFIG_PCI_DOMAINS_GENERIC
|
||||
unsigned int index;
|
||||
/* For compatibility with current (as of July 2003) pciutils
|
||||
and XFree86. Eventually will be removed. */
|
||||
unsigned int need_domain_info;
|
||||
#endif
|
||||
|
||||
/* Optional access methods for reading/writing the bus number
|
||||
of the PCI controller */
|
||||
|
@ -101,7 +103,18 @@ struct pci_dev;
|
|||
*/
|
||||
#define PCI_DMA_BUS_IS_PHYS (1)
|
||||
|
||||
#ifdef CONFIG_PCI_DOMAINS
|
||||
#ifdef CONFIG_PCI_DOMAINS_GENERIC
|
||||
static inline int pci_proc_domain(struct pci_bus *bus)
|
||||
{
|
||||
return pci_domain_nr(bus);
|
||||
}
|
||||
|
||||
static inline void set_pci_need_domain_info(struct pci_controller *hose,
|
||||
int need_domain_info)
|
||||
{
|
||||
/* nothing to do */
|
||||
}
|
||||
#elif defined(CONFIG_PCI_DOMAINS)
|
||||
#define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index
|
||||
|
||||
static inline int pci_proc_domain(struct pci_bus *bus)
|
||||
|
@ -109,6 +122,12 @@ static inline int pci_proc_domain(struct pci_bus *bus)
|
|||
struct pci_controller *hose = bus->sysdata;
|
||||
return hose->need_domain_info;
|
||||
}
|
||||
|
||||
static inline void set_pci_need_domain_info(struct pci_controller *hose,
|
||||
int need_domain_info)
|
||||
{
|
||||
hose->need_domain_info = need_domain_info;
|
||||
}
|
||||
#endif /* CONFIG_PCI_DOMAINS */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
@ -95,8 +95,8 @@ static void pcibios_scanbus(struct pci_controller *hose)
|
|||
&resources);
|
||||
hose->bus = bus;
|
||||
|
||||
need_domain_info = need_domain_info || hose->index;
|
||||
hose->need_domain_info = need_domain_info;
|
||||
need_domain_info = need_domain_info || pci_domain_nr(bus);
|
||||
set_pci_need_domain_info(hose, need_domain_info);
|
||||
|
||||
if (!bus) {
|
||||
pci_free_resource_list(&resources);
|
||||
|
|
Загрузка…
Ссылка в новой задаче