aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/siis
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2010-11-08 15:36:15 +0000
committerAlexander Motin <mav@FreeBSD.org>2010-11-08 15:36:15 +0000
commitba3a999598be0a14b7cef75893bde97278e9d1f4 (patch)
tree6f37967994205ba1942c971cc4e6ced2627d1bbc /sys/dev/siis
parentc70410e6f58985a0a267cf51a6ab90754c13761b (diff)
Notes
Diffstat (limited to 'sys/dev/siis')
-rw-r--r--sys/dev/siis/siis.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/dev/siis/siis.c b/sys/dev/siis/siis.c
index ba10c92c4696..e75fd38b3596 100644
--- a/sys/dev/siis/siis.c
+++ b/sys/dev/siis/siis.c
@@ -1208,6 +1208,17 @@ siis_end_transaction(struct siis_slot *slot, enum siis_err_type et)
res->sector_count_exp = ATA_INB(ch->r_mem, offs + 13);
} else
bzero(res, sizeof(*res));
+ if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN &&
+ ch->numrslots == 1) {
+ ccb->ataio.resid = ccb->ataio.dxfer_len -
+ ATA_INL(ch->r_mem, SIIS_P_LRAM_SLOT(slot->slot) + 4);
+ }
+ } else {
+ if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN &&
+ ch->numrslots == 1) {
+ ccb->csio.resid = ccb->csio.dxfer_len -
+ ATA_INL(ch->r_mem, SIIS_P_LRAM_SLOT(slot->slot) + 4);
+ }
}
if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) {
bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map,