From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53120) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwTn2-00022q-PZ for qemu-devel@nongnu.org; Wed, 01 Aug 2012 03:56:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SwTn1-0007Qi-FJ for qemu-devel@nongnu.org; Wed, 01 Aug 2012 03:56:20 -0400 Received: from e06smtp15.uk.ibm.com ([195.75.94.111]:35925) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwTn1-0007Pp-6z for qemu-devel@nongnu.org; Wed, 01 Aug 2012 03:56:19 -0400 Received: from /spool/local by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 1 Aug 2012 08:56:16 +0100 Received: from d06av07.portsmouth.uk.ibm.com (d06av07.portsmouth.uk.ibm.com [9.149.37.248]) by d06nrmr1507.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q717uDWb1573038 for ; Wed, 1 Aug 2012 08:56:13 +0100 Received: from d06av07.portsmouth.uk.ibm.com (d06av07.portsmouth.uk.ibm.com [127.0.0.1]) by d06av07.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q717Y2EK025966 for ; Wed, 1 Aug 2012 03:34:02 -0400 From: Cong Meng Date: Wed, 1 Aug 2012 15:53:22 +0800 Message-Id: <1343807602-2229-1-git-send-email-mc@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: zwanp@cn.ibm.com, Cong Meng , linuxram@us.ibm.com, stefanha@linux.vnet.ibm.com, qemu-devel@nongnu.org Correct the command names of opcode 0x85 and 0xa1, and calculate their xfer size from CDB. Signed-off-by: Cong Meng --- hw/scsi-bus.c | 17 ++++++++++++++--- hw/scsi-defs.h | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index e4ec19e..cf9f4fe 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -867,6 +867,16 @@ static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) cmd->xfer = buf[9] | (buf[8] << 8); } break; + case ATA_PASSTHROUGH_12: + if ((buf[2] & 0x3) == 2) { + cmd->xfer = buf[4] * dev->blocksize; + } + break; + case ATA_PASSTHROUGH_16: + if ((buf[2] & 0x3) == 2) { + cmd->xfer = ((buf[5] << 8) | buf[6]) * dev->blocksize; + } + break; } return 0; } @@ -996,7 +1006,8 @@ static void scsi_cmd_xfer_mode(SCSICommand *cmd) case SEND_DVD_STRUCTURE: case PERSISTENT_RESERVE_OUT: case MAINTENANCE_OUT: - case ATA_PASSTHROUGH: + case ATA_PASSTHROUGH_12: + case ATA_PASSTHROUGH_16: cmd->mode = SCSI_XFER_TO_DEV; break; default: @@ -1335,7 +1346,7 @@ static const char *scsi_command_name(uint8_t cmd) [ PERSISTENT_RESERVE_OUT ] = "PERSISTENT_RESERVE_OUT", [ WRITE_FILEMARKS_16 ] = "WRITE_FILEMARKS_16", [ EXTENDED_COPY ] = "EXTENDED_COPY", - [ ATA_PASSTHROUGH ] = "ATA_PASSTHROUGH", + [ ATA_PASSTHROUGH_16 ] = "ATA_PASSTHROUGH_16", [ ACCESS_CONTROL_IN ] = "ACCESS_CONTROL_IN", [ ACCESS_CONTROL_OUT ] = "ACCESS_CONTROL_OUT", [ READ_16 ] = "READ_16", @@ -1352,7 +1363,7 @@ static const char *scsi_command_name(uint8_t cmd) [ SERVICE_ACTION_IN_16 ] = "SERVICE_ACTION_IN_16", [ WRITE_LONG_16 ] = "WRITE_LONG_16", [ REPORT_LUNS ] = "REPORT_LUNS", - [ BLANK ] = "BLANK", + [ ATA_PASSTHROUGH_12 ] = "ATA_PASSTHROUGH_12", [ MOVE_MEDIUM ] = "MOVE_MEDIUM", [ EXCHANGE_MEDIUM ] = "EXCHANGE MEDIUM", [ LOAD_UNLOAD ] = "LOAD_UNLOAD", diff --git a/hw/scsi-defs.h b/hw/scsi-defs.h index 8a73f74..d7a4019 100644 --- a/hw/scsi-defs.h +++ b/hw/scsi-defs.h @@ -100,7 +100,7 @@ #define READ_REVERSE_16 0x81 #define ALLOW_OVERWRITE 0x82 #define EXTENDED_COPY 0x83 -#define ATA_PASSTHROUGH 0x85 +#define ATA_PASSTHROUGH_16 0x85 #define ACCESS_CONTROL_IN 0x86 #define ACCESS_CONTROL_OUT 0x87 #define READ_16 0x88 @@ -117,7 +117,7 @@ #define SERVICE_ACTION_IN_16 0x9e #define WRITE_LONG_16 0x9f #define REPORT_LUNS 0xa0 -#define BLANK 0xa1 +#define ATA_PASSTHROUGH_12 0xa1 #define MAINTENANCE_IN 0xa3 #define MAINTENANCE_OUT 0xa4 #define MOVE_MEDIUM 0xa5 -- 1.7.7.6