diff options
author | sos <sos@FreeBSD.org> | 2008-04-21 10:51:38 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2008-04-21 10:51:38 +0000 |
commit | ca37ae1f066b064769052aa4e9035b4a22f0703e (patch) | |
tree | efb3da6a41733410cf995e95ac61e2fbdd4f506a /sys/dev/ata | |
parent | 49fded62acbfdc55c5e0ff36b6721c9cace4e998 (diff) | |
download | FreeBSD-src-ca37ae1f066b064769052aa4e9035b4a22f0703e.zip FreeBSD-src-ca37ae1f066b064769052aa4e9035b4a22f0703e.tar.gz |
Add HW level support for the Adaptec 1420SA controller.
Diffstat (limited to 'sys/dev/ata')
-rw-r--r-- | sys/dev/ata/ata-chipset.c | 21 | ||||
-rw-r--r-- | sys/dev/ata/ata-pci.c | 5 | ||||
-rw-r--r-- | sys/dev/ata/ata-pci.h | 18 |
3 files changed, 37 insertions, 7 deletions
diff --git a/sys/dev/ata/ata-chipset.c b/sys/dev/ata/ata-chipset.c index ae934b9..7266ef1 100644 --- a/sys/dev/ata/ata-chipset.c +++ b/sys/dev/ata/ata-chipset.c @@ -1638,6 +1638,27 @@ ata_amd_chipinit(device_t dev) /* + * Adaptec chipset support functions + */ +int +ata_adaptec_ident(device_t dev) +{ + struct ata_pci_controller *ctlr = device_get_softc(dev); + static struct ata_chip_id ids[] = + {{ ATA_ADAPTEC_1420, 0, 4, MV60XX, ATA_SA300, "1420SA" }, + { 0, 0, 0, 0, 0, 0}}; + + if (!(ctlr->chip = ata_match_chip(dev, ids))) + return ENXIO; + + ata_set_desc(dev); + ctlr->chipinit = ata_marvell_edma_chipinit; + + return 0; +} + + +/* * ATI chipset support functions */ int diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c index cb964fb..0b9d526 100644 --- a/sys/dev/ata/ata-pci.c +++ b/sys/dev/ata/ata-pci.c @@ -96,6 +96,10 @@ ata_pci_probe(device_t dev) if (!ata_amd_ident(dev)) return ATA_PROBE_OK; break; + case ATA_ADAPTEC_ID: + if (!ata_adaptec_ident(dev)) + return ATA_PROBE_OK; + break; case ATA_ATI_ID: if (!ata_ati_ident(dev)) return ATA_PROBE_OK; @@ -523,6 +527,7 @@ ata_pcivendor2str(device_t dev) case ATA_ACARD_ID: return "Acard"; case ATA_ACER_LABS_ID: return "AcerLabs"; case ATA_AMD_ID: return "AMD"; + case ATA_ADAPTEC_ID: return "Adaptec"; case ATA_ATI_ID: return "ATI"; case ATA_CYRIX_ID: return "Cyrix"; case ATA_CYPRESS_ID: return "Cypress"; diff --git a/sys/dev/ata/ata-pci.h b/sys/dev/ata/ata-pci.h index 7a83ec8..5978eb8 100644 --- a/sys/dev/ata/ata-pci.h +++ b/sys/dev/ata/ata-pci.h @@ -80,6 +80,14 @@ struct ata_connect_task { #define ATA_ATP865A 0x00081191 #define ATA_ATP865R 0x00091191 +#define ATA_ACER_LABS_ID 0x10b9 +#define ATA_ALI_1533 0x153310b9 +#define ATA_ALI_5229 0x522910b9 +#define ATA_ALI_5281 0x528110b9 +#define ATA_ALI_5287 0x528710b9 +#define ATA_ALI_5288 0x528810b9 +#define ATA_ALI_5289 0x528910b9 + #define ATA_AMD_ID 0x1022 #define ATA_AMD755 0x74011022 #define ATA_AMD756 0x74091022 @@ -88,13 +96,8 @@ struct ata_connect_task { #define ATA_AMD8111 0x74691022 #define ATA_AMD5536 0x209a1022 -#define ATA_ACER_LABS_ID 0x10b9 -#define ATA_ALI_1533 0x153310b9 -#define ATA_ALI_5229 0x522910b9 -#define ATA_ALI_5281 0x528110b9 -#define ATA_ALI_5287 0x528710b9 -#define ATA_ALI_5288 0x528810b9 -#define ATA_ALI_5289 0x528910b9 +#define ATA_ADAPTEC_ID 0x9005 +#define ATA_ADAPTEC_1420 0x02419005 #define ATA_ATI_ID 0x1002 #define ATA_ATI_IXP200 0x43491002 @@ -471,6 +474,7 @@ int ata_ahci_ident(device_t); int ata_acard_ident(device_t); int ata_ali_ident(device_t); int ata_amd_ident(device_t); +int ata_adaptec_ident(device_t); int ata_ati_ident(device_t); int ata_cyrix_ident(device_t); int ata_cypress_ident(device_t); |