diff options
author | gallatin <gallatin@FreeBSD.org> | 2000-02-09 20:05:30 +0000 |
---|---|---|
committer | gallatin <gallatin@FreeBSD.org> | 2000-02-09 20:05:30 +0000 |
commit | 6c2f5c29afb0a37ab74ad6b1b84a635e03faf295 (patch) | |
tree | 839c2768ea2acd5040d3b2c33b104fe2beeb225d | |
parent | 16bfae1d4d27e6370c4e8764cb2c8e09bd7a2e70 (diff) | |
download | FreeBSD-src-6c2f5c29afb0a37ab74ad6b1b84a635e03faf295.zip FreeBSD-src-6c2f5c29afb0a37ab74ad6b1b84a635e03faf295.tar.gz |
Allow allows peer pci buses which are directly connected to the RCC host pci
chipset to be probed & attached on newer Dell PowerEdge servers, such as
the 2400 and 4400.
Reviewed by: dfr, msmith, jlemon
Tested by: hnokubi@yyy.or.jp (in a previous incantation)
Approved by: jkh
-rw-r--r-- | sys/amd64/pci/pci_bus.c | 29 | ||||
-rw-r--r-- | sys/amd64/pci/pci_cfgreg.c | 29 | ||||
-rw-r--r-- | sys/i386/isa/pcibus.c | 29 | ||||
-rw-r--r-- | sys/i386/pci/pci_bus.c | 29 | ||||
-rw-r--r-- | sys/i386/pci/pci_cfgreg.c | 29 | ||||
-rw-r--r-- | sys/i386/pci/pci_pir.c | 29 |
6 files changed, 132 insertions, 42 deletions
diff --git a/sys/amd64/pci/pci_bus.c b/sys/amd64/pci/pci_bus.c index 838ef22..eaad794 100644 --- a/sys/amd64/pci/pci_bus.c +++ b/sys/amd64/pci/pci_bus.c @@ -394,13 +394,22 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg, s = "OPTi 82C822 host to PCI Bridge"; break; - /* Ross (?) -- vendor 0x1166 */ + /* RCC -- vendor 0x1166 */ case 0x00051166: - s = "Ross (?) host to PCI bridge"; - /* just guessing the secondary bus register number ... */ -#if 0 - *busnum = pci_cfgread(cfg, 0x45, 1); -#endif + s = "RCC HE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00061166: + /* FALLTHROUGH */ + case 0x00081166: + s = "RCC host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00091166: + s = "RCC LE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); break; /* Integrated Micro Solutions -- vendor 0x10e0 */ @@ -425,14 +434,20 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + u_int8_t hdrtype; int found = 0; + int pcifunchigh; if (pci_cfgopen() == 0) return; probe.hose = 0; probe.bus = 0; for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) { - int pcifunchigh = 0; + hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1); + if (hdrtype & PCIM_MFDEV) + pcifunchigh = 7; + else + pcifunchigh = 0; for (probe.func = 0; probe.func <= pcifunchigh; probe.func++) { diff --git a/sys/amd64/pci/pci_cfgreg.c b/sys/amd64/pci/pci_cfgreg.c index 838ef22..eaad794 100644 --- a/sys/amd64/pci/pci_cfgreg.c +++ b/sys/amd64/pci/pci_cfgreg.c @@ -394,13 +394,22 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg, s = "OPTi 82C822 host to PCI Bridge"; break; - /* Ross (?) -- vendor 0x1166 */ + /* RCC -- vendor 0x1166 */ case 0x00051166: - s = "Ross (?) host to PCI bridge"; - /* just guessing the secondary bus register number ... */ -#if 0 - *busnum = pci_cfgread(cfg, 0x45, 1); -#endif + s = "RCC HE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00061166: + /* FALLTHROUGH */ + case 0x00081166: + s = "RCC host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00091166: + s = "RCC LE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); break; /* Integrated Micro Solutions -- vendor 0x10e0 */ @@ -425,14 +434,20 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + u_int8_t hdrtype; int found = 0; + int pcifunchigh; if (pci_cfgopen() == 0) return; probe.hose = 0; probe.bus = 0; for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) { - int pcifunchigh = 0; + hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1); + if (hdrtype & PCIM_MFDEV) + pcifunchigh = 7; + else + pcifunchigh = 0; for (probe.func = 0; probe.func <= pcifunchigh; probe.func++) { diff --git a/sys/i386/isa/pcibus.c b/sys/i386/isa/pcibus.c index 838ef22..eaad794 100644 --- a/sys/i386/isa/pcibus.c +++ b/sys/i386/isa/pcibus.c @@ -394,13 +394,22 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg, s = "OPTi 82C822 host to PCI Bridge"; break; - /* Ross (?) -- vendor 0x1166 */ + /* RCC -- vendor 0x1166 */ case 0x00051166: - s = "Ross (?) host to PCI bridge"; - /* just guessing the secondary bus register number ... */ -#if 0 - *busnum = pci_cfgread(cfg, 0x45, 1); -#endif + s = "RCC HE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00061166: + /* FALLTHROUGH */ + case 0x00081166: + s = "RCC host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00091166: + s = "RCC LE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); break; /* Integrated Micro Solutions -- vendor 0x10e0 */ @@ -425,14 +434,20 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + u_int8_t hdrtype; int found = 0; + int pcifunchigh; if (pci_cfgopen() == 0) return; probe.hose = 0; probe.bus = 0; for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) { - int pcifunchigh = 0; + hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1); + if (hdrtype & PCIM_MFDEV) + pcifunchigh = 7; + else + pcifunchigh = 0; for (probe.func = 0; probe.func <= pcifunchigh; probe.func++) { diff --git a/sys/i386/pci/pci_bus.c b/sys/i386/pci/pci_bus.c index 838ef22..eaad794 100644 --- a/sys/i386/pci/pci_bus.c +++ b/sys/i386/pci/pci_bus.c @@ -394,13 +394,22 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg, s = "OPTi 82C822 host to PCI Bridge"; break; - /* Ross (?) -- vendor 0x1166 */ + /* RCC -- vendor 0x1166 */ case 0x00051166: - s = "Ross (?) host to PCI bridge"; - /* just guessing the secondary bus register number ... */ -#if 0 - *busnum = pci_cfgread(cfg, 0x45, 1); -#endif + s = "RCC HE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00061166: + /* FALLTHROUGH */ + case 0x00081166: + s = "RCC host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00091166: + s = "RCC LE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); break; /* Integrated Micro Solutions -- vendor 0x10e0 */ @@ -425,14 +434,20 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + u_int8_t hdrtype; int found = 0; + int pcifunchigh; if (pci_cfgopen() == 0) return; probe.hose = 0; probe.bus = 0; for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) { - int pcifunchigh = 0; + hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1); + if (hdrtype & PCIM_MFDEV) + pcifunchigh = 7; + else + pcifunchigh = 0; for (probe.func = 0; probe.func <= pcifunchigh; probe.func++) { diff --git a/sys/i386/pci/pci_cfgreg.c b/sys/i386/pci/pci_cfgreg.c index 838ef22..eaad794 100644 --- a/sys/i386/pci/pci_cfgreg.c +++ b/sys/i386/pci/pci_cfgreg.c @@ -394,13 +394,22 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg, s = "OPTi 82C822 host to PCI Bridge"; break; - /* Ross (?) -- vendor 0x1166 */ + /* RCC -- vendor 0x1166 */ case 0x00051166: - s = "Ross (?) host to PCI bridge"; - /* just guessing the secondary bus register number ... */ -#if 0 - *busnum = pci_cfgread(cfg, 0x45, 1); -#endif + s = "RCC HE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00061166: + /* FALLTHROUGH */ + case 0x00081166: + s = "RCC host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00091166: + s = "RCC LE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); break; /* Integrated Micro Solutions -- vendor 0x10e0 */ @@ -425,14 +434,20 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + u_int8_t hdrtype; int found = 0; + int pcifunchigh; if (pci_cfgopen() == 0) return; probe.hose = 0; probe.bus = 0; for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) { - int pcifunchigh = 0; + hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1); + if (hdrtype & PCIM_MFDEV) + pcifunchigh = 7; + else + pcifunchigh = 0; for (probe.func = 0; probe.func <= pcifunchigh; probe.func++) { diff --git a/sys/i386/pci/pci_pir.c b/sys/i386/pci/pci_pir.c index 838ef22..eaad794 100644 --- a/sys/i386/pci/pci_pir.c +++ b/sys/i386/pci/pci_pir.c @@ -394,13 +394,22 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg, s = "OPTi 82C822 host to PCI Bridge"; break; - /* Ross (?) -- vendor 0x1166 */ + /* RCC -- vendor 0x1166 */ case 0x00051166: - s = "Ross (?) host to PCI bridge"; - /* just guessing the secondary bus register number ... */ -#if 0 - *busnum = pci_cfgread(cfg, 0x45, 1); -#endif + s = "RCC HE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00061166: + /* FALLTHROUGH */ + case 0x00081166: + s = "RCC host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); + break; + + case 0x00091166: + s = "RCC LE host to PCI bridge"; + *busnum = pci_cfgread(cfg, 0x44, 1); break; /* Integrated Micro Solutions -- vendor 0x10e0 */ @@ -425,14 +434,20 @@ static void nexus_pcib_identify(driver_t *driver, device_t parent) { pcicfgregs probe; + u_int8_t hdrtype; int found = 0; + int pcifunchigh; if (pci_cfgopen() == 0) return; probe.hose = 0; probe.bus = 0; for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) { - int pcifunchigh = 0; + hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1); + if (hdrtype & PCIM_MFDEV) + pcifunchigh = 7; + else + pcifunchigh = 0; for (probe.func = 0; probe.func <= pcifunchigh; probe.func++) { |