summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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