summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-pci.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2007-11-18 14:44:52 +0000
committersos <sos@FreeBSD.org>2007-11-18 14:44:52 +0000
commit0422421099b45f1120729a9eedda32c67666f9ca (patch)
treede5363882358f6419fcab4246b7fedc04caebc13 /sys/dev/ata/ata-pci.c
parentbfc761fdba732e46979638ae050d0477eaf4b2cb (diff)
downloadFreeBSD-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.c39
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),
OpenPOWER on IntegriCloud