From: Gonglei <arei.gong...@huawei.com> Adds "set-bootindex id=xx,bootindex=xx,suffix=xx" QMP command.
Example QMP command: -> { "execute": "set-bootindex", "arguments": { "id": "ide0-0-1", "bootindex": 1, "suffix": "/disk@0"}} <- { "return": {} } Signed-off-by: Gonglei <arei.gong...@huawei.com> Signed-off-by: Chenliang <chenlian...@huawei.com> --- qapi-schema.json | 16 ++++++++++++++++ qmp-commands.hx | 24 ++++++++++++++++++++++++ qmp.c | 17 +++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/qapi-schema.json b/qapi-schema.json index b11aad2..a9ef0be 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -1704,6 +1704,22 @@ { 'command': 'device_del', 'data': {'id': 'str'} } ## +# @set-bootindex: +# +# set bootindex of a devcie +# +# @id: the name of the device +# @bootindex: the bootindex of the device +# @suffix: #optional a suffix of the device +# +# Returns: Nothing on success +# If @id is not a valid device, DeviceNotFound +# +# Since: 2.2 +## +{ 'command': 'set-bootindex', 'data': {'id': 'str', 'bootindex': 'int', '*suffix': 'str'} } + +## # @DumpGuestMemoryFormat: # # An enumeration of guest-memory-dump's format. diff --git a/qmp-commands.hx b/qmp-commands.hx index 4be4765..2c89a97 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -330,6 +330,30 @@ Example: <- { "return": {} } EQMP + { + .name = "set-bootindex", + .args_type = "id:s,bootindex:l,suffix:s?", + .mhandler.cmd_new = qmp_marshal_input_set_bootindex, + }, + +SQMP +set-bootindex +-------------------- + +Set bootindex of a device + +Arguments: + +- "id": the device's ID (json-string) +- "bootindex": the device's bootindex (json-int) +- "suffix": the device's suffix in global boot list (json-string, optional) + +Example: + +-> { "execute": "set-bootindex", "arguments": { "id": "ide0-0-1", "bootindex": 1, "suffix": "/disk@0"}} +<- { "return": {} } + +EQMP { .name = "send-key", diff --git a/qmp.c b/qmp.c index 0d2553a..f2c3c14 100644 --- a/qmp.c +++ b/qmp.c @@ -684,6 +684,23 @@ void qmp_object_del(const char *id, Error **errp) object_unparent(obj); } +void qmp_set_bootindex(const char *id, int64_t bootindex, + bool has_suffix, const char *suffix, Error **errp) +{ + DeviceState *dev; + + dev = qdev_find_recursive(sysbus_get_default(), id); + if (NULL == dev) { + error_set(errp, QERR_DEVICE_NOT_FOUND, id); + return; + } + if (has_suffix) { + modify_boot_device_path(bootindex, dev, suffix); + } else { + modify_boot_device_path(bootindex, dev, NULL); + } +} + MemoryDeviceInfoList *qmp_query_memory_devices(Error **errp) { MemoryDeviceInfoList *head = NULL; -- 1.7.12.4