Loading qapi-schema.json +48 −0 Original line number Diff line number Diff line Loading @@ -1168,3 +1168,51 @@ # Since: 0.14.0 ## { 'command': 'migrate_set_speed', 'data': {'value': 'int'} } ## # @DevicePropertyInfo: # # @name: the name of the property # # @type: the type of the property. This will typically come in one of four # forms: # # 1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'. # These types are mapped to the appropriate JSON type. # # 2) A legacy type in the form 'legacy<subtype>' where subtype is the # legacy qdev typename. These types are always treated as strings. # # 3) A child type in the form 'child<subtype>' where subtype is a qdev # device type name. Child properties create the composition tree. # # 4) A link type in the form 'link<subtype>' where subtype is a qdev # device type name. Link properties form the device model graph. # # Since: 1.1 # # Notes: This type is experimental. Its syntax may change in future releases. ## { 'type': 'DevicePropertyInfo', 'data': { 'name': 'str', 'type': 'str' } } ## # @qom-list: # # This command will list any properties of a device given a path in the device # model. # # @path: the path within the device model. See @qom-get for a description of # this parameter. # # Returns: a list of @DevicePropertyInfo that describe the properties of the # device. # # Since: 1.1 # # Notes: This command is experimental. It's syntax may change in future # releases. ## { 'command': 'qom-list', 'data': { 'path': 'str' }, 'returns': [ 'DevicePropertyInfo' ] } qmp-commands.hx +6 −0 Original line number Diff line number Diff line Loading @@ -2009,3 +2009,9 @@ EQMP .args_type = "", .mhandler.cmd_new = qmp_marshal_input_query_balloon, }, { .name = "qom-list", .args_type = "path:s", .mhandler.cmd_new = qmp_marshal_input_qom_list, }, qmp.c +28 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "qmp-commands.h" #include "kvm.h" #include "arch_init.h" #include "hw/qdev.h" NameInfo *qmp_query_name(Error **errp) { Loading Loading @@ -154,3 +155,30 @@ void qmp_cont(Error **errp) vm_start(); } DevicePropertyInfoList *qmp_qom_list(const char *path, Error **errp) { DeviceState *dev; bool ambiguous = false; DevicePropertyInfoList *props = NULL; DeviceProperty *prop; dev = qdev_resolve_path(path, &ambiguous); if (dev == NULL) { error_set(errp, QERR_DEVICE_NOT_FOUND, path); return NULL; } QTAILQ_FOREACH(prop, &dev->properties, node) { DevicePropertyInfoList *entry = g_malloc0(sizeof(*entry)); entry->value = g_malloc0(sizeof(DevicePropertyInfo)); entry->next = props; props = entry; entry->value->name = g_strdup(prop->name); entry->value->type = g_strdup(prop->type); } return props; } Loading
qapi-schema.json +48 −0 Original line number Diff line number Diff line Loading @@ -1168,3 +1168,51 @@ # Since: 0.14.0 ## { 'command': 'migrate_set_speed', 'data': {'value': 'int'} } ## # @DevicePropertyInfo: # # @name: the name of the property # # @type: the type of the property. This will typically come in one of four # forms: # # 1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'. # These types are mapped to the appropriate JSON type. # # 2) A legacy type in the form 'legacy<subtype>' where subtype is the # legacy qdev typename. These types are always treated as strings. # # 3) A child type in the form 'child<subtype>' where subtype is a qdev # device type name. Child properties create the composition tree. # # 4) A link type in the form 'link<subtype>' where subtype is a qdev # device type name. Link properties form the device model graph. # # Since: 1.1 # # Notes: This type is experimental. Its syntax may change in future releases. ## { 'type': 'DevicePropertyInfo', 'data': { 'name': 'str', 'type': 'str' } } ## # @qom-list: # # This command will list any properties of a device given a path in the device # model. # # @path: the path within the device model. See @qom-get for a description of # this parameter. # # Returns: a list of @DevicePropertyInfo that describe the properties of the # device. # # Since: 1.1 # # Notes: This command is experimental. It's syntax may change in future # releases. ## { 'command': 'qom-list', 'data': { 'path': 'str' }, 'returns': [ 'DevicePropertyInfo' ] }
qmp-commands.hx +6 −0 Original line number Diff line number Diff line Loading @@ -2009,3 +2009,9 @@ EQMP .args_type = "", .mhandler.cmd_new = qmp_marshal_input_query_balloon, }, { .name = "qom-list", .args_type = "path:s", .mhandler.cmd_new = qmp_marshal_input_qom_list, },
qmp.c +28 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "qmp-commands.h" #include "kvm.h" #include "arch_init.h" #include "hw/qdev.h" NameInfo *qmp_query_name(Error **errp) { Loading Loading @@ -154,3 +155,30 @@ void qmp_cont(Error **errp) vm_start(); } DevicePropertyInfoList *qmp_qom_list(const char *path, Error **errp) { DeviceState *dev; bool ambiguous = false; DevicePropertyInfoList *props = NULL; DeviceProperty *prop; dev = qdev_resolve_path(path, &ambiguous); if (dev == NULL) { error_set(errp, QERR_DEVICE_NOT_FOUND, path); return NULL; } QTAILQ_FOREACH(prop, &dev->properties, node) { DevicePropertyInfoList *entry = g_malloc0(sizeof(*entry)); entry->value = g_malloc0(sizeof(DevicePropertyInfo)); entry->next = props; props = entry; entry->value->name = g_strdup(prop->name); entry->value->type = g_strdup(prop->type); } return props; }