diff mbox

ATAPI: STARTSTOPUNIT only eject/load media if powercondition is 0

Message ID 1343698106-24287-2-git-send-email-ronniesahlberg@gmail.com
State New
Headers show

Commit Message

ronnie sahlberg July 31, 2012, 1:28 a.m. UTC
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>
---
 hw/ide/atapi.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

Comments

Kevin Wolf Aug. 27, 2012, 10:43 a.m. UTC | #1
Am 31.07.2012 03:28, schrieb Ronnie Sahlberg:
> 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>

Thanks, applied to block-next for 1.3.

Kevin
diff mbox

Patch

diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index f7f714c..685cbaa 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -875,6 +875,12 @@  static void cmd_start_stop_unit(IDEState *s, uint8_t* buf)
     int sense;
     bool start = buf[4] & 1;
     bool loej = buf[4] & 2;     /* load on start, eject on !start */
+    int pwrcnd = buf[4] & 0xf0;
+
+    if (pwrcnd) {
+        /* eject/load only happens for power condition == 0 */
+        return;
+    }
 
     if (loej) {
         if (!start && !s->tray_open && s->tray_locked) {