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