From patchwork Sat Jul 28 01:14:53 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: SCSI: STARTSTOPUNIT only eject/load media if powercondition is 0 From: ronniesahlberg@gmail.com X-Patchwork-Id: 173822 Message-Id: <1343438093-13151-2-git-send-email-ronniesahlberg@gmail.com> To: qemu-devel@nongnu.org, pbonzini@redhat.com Cc: Ronnie Sahlberg Date: Sat, 28 Jul 2012 11:14:53 +1000 The START STOP UNIT command will only eject/load media if power condition is zero. If power condition is !0 then LOEJ and START will be ignored. >From MMC (sbc contains similar wordings too) The Power Conditions field requests the block device to be placed in the power condition defined in Table 558. If this field has a value other than 0h then the Start and LoEj bits shall be ignored. Signed-off-by: Ronnie Sahlberg --- hw/scsi-disk.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 525816c..5426990 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -1244,6 +1244,12 @@ static int scsi_disk_emulate_start_stop(SCSIDiskReq *r) SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev); bool start = req->cmd.buf[4] & 1; bool loej = req->cmd.buf[4] & 2; /* load on start, eject on !start */ + int pwrcnd = req->cmd.buf[4] & 0xf0; + + if (pwrcnd) { + /* eject/load only happens for power condition == 0 */ + return 0; + } if (s->qdev.type == TYPE_ROM && loej) { if (!start && !s->tray_open && s->tray_locked) {