diff -r 1e346ef889b3 hw/ide.c --- a/hw/ide.c Sun Dec 17 10:38:27 2006 -0600 +++ b/hw/ide.c Sun Dec 17 16:49:06 2006 -0600 @@ -1479,6 +1479,17 @@ static void ide_atapi_cmd(IDEState *s) ASC_ILLEGAL_OPCODE); break; } +} + +/* called when the inserted state of the media has changed */ +static void cdrom_change_cb(void *opaque) +{ + IDEState *s = opaque; + int64_t nb_sectors; + + /* XXX: send interrupt too */ + bdrv_get_geometry(s->bs, &nb_sectors); + s->nb_sectors = nb_sectors; } static void ide_cmd_lba48_transform(IDEState *s, int lba48) @@ -2111,6 +2122,7 @@ static void ide_init2(IDEState *ide_stat } if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) { s->is_cdrom = 1; + bdrv_set_change_cb(s->bs, cdrom_change_cb, s); } } s->drive_serial = drive_serial++;