summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2008-04-21 10:51:38 +0000
committersos <sos@FreeBSD.org>2008-04-21 10:51:38 +0000
commitca37ae1f066b064769052aa4e9035b4a22f0703e (patch)
treeefb3da6a41733410cf995e95ac61e2fbdd4f506a
parent49fded62acbfdc55c5e0ff36b6721c9cace4e998 (diff)
downloadFreeBSD-src-ca37ae1f066b064769052aa4e9035b4a22f0703e.zip
FreeBSD-src-ca37ae1f066b064769052aa4e9035b4a22f0703e.tar.gz
Add HW level support for the Adaptec 1420SA controller.
-rw-r--r--sys/dev/ata/ata-chipset.c21
-rw-r--r--sys/dev/ata/ata-pci.c5
-rw-r--r--sys/dev/ata/ata-pci.h18
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);
OpenPOWER on IntegriCloud