summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/pci/pci_bus.c29
-rw-r--r--sys/amd64/pci/pci_cfgreg.c29
-rw-r--r--sys/i386/isa/pcibus.c29
-rw-r--r--sys/i386/pci/pci_bus.c29
-rw-r--r--sys/i386/pci/pci_cfgreg.c29
-rw-r--r--sys/i386/pci/pci_pir.c29
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++) {
OpenPOWER on IntegriCloud