]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
SCSI: STARTSTOPUNIT only eject/load media if powercondition is 0
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sat, 28 Jul 2012 01:14:53 +0000 (11:14 +1000)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 3 Aug 2012 08:01:35 +0000 (10:01 +0200)
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 <ronniesahlberg@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
hw/scsi-disk.c

index 84b63ffafb4f1b90bef8524c0302c4c7335cc658..e2ec177069f082389d3ffd10b5a453ffae43a455 100644 (file)
@@ -1247,6 +1247,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->features & (1 << SCSI_DISK_F_REMOVABLE)) && loej) {
         if (!start && !s->tray_open && s->tray_locked) {