* [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command
@ 2012-08-01 7:53 Cong Meng
2012-08-01 8:20 ` Paolo Bonzini
0 siblings, 1 reply; 6+ messages in thread
From: Cong Meng @ 2012-08-01 7:53 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: zwanp, Cong Meng, linuxram, stefanha, qemu-devel
Correct the command names of opcode 0x85 and 0xa1, and calculate
their xfer size from CDB.
Signed-off-by: Cong Meng <mc@linux.vnet.ibm.com>
---
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
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command
2012-08-01 7:53 [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command Cong Meng
@ 2012-08-01 8:20 ` Paolo Bonzini
2012-08-01 8:43 ` Cong Meng
0 siblings, 1 reply; 6+ messages in thread
From: Paolo Bonzini @ 2012-08-01 8:20 UTC (permalink / raw)
To: Cong Meng; +Cc: zwanp, linuxram, stefanha, qemu-devel
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 <mc@linux.vnet.ibm.com>
> ---
> 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.
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
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command
2012-08-01 8:20 ` Paolo Bonzini
@ 2012-08-01 8:43 ` Cong Meng
2012-08-01 8:45 ` Paolo Bonzini
0 siblings, 1 reply; 6+ messages in thread
From: Cong Meng @ 2012-08-01 8:43 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: zwanp, linuxram, stefanha, qemu-devel
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 <mc@linux.vnet.ibm.com>
>> ---
>> 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
>>
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command
2012-08-01 8:43 ` Cong Meng
@ 2012-08-01 8:45 ` Paolo Bonzini
2012-08-01 8:49 ` ronnie sahlberg
0 siblings, 1 reply; 6+ messages in thread
From: Paolo Bonzini @ 2012-08-01 8:45 UTC (permalink / raw)
To: Cong Meng; +Cc: zwanp, linuxram, stefanha, qemu-devel
Il 01/08/2012 10:43, Cong Meng ha scritto:
>>
>> Please make this conditional on the type _not_ being TYPE_ROM.
>
> May I ask why cdrom device should be an exception?
Because CD-ROM devices do not support ATA PASSTHROUGH (the SAT standard
only describes direct access devices---type=0x00). The 0xa1 command is
"BLANK" for CD-ROMs.
Paolo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command
2012-08-01 8:45 ` Paolo Bonzini
@ 2012-08-01 8:49 ` ronnie sahlberg
2012-08-01 8:55 ` Cong Meng
0 siblings, 1 reply; 6+ messages in thread
From: ronnie sahlberg @ 2012-08-01 8:49 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: zwanp, Cong Meng, linuxram, stefanha, qemu-devel
Because opcode 0xA1 has a different meaning for CDROM/MMC devices.
On such devices 0xA1 means BLANK, so it would collide if QEMU some day
adds support for
re-writeable mmc device.
On Wed, Aug 1, 2012 at 6:45 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 01/08/2012 10:43, Cong Meng ha scritto:
>>>
>>> Please make this conditional on the type _not_ being TYPE_ROM.
>>
>> May I ask why cdrom device should be an exception?
>
> Because CD-ROM devices do not support ATA PASSTHROUGH (the SAT standard
> only describes direct access devices---type=0x00). The 0xa1 command is
> "BLANK" for CD-ROMs.
>
> Paolo
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command
2012-08-01 8:49 ` ronnie sahlberg
@ 2012-08-01 8:55 ` Cong Meng
0 siblings, 0 replies; 6+ messages in thread
From: Cong Meng @ 2012-08-01 8:55 UTC (permalink / raw)
To: ronnie sahlberg, Paolo Bonzini; +Cc: zwanp, linuxram, stefanha, qemu-devel
I see. thank both.
On Wed 01 Aug 2012 04:49:18 PM CST, ronnie sahlberg wrote:
> Because opcode 0xA1 has a different meaning for CDROM/MMC devices.
> On such devices 0xA1 means BLANK, so it would collide if QEMU some day
> adds support for
> re-writeable mmc device.
>
>
> On Wed, Aug 1, 2012 at 6:45 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> Il 01/08/2012 10:43, Cong Meng ha scritto:
>>>>
>>>> Please make this conditional on the type _not_ being TYPE_ROM.
>>>
>>> May I ask why cdrom device should be an exception?
>>
>> Because CD-ROM devices do not support ATA PASSTHROUGH (the SAT standard
>> only describes direct access devices---type=0x00). The 0xa1 command is
>> "BLANK" for CD-ROMs.
>>
>> Paolo
>>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-08-01 8:56 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-01 7:53 [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command Cong Meng
2012-08-01 8:20 ` Paolo Bonzini
2012-08-01 8:43 ` Cong Meng
2012-08-01 8:45 ` Paolo Bonzini
2012-08-01 8:49 ` ronnie sahlberg
2012-08-01 8:55 ` Cong Meng
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).