summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2004-11-24 10:47:26 +0000
committersos <sos@FreeBSD.org>2004-11-24 10:47:26 +0000
commitccede841b51fa454e2d973eae5f73bf0b4e129d2 (patch)
tree2a2d4030399b7a3c750d6046ee4fc87971b404d4 /sys/dev
parentba795b0226fbf5277d904b50153c23a7098160fc (diff)
downloadFreeBSD-src-ccede841b51fa454e2d973eae5f73bf0b4e129d2.zip
FreeBSD-src-ccede841b51fa454e2d973eae5f73bf0b4e129d2.tar.gz
Return ATA register values in the request struct when ATAREQUEST returns.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ata/ata-all.c12
-rw-r--r--sys/dev/ata/ata-lowlevel.c3
2 files changed, 10 insertions, 5 deletions
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index b7abbcc..a977d17 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -546,10 +546,10 @@ ata_ioctl(struct cdev *dev, u_long cmd, caddr_t addr,
bcopy(iocmd->u.request.u.atapi.ccb, request->u.atapi.ccb, 16);
}
else {
- request->u.ata.command = iocmd->u.request.u.ata.command;
- request->u.ata.feature = iocmd->u.request.u.ata.feature;
- request->u.ata.lba = iocmd->u.request.u.ata.lba;
- request->u.ata.count = iocmd->u.request.u.ata.count;
+ request->u.ata.command = iocmd->u.request.u.ata.command;
+ request->u.ata.feature = iocmd->u.request.u.ata.feature;
+ request->u.ata.lba = iocmd->u.request.u.ata.lba;
+ request->u.ata.count = iocmd->u.request.u.ata.count;
}
request->timeout = iocmd->u.request.timeout;
@@ -566,6 +566,10 @@ ata_ioctl(struct cdev *dev, u_long cmd, caddr_t addr,
ata_queue_request(request);
+ iocmd->u.request.u.ata.command = request->u.ata.command;
+ iocmd->u.request.u.ata.feature = request->u.ata.feature;
+ iocmd->u.request.u.ata.lba = request->u.ata.lba;
+ iocmd->u.request.u.ata.count = request->u.ata.count;
if (request->result)
iocmd->u.request.error = request->result;
else {
diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c
index 5b38772..3bc4c48 100644
--- a/sys/dev/ata/ata-lowlevel.c
+++ b/sys/dev/ata/ata-lowlevel.c
@@ -303,7 +303,8 @@ ata_end_transaction(struct ata_request *request)
request->u.ata.count = ATA_IDX_INB(ch, ATA_COUNT);
request->u.ata.lba = ATA_IDX_INB(ch, ATA_SECTOR) |
(ATA_IDX_INB(ch, ATA_CYL_LSB) << 8) |
- (ATA_IDX_INB(ch, ATA_CYL_MSB) << 16);
+ (ATA_IDX_INB(ch, ATA_CYL_MSB) << 16) |
+ ((ATA_IDX_INB(ch, ATA_DRIVE) & 0x0f) << 24);
}
/* if we got an error we are done with the HW */
OpenPOWER on IntegriCloud