[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH] add suport for ATA_PASSTHROUGH_xx scsi command |
Date: |
Wed, 01 Aug 2012 10:20:28 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1 |
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 <address@hidden>
> ---
> 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
>