summaryrefslogtreecommitdiffstats
path: root/sys/amd64/pci
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2000-02-09 20:05:30 +0000
committergallatin <gallatin@FreeBSD.org>2000-02-09 20:05:30 +0000
commit6c2f5c29afb0a37ab74ad6b1b84a635e03faf295 (patch)
tree839c2768ea2acd5040d3b2c33b104fe2beeb225d /sys/amd64/pci
parent16bfae1d4d27e6370c4e8764cb2c8e09bd7a2e70 (diff)
downloadFreeBSD-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
Diffstat (limited to 'sys/amd64/pci')
-rw-r--r--sys/amd64/pci/pci_bus.c29
-rw-r--r--sys/amd64/pci/pci_cfgreg.c29
2 files changed, 44 insertions, 14 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++) {
OpenPOWER on IntegriCloud