Patchwork [v2,10/45] ide/atapi: Track tray open/close state

login
register
mail settings
Submitter Markus Armbruster
Date Aug. 3, 2011, 1:07 p.m.
Message ID <1312376904-16115-11-git-send-email-armbru@redhat.com>
Download mbox | patch
Permalink /patch/108204/
State New
Headers show

Comments

Markus Armbruster - Aug. 3, 2011, 1:07 p.m.
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(-)
Kevin Wolf - Sept. 2, 2011, 10:23 a.m.
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
Markus Armbruster - Sept. 2, 2011, 2:51 p.m.
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.

Patch

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;