1 # -*- Mode: Python -*- 2 # 3 # This work is licensed under the terms of the GNU GPL, version 2 or later. 4 # See the COPYING file in the top-level directory. 5 6 ## 7 # = QEMU Object Model (QOM) 8 ## 9 10 ## 11 # @ObjectPropertyInfo: 12 # 13 # @name: the name of the property 14 # 15 # @type: the type of the property. This will typically come in one of four 16 # forms: 17 # 18 # 1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'. 19 # These types are mapped to the appropriate JSON type. 20 # 21 # 2) A child type in the form 'child<subtype>' where subtype is a qdev 22 # device type name. Child properties create the composition tree. 23 # 24 # 3) A link type in the form 'link<subtype>' where subtype is a qdev 25 # device type name. Link properties form the device model graph. 26 # 27 # @description: if specified, the description of the property. 28 # 29 # @default-value: the default value, if any (since 5.0) 30 # 31 # Since: 1.2 32 ## 33 { 'struct': 'ObjectPropertyInfo', 34 'data': { 'name': 'str', 35 'type': 'str', 36 '*description': 'str', 37 '*default-value': 'any' } } 38 39 ## 40 # @qom-list: 41 # 42 # This command will list any properties of a object given a path in the object 43 # model. 44 # 45 # @path: the path within the object model. See @qom-get for a description of 46 # this parameter. 47 # 48 # Returns: a list of @ObjectPropertyInfo that describe the properties of the 49 # object. 50 # 51 # Since: 1.2 52 # 53 # Example: 54 # 55 # -> { "execute": "qom-list", 56 # "arguments": { "path": "/chardevs" } } 57 # <- { "return": [ { "name": "type", "type": "string" }, 58 # { "name": "parallel0", "type": "child<chardev-vc>" }, 59 # { "name": "serial0", "type": "child<chardev-vc>" }, 60 # { "name": "mon0", "type": "child<chardev-stdio>" } ] } 61 # 62 ## 63 { 'command': 'qom-list', 64 'data': { 'path': 'str' }, 65 'returns': [ 'ObjectPropertyInfo' ], 66 'allow-preconfig': true } 67 68 ## 69 # @qom-get: 70 # 71 # This command will get a property from a object model path and return the 72 # value. 73 # 74 # @path: The path within the object model. There are two forms of supported 75 # paths--absolute and partial paths. 76 # 77 # Absolute paths are derived from the root object and can follow child<> 78 # or link<> properties. Since they can follow link<> properties, they 79 # can be arbitrarily long. Absolute paths look like absolute filenames 80 # and are prefixed with a leading slash. 81 # 82 # Partial paths look like relative filenames. They do not begin 83 # with a prefix. The matching rules for partial paths are subtle but 84 # designed to make specifying objects easy. At each level of the 85 # composition tree, the partial path is matched as an absolute path. 86 # The first match is not returned. At least two matches are searched 87 # for. A successful result is only returned if only one match is 88 # found. If more than one match is found, a flag is return to 89 # indicate that the match was ambiguous. 90 # 91 # @property: The property name to read 92 # 93 # Returns: The property value. The type depends on the property 94 # type. child<> and link<> properties are returned as #str 95 # pathnames. All integer property types (u8, u16, etc) are 96 # returned as #int. 97 # 98 # Since: 1.2 99 # 100 # Example: 101 # 102 # 1. Use absolute path 103 # 104 # -> { "execute": "qom-get", 105 # "arguments": { "path": "/machine/unattached/device[0]", 106 # "property": "hotplugged" } } 107 # <- { "return": false } 108 # 109 # 2. Use partial path 110 # 111 # -> { "execute": "qom-get", 112 # "arguments": { "path": "unattached/sysbus", 113 # "property": "type" } } 114 # <- { "return": "System" } 115 # 116 ## 117 { 'command': 'qom-get', 118 'data': { 'path': 'str', 'property': 'str' }, 119 'returns': 'any', 120 'allow-preconfig': true } 121 122 ## 123 # @qom-set: 124 # 125 # This command will set a property from a object model path. 126 # 127 # @path: see @qom-get for a description of this parameter 128 # 129 # @property: the property name to set 130 # 131 # @value: a value who's type is appropriate for the property type. See @qom-get 132 # for a description of type mapping. 133 # 134 # Since: 1.2 135 # 136 # Example: 137 # 138 # -> { "execute": "qom-set", 139 # "arguments": { "path": "/machine", 140 # "property": "graphics", 141 # "value": false } } 142 # <- { "return": {} } 143 # 144 ## 145 { 'command': 'qom-set', 146 'data': { 'path': 'str', 'property': 'str', 'value': 'any' }, 147 'allow-preconfig': true } 148 149 ## 150 # @ObjectTypeInfo: 151 # 152 # This structure describes a search result from @qom-list-types 153 # 154 # @name: the type name found in the search 155 # 156 # @abstract: the type is abstract and can't be directly instantiated. 157 # Omitted if false. (since 2.10) 158 # 159 # @parent: Name of parent type, if any (since 2.10) 160 # 161 # Since: 1.1 162 ## 163 { 'struct': 'ObjectTypeInfo', 164 'data': { 'name': 'str', '*abstract': 'bool', '*parent': 'str' } } 165 166 ## 167 # @qom-list-types: 168 # 169 # This command will return a list of types given search parameters 170 # 171 # @implements: if specified, only return types that implement this type name 172 # 173 # @abstract: if true, include abstract types in the results 174 # 175 # Returns: a list of @ObjectTypeInfo or an empty list if no results are found 176 # 177 # Since: 1.1 178 ## 179 { 'command': 'qom-list-types', 180 'data': { '*implements': 'str', '*abstract': 'bool' }, 181 'returns': [ 'ObjectTypeInfo' ], 182 'allow-preconfig': true } 183 184 ## 185 # @qom-list-properties: 186 # 187 # List properties associated with a QOM object. 188 # 189 # @typename: the type name of an object 190 # 191 # Note: objects can create properties at runtime, for example to describe 192 # links between different devices and/or objects. These properties 193 # are not included in the output of this command. 194 # 195 # Returns: a list of ObjectPropertyInfo describing object properties 196 # 197 # Since: 2.12 198 ## 199 { 'command': 'qom-list-properties', 200 'data': { 'typename': 'str'}, 201 'returns': [ 'ObjectPropertyInfo' ], 202 'allow-preconfig': true } 203 204 ## 205 # @object-add: 206 # 207 # Create a QOM object. 208 # 209 # @qom-type: the class name for the object to be created 210 # 211 # @id: the name of the new object 212 # 213 # @props: a dictionary of properties to be passed to the backend 214 # 215 # Returns: Nothing on success 216 # Error if @qom-type is not a valid class name 217 # 218 # Since: 2.0 219 # 220 # Example: 221 # 222 # -> { "execute": "object-add", 223 # "arguments": { "qom-type": "rng-random", "id": "rng1", 224 # "props": { "filename": "/dev/hwrng" } } } 225 # <- { "return": {} } 226 # 227 ## 228 { 'command': 'object-add', 229 'data': {'qom-type': 'str', 'id': 'str', '*props': 'any'} } 230 231 ## 232 # @object-del: 233 # 234 # Remove a QOM object. 235 # 236 # @id: the name of the QOM object to remove 237 # 238 # Returns: Nothing on success 239 # Error if @id is not a valid id for a QOM object 240 # 241 # Since: 2.0 242 # 243 # Example: 244 # 245 # -> { "execute": "object-del", "arguments": { "id": "rng1" } } 246 # <- { "return": {} } 247 # 248 ## 249 { 'command': 'object-del', 'data': {'id': 'str'} } 250