diff mbox

[v2,44/45] block: New change_media_cb() parameter load

Message ID 1312376904-16115-45-git-send-email-armbru@redhat.com
State New
Headers show

Commit Message

Markus Armbruster Aug. 3, 2011, 1:08 p.m. UTC
To let device models distinguish between eject and load.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 block.c        |   12 ++++++------
 block.h        |    3 ++-
 hw/fdc.c       |    2 +-
 hw/ide/core.c  |    2 +-
 hw/scsi-disk.c |    2 +-
 hw/sd.c        |    2 +-
 6 files changed, 12 insertions(+), 11 deletions(-)

Comments

Kevin Wolf Sept. 2, 2011, 1:26 p.m. UTC | #1
Am 03.08.2011 15:08, schrieb Markus Armbruster:
> To let device models distinguish between eject and load.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  block.c        |   12 ++++++------
>  block.h        |    3 ++-
>  hw/fdc.c       |    2 +-
>  hw/ide/core.c  |    2 +-
>  hw/scsi-disk.c |    2 +-
>  hw/sd.c        |    2 +-
>  6 files changed, 12 insertions(+), 11 deletions(-)
> 
> diff --git a/block.c b/block.c
> index b0e54ef..1bd67dd 100644
> --- a/block.c
> +++ b/block.c
> @@ -44,7 +44,7 @@
>  #include <windows.h>
>  #endif
>  
> -static void bdrv_dev_change_media_cb(BlockDriverState *bs);
> +static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load);
>  static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
>          int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
>          BlockDriverCompletionFunc *cb, void *opaque);
> @@ -661,7 +661,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
>      }
>  
>      if (!bdrv_key_required(bs)) {
> -        bdrv_dev_change_media_cb(bs);
> +        bdrv_dev_change_media_cb(bs, true);
>      }
>  
>      return 0;
> @@ -697,7 +697,7 @@ void bdrv_close(BlockDriverState *bs)
>              bdrv_close(bs->file);
>          }
>  
> -        bdrv_dev_change_media_cb(bs);
> +        bdrv_dev_change_media_cb(bs, false);
>      }
>  }
>  
> @@ -780,10 +780,10 @@ void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops,
>      }
>  }
>  
> -static void bdrv_dev_change_media_cb(BlockDriverState *bs)
> +static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
>  {
>      if (bs->dev_ops && bs->dev_ops->change_media_cb) {
> -        bs->dev_ops->change_media_cb(bs->dev_opaque);
> +        bs->dev_ops->change_media_cb(bs->dev_opaque, load);
>      }
>  }
>  
> @@ -1634,7 +1634,7 @@ int bdrv_set_key(BlockDriverState *bs, const char *key)
>      } else if (!bs->valid_key) {
>          bs->valid_key = 1;
>          /* call the change callback now, we skipped it on open */
> -        bdrv_dev_change_media_cb(bs);
> +        bdrv_dev_change_media_cb(bs, 1);

s/1/true/

Kevin
Markus Armbruster Sept. 2, 2011, 3:33 p.m. UTC | #2
Kevin Wolf <kwolf@redhat.com> writes:

> Am 03.08.2011 15:08, schrieb Markus Armbruster:
>> To let device models distinguish between eject and load.
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  block.c        |   12 ++++++------
>>  block.h        |    3 ++-
>>  hw/fdc.c       |    2 +-
>>  hw/ide/core.c  |    2 +-
>>  hw/scsi-disk.c |    2 +-
>>  hw/sd.c        |    2 +-
>>  6 files changed, 12 insertions(+), 11 deletions(-)
>> 
>> diff --git a/block.c b/block.c
>> index b0e54ef..1bd67dd 100644
>> --- a/block.c
>> +++ b/block.c
>> @@ -44,7 +44,7 @@
>>  #include <windows.h>
>>  #endif
>>  
>> -static void bdrv_dev_change_media_cb(BlockDriverState *bs);
>> +static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load);
>>  static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
>>          int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
>>          BlockDriverCompletionFunc *cb, void *opaque);
>> @@ -661,7 +661,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
>>      }
>>  
>>      if (!bdrv_key_required(bs)) {
>> -        bdrv_dev_change_media_cb(bs);
>> +        bdrv_dev_change_media_cb(bs, true);
>>      }
>>  
>>      return 0;
>> @@ -697,7 +697,7 @@ void bdrv_close(BlockDriverState *bs)
>>              bdrv_close(bs->file);
>>          }
>>  
>> -        bdrv_dev_change_media_cb(bs);
>> +        bdrv_dev_change_media_cb(bs, false);
>>      }
>>  }
>>  
>> @@ -780,10 +780,10 @@ void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops,
>>      }
>>  }
>>  
>> -static void bdrv_dev_change_media_cb(BlockDriverState *bs)
>> +static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
>>  {
>>      if (bs->dev_ops && bs->dev_ops->change_media_cb) {
>> -        bs->dev_ops->change_media_cb(bs->dev_opaque);
>> +        bs->dev_ops->change_media_cb(bs->dev_opaque, load);
>>      }
>>  }
>>  
>> @@ -1634,7 +1634,7 @@ int bdrv_set_key(BlockDriverState *bs, const char *key)
>>      } else if (!bs->valid_key) {
>>          bs->valid_key = 1;
>>          /* call the change callback now, we skipped it on open */
>> -        bdrv_dev_change_media_cb(bs);
>> +        bdrv_dev_change_media_cb(bs, 1);
>
> s/1/true/

Thanks, will fix.
diff mbox

Patch

diff --git a/block.c b/block.c
index b0e54ef..1bd67dd 100644
--- a/block.c
+++ b/block.c
@@ -44,7 +44,7 @@ 
 #include <windows.h>
 #endif
 
-static void bdrv_dev_change_media_cb(BlockDriverState *bs);
+static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load);
 static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
         BlockDriverCompletionFunc *cb, void *opaque);
