aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>2008-03-07 09:29:19 +0000
committerSøren Schmidt <sos@FreeBSD.org>2008-03-07 09:29:19 +0000
commit0ef0323800d1b3838feaf02d2152522b64f33a34 (patch)
treef6beb2fe5329c30268a6bf647d45afefad29ec7d /sys/dev
parent06ff094490038c789a7d22d8fd50ab259c43b5e3 (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ata/ata-chipset.c34
-rw-r--r--sys/dev/ata/ata-pci.h6
2 files changed, 28 insertions, 12 deletions
diff --git a/sys/dev/ata/ata-chipset.c b/sys/dev/ata/ata-chipset.c
index 178425960b87..29a61171b4bf 100644
--- a/sys/dev/ata/ata-chipset.c
+++ b/sys/dev/ata/ata-chipset.c
@@ -1341,14 +1341,16 @@ ata_ati_ident(device_t dev)
{
struct ata_pci_controller *ctlr = device_get_softc(dev);
static struct ata_chip_id ids[] =
- {{ ATA_ATI_IXP200, 0x00, 0, 0, ATA_UDMA5, "IXP200" },
- { ATA_ATI_IXP300, 0x00, 0, 0, ATA_UDMA6, "IXP300" },
- { ATA_ATI_IXP300_S1, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP300" },
- { ATA_ATI_IXP400, 0x00, 0, 0, ATA_UDMA6, "IXP400" },
- { ATA_ATI_IXP400_S1, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" },
- { ATA_ATI_IXP400_S2, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" },
- { ATA_ATI_IXP600, 0x00, 0, 0, ATA_UDMA6, "IXP600" },
- { ATA_ATI_IXP700, 0x00, 0, 0, ATA_UDMA6, "IXP700" },
+ {{ ATA_ATI_IXP200, 0x00, 0, ATIPATA, ATA_UDMA5, "IXP200" },
+ { ATA_ATI_IXP300, 0x00, 0, ATIPATA, ATA_UDMA6, "IXP300" },
+ { ATA_ATI_IXP300_S1, 0x00, 0, ATISATA, ATA_SA150, "IXP300" },
+ { ATA_ATI_IXP400, 0x00, 0, ATIPATA, ATA_UDMA6, "IXP400" },
+ { ATA_ATI_IXP400_S1, 0x00, 0, ATISATA, ATA_SA150, "IXP400" },
+ { ATA_ATI_IXP400_S2, 0x00, 0, ATISATA, ATA_SA150, "IXP400" },
+ { ATA_ATI_IXP600, 0x00, 0, ATIPATA, ATA_UDMA6, "IXP600" },
+ { ATA_ATI_IXP600_S1, 0x00, 0, ATIAHCI, ATA_SA300, "IXP600" },
+ { ATA_ATI_IXP700, 0x00, 0, ATIPATA, ATA_UDMA6, "IXP700" },
+ { ATA_ATI_IXP700_S1, 0x00, 0, ATIAHCI, ATA_SA300, "IXP700" },
{ 0, 0, 0, 0, 0, 0}};
if (!(ctlr->chip = ata_match_chip(dev, ids)))
@@ -1356,11 +1358,19 @@ ata_ati_ident(device_t dev)
ata_set_desc(dev);
- /* the ATI SATA controller is actually a SiI 3112 controller*/
- if (ctlr->chip->cfg1 & SIIMEMIO)
- ctlr->chipinit = ata_sii_chipinit;
- else
+ switch (ctlr->chip->cfg2) {
+ case ATIPATA:
ctlr->chipinit = ata_ati_chipinit;
+ break;
+ case ATISATA:
+ /* the ATI SATA controller is actually a SiI 3112 controller */
+ ctlr->chip->cfg1 = SIIMEMIO;
+ ctlr->chipinit = ata_sii_chipinit;
+ break;
+ case ATIAHCI:
+ ctlr->chipinit = ata_ahci_chipinit;
+ break;
+ }
return 0;
}
diff --git a/sys/dev/ata/ata-pci.h b/sys/dev/ata/ata-pci.h
index 42769eb873f9..f514af8c275a 100644
--- a/sys/dev/ata/ata-pci.h
+++ b/sys/dev/ata/ata-pci.h
@@ -104,7 +104,9 @@ struct ata_connect_task {
#define ATA_ATI_IXP400_S1 0x43791002
#define ATA_ATI_IXP400_S2 0x437a1002
#define ATA_ATI_IXP600 0x438c1002
+#define ATA_ATI_IXP600_S1 0x43801002
#define ATA_ATI_IXP700 0x439c1002
+#define ATA_ATI_IXP700_S1 0x43901002
#define ATA_CENATEK_ID 0x16ca
#define ATA_CENATEK_ROCKET 0x000116ca
@@ -383,6 +385,10 @@ struct ata_connect_task {
#define ALINEW 0x02
#define ALISATA 0x04
+#define ATIPATA 0x01
+#define ATISATA 0x02
+#define ATIAHCI 0x04
+
#define HPT366 0
#define HPT370 1
#define HPT372 2