aboutsummaryrefslogtreecommitdiff
path: root/hw/ide
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2012-07-31 11:28:26 +1000
committerKevin Wolf <kwolf@redhat.com>2012-09-12 15:50:09 +0200
commitce560dcf20c14194db5ef3b9fc1ea592d4e68109 (patch)
tree523f21d2fab768254209f44f77d2f5d9536c918c /hw/ide
parent1f7a48de4467f31afc51169122453318efdb0f33 (diff)
downloadqemu-ce560dcf20c14194db5ef3b9fc1ea592d4e68109.zip
qemu-ce560dcf20c14194db5ef3b9fc1ea592d4e68109.tar.gz
qemu-ce560dcf20c14194db5ef3b9fc1ea592d4e68109.tar.bz2
ATAPI: STARTSTOPUNIT only eject/load media if powercondition is 0
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: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hw/ide')
-rw-r--r--hw/ide/atapi.c6
1 files changed, 6 insertions, 0 deletions
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) {