diff options
author | Amit Shah <amit.shah@redhat.com> | 2011-04-12 21:36:03 +0530 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2011-04-13 12:19:52 +0200 |
commit | 0c370a35498bf9e300a035864bee7ce8460da669 (patch) | |
tree | 2763cc5f2496a4364e6b5913048a01b5a0f4724e /hw/ide | |
parent | 88f2bb58ef97ca269b29fe92bb4834f5ddbcde80 (diff) | |
download | qemu-0c370a35498bf9e300a035864bee7ce8460da669.tar.gz qemu-0c370a35498bf9e300a035864bee7ce8460da669.tar.bz2 qemu-0c370a35498bf9e300a035864bee7ce8460da669.zip |
atapi: Allow GET_EVENT_STATUS_NOTIFICATION after media change
After a media change, the only commands allowed from the guest were
REQUEST_SENSE and INQUIRY. The guest may also issue
GET_EVENT_STATUS_NOTIFICATION commands to get media
changed notification.
Signed-off-by: Amit Shah <amit.shah@redhat.com>
Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hw/ide')
-rw-r--r-- | hw/ide/core.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/hw/ide/core.c b/hw/ide/core.c index b5de22e86a..f0da95d728 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1102,13 +1102,21 @@ static void ide_atapi_cmd(IDEState *s) printf("\n"); } #endif - /* If there's a UNIT_ATTENTION condition pending, only - REQUEST_SENSE and INQUIRY commands are allowed to complete. */ + /* + * If there's a UNIT_ATTENTION condition pending, only + * REQUEST_SENSE, INQUIRY, GET_CONFIGURATION and + * GET_EVENT_STATUS_NOTIFICATION commands are allowed to complete. + * MMC-5, section 4.1.6.1 lists only these commands being allowed + * to complete, with other commands getting a CHECK condition + * response unless a higher priority status, defined by the drive + * here, is pending. + */ if (s->sense_key == SENSE_UNIT_ATTENTION && - s->io_buffer[0] != GPCMD_REQUEST_SENSE && - s->io_buffer[0] != GPCMD_INQUIRY) { - ide_atapi_cmd_check_status(s); - return; + s->io_buffer[0] != GPCMD_REQUEST_SENSE && + s->io_buffer[0] != GPCMD_INQUIRY && + s->io_buffer[0] != GPCMD_GET_EVENT_STATUS_NOTIFICATION) { + ide_atapi_cmd_check_status(s); + return; } switch(s->io_buffer[0]) { case GPCMD_TEST_UNIT_READY: |