diff options
author | sos <sos@FreeBSD.org> | 2007-11-18 14:44:52 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2007-11-18 14:44:52 +0000 |
commit | 0422421099b45f1120729a9eedda32c67666f9ca (patch) | |
tree | de5363882358f6419fcab4246b7fedc04caebc13 /sys/dev/ata/ata-pci.c | |
parent | bfc761fdba732e46979638ae050d0477eaf4b2cb (diff) | |
download | FreeBSD-src-0422421099b45f1120729a9eedda32c67666f9ca.zip FreeBSD-src-0422421099b45f1120729a9eedda32c67666f9ca.tar.gz |
Add generic support for chipsets that say they support AHCI. This should catch new chipsets that we dont know but that we should support.
Add a few new PCI id's.
Misc cleanups.
Diffstat (limited to 'sys/dev/ata/ata-pci.c')
-rw-r--r-- | sys/dev/ata/ata-pci.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c index 06c28f0..6d493e2 100644 --- a/sys/dev/ata/ata-pci.c +++ b/sys/dev/ata/ata-pci.c @@ -76,6 +76,13 @@ ata_pci_probe(device_t dev) if (pci_get_class(dev) != PCIC_STORAGE) return ENXIO; + /* if this is an AHCI chipset grab it */ + if (pci_get_subclass(dev) == PCIS_STORAGE_SATA) { + if (!ata_ahci_ident(dev)) + return ATA_PROBE_OK; + } + + /* run through the vendor specific drivers */ switch (pci_get_vendor(dev)) { case ATA_ACARD_ID: if (!ata_acard_ident(dev)) @@ -172,8 +179,7 @@ ata_pci_probe(device_t dev) } /* unknown chipset, try generic DMA if it seems possible */ - if ((pci_get_class(dev) == PCIC_STORAGE) && - (pci_get_subclass(dev) == PCIS_STORAGE_IDE)) { + if (pci_get_subclass(dev) == PCIS_STORAGE_IDE) { if (!ata_generic_ident(dev)) return ATA_PROBE_OK; } @@ -504,6 +510,35 @@ ata_pci_dmainit(device_t dev) } } +char * +ata_pcivendor2str(device_t dev) +{ + switch (pci_get_vendor(dev)) { + case ATA_ACARD_ID: return "Acard"; + case ATA_ACER_LABS_ID: return "AcerLabs"; + case ATA_AMD_ID: return "AMD"; + case ATA_ATI_ID: return "ATI"; + case ATA_CYRIX_ID: return "Cyrix"; + case ATA_CYPRESS_ID: return "Cypress"; + case ATA_HIGHPOINT_ID: return "HighPoint"; + case ATA_INTEL_ID: return "Intel"; + case ATA_ITE_ID: return "ITE"; + case ATA_JMICRON_ID: return "JMicron"; + case ATA_MARVELL_ID: return "Marvell"; + case ATA_NATIONAL_ID: return "National"; + case ATA_NETCELL_ID: return "Netcell"; + case ATA_NVIDIA_ID: return "nVidia"; + case ATA_PROMISE_ID: return "Promise"; + case ATA_SERVERWORKS_ID: return "ServerWorks"; + case ATA_SILICON_IMAGE_ID: return "SiI"; + case ATA_SIS_ID: return "SiS"; + case ATA_VIA_ID: return "VIA"; + case ATA_CENATEK_ID: return "Cenatek"; + case ATA_MICRON_ID: return "Micron"; + default: return "Generic"; + } +} + static device_method_t ata_pci_methods[] = { /* device interface */ DEVMETHOD(device_probe, ata_pci_probe), |