diff options
author | sos <sos@FreeBSD.org> | 2004-11-24 10:47:26 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2004-11-24 10:47:26 +0000 |
commit | ccede841b51fa454e2d973eae5f73bf0b4e129d2 (patch) | |
tree | 2a2d4030399b7a3c750d6046ee4fc87971b404d4 /sys/dev | |
parent | ba795b0226fbf5277d904b50153c23a7098160fc (diff) | |
download | FreeBSD-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.c | 12 | ||||
-rw-r--r-- | sys/dev/ata/ata-lowlevel.c | 3 |
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 */ |