From patchwork Mon May 31 01:43:08 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Nicholas A. Bellinger" X-Patchwork-Id: 103180 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o4V1glVA018408 for ; Mon, 31 May 2010 01:42:54 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755317Ab0EaBmw (ORCPT ); Sun, 30 May 2010 21:42:52 -0400 Received: from smtp110.sbc.mail.gq1.yahoo.com ([67.195.14.95]:29366 "HELO smtp110.sbc.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1755298Ab0EaBmv (ORCPT ); Sun, 30 May 2010 21:42:51 -0400 Received: (qmail 74897 invoked from network); 31 May 2010 01:42:50 -0000 Received: from adsl-70-231-238-2.dsl.snfc21.sbcglobal.net (nab@70.231.238.2 with login) by smtp110.sbc.mail.gq1.yahoo.com with SMTP; 30 May 2010 18:42:50 -0700 PDT X-Yahoo-SMTP: fzDSGlOswBCWnIOrNw7KwwK1j9PqyNbe5PtLKiS4dDU.UNl_t6bdEZu9tTLW X-YMail-OSG: RktwnbMVM1ny5HCBAiWFbKafBBbDkMwjr.ReR3RGnZcWQltNkMNL8aBJl_UycmtJpqC_fGDxrZx93dfEK6t5t7D5piYhdXVhN3gkaoFvSkJeIKDk_TSxcRjujWa6RvneWEhkBknCyN87WHCZQX_i8S6BsWD.87ReGE0I78DmlcM9oulht6WJ7_ytDCguxLKdeK1Lct.Gq_RhJ1vHZlF0HdtqZGNgIkfcMIEqDjWzW5Z.r6zriM9kqwLEeEvpxodGRX50rmwSCjeeSfpEaRR0VuwF_lmN6Q7Lug5AD6iNlVnNXfPw_rs6g_92t5ovfFa7D62Ml1lJNcNSgdFzIBdzXw_GPo9q7Qbq_Zbnl.2LCfgiFg-- X-Yahoo-Newman-Property: ymail-3 From: "Nicholas A. Bellinger" To: Kevin Wolf , Gerd Hoffmann Cc: Christoph Hellwig , Hannes Reinecke , Paul Brook , kvm-devel , qemu-devel , Nicholas Bellinger Subject: [PATCH 2/2] [scsi-bus]: Add MAINTENANCE_IN and MAINTENANCE_OUT case for SCSIRequest xfer and xfer_mode setup Date: Sun, 30 May 2010 18:43:08 -0700 Message-Id: <1275270188-11011-1-git-send-email-nab@linux-iscsi.org> X-Mailer: git-send-email 1.5.6.5 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Mon, 31 May 2010 01:42:54 +0000 (UTC) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 75ec74e..7d80405 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -329,6 +329,17 @@ static int scsi_req_length(SCSIRequest *req, uint8_t *cmd) case PERSISTENT_RESERVE_IN: req->cmd.xfer = cmd[8] | (cmd[7] << 8); break; + case MAINTENANCE_OUT: + case MAINTENANCE_IN: + if (req->dev->type != TYPE_ROM) { + /* Used for MI_REPORT_TARGET_PGS, MO_SET_TARGET_PGS et al. */ + req->cmd.xfer = cmd[9] | (cmd[8] << 8) | + (cmd[7] << 16) | (cmd[6] << 24); + } else { + /* GPCMD_REPORT_KEY and GPCMD_SEND_KEY from multi media commands */ + req->cmd.xfer = cmd[9] | (cmd[8] << 8); + } + break; } return 0; } @@ -394,6 +405,7 @@ static void scsi_req_xfer_mode(SCSIRequest *req) case SEND_VOLUME_TAG: case WRITE_LONG_2: case PERSISTENT_RESERVE_OUT: + case MAINTENANCE_OUT: req->cmd.mode = SCSI_XFER_TO_DEV; break; default: @@ -539,6 +551,8 @@ const char *scsi_command_name(uint8_t cmd) [ SPACE ] = "SPACE", [ INQUIRY ] = "INQUIRY", [ RECOVER_BUFFERED_DATA ] = "RECOVER_BUFFERED_DATA", + [ MAINTENANCE_IN ] = "MAINTENANCE_IN", + [ MAINTENANCE_OUT ] = "MAINTENANCE_OUT", [ MODE_SELECT ] = "MODE_SELECT", [ RESERVE ] = "RESERVE", [ RELEASE ] = "RELEASE", diff --git a/hw/scsi-defs.h b/hw/scsi-defs.h index 5890094..a4a3518 100644 --- a/hw/scsi-defs.h +++ b/hw/scsi-defs.h @@ -84,6 +84,8 @@ #define MODE_SENSE_10 0x5a #define PERSISTENT_RESERVE_IN 0x5e #define PERSISTENT_RESERVE_OUT 0x5f +#define MAINTENANCE_IN 0xa3 +#define MAINTENANCE_OUT 0xa4 #define MOVE_MEDIUM 0xa5 #define READ_12 0xa8 #define WRITE_12 0xaa