summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormsmith <msmith@FreeBSD.org>2000-12-12 03:33:02 +0000
committermsmith <msmith@FreeBSD.org>2000-12-12 03:33:02 +0000
commit986a4dc88d53b0ccc8588a845981d0302b439f9c (patch)
treeffafc92604716f43d6ead091811253633b43579a
parent7a735b1d2ff5f3a95d9192569b6f98b1d68c98ea (diff)
downloadFreeBSD-src-986a4dc88d53b0ccc8588a845981d0302b439f9c.zip
FreeBSD-src-986a4dc88d53b0ccc8588a845981d0302b439f9c.tar.gz
- Don't return early from the PCI:EISA bridge attachment, or we will lose
the ISA bus. - Don't expect that a PCI:ISA bridge will have a correct class value; if we're checking PCI IDs, only depend on these. This should fix the loss of ISA on machines with PCI:EISA bridges like the AS4100.
-rw-r--r--sys/dev/pci/eisa_pci.c2
-rw-r--r--sys/dev/pci/isa_pci.c81
2 files changed, 41 insertions, 42 deletions
diff --git a/sys/dev/pci/eisa_pci.c b/sys/dev/pci/eisa_pci.c
index 1f2186d..b44f572 100644
--- a/sys/dev/pci/eisa_pci.c
+++ b/sys/dev/pci/eisa_pci.c
@@ -114,7 +114,7 @@ eisab_attach(device_t dev)
*/
child = device_add_child(dev, "eisa", 0);
if (child != NULL)
- return(bus_generic_attach(dev));
+ bus_generic_attach(dev);
/*
* Attach an ISA bus as well (should this be a child of EISA?)
diff --git a/sys/dev/pci/isa_pci.c b/sys/dev/pci/isa_pci.c
index 1967286..7deec22 100644
--- a/sys/dev/pci/isa_pci.c
+++ b/sys/dev/pci/isa_pci.c
@@ -87,49 +87,48 @@ isab_probe(device_t dev)
/*
* Try for a generic match based on class/subclass.
*/
- if (pci_get_class(dev) == PCIC_BRIDGE) {
- if (pci_get_subclass(dev) == PCIS_BRIDGE_ISA) {
+ if ((pci_get_class(dev) == PCIC_BRIDGE) &&
+ (pci_get_subclass(dev) == PCIS_BRIDGE_ISA)) {
+ matched = 1;
+ } else {
+ /*
+ * These are devices that we *know* are PCI:ISA bridges.
+ * Sometimes, however, they don't report themselves as
+ * such. Check in case one of them is pretending to be
+ * something else.
+ */
+ switch (pci_get_devid(dev)) {
+ case 0x04848086: /* Intel 82378ZB/82378IB */
+ case 0x122e8086: /* Intel 82371FB */
+ case 0x70008086: /* Intel 82371SB */
+ case 0x71108086: /* Intel 82371AB */
+ case 0x71988086: /* Intel 82371MX */
+ case 0x24108086: /* Intel 82801AA (ICH) */
+ case 0x24208086: /* Intel 82801AB (ICH0) */
+ case 0x24408086: /* Intel 82801AB (ICH2) */
+ case 0x00061004: /* VLSI 82C593 */
+ case 0x05861106: /* VIA 82C586 */
+ case 0x05961106: /* VIA 82C596 */
+ case 0x06861106: /* VIA 82C686 */
+ case 0x153310b9: /* AcerLabs M1533 */
+ case 0x154310b9: /* AcerLabs M1543 */
+ case 0x00081039: /* SiS 85c503 */
+ case 0x00001078: /* Cyrix Cx5510 */
+ case 0x01001078: /* Cyrix Cx5530 */
+ case 0xc7001045: /* OPTi 82C700 (FireStar) */
+ case 0x00011033: /* NEC 0001 (C-bus) */
+ case 0x002c1033: /* NEC 002C (C-bus) */
+ case 0x003b1033: /* NEC 003B (C-bus) */
+ case 0x886a1060: /* UMC UM8886 ISA */
+ case 0x02001166: /* ServerWorks IB6566 PCI */
+ if (bootverbose)
+ printf("PCI-ISA bridge with incorrect subclass 0x%x\n",
+ pci_get_subclass(dev));
matched = 1;
- } else {
- /*
- * These are devices that we *know* are PCI:ISA bridges.
- * Sometimes, however, they don't report themselves as
- * such. Check in case one of them is pretending to be
- * something else.
- */
- switch (pci_get_devid(dev)) {
- case 0x04848086: /* Intel 82378ZB/82378IB */
- case 0x122e8086: /* Intel 82371FB */
- case 0x70008086: /* Intel 82371SB */
- case 0x71108086: /* Intel 82371AB */
- case 0x71988086: /* Intel 82371MX */
- case 0x24108086: /* Intel 82801AA (ICH) */
- case 0x24208086: /* Intel 82801AB (ICH0) */
- case 0x24408086: /* Intel 82801AB (ICH2) */
- case 0x00061004: /* VLSI 82C593 */
- case 0x05861106: /* VIA 82C586 */
- case 0x05961106: /* VIA 82C596 */
- case 0x06861106: /* VIA 82C686 */
- case 0x153310b9: /* AcerLabs M1533 */
- case 0x154310b9: /* AcerLabs M1543 */
- case 0x00081039: /* SiS 85c503 */
- case 0x00001078: /* Cyrix Cx5510 */
- case 0x01001078: /* Cyrix Cx5530 */
- case 0xc7001045: /* OPTi 82C700 (FireStar) */
- case 0x00011033: /* NEC 0001 (C-bus) */
- case 0x002c1033: /* NEC 002C (C-bus) */
- case 0x003b1033: /* NEC 003B (C-bus) */
- case 0x886a1060: /* UMC UM8886 ISA */
- case 0x02001166: /* ServerWorks IB6566 PCI */
- if (bootverbose)
- printf("PCI-ISA bridge with incorrect subclass 0x%x\n",
- pci_get_subclass(dev));
- matched = 1;
- break;
+ break;
- default:
- break;
- }
+ default:
+ break;
}
}
OpenPOWER on IntegriCloud