diff options
author | sos <sos@FreeBSD.org> | 2000-08-06 18:01:47 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2000-08-06 18:01:47 +0000 |
commit | 2983c6d9ab2bd6effec84af5416e6029e4e41ca0 (patch) | |
tree | 5e9a85ec296cb9562b22079d1717ac8cbd69d768 /sys | |
parent | b98ae04f64dc0a0607bbebacf98c61cf1ea49a8b (diff) | |
download | FreeBSD-src-2983c6d9ab2bd6effec84af5416e6029e4e41ca0.zip FreeBSD-src-2983c6d9ab2bd6effec84af5416e6029e4e41ca0.tar.gz |
Be a bit more restrictive in using multisector transfers.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/ata/ata-disk.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c index a11e766..cd09f83 100644 --- a/sys/dev/ata/ata-disk.c +++ b/sys/dev/ata/ata-disk.c @@ -117,11 +117,13 @@ ad_attach(struct ata_softc *scp, int32_t device) /* use multiple sectors/interrupt if device supports it */ adp->transfersize = DEV_BSIZE; - secsperint = max(1, min(AD_PARAM->nsecperint, 16)); - if (!ata_command(adp->controller, adp->unit, ATA_C_SET_MULTI, - 0, 0, 0, secsperint, 0, ATA_WAIT_INTR) && - ata_wait(adp->controller, adp->unit, ATA_S_READY) >= 0) + if (ad_version(AD_PARAM->versmajor)) { + secsperint = max(1, min(AD_PARAM->nsecperint, 16)); + if (!ata_command(adp->controller, adp->unit, ATA_C_SET_MULTI, + 0, 0, 0, secsperint, 0, ATA_WAIT_INTR) && + ata_wait(adp->controller, adp->unit, ATA_S_READY) >= 0) adp->transfersize *= secsperint; + } /* enable read/write cacheing if not default on device */ if (ata_command(adp->controller, adp->unit, ATA_C_SETFEATURES, |