Message ID | 1312376904-16115-11-git-send-email-armbru@redhat.com |
---|---|
State | New |
Headers | show |
Am 03.08.2011 15:07, schrieb Markus Armbruster: > We already track it in BlockDriverState since commit 4be9762a. As > discussed in that commit's message, we should track it in the device > device models instead, because it's device state. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > hw/ide/atapi.c | 6 +++++- > hw/ide/internal.h | 1 + > 2 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c > index 17fbef8..96f7c31 100644 > --- a/hw/ide/atapi.c > +++ b/hw/ide/atapi.c > @@ -510,7 +510,7 @@ static unsigned int event_status_media(IDEState *s, > uint8_t event_code, media_status; > > media_status = 0; > - if (s->bs->tray_open) { > + if (s->tray_open) { > media_status = MS_TRAY_OPEN; > } else if (bdrv_is_inserted(s->bs)) { > media_status = MS_MEDIA_PRESENT; > @@ -915,6 +915,10 @@ static void cmd_start_stop_unit(IDEState *s, uint8_t* buf) > ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); > break; > } > + > + if (loej && !err) { > + s->tray_open = !start; > + } > } > > static void cmd_mechanism_status(IDEState *s, uint8_t* buf) > diff --git a/hw/ide/internal.h b/hw/ide/internal.h > index 46e84fa..cd8e977 100644 > --- a/hw/ide/internal.h > +++ b/hw/ide/internal.h > @@ -442,6 +442,7 @@ struct IDEState { > struct unreported_events events; > uint8_t sense_key; > uint8_t asc; > + bool tray_open; > uint8_t cdrom_changed; > int packet_transfer_size; > int elementary_transfer_size; Probably needs to be migrated. Kevin
Kevin Wolf <kwolf@redhat.com> writes: > Am 03.08.2011 15:07, schrieb Markus Armbruster: >> We already track it in BlockDriverState since commit 4be9762a. As >> discussed in that commit's message, we should track it in the device >> device models instead, because it's device state. >> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> --- >> hw/ide/atapi.c | 6 +++++- >> hw/ide/internal.h | 1 + >> 2 files changed, 6 insertions(+), 1 deletions(-) >> >> diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c >> index 17fbef8..96f7c31 100644 >> --- a/hw/ide/atapi.c >> +++ b/hw/ide/atapi.c >> @@ -510,7 +510,7 @@ static unsigned int event_status_media(IDEState *s, >> uint8_t event_code, media_status; >> >> media_status = 0; >> - if (s->bs->tray_open) { >> + if (s->tray_open) { >> media_status = MS_TRAY_OPEN; >> } else if (bdrv_is_inserted(s->bs)) { >> media_status = MS_MEDIA_PRESENT; >> @@ -915,6 +915,10 @@ static void cmd_start_stop_unit(IDEState *s, uint8_t* buf) >> ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); >> break; >> } >> + >> + if (loej && !err) { >> + s->tray_open = !start; >> + } >> } >> >> static void cmd_mechanism_status(IDEState *s, uint8_t* buf) >> diff --git a/hw/ide/internal.h b/hw/ide/internal.h >> index 46e84fa..cd8e977 100644 >> --- a/hw/ide/internal.h >> +++ b/hw/ide/internal.h >> @@ -442,6 +442,7 @@ struct IDEState { >> struct unreported_events events; >> uint8_t sense_key; >> uint8_t asc; >> + bool tray_open; >> uint8_t cdrom_changed; >> int packet_transfer_size; >> int elementary_transfer_size; > > Probably needs to be migrated. Correct, but I chose to fix that separately, in PATCH 27/45. Note that this patch neither breaks nor fixes anything. It just prepares the ground for fixes.
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c index 17fbef8..96f7c31 100644 --- a/hw/ide/atapi.c +++ b/hw/ide/atapi.c @@ -510,7 +510,7 @@ static unsigned int event_status_media(IDEState *s, uint8_t event_code, media_status; media_status = 0; - if (s->bs->tray_open) { + if (s->tray_open) { media_status = MS_TRAY_OPEN; } else if (bdrv_is_inserted(s->bs)) { media_status = MS_MEDIA_PRESENT; @@ -915,6 +915,10 @@ static void cmd_start_stop_unit(IDEState *s, uint8_t* buf) ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); break; } + + if (loej && !err) { + s->tray_open = !start; + } } static void cmd_mechanism_status(IDEState *s, uint8_t* buf) diff --git a/hw/ide/internal.h b/hw/ide/internal.h index 46e84fa..cd8e977 100644 --- a/hw/ide/internal.h +++ b/hw/ide/internal.h @@ -442,6 +442,7 @@ struct IDEState { struct unreported_events events; uint8_t sense_key; uint8_t asc; + bool tray_open; uint8_t cdrom_changed; int packet_transfer_size; int elementary_transfer_size;
We already track it in BlockDriverState since commit 4be9762a. As discussed in that commit's message, we should track it in the device device models instead, because it's device state. Signed-off-by: Markus Armbruster <armbru@redhat.com> --- hw/ide/atapi.c | 6 +++++- hw/ide/internal.h | 1 + 2 files changed, 6 insertions(+), 1 deletions(-)