Revision 7d4b4ba5

b/block.c
44 44
#include <windows.h>
45 45
#endif
46 46

  
47
static void bdrv_dev_change_media_cb(BlockDriverState *bs);
47
static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load);
48 48
static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
49 49
        int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
50 50
        BlockDriverCompletionFunc *cb, void *opaque);
......
688 688
    }
689 689

  
690 690
    if (!bdrv_key_required(bs)) {
691
        bdrv_dev_change_media_cb(bs);
691
        bdrv_dev_change_media_cb(bs, true);
692 692
    }
693 693

  
694 694
    return 0;
......
724 724
            bdrv_close(bs->file);
725 725
        }
726 726

  
727
        bdrv_dev_change_media_cb(bs);
727
        bdrv_dev_change_media_cb(bs, false);
728 728
    }
729 729
}
730 730

  
......
807 807
    }
808 808
}
809 809

  
810
static void bdrv_dev_change_media_cb(BlockDriverState *bs)
810
static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
811 811
{
812 812
    if (bs->dev_ops && bs->dev_ops->change_media_cb) {
813
        bs->dev_ops->change_media_cb(bs->dev_opaque);
813
        bs->dev_ops->change_media_cb(bs->dev_opaque, load);
814 814
    }
815 815
}
816 816

  
......
1674 1674
    } else if (!bs->valid_key) {
1675 1675
        bs->valid_key = 1;
1676 1676
        /* call the change callback now, we skipped it on open */
1677
        bdrv_dev_change_media_cb(bs);
1677
        bdrv_dev_change_media_cb(bs, true);
1678 1678
    }
1679 1679
    return ret;
1680 1680
}
b/block.h
32 32
typedef struct BlockDevOps {
33 33
    /*
34 34
     * Runs when virtual media changed (monitor commands eject, change)
35
     * Argument load is true on load and false on eject.
35 36
     * Beware: doesn't run when a host device's physical media
36 37
     * changes.  Sure would be useful if it did.
37 38
     * Device models with removable media must implement this callback.
38 39
     */
39
    void (*change_media_cb)(void *opaque);
40
    void (*change_media_cb)(void *opaque, bool load);
40 41
    /*
41 42
     * Is the virtual tray open?
42 43
     * Device models implement this only when the device has a tray.
b/hw/fdc.c
1777 1777
    fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00);
1778 1778
}
1779 1779

  
1780
static void fdctrl_change_cb(void *opaque)
1780
static void fdctrl_change_cb(void *opaque, bool load)
1781 1781
{
1782 1782
    FDrive *drive = opaque;
1783 1783

  
b/hw/ide/core.c
784 784
}
785 785

  
786 786
/* called when the inserted state of the media has changed */
787
static void ide_cd_change_cb(void *opaque)
787
static void ide_cd_change_cb(void *opaque, bool load)
788 788
{
789 789
    IDEState *s = opaque;
790 790
    uint64_t nb_sectors;
b/hw/scsi-disk.c
1173 1173
    blockdev_mark_auto_del(s->qdev.conf.bs);
1174 1174
}
1175 1175

  
1176
static void scsi_cd_change_media_cb(void *opaque)
1176
static void scsi_cd_change_media_cb(void *opaque, bool load)
1177 1177
{
1178 1178
}
1179 1179

  
b/hw/sd.c
419 419
    sd->pwd_len = 0;
420 420
}
421 421

  
422
static void sd_cardchange(void *opaque)
422
static void sd_cardchange(void *opaque, bool load)
423 423
{
424 424
    SDState *sd = opaque;
425 425

  

Also available in: Unified diff