Index: ata-chipset.c =================================================================== RCS file: /home/ncvs/src/sys/dev/ata/ata-chipset.c,v retrieving revision 1.203 diff -u -p -r1.203 ata-chipset.c --- ata-chipset.c 26 Oct 2007 09:01:06 -0000 1.203 +++ ata-chipset.c 6 Nov 2007 23:24:56 -0000 @@ -1290,12 +1290,20 @@ ata_ati_ident(device_t dev) struct ata_pci_controller *ctlr = device_get_softc(dev); struct ata_chip_id *idx; 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_IXP400, 0x00, 0, 0, ATA_UDMA6, "IXP400" }, - { ATA_ATI_IXP300_S1, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP300" }, - { ATA_ATI_IXP400_S1, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" }, - { ATA_ATI_IXP400_S2, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" }, + {{ ATA_ATI_IXP200, 0x00, 0, 0, ATA_UDMA5, "IXP200" }, + { ATA_ATI_IXP300, 0x00, 0, 0, ATA_UDMA6, "IXP300" }, + { ATA_ATI_IXP400, 0x00, 0, 0, ATA_UDMA6, "IXP400" }, + { ATA_ATI_SB600, 0x00, 0, 0, ATA_UDMA6, "SB600 (IDE MODE)" }, + { ATA_ATI_SB700, 0x00, 0, 0, ATA_UDMA6, "SB700 (IDE)" }, + { ATA_ATI_IXP300_S1, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP300" }, + { ATA_ATI_IXP400_S1, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" }, + { ATA_ATI_IXP400_S2, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" }, + { ATA_ATI_SB600_S1, 0x00, 0, ATIAHCI, ATA_SA300, "SB600 (Non RAID5 SATA)" }, + { ATA_ATI_SB700_S1, 0x00, 0, ATIAHCI, ATA_SA300, "SB700 (IDE MODE)" }, + { ATA_ATI_SB700_S2, 0x00, 0, ATIAHCI, ATA_SA300, "SB700 (IDE MODE)" }, + { ATA_ATI_SB700_AH, 0x00, 0, ATIAHCI, ATA_SA300, "SB700 (AHCI MODE)" }, + { ATA_ATI_SB700_NR, 0x00, 0, ATIAHCI, ATA_SA300, "SB700 (Non RAID5 SATA)" }, + { ATA_ATI_SB800_AH, 0x00, 0, ATIAHCI, ATA_SA300, "SB800 (AHCI MODE)" }, { 0, 0, 0, 0, 0, 0}}; char buffer[64]; @@ -1323,6 +1331,17 @@ ata_ati_chipinit(device_t dev) if (ata_setup_interrupt(dev)) return ENXIO; + if (ctlr->chip->cfg2 & ATIAHCI) { + ctlr->r_rid2 = PCIR_BAR(5); + ctlr->r_type2 = SYS_RES_MEMORY; + ctlr->r_res2 = bus_alloc_resource_any(dev, + ctlr->r_type2, &ctlr->r_rid2, RF_ACTIVE); + if (ctlr->r_res2 != NULL) + return ata_ahci_chipinit(dev); + else + return ENXIO; + } + ctlr->setmode = ata_ati_setmode; return 0; } Index: ata-pci.h =================================================================== RCS file: /home/ncvs/src/sys/dev/ata/ata-pci.h,v retrieving revision 1.81 diff -u -p -r1.81 ata-pci.h --- ata-pci.h 9 Oct 2007 20:15:09 -0000 1.81 +++ ata-pci.h 6 Nov 2007 23:25:00 -0000 @@ -103,6 +103,14 @@ struct ata_connect_task { #define ATA_ATI_IXP300_S1 0x436e1002 #define ATA_ATI_IXP400_S1 0x43791002 #define ATA_ATI_IXP400_S2 0x437a1002 +#define ATA_ATI_SB600_S1 0x43801002 +#define ATA_ATI_SB600 0x438c1002 +#define ATA_ATI_SB700_S1 0x43901002 +#define ATA_ATI_SB700_AH 0x43911002 +#define ATA_ATI_SB700_NR 0x43921002 +#define ATA_ATI_SB700_S2 0x43941002 +#define ATA_ATI_SB800_AH 0x43951002 +#define ATA_ATI_SB700 0x439c1002 #define ATA_CENATEK_ID 0x16ca #define ATA_CENATEK_ROCKET 0x000116ca @@ -436,6 +444,7 @@ struct ata_connect_task { #define VIABUG 0x0200 #define VIABAR 0x0400 #define VIAAHCI 0x0800 +#define ATIAHCI 0x1000 /* global prototypes ata-pci.c */