Revision 4b9b7092 hw/ide/core.c
b/hw/ide/core.c | ||
---|---|---|
1248 | 1248 |
ide_atapi_cmd_check_status(s); |
1249 | 1249 |
return; |
1250 | 1250 |
} |
1251 |
if (bdrv_is_inserted(s->bs) && s->cdrom_changed) { |
|
1252 |
ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); |
|
1253 |
|
|
1254 |
s->cdrom_changed = 0; |
|
1255 |
s->sense_key = SENSE_UNIT_ATTENTION; |
|
1256 |
s->asc = ASC_MEDIUM_MAY_HAVE_CHANGED; |
|
1257 |
return; |
|
1258 |
} |
|
1251 | 1259 |
switch(s->io_buffer[0]) { |
1252 | 1260 |
case GPCMD_TEST_UNIT_READY: |
1253 |
if (bdrv_is_inserted(s->bs) && !s->cdrom_changed) {
|
|
1261 |
if (bdrv_is_inserted(s->bs)) { |
|
1254 | 1262 |
ide_atapi_cmd_ok(s); |
1255 | 1263 |
} else { |
1256 |
s->cdrom_changed = 0; |
|
1257 | 1264 |
ide_atapi_cmd_error(s, SENSE_NOT_READY, |
1258 | 1265 |
ASC_MEDIUM_NOT_PRESENT); |
1259 | 1266 |
} |
... | ... | |
1734 | 1741 |
bdrv_get_geometry(s->bs, &nb_sectors); |
1735 | 1742 |
s->nb_sectors = nb_sectors; |
1736 | 1743 |
|
1737 |
s->sense_key = SENSE_UNIT_ATTENTION; |
|
1738 |
s->asc = ASC_MEDIUM_MAY_HAVE_CHANGED; |
|
1744 |
/* |
|
1745 |
* First indicate to the guest that a CD has been removed. That's |
|
1746 |
* done on the next command the guest sends us. |
|
1747 |
* |
|
1748 |
* Then we set SENSE_UNIT_ATTENTION, by which the guest will |
|
1749 |
* detect a new CD in the drive. See ide_atapi_cmd() for details. |
|
1750 |
*/ |
|
1739 | 1751 |
s->cdrom_changed = 1; |
1740 | 1752 |
s->events.new_media = true; |
1741 | 1753 |
ide_set_irq(s->bus); |
Also available in: Unified diff