@@ -661,7 +661,7 @@  int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
     }
 
     if (!bdrv_key_required(bs)) {
-        bdrv_dev_change_media_cb(bs);
+        bdrv_dev_change_media_cb(bs, true);
     }
 
     return 0;
@@ -697,7 +697,7 @@  void bdrv_close(BlockDriverState *bs)
             bdrv_close(bs->file);
         }
 
-        bdrv_dev_change_media_cb(bs);
+        bdrv_dev_change_media_cb(bs, false);
     }
 }
 
@@ -780,10 +780,10 @@  void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops,
     }
 }
 
-static void bdrv_dev_change_media_cb(BlockDriverState *bs)
+static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
 {
     if (bs->dev_ops && bs->dev_ops->change_media_cb) {
-        bs->dev_ops->change_media_cb(bs->dev_opaque);
+        bs->dev_ops->change_media_cb(bs->dev_opaque, load);
     }
 }
 
@@ -1634,7 +1634,7 @@  int bdrv_set_key(BlockDriverState *bs, const char *key)
     } else if (!bs->valid_key) {
         bs->valid_key = 1;
         /* call the change callback now, we skipped it on open */
-        bdrv_dev_change_media_cb(bs);
+        bdrv_dev_change_media_cb(bs, 1);
     }
     return ret;
 }
diff --git a/block.h b/block.h
index 3885208..3fe0357 100644
--- a/block.h
+++ b/block.h
@@ -32,11 +32,12 @@  typedef struct QEMUSnapshotInfo {
 typedef struct BlockDevOps {
     /*
      * Runs when virtual media changed (monitor commands eject, change)
+     * Argument load is true on load and false on eject.
      * Beware: doesn't run when a host device's physical media
      * changes.  Sure would be useful if it did.
      * Device models with removable media must implement this callback.
      */
-    void (*change_media_cb)(void *opaque);
+    void (*change_media_cb)(void *opaque, bool load);
     /*
      * Is medium ejected from the device?
      * Device models calling bdrv_eject() should implement this.
diff --git a/hw/fdc.c b/hw/fdc.c
index e8da6a9..1f084ce 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -1777,7 +1777,7 @@  static void fdctrl_result_timer(void *opaque)
     fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00);
 }
 
-static void fdctrl_change_cb(void *opaque)
+static void fdctrl_change_cb(void *opaque, bool load)
 {
     FDrive *drive = opaque;
 
diff --git a/hw/ide/core.c b/hw/ide/core.c
index bd59016..832fdda 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -759,7 +759,7 @@  static void ide_cfata_metadata_write(IDEState *s)
 }
 
 /* called when the inserted state of the media has changed */
-static void ide_cd_change_cb(void *opaque)
+static void ide_cd_change_cb(void *opaque, bool load)
 {
     IDEState *s = opaque;
     uint64_t nb_sectors;
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 71d6408..aa90ede 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1212,7 +1212,7 @@  static void scsi_destroy(SCSIDevice *dev)
     blockdev_mark_auto_del(s->qdev.conf.bs);
 }
 
-static void scsi_cd_change_media_cb(void *opaque)
+static void scsi_cd_change_media_cb(void *opaque, bool load)
 {
 }
 
diff --git a/hw/sd.c b/hw/sd.c
index 3bcfe6a..e756996 100644
--- a/hw/sd.c
+++ b/hw/sd.c
@@ -419,7 +419,7 @@  static void sd_reset(SDState *sd, BlockDriverState *bdrv)
     sd->pwd_len = 0;
 }
 
-static void sd_cardchange(void *opaque)
+static void sd_cardchange(void *opaque, bool load)
 {
     SDState *sd = opaque;