diff options
author | msmith <msmith@FreeBSD.org> | 1999-10-07 02:17:21 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 1999-10-07 02:17:21 +0000 |
commit | f9e0a2c0d2e08321faa5356e9371410b9be348ab (patch) | |
tree | 480cf6857764de29b393b7048a33ae68e9124196 | |
parent | 5f150b81997dead44f60de656dc47341f1c3641e (diff) | |
download | FreeBSD-src-f9e0a2c0d2e08321faa5356e9371410b9be348ab.zip FreeBSD-src-f9e0a2c0d2e08321faa5356e9371410b9be348ab.tar.gz |
Be much more selective in claiming devices that might be IDE controllers.
The old algorithm was:
if class == storage and subclass != SCSI device must be IDE
This results in claiming 'raid' and 'other' storage devices as IDE,
which is typically not the case.
Reviewed by: sos
-rw-r--r-- | sys/dev/ata/ata-all.c | 66 | ||||
-rw-r--r-- | sys/pci/pcisupport.c | 58 |
2 files changed, 57 insertions, 67 deletions
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c index 8828414..14f2f01 100644 --- a/sys/dev/ata/ata-all.c +++ b/sys/dev/ata/ata-all.c @@ -182,42 +182,36 @@ DRIVER_MODULE(ata, isa, ata_isa_driver, ata_devclass, 0, 0); static const char * ata_pcimatch(device_t dev) { - u_int32_t data; - - data = pci_read_config(dev, PCI_CLASS_REG, 4); - if (pci_get_class(dev) == PCIC_STORAGE && - (pci_get_subclass(dev) == PCIS_STORAGE_IDE || - pci_get_subclass(dev) == PCIS_STORAGE_RAID || - pci_get_subclass(dev) == PCIS_STORAGE_OTHER)) { - switch (pci_get_devid(dev)) { - case 0x12308086: - return "Intel PIIX IDE controller"; - case 0x70108086: - return "Intel PIIX3 IDE controller"; - case 0x71118086: - return "Intel PIIX4 IDE controller"; - case 0x4d33105a: - return "Promise Ultra/33 IDE controller"; - case 0x4d38105a: - return "Promise Ultra/66 IDE controller"; - case 0x522910b9: - return "AcerLabs Aladdin IDE controller"; - case 0x00041103: - return "HighPoint HPT366 IDE controller"; - case 0x05711106: /* 82c586 */ - case 0x05961106: /* 82c596 */ - return "VIA Apollo IDE controller (generic mode)"; - case 0x06401095: - return "CMD 640 IDE controller (generic mode)"; - case 0x06461095: - return "CMD 646 IDE controller (generic mode)"; - case 0xc6931080: - return "Cypress 82C693 IDE controller (generic mode)"; - case 0x01021078: - return "Cyrix 5530 IDE controller (generic mode)"; - default: - return "Unknown PCI IDE controller (generic mode)"; - } + switch (pci_get_devid(dev)) { + case 0x12308086: + return "Intel PIIX IDE controller"; + case 0x70108086: + return "Intel PIIX3 IDE controller"; + case 0x71118086: + return "Intel PIIX4 IDE controller"; + case 0x4d33105a: + return "Promise Ultra/33 IDE controller"; + case 0x4d38105a: + return "Promise Ultra/66 IDE controller"; + case 0x522910b9: + return "AcerLabs Aladdin IDE controller"; + case 0x00041103: + return "HighPoint HPT366 IDE controller"; + case 0x05711106: /* 82c586 */ + case 0x05961106: /* 82c596 */ + return "VIA Apollo IDE controller"; + case 0x06401095: + return "CMD 640 IDE controller"; + case 0x06461095: + return "CMD 646 IDE controller"; + case 0xc6931080: + return "Cypress 82C693 IDE controller"; + case 0x01021078: + return "Cyrix 5530 IDE controller"; + default: + if (pci_get_class(dev) == PCIC_STORAGE && + pci_get_subclass(dev) == PCIS_STORAGE_IDE) + return "Unknown PCI IDE controller (using generic mode)"; } return NULL; } diff --git a/sys/pci/pcisupport.c b/sys/pci/pcisupport.c index 2547ae7..33ea09c 100644 --- a/sys/pci/pcisupport.c +++ b/sys/pci/pcisupport.c @@ -598,39 +598,35 @@ dumpconfigspace (device_t dev) const char * ide_pci_match(device_t dev) { - u_int32_t data; - data = pci_read_config(dev, PCI_CLASS_REG, 4); - if (pci_get_class(dev) == PCIC_STORAGE && - (pci_get_subclass(dev) == PCIS_STORAGE_IDE || - pci_get_subclass(dev) == PCIS_STORAGE_RAID)) { - switch (pci_get_devid(dev)) { - case 0x12308086: - return ("Intel PIIX IDE controller"); - case 0x70108086: - return ("Intel PIIX3 IDE controller"); - case 0x71118086: - return ("Intel PIIX4 IDE controller"); - case 0x4d33105a: - return ("Promise Ultra/33 IDE controller"); - case 0x522910b9: - return ("AcerLabs Aladdin IDE controller"); - case 0x15711106: - case 0x05711106: - return ("VIA Apollo IDE controller"); - case 0x06401095: - return ("CMD 640 IDE controller"); - case 0x06461095: - return ("CMD 646 IDE controller"); - case 0xc6931080: - return ("Cypress 82C693 IDE controller"); - case 0x01021078: - return ("Cyrix 5530 IDE controller"); - case 0x55131039: - return ("SiS 5591 IDE controller"); - default: + switch (pci_get_devid(dev)) { + case 0x12308086: + return ("Intel PIIX IDE controller"); + case 0x70108086: + return ("Intel PIIX3 IDE controller"); + case 0x71118086: + return ("Intel PIIX4 IDE controller"); + case 0x4d33105a: + return ("Promise Ultra/33 IDE controller"); + case 0x522910b9: + return ("AcerLabs Aladdin IDE controller"); + case 0x15711106: + case 0x05711106: + return ("VIA Apollo IDE controller"); + case 0x06401095: + return ("CMD 640 IDE controller"); + case 0x06461095: + return ("CMD 646 IDE controller"); + case 0xc6931080: + return ("Cypress 82C693 IDE controller"); + case 0x01021078: + return ("Cyrix 5530 IDE controller"); + case 0x55131039: + return ("SiS 5591 IDE controller"); + default: + if (pci_get_class(dev) == PCIC_STORAGE && + pci_get_subclass(dev) == PCIS_STORAGE_IDE) return ("Unknown PCI IDE controller"); - } } return NULL; } |