From cde35e1a3d60e6b023a13a1befc54ff1a1011665 Mon Sep 17 00:00:00 2001 From: Peter Wemm Date: Thu, 18 Nov 1999 08:58:37 +0000 Subject: [PATCH] If we have found pci devices via pci_cfgopen(), but don't find a host->pci bridge specifically, then add a pcib0 device on the motherboard for the pci bus to hang off. Requested by: Anders Andersson Obtained from: dfr --- sys/amd64/pci/pci_bus.c | 14 ++++++++++++++ sys/amd64/pci/pci_cfgreg.c | 14 ++++++++++++++ sys/i386/isa/pcibus.c | 14 ++++++++++++++ sys/i386/pci/pci_bus.c | 14 ++++++++++++++ sys/i386/pci/pci_cfgreg.c | 14 ++++++++++++++ sys/i386/pci/pci_pir.c | 14 ++++++++++++++ 6 files changed, 84 insertions(+) diff --git a/sys/amd64/pci/pci_bus.c b/sys/amd64/pci/pci_bus.c index 138da756ef27..a640e141b3d9 100644 --- a/sys/amd64/pci/pci_bus.c +++ b/sys/amd64/pci/pci_bus.c @@ -420,6 +420,7 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + int found = 0; if (pci_cfgopen() == 0) return; @@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent) child = BUS_ADD_CHILD(parent, 100, "pcib", busnum); device_set_desc(child, s); + found = 1; } } } + + /* + * Make sure we add at least one bridge since some old + * hardware doesn't actually have a host-pci bridge device. + * Note that pci_cfgopen() thinks we have PCI devices.. + */ + if (!found) { + if (bootverbose) + printf( + "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n"); + BUS_ADD_CHILD(parent, 100, "pcib", 0); + } } static int diff --git a/sys/amd64/pci/pci_cfgreg.c b/sys/amd64/pci/pci_cfgreg.c index 138da756ef27..a640e141b3d9 100644 --- a/sys/amd64/pci/pci_cfgreg.c +++ b/sys/amd64/pci/pci_cfgreg.c @@ -420,6 +420,7 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + int found = 0; if (pci_cfgopen() == 0) return; @@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent) child = BUS_ADD_CHILD(parent, 100, "pcib", busnum); device_set_desc(child, s); + found = 1; } } } + + /* + * Make sure we add at least one bridge since some old + * hardware doesn't actually have a host-pci bridge device. + * Note that pci_cfgopen() thinks we have PCI devices.. + */ + if (!found) { + if (bootverbose) + printf( + "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n"); + BUS_ADD_CHILD(parent, 100, "pcib", 0); + } } static int diff --git a/sys/i386/isa/pcibus.c b/sys/i386/isa/pcibus.c index 138da756ef27..a640e141b3d9 100644 --- a/sys/i386/isa/pcibus.c +++ b/sys/i386/isa/pcibus.c @@ -420,6 +420,7 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + int found = 0; if (pci_cfgopen() == 0) return; @@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent) child = BUS_ADD_CHILD(parent, 100, "pcib", busnum); device_set_desc(child, s); + found = 1; } } } + + /* + * Make sure we add at least one bridge since some old + * hardware doesn't actually have a host-pci bridge device. + * Note that pci_cfgopen() thinks we have PCI devices.. + */ + if (!found) { + if (bootverbose) + printf( + "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n"); + BUS_ADD_CHILD(parent, 100, "pcib", 0); + } } static int diff --git a/sys/i386/pci/pci_bus.c b/sys/i386/pci/pci_bus.c index 138da756ef27..a640e141b3d9 100644 --- a/sys/i386/pci/pci_bus.c +++ b/sys/i386/pci/pci_bus.c @@ -420,6 +420,7 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + int found = 0; if (pci_cfgopen() == 0) return; @@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent) child = BUS_ADD_CHILD(parent, 100, "pcib", busnum); device_set_desc(child, s); + found = 1; } } } + + /* + * Make sure we add at least one bridge since some old + * hardware doesn't actually have a host-pci bridge device. + * Note that pci_cfgopen() thinks we have PCI devices.. + */ + if (!found) { + if (bootverbose) + printf( + "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n"); + BUS_ADD_CHILD(parent, 100, "pcib", 0); + } } static int diff --git a/sys/i386/pci/pci_cfgreg.c b/sys/i386/pci/pci_cfgreg.c index 138da756ef27..a640e141b3d9 100644 --- a/sys/i386/pci/pci_cfgreg.c +++ b/sys/i386/pci/pci_cfgreg.c @@ -420,6 +420,7 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + int found = 0; if (pci_cfgopen() == 0) return; @@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent) child = BUS_ADD_CHILD(parent, 100, "pcib", busnum); device_set_desc(child, s); + found = 1; } } } + + /* + * Make sure we add at least one bridge since some old + * hardware doesn't actually have a host-pci bridge device. + * Note that pci_cfgopen() thinks we have PCI devices.. + */ + if (!found) { + if (bootverbose) + printf( + "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n"); + BUS_ADD_CHILD(parent, 100, "pcib", 0); + } } static int diff --git a/sys/i386/pci/pci_pir.c b/sys/i386/pci/pci_pir.c index 138da756ef27..a640e141b3d9 100644 --- a/sys/i386/pci/pci_pir.c +++ b/sys/i386/pci/pci_pir.c @@ -420,6 +420,7 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + int found = 0; if (pci_cfgopen() == 0) return; @@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent) child = BUS_ADD_CHILD(parent, 100, "pcib", busnum); device_set_desc(child, s); + found = 1; } } } + + /* + * Make sure we add at least one bridge since some old + * hardware doesn't actually have a host-pci bridge device. + * Note that pci_cfgopen() thinks we have PCI devices.. + */ + if (!found) { + if (bootverbose) + printf( + "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n"); + BUS_ADD_CHILD(parent, 100, "pcib", 0); + } } static int