diff options
author | sos <sos@FreeBSD.org> | 2005-06-05 18:37:56 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2005-06-05 18:37:56 +0000 |
commit | 86f5e64b886eb113ffce74b106a891398bd242ec (patch) | |
tree | 901accc13672aa502e01a7793ec0a5c4d8371f71 /sys/dev/ata | |
parent | 89a1617cdad4c4ac82f1821cc1b4fcda8e8e3acf (diff) | |
download | FreeBSD-src-86f5e64b886eb113ffce74b106a891398bd242ec.zip FreeBSD-src-86f5e64b886eb113ffce74b106a891398bd242ec.tar.gz |
Unbreak the ICH6 AHCI support in !48Bit mode.
Diffstat (limited to 'sys/dev/ata')
-rw-r--r-- | sys/dev/ata/ata-chipset.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/ata/ata-chipset.c b/sys/dev/ata/ata-chipset.c index 1c0541c..c640fe2 100644 --- a/sys/dev/ata/ata-chipset.c +++ b/sys/dev/ata/ata-chipset.c @@ -417,7 +417,11 @@ ata_ahci_setup_fis(u_int8_t *fis, struct ata_request *request) fis[idx++] = request->u.ata.lba; fis[idx++] = request->u.ata.lba >> 8; fis[idx++] = request->u.ata.lba >> 16; - fis[idx++] = ATA_D_LBA | atadev->unit; + fis[idx] = ATA_D_LBA | atadev->unit; + if (atadev->flags & ATA_D_48BIT_ACTIVE) + idx++; + else + fis[idx++] |= (request->u.ata.lba >> 24 & 0x0f); fis[idx++] = request->u.ata.lba >> 24; fis[idx++] = request->u.ata.lba >> 32; @@ -1498,7 +1502,8 @@ ata_intel_reset(device_t dev) /* ICH6 has 4 SATA ports as master/slave on 2 channels so deal with pairs */ if (ctlr->chip->chipid == ATA_I82801FB_S1 || - ctlr->chip->chipid == ATA_I82801FB_R1) { + ctlr->chip->chipid == ATA_I82801FB_R1 || + ctlr->chip->chipid == ATA_I82801FB_M) { mask = (0x0005 << ch->unit); } else { |