diff options
author | msmith <msmith@FreeBSD.org> | 2000-12-12 03:33:02 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 2000-12-12 03:33:02 +0000 |
commit | 986a4dc88d53b0ccc8588a845981d0302b439f9c (patch) | |
tree | ffafc92604716f43d6ead091811253633b43579a | |
parent | 7a735b1d2ff5f3a95d9192569b6f98b1d68c98ea (diff) | |
download | FreeBSD-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.c | 2 | ||||
-rw-r--r-- | sys/dev/pci/isa_pci.c | 81 |
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; } } |