From: Paolo Bonzini Date: Fri, 4 May 2012 08:28:55 +0000 (+0200) Subject: scsi: parse 16-byte tape CDBs X-Git-Tag: TizenStudio_2.0_p2.3.2~208^2~4126^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=065c25996b6275e306704816c6075d6c0ff66e84;p=sdk%2Femulator%2Fqemu.git scsi: parse 16-byte tape CDBs The transfer length for these commands is different from the transfer length of the corresponding disk commands, so parse it specially. Signed-off-by: Paolo Bonzini --- diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 5fbf8db..46cd1f9 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -891,6 +891,16 @@ static int scsi_req_stream_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *bu cmd->xfer *= dev->blocksize; } break; + case READ_16: + case READ_REVERSE_16: + case VERIFY_16: + case WRITE_16: + cmd->len = 16; + cmd->xfer = buf[14] | (buf[13] << 8) | (buf[12] << 16); + if (buf[1] & 0x01) { /* fixed */ + cmd->xfer *= dev->blocksize; + } + break; case REWIND: case START_STOP: cmd->len = 6; diff --git a/hw/scsi-defs.h b/hw/scsi-defs.h index ca24192..219c84d 100644 --- a/hw/scsi-defs.h +++ b/hw/scsi-defs.h @@ -92,6 +92,7 @@ #define PERSISTENT_RESERVE_OUT 0x5f #define VARLENGTH_CDB 0x7f #define WRITE_FILEMARKS_16 0x80 +#define READ_REVERSE_16 0x81 #define ALLOW_OVERWRITE 0x82 #define EXTENDED_COPY 0x83 #define ATA_PASSTHROUGH 0x85