diff options
author | Søren Schmidt <sos@FreeBSD.org> | 2004-04-13 09:44:20 +0000 |
---|---|---|
committer | Søren Schmidt <sos@FreeBSD.org> | 2004-04-13 09:44:20 +0000 |
commit | f2972d7eb836f7ff6bcebd329971c08f63bf850a (patch) | |
tree | 509ff87c6422cd772b614eb0062b3b035846ddf6 /sys/dev/ata/ata-disk.c | |
parent | c98dc180f6f9edb03ca5ad5c7bbfc318c2c05a4f (diff) | |
download | src-f2972d7eb836f7ff6bcebd329971c08f63bf850a.tar.gz src-f2972d7eb836f7ff6bcebd329971c08f63bf850a.zip |
Add support for the Promise command sequencer present on all modern Promise
controllers (PDC203** PDC206**).
This also adds preliminary support for the Promise SX4/SX4000 but *only*
as a "normal" Promise ATA controller (ATA RAID's are supported though
but only RAID0, RAID1 and RAID0+1).
This cuts off yet another 5-8% of the command overhead on promise controllers,
making them the fastest we have ever had support for.
Work is now continuing to add support for this in ATA RAID, to accellerate
ATA RAID quite a bit on these controllers, and especially the SX4/SX4000
series as they have quite a few tricks in there..
This commit also adds a few fixes to the SATA code needed for proper support.
Notes
Notes:
svn path=/head/; revision=128183
Diffstat (limited to 'sys/dev/ata/ata-disk.c')
-rw-r--r-- | sys/dev/ata/ata-disk.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c index 5752e0e61762..6ccd8bf46b25 100644 --- a/sys/dev/ata/ata-disk.c +++ b/sys/dev/ata/ata-disk.c @@ -104,8 +104,7 @@ ad_attach(struct ata_device *atadev) ((u_int32_t)atadev->param->lba_size_2 << 16); /* does this device need oldstyle CHS addressing */ - if (!ad_version(atadev->param->version_major) || - !(atadev->param->atavalid & ATA_FLAG_54_58) || !lbasize) + if (!ad_version(atadev->param->version_major) || !lbasize) atadev->flags |= ATA_D_USE_CHS; /* use the 28bit LBA size if valid or bigger than the CHS mapping */ @@ -393,8 +392,8 @@ ad_print(struct ad_softc *adp) (adp->flags & AD_F_TAG_ENABLED) ? "tagged " : "", ata_mode2str(adp->device->mode)); } - else - ata_prtdev(adp->device,"%lluMB <%.40s> [%lld/%d/%d] at ata%d-%s %s%s\n", + else { + ata_prtdev(adp->device,"%lluMB <%.40s> [%lld/%d/%d] at ata%d-%s %s", (unsigned long long)(adp->total_secs / ((1024L * 1024L) / DEV_BSIZE)), adp->device->param->model, @@ -403,8 +402,14 @@ ad_print(struct ad_softc *adp) adp->heads, adp->sectors, device_get_unit(adp->device->channel->dev), (adp->device->unit == ATA_MASTER) ? "master" : "slave", - (adp->flags & AD_F_TAG_ENABLED) ? "tagged " : "", - ata_mode2str(adp->device->mode)); + (adp->flags & AD_F_TAG_ENABLED) ? "tagged " : ""); + + if (adp->device->param->satacapabilities != 0x0000 && + adp->device->param->satacapabilities != 0xffff) + printf("SATA150\n"); + else + printf("%s\n", ata_mode2str(adp->device->mode)); + } } static int |