mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
qmp: add DEVICE_TRAY_MOVED event
It's emitted whenever the tray is moved by the guest or by HMP/QMP commands. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Acked-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
bde25388d1
commit
6f382ed226
4 changed files with 46 additions and 0 deletions
24
block.c
24
block.c
|
@ -972,10 +972,30 @@ void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv,
|
|||
qobject_decref(data);
|
||||
}
|
||||
|
||||
static void bdrv_emit_qmp_eject_event(BlockDriverState *bs, bool ejected)
|
||||
{
|
||||
QObject *data;
|
||||
|
||||
data = qobject_from_jsonf("{ 'device': %s, 'tray-open': %i }",
|
||||
bdrv_get_device_name(bs), ejected);
|
||||
monitor_protocol_event(QEVENT_DEVICE_TRAY_MOVED, data);
|
||||
|
||||
qobject_decref(data);
|
||||
}
|
||||
|
||||
static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
|
||||
{
|
||||
if (bs->dev_ops && bs->dev_ops->change_media_cb) {
|
||||
bool tray_was_closed = !bdrv_dev_is_tray_open(bs);
|
||||
bs->dev_ops->change_media_cb(bs->dev_opaque, load);
|
||||
if (tray_was_closed) {
|
||||
/* tray open */
|
||||
bdrv_emit_qmp_eject_event(bs, true);
|
||||
}
|
||||
if (load) {
|
||||
/* tray close */
|
||||
bdrv_emit_qmp_eject_event(bs, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3616,6 +3636,10 @@ void bdrv_eject(BlockDriverState *bs, bool eject_flag)
|
|||
if (drv && drv->bdrv_eject) {
|
||||
drv->bdrv_eject(bs, eject_flag);
|
||||
}
|
||||
|
||||
if (bs->device_name[0] != '\0') {
|
||||
bdrv_emit_qmp_eject_event(bs, eject_flag);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue