>From 9358393e19dc1fcf85e9371cb50b6dfb9c640d42 Mon Sep 17 00:00:00 2001 From: Jarkko Lavinen Date: Tue, 28 Jun 2016 17:26:58 +0300 Subject: [PATCH 1/2] scsi-bus: Use correct transfer lengths for common SCSI commands Fix the transfer lenghts as per ANSI spec section 8. The change for INQUIRY and REQUEST_SENSE are cosmetic and have no effect when commands are emulated. Signed-off-by: Jarkko Lavinen --- hw/scsi/scsi-bus.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index ad6f398..045594a 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -949,7 +949,15 @@ static int scsi_req_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) } cmd->xfer *= dev->blocksize; break; + case INQUIRY: case MODE_SENSE: + case MODE_SELECT: + case REQUEST_SENSE: + cmd->xfer = buf[4]; + break; + case MODE_SENSE_10: + case MODE_SELECT_10: + cmd->xfer = (buf[7] << 8) | buf[8]; break; case WRITE_SAME_10: case WRITE_SAME_16: @@ -1004,7 +1012,6 @@ static int scsi_req_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) cmd->xfer = (buf[1] & 16) == 0 ? 0 : (buf[1] & 32 ? 8 : 4); } break; - case INQUIRY: case RECEIVE_DIAGNOSTIC: case SEND_DIAGNOSTIC: cmd->xfer = buf[4] | (buf[3] << 8); @@ -1132,7 +1139,6 @@ static int scsi_req_medium_changer_xfer(SCSICommand *cmd, SCSIDevice *dev, uint8 return 0; } - static void scsi_cmd_xfer_mode(SCSICommand *cmd) { if (!cmd->xfer) { -- 2.1.4