From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:49957) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwUX4-0002nd-JV for qemu-devel@nongnu.org; Wed, 01 Aug 2012 04:44:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SwUX0-0006kY-Cw for qemu-devel@nongnu.org; Wed, 01 Aug 2012 04:43:54 -0400 Received: from e28smtp01.in.ibm.com ([122.248.162.1]:48675) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwUWz-0006kS-5W for qemu-devel@nongnu.org; Wed, 01 Aug 2012 04:43:50 -0400 Received: from /spool/local by e28smtp01.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 1 Aug 2012 14:13:45 +0530 Received: from d28av05.in.ibm.com (d28av05.in.ibm.com [9.184.220.67]) by d28relay02.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q718hgjW21954696 for ; Wed, 1 Aug 2012 14:13:42 +0530 Received: from d28av05.in.ibm.com (loopback [127.0.0.1]) by d28av05.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q718hfvG015119 for ; Wed, 1 Aug 2012 18:43:42 +1000 Message-ID: <5018EC3C.5070005@linux.vnet.ibm.com> Date: Wed, 01 Aug 2012 16:43:40 +0800 From: Cong Meng MIME-Version: 1.0 References: <1343807602-2229-1-git-send-email-mc@linux.vnet.ibm.com> <5018E6CC.3060308@redhat.com> In-Reply-To: <5018E6CC.3060308@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [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, linuxram@us.ibm.com, stefanha@linux.vnet.ibm.com, qemu-devel@nongnu.org On Wed 01 Aug 2012 04:20:28 PM CST, Paolo Bonzini wrote: > Il 01/08/2012 09:53, Cong Meng ha scritto: >> 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: > > Please make this conditional on the type _not_ being TYPE_ROM. May I ask why cdrom device should be an exception? Thanks. Cong > > Paolo > >> + 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 >> > >