diff -Naur linux-2.4.26-libata/drivers/scsi/ata_piix.c linux-2.4.26-libata-ich6r/drivers/scsi/ata_piix.c --- linux-2.4.26-libata/drivers/scsi/ata_piix.c 2004-06-15 01:23:48.000000000 -0400 +++ linux-2.4.26-libata-ich6r/drivers/scsi/ata_piix.c 2004-06-08 21:15:48.000000000 -0400 @@ -53,6 +53,7 @@ ich5_pata = 0, ich5_sata = 1, piix4_pata = 2, + ich6r_sata = 3, }; static int piix_init_one (struct pci_dev *pdev, @@ -90,8 +91,10 @@ { 0x8086, 0x2651, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xffff00, ich5_sata }, { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_STORAGE_IDE << 8, 0xffff00, ich5_sata }, - + PCI_CLASS_STORAGE_IDE << 8, 0xffff00, ich6r_sata }, + { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, + PCI_CLASS_STORAGE_RAID << 8, 0xffff00, ich6r_sata }, + { } /* terminate list */ }; @@ -194,6 +197,18 @@ .udma_mask = ATA_UDMA_MASK_40C, /* FIXME: cbl det */ .port_ops = &piix_pata_ops, }, + + /* ich6r_sata */ + { + .sht = &piix_sht, + .host_flags = ATA_FLAG_SATA | PIIX_FLAG_COMBINED | + ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS | + PIIX_FLAG_CHECKINTR, + .pio_mask = 0x03, /* pio3-4 */ + .udma_mask = 0x7f, /* udma0-6 ; FIXME */ + .port_ops = &piix_sata_ops, + }, + }; static struct pci_bits piix_enable_bits[] = { diff -Naur linux-2.4.26-libata/drivers/scsi/libata-core.c linux-2.4.26-libata-ich6r/drivers/scsi/libata-core.c --- linux-2.4.26-libata/drivers/scsi/libata-core.c 2004-06-15 01:23:48.000000000 -0400 +++ linux-2.4.26-libata-ich6r/drivers/scsi/libata-core.c 2004-06-08 21:09:23.000000000 -0400 @@ -3256,6 +3256,9 @@ legacy_mode = (1 << 3); } + if ((pdev->class >> 8) == PCI_CLASS_STORAGE_RAID) + legacy_mode = 0; + /* FIXME... */ if ((!legacy_mode) && (n_ports > 1)) { printk(KERN_ERR "ata: BUG: native mode, n_ports > 1\n");