1# -*- Mode: Python -*- 2# vim: filetype=python 3# 4# This work is licensed under the terms of the GNU GPL, version 2 or later. 5# See the COPYING file in the top-level directory. 6 7## 8# = Machines 9## 10 11{ 'include': 'common.json' } 12{ 'include': 'machine-common.json' } 13 14## 15# @SysEmuTarget: 16# 17# The comprehensive enumeration of QEMU system emulation ("softmmu") 18# targets. Run "./configure --help" in the project root directory, 19# and look for the \*-softmmu targets near the "--target-list" option. 20# The individual target constants are not documented here, for the 21# time being. 22# 23# @rx: since 5.0 24# 25# @avr: since 5.1 26# 27# Notes: The resulting QMP strings can be appended to the 28# "qemu-system-" prefix to produce the corresponding QEMU 29# executable name. This is true even for "qemu-system-x86_64". 30# 31# Since: 3.0 32## 33{ 'enum' : 'SysEmuTarget', 34 'data' : [ 'aarch64', 'alpha', 'arm', 'avr', 'cris', 'hppa', 'i386', 35 'loongarch64', 'm68k', 'microblaze', 'microblazeel', 'mips', 'mips64', 36 'mips64el', 'mipsel', 'nios2', 'or1k', 'ppc', 37 'ppc64', 'riscv32', 'riscv64', 'rx', 's390x', 'sh4', 38 'sh4eb', 'sparc', 'sparc64', 'tricore', 39 'x86_64', 'xtensa', 'xtensaeb' ] } 40 41## 42# @CpuS390State: 43# 44# An enumeration of cpu states that can be assumed by a virtual S390 45# CPU 46# 47# Since: 2.12 48## 49{ 'enum': 'CpuS390State', 50 'prefix': 'S390_CPU_STATE', 51 'data': [ 'uninitialized', 'stopped', 'check-stop', 'operating', 'load' ] } 52 53## 54# @CpuInfoS390: 55# 56# Additional information about a virtual S390 CPU 57# 58# @cpu-state: the virtual CPU's state 59# 60# Since: 2.12 61## 62{ 'struct': 'CpuInfoS390', 'data': { 'cpu-state': 'CpuS390State' } } 63 64## 65# @CpuInfoFast: 66# 67# Information about a virtual CPU 68# 69# @cpu-index: index of the virtual CPU 70# 71# @qom-path: path to the CPU object in the QOM tree 72# 73# @thread-id: ID of the underlying host thread 74# 75# @props: properties associated with a virtual CPU, e.g. the socket id 76# 77# @target: the QEMU system emulation target, which determines which 78# additional fields will be listed (since 3.0) 79# 80# Since: 2.12 81## 82{ 'union' : 'CpuInfoFast', 83 'base' : { 'cpu-index' : 'int', 84 'qom-path' : 'str', 85 'thread-id' : 'int', 86 '*props' : 'CpuInstanceProperties', 87 'target' : 'SysEmuTarget' }, 88 'discriminator' : 'target', 89 'data' : { 's390x' : 'CpuInfoS390' } } 90 91## 92# @query-cpus-fast: 93# 94# Returns information about all virtual CPUs. 95# 96# Returns: list of @CpuInfoFast 97# 98# Since: 2.12 99# 100# Example: 101# 102# -> { "execute": "query-cpus-fast" } 103# <- { "return": [ 104# { 105# "thread-id": 25627, 106# "props": { 107# "core-id": 0, 108# "thread-id": 0, 109# "socket-id": 0 110# }, 111# "qom-path": "/machine/unattached/device[0]", 112# "target":"x86_64", 113# "cpu-index": 0 114# }, 115# { 116# "thread-id": 25628, 117# "props": { 118# "core-id": 0, 119# "thread-id": 0, 120# "socket-id": 1 121# }, 122# "qom-path": "/machine/unattached/device[2]", 123# "target":"x86_64", 124# "cpu-index": 1 125# } 126# ] 127# } 128## 129{ 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] } 130 131## 132# @MachineInfo: 133# 134# Information describing a machine. 135# 136# @name: the name of the machine 137# 138# @alias: an alias for the machine name 139# 140# @is-default: whether the machine is default 141# 142# @cpu-max: maximum number of CPUs supported by the machine type 143# (since 1.5) 144# 145# @hotpluggable-cpus: cpu hotplug via -device is supported (since 2.7) 146# 147# @numa-mem-supported: true if '-numa node,mem' option is supported by 148# the machine type and false otherwise (since 4.1) 149# 150# @deprecated: if true, the machine type is deprecated and may be 151# removed in future versions of QEMU according to the QEMU 152# deprecation policy (since 4.1) 153# 154# @default-cpu-type: default CPU model typename if none is requested 155# via the -cpu argument. (since 4.2) 156# 157# @default-ram-id: the default ID of initial RAM memory backend (since 158# 5.2) 159# 160# @acpi: machine type supports ACPI (since 8.0) 161# 162# Since: 1.2 163## 164{ 'struct': 'MachineInfo', 165 'data': { 'name': 'str', '*alias': 'str', 166 '*is-default': 'bool', 'cpu-max': 'int', 167 'hotpluggable-cpus': 'bool', 'numa-mem-supported': 'bool', 168 'deprecated': 'bool', '*default-cpu-type': 'str', 169 '*default-ram-id': 'str', 'acpi': 'bool' } } 170 171## 172# @query-machines: 173# 174# Return a list of supported machines 175# 176# Returns: a list of MachineInfo 177# 178# Since: 1.2 179## 180{ 'command': 'query-machines', 'returns': ['MachineInfo'] } 181 182## 183# @CurrentMachineParams: 184# 185# Information describing the running machine parameters. 186# 187# @wakeup-suspend-support: true if the machine supports wake up from 188# suspend 189# 190# Since: 4.0 191## 192{ 'struct': 'CurrentMachineParams', 193 'data': { 'wakeup-suspend-support': 'bool'} } 194 195## 196# @query-current-machine: 197# 198# Return information on the current virtual machine. 199# 200# Returns: CurrentMachineParams 201# 202# Since: 4.0 203## 204{ 'command': 'query-current-machine', 'returns': 'CurrentMachineParams' } 205 206## 207# @TargetInfo: 208# 209# Information describing the QEMU target. 210# 211# @arch: the target architecture 212# 213# Since: 1.2 214## 215{ 'struct': 'TargetInfo', 216 'data': { 'arch': 'SysEmuTarget' } } 217 218## 219# @query-target: 220# 221# Return information about the target for this QEMU 222# 223# Returns: TargetInfo 224# 225# Since: 1.2 226## 227{ 'command': 'query-target', 'returns': 'TargetInfo' } 228 229## 230# @UuidInfo: 231# 232# Guest UUID information (Universally Unique Identifier). 233# 234# @UUID: the UUID of the guest 235# 236# Since: 0.14 237# 238# Notes: If no UUID was specified for the guest, a null UUID is 239# returned. 240## 241{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} } 242 243## 244# @query-uuid: 245# 246# Query the guest UUID information. 247# 248# Returns: The @UuidInfo for the guest 249# 250# Since: 0.14 251# 252# Example: 253# 254# -> { "execute": "query-uuid" } 255# <- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } } 256## 257{ 'command': 'query-uuid', 'returns': 'UuidInfo', 'allow-preconfig': true } 258 259## 260# @GuidInfo: 261# 262# GUID information. 263# 264# @guid: the globally unique identifier 265# 266# Since: 2.9 267## 268{ 'struct': 'GuidInfo', 'data': {'guid': 'str'} } 269 270## 271# @query-vm-generation-id: 272# 273# Show Virtual Machine Generation ID 274# 275# Since: 2.9 276## 277{ 'command': 'query-vm-generation-id', 'returns': 'GuidInfo' } 278 279## 280# @system_reset: 281# 282# Performs a hard reset of a guest. 283# 284# Since: 0.14 285# 286# Example: 287# 288# -> { "execute": "system_reset" } 289# <- { "return": {} } 290## 291{ 'command': 'system_reset' } 292 293## 294# @system_powerdown: 295# 296# Requests that a guest perform a powerdown operation. 297# 298# Since: 0.14 299# 300# Notes: A guest may or may not respond to this command. This command 301# returning does not indicate that a guest has accepted the 302# request or that it has shut down. Many guests will respond to 303# this command by prompting the user in some way. 304# 305# Example: 306# 307# -> { "execute": "system_powerdown" } 308# <- { "return": {} } 309## 310{ 'command': 'system_powerdown' } 311 312## 313# @system_wakeup: 314# 315# Wake up guest from suspend. If the guest has wake-up from suspend 316# support enabled (wakeup-suspend-support flag from 317# query-current-machine), wake-up guest from suspend if the guest is 318# in SUSPENDED state. Return an error otherwise. 319# 320# Since: 1.1 321# 322# Returns: nothing. 323# 324# Note: prior to 4.0, this command does nothing in case the guest 325# isn't suspended. 326# 327# Example: 328# 329# -> { "execute": "system_wakeup" } 330# <- { "return": {} } 331## 332{ 'command': 'system_wakeup' } 333 334## 335# @LostTickPolicy: 336# 337# Policy for handling lost ticks in timer devices. Ticks end up 338# getting lost when, for example, the guest is paused. 339# 340# @discard: throw away the missed ticks and continue with future 341# injection normally. The guest OS will see the timer jump ahead 342# by a potentially quite significant amount all at once, as if the 343# intervening chunk of time had simply not existed; needless to 344# say, such a sudden jump can easily confuse a guest OS which is 345# not specifically prepared to deal with it. Assuming the guest 346# OS can deal correctly with the time jump, the time in the guest 347# and in the host should now match. 348# 349# @delay: continue to deliver ticks at the normal rate. The guest OS 350# will not notice anything is amiss, as from its point of view 351# time will have continued to flow normally. The time in the 352# guest should now be behind the time in the host by exactly the 353# amount of time during which ticks have been missed. 354# 355# @slew: deliver ticks at a higher rate to catch up with the missed 356# ticks. The guest OS will not notice anything is amiss, as from 357# its point of view time will have continued to flow normally. 358# Once the timer has managed to catch up with all the missing 359# ticks, the time in the guest and in the host should match. 360# 361# Since: 2.0 362## 363{ 'enum': 'LostTickPolicy', 364 'data': ['discard', 'delay', 'slew' ] } 365 366## 367# @inject-nmi: 368# 369# Injects a Non-Maskable Interrupt into the default CPU (x86/s390) or 370# all CPUs (ppc64). The command fails when the guest doesn't support 371# injecting. 372# 373# Returns: If successful, nothing 374# 375# Since: 0.14 376# 377# Note: prior to 2.1, this command was only supported for x86 and s390 378# VMs 379# 380# Example: 381# 382# -> { "execute": "inject-nmi" } 383# <- { "return": {} } 384## 385{ 'command': 'inject-nmi' } 386 387## 388# @KvmInfo: 389# 390# Information about support for KVM acceleration 391# 392# @enabled: true if KVM acceleration is active 393# 394# @present: true if KVM acceleration is built into this executable 395# 396# Since: 0.14 397## 398{ 'struct': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} } 399 400## 401# @query-kvm: 402# 403# Returns information about KVM acceleration 404# 405# Returns: @KvmInfo 406# 407# Since: 0.14 408# 409# Example: 410# 411# -> { "execute": "query-kvm" } 412# <- { "return": { "enabled": true, "present": true } } 413## 414{ 'command': 'query-kvm', 'returns': 'KvmInfo' } 415 416## 417# @NumaOptionsType: 418# 419# @node: NUMA nodes configuration 420# 421# @dist: NUMA distance configuration (since 2.10) 422# 423# @cpu: property based CPU(s) to node mapping (Since: 2.10) 424# 425# @hmat-lb: memory latency and bandwidth information (Since: 5.0) 426# 427# @hmat-cache: memory side cache information (Since: 5.0) 428# 429# Since: 2.1 430## 431{ 'enum': 'NumaOptionsType', 432 'data': [ 'node', 'dist', 'cpu', 'hmat-lb', 'hmat-cache' ] } 433 434## 435# @NumaOptions: 436# 437# A discriminated record of NUMA options. (for OptsVisitor) 438# 439# Since: 2.1 440## 441{ 'union': 'NumaOptions', 442 'base': { 'type': 'NumaOptionsType' }, 443 'discriminator': 'type', 444 'data': { 445 'node': 'NumaNodeOptions', 446 'dist': 'NumaDistOptions', 447 'cpu': 'NumaCpuOptions', 448 'hmat-lb': 'NumaHmatLBOptions', 449 'hmat-cache': 'NumaHmatCacheOptions' }} 450 451## 452# @NumaNodeOptions: 453# 454# Create a guest NUMA node. (for OptsVisitor) 455# 456# @nodeid: NUMA node ID (increase by 1 from 0 if omitted) 457# 458# @cpus: VCPUs belonging to this node (assign VCPUS round-robin if 459# omitted) 460# 461# @mem: memory size of this node; mutually exclusive with @memdev. 462# Equally divide total memory among nodes if both @mem and @memdev 463# are omitted. 464# 465# @memdev: memory backend object. If specified for one node, it must 466# be specified for all nodes. 467# 468# @initiator: defined in ACPI 6.3 Chapter 5.2.27.3 Table 5-145, points 469# to the nodeid which has the memory controller responsible for 470# this NUMA node. This field provides additional information as 471# to the initiator node that is closest (as in directly attached) 472# to this node, and therefore has the best performance (since 5.0) 473# 474# Since: 2.1 475## 476{ 'struct': 'NumaNodeOptions', 477 'data': { 478 '*nodeid': 'uint16', 479 '*cpus': ['uint16'], 480 '*mem': 'size', 481 '*memdev': 'str', 482 '*initiator': 'uint16' }} 483 484## 485# @NumaDistOptions: 486# 487# Set the distance between 2 NUMA nodes. 488# 489# @src: source NUMA node. 490# 491# @dst: destination NUMA node. 492# 493# @val: NUMA distance from source node to destination node. When a 494# node is unreachable from another node, set the distance between 495# them to 255. 496# 497# Since: 2.10 498## 499{ 'struct': 'NumaDistOptions', 500 'data': { 501 'src': 'uint16', 502 'dst': 'uint16', 503 'val': 'uint8' }} 504 505## 506# @CXLFixedMemoryWindowOptions: 507# 508# Create a CXL Fixed Memory Window 509# 510# @size: Size of the Fixed Memory Window in bytes. Must be a multiple 511# of 256MiB. 512# 513# @interleave-granularity: Number of contiguous bytes for which 514# accesses will go to a given interleave target. Accepted values 515# [256, 512, 1k, 2k, 4k, 8k, 16k] 516# 517# @targets: Target root bridge IDs from -device ...,id=<ID> for each 518# root bridge. 519# 520# Since: 7.1 521## 522{ 'struct': 'CXLFixedMemoryWindowOptions', 523 'data': { 524 'size': 'size', 525 '*interleave-granularity': 'size', 526 'targets': ['str'] }} 527 528## 529# @CXLFMWProperties: 530# 531# List of CXL Fixed Memory Windows. 532# 533# @cxl-fmw: List of CXLFixedMemoryWindowOptions 534# 535# Since: 7.1 536## 537{ 'struct' : 'CXLFMWProperties', 538 'data': { 'cxl-fmw': ['CXLFixedMemoryWindowOptions'] } 539} 540 541## 542# @X86CPURegister32: 543# 544# A X86 32-bit register 545# 546# Since: 1.5 547## 548{ 'enum': 'X86CPURegister32', 549 'data': [ 'EAX', 'EBX', 'ECX', 'EDX', 'ESP', 'EBP', 'ESI', 'EDI' ] } 550 551## 552# @X86CPUFeatureWordInfo: 553# 554# Information about a X86 CPU feature word 555# 556# @cpuid-input-eax: Input EAX value for CPUID instruction for that 557# feature word 558# 559# @cpuid-input-ecx: Input ECX value for CPUID instruction for that 560# feature word 561# 562# @cpuid-register: Output register containing the feature bits 563# 564# @features: value of output register, containing the feature bits 565# 566# Since: 1.5 567## 568{ 'struct': 'X86CPUFeatureWordInfo', 569 'data': { 'cpuid-input-eax': 'int', 570 '*cpuid-input-ecx': 'int', 571 'cpuid-register': 'X86CPURegister32', 572 'features': 'int' } } 573 574## 575# @DummyForceArrays: 576# 577# Not used by QMP; hack to let us use X86CPUFeatureWordInfoList 578# internally 579# 580# Since: 2.5 581## 582{ 'struct': 'DummyForceArrays', 583 'data': { 'unused': ['X86CPUFeatureWordInfo'] } } 584 585## 586# @NumaCpuOptions: 587# 588# Option "-numa cpu" overrides default cpu to node mapping. It 589# accepts the same set of cpu properties as returned by 590# query-hotpluggable-cpus[].props, where node-id could be used to 591# override default node mapping. 592# 593# Since: 2.10 594## 595{ 'struct': 'NumaCpuOptions', 596 'base': 'CpuInstanceProperties', 597 'data' : {} } 598 599## 600# @HmatLBMemoryHierarchy: 601# 602# The memory hierarchy in the System Locality Latency and Bandwidth 603# Information Structure of HMAT (Heterogeneous Memory Attribute Table) 604# 605# For more information about @HmatLBMemoryHierarchy, see chapter 606# 5.2.27.4: Table 5-146: Field "Flags" of ACPI 6.3 spec. 607# 608# @memory: the structure represents the memory performance 609# 610# @first-level: first level of memory side cache 611# 612# @second-level: second level of memory side cache 613# 614# @third-level: third level of memory side cache 615# 616# Since: 5.0 617## 618{ 'enum': 'HmatLBMemoryHierarchy', 619 'data': [ 'memory', 'first-level', 'second-level', 'third-level' ] } 620 621## 622# @HmatLBDataType: 623# 624# Data type in the System Locality Latency and Bandwidth Information 625# Structure of HMAT (Heterogeneous Memory Attribute Table) 626# 627# For more information about @HmatLBDataType, see chapter 5.2.27.4: 628# Table 5-146: Field "Data Type" of ACPI 6.3 spec. 629# 630# @access-latency: access latency (nanoseconds) 631# 632# @read-latency: read latency (nanoseconds) 633# 634# @write-latency: write latency (nanoseconds) 635# 636# @access-bandwidth: access bandwidth (Bytes per second) 637# 638# @read-bandwidth: read bandwidth (Bytes per second) 639# 640# @write-bandwidth: write bandwidth (Bytes per second) 641# 642# Since: 5.0 643## 644{ 'enum': 'HmatLBDataType', 645 'data': [ 'access-latency', 'read-latency', 'write-latency', 646 'access-bandwidth', 'read-bandwidth', 'write-bandwidth' ] } 647 648## 649# @NumaHmatLBOptions: 650# 651# Set the system locality latency and bandwidth information between 652# Initiator and Target proximity Domains. 653# 654# For more information about @NumaHmatLBOptions, see chapter 5.2.27.4: 655# Table 5-146 of ACPI 6.3 spec. 656# 657# @initiator: the Initiator Proximity Domain. 658# 659# @target: the Target Proximity Domain. 660# 661# @hierarchy: the Memory Hierarchy. Indicates the performance of 662# memory or side cache. 663# 664# @data-type: presents the type of data, access/read/write latency or 665# hit latency. 666# 667# @latency: the value of latency from @initiator to @target proximity 668# domain, the latency unit is "ns(nanosecond)". 669# 670# @bandwidth: the value of bandwidth between @initiator and @target 671# proximity domain, the bandwidth unit is "Bytes per second". 672# 673# Since: 5.0 674## 675{ 'struct': 'NumaHmatLBOptions', 676 'data': { 677 'initiator': 'uint16', 678 'target': 'uint16', 679 'hierarchy': 'HmatLBMemoryHierarchy', 680 'data-type': 'HmatLBDataType', 681 '*latency': 'uint64', 682 '*bandwidth': 'size' }} 683 684## 685# @HmatCacheAssociativity: 686# 687# Cache associativity in the Memory Side Cache Information Structure 688# of HMAT 689# 690# For more information of @HmatCacheAssociativity, see chapter 691# 5.2.27.5: Table 5-147 of ACPI 6.3 spec. 692# 693# @none: None (no memory side cache in this proximity domain, or cache 694# associativity unknown) 695# 696# @direct: Direct Mapped 697# 698# @complex: Complex Cache Indexing (implementation specific) 699# 700# Since: 5.0 701## 702{ 'enum': 'HmatCacheAssociativity', 703 'data': [ 'none', 'direct', 'complex' ] } 704 705## 706# @HmatCacheWritePolicy: 707# 708# Cache write policy in the Memory Side Cache Information Structure of 709# HMAT 710# 711# For more information of @HmatCacheWritePolicy, see chapter 5.2.27.5: 712# Table 5-147: Field "Cache Attributes" of ACPI 6.3 spec. 713# 714# @none: None (no memory side cache in this proximity domain, or cache 715# write policy unknown) 716# 717# @write-back: Write Back (WB) 718# 719# @write-through: Write Through (WT) 720# 721# Since: 5.0 722## 723{ 'enum': 'HmatCacheWritePolicy', 724 'data': [ 'none', 'write-back', 'write-through' ] } 725 726## 727# @NumaHmatCacheOptions: 728# 729# Set the memory side cache information for a given memory domain. 730# 731# For more information of @NumaHmatCacheOptions, see chapter 5.2.27.5: 732# Table 5-147: Field "Cache Attributes" of ACPI 6.3 spec. 733# 734# @node-id: the memory proximity domain to which the memory belongs. 735# 736# @size: the size of memory side cache in bytes. 737# 738# @level: the cache level described in this structure. 739# 740# @associativity: the cache associativity, 741# none/direct-mapped/complex(complex cache indexing). 742# 743# @policy: the write policy, none/write-back/write-through. 744# 745# @line: the cache Line size in bytes. 746# 747# Since: 5.0 748## 749{ 'struct': 'NumaHmatCacheOptions', 750 'data': { 751 'node-id': 'uint32', 752 'size': 'size', 753 'level': 'uint8', 754 'associativity': 'HmatCacheAssociativity', 755 'policy': 'HmatCacheWritePolicy', 756 'line': 'uint16' }} 757 758## 759# @memsave: 760# 761# Save a portion of guest memory to a file. 762# 763# @val: the virtual address of the guest to start from 764# 765# @size: the size of memory region to save 766# 767# @filename: the file to save the memory to as binary data 768# 769# @cpu-index: the index of the virtual CPU to use for translating the 770# virtual address (defaults to CPU 0) 771# 772# Returns: Nothing on success 773# 774# Since: 0.14 775# 776# Notes: Errors were not reliably returned until 1.1 777# 778# Example: 779# 780# -> { "execute": "memsave", 781# "arguments": { "val": 10, 782# "size": 100, 783# "filename": "/tmp/virtual-mem-dump" } } 784# <- { "return": {} } 785## 786{ 'command': 'memsave', 787 'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} } 788 789## 790# @pmemsave: 791# 792# Save a portion of guest physical memory to a file. 793# 794# @val: the physical address of the guest to start from 795# 796# @size: the size of memory region to save 797# 798# @filename: the file to save the memory to as binary data 799# 800# Returns: Nothing on success 801# 802# Since: 0.14 803# 804# Notes: Errors were not reliably returned until 1.1 805# 806# Example: 807# 808# -> { "execute": "pmemsave", 809# "arguments": { "val": 10, 810# "size": 100, 811# "filename": "/tmp/physical-mem-dump" } } 812# <- { "return": {} } 813## 814{ 'command': 'pmemsave', 815 'data': {'val': 'int', 'size': 'int', 'filename': 'str'} } 816 817## 818# @Memdev: 819# 820# Information about memory backend 821# 822# @id: backend's ID if backend has 'id' property (since 2.9) 823# 824# @size: memory backend size 825# 826# @merge: whether memory merge support is enabled 827# 828# @dump: whether memory backend's memory is included in a core dump 829# 830# @prealloc: whether memory was preallocated 831# 832# @share: whether memory is private to QEMU or shared (since 6.1) 833# 834# @reserve: whether swap space (or huge pages) was reserved if 835# applicable. This corresponds to the user configuration and not 836# the actual behavior implemented in the OS to perform the 837# reservation. For example, Linux will never reserve swap space 838# for shared file mappings. (since 6.1) 839# 840# @host-nodes: host nodes for its memory policy 841# 842# @policy: memory policy of memory backend 843# 844# Since: 2.1 845## 846{ 'struct': 'Memdev', 847 'data': { 848 '*id': 'str', 849 'size': 'size', 850 'merge': 'bool', 851 'dump': 'bool', 852 'prealloc': 'bool', 853 'share': 'bool', 854 '*reserve': 'bool', 855 'host-nodes': ['uint16'], 856 'policy': 'HostMemPolicy' }} 857 858## 859# @query-memdev: 860# 861# Returns information for all memory backends. 862# 863# Returns: a list of @Memdev. 864# 865# Since: 2.1 866# 867# Example: 868# 869# -> { "execute": "query-memdev" } 870# <- { "return": [ 871# { 872# "id": "mem1", 873# "size": 536870912, 874# "merge": false, 875# "dump": true, 876# "prealloc": false, 877# "share": false, 878# "host-nodes": [0, 1], 879# "policy": "bind" 880# }, 881# { 882# "size": 536870912, 883# "merge": false, 884# "dump": true, 885# "prealloc": true, 886# "share": false, 887# "host-nodes": [2, 3], 888# "policy": "preferred" 889# } 890# ] 891# } 892## 893{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true } 894 895## 896# @CpuInstanceProperties: 897# 898# List of properties to be used for hotplugging a CPU instance, it 899# should be passed by management with device_add command when a CPU is 900# being hotplugged. 901# 902# Which members are optional and which mandatory depends on the 903# architecture and board. 904# 905# The ids other than the node-id specify the position of the CPU 906# within the CPU topology (as defined by the machine property "smp", 907# thus see also type @SMPConfiguration) 908# 909# @node-id: NUMA node ID the CPU belongs to 910# 911# @drawer-id: drawer number within CPU topology the CPU belongs to 912# (since 8.2) 913# 914# @book-id: book number within parent container the CPU belongs to 915# (since 8.2) 916# 917# @socket-id: socket number within parent container the CPU belongs to 918# 919# @die-id: die number within the parent container the CPU belongs to 920# (since 4.1) 921# 922# @cluster-id: cluster number within the parent container the CPU 923# belongs to (since 7.1) 924# 925# @core-id: core number within the parent container the CPU 926# belongs to 927# 928# @thread-id: thread number within the core the CPU belongs to 929# 930# Note: management should be prepared to pass through additional 931# properties with device_add. 932# 933# Since: 2.7 934## 935{ 'struct': 'CpuInstanceProperties', 936 # Keep these in sync with the properties device_add accepts 937 'data': { '*node-id': 'int', 938 '*drawer-id': 'int', 939 '*book-id': 'int', 940 '*socket-id': 'int', 941 '*die-id': 'int', 942 '*cluster-id': 'int', 943 '*core-id': 'int', 944 '*thread-id': 'int' 945 } 946} 947 948## 949# @HotpluggableCPU: 950# 951# @type: CPU object type for usage with device_add command 952# 953# @props: list of properties to be used for hotplugging CPU 954# 955# @vcpus-count: number of logical VCPU threads @HotpluggableCPU 956# provides 957# 958# @qom-path: link to existing CPU object if CPU is present or omitted 959# if CPU is not present. 960# 961# Since: 2.7 962## 963{ 'struct': 'HotpluggableCPU', 964 'data': { 'type': 'str', 965 'vcpus-count': 'int', 966 'props': 'CpuInstanceProperties', 967 '*qom-path': 'str' 968 } 969} 970 971## 972# @query-hotpluggable-cpus: 973# 974# TODO: Better documentation; currently there is none. 975# 976# Returns: a list of HotpluggableCPU objects. 977# 978# Since: 2.7 979# 980# Examples: 981# 982# For pseries machine type started with -smp 2,cores=2,maxcpus=4 -cpu 983# POWER8: 984# 985# -> { "execute": "query-hotpluggable-cpus" } 986# <- {"return": [ 987# { "props": { "core-id": 8 }, "type": "POWER8-spapr-cpu-core", 988# "vcpus-count": 1 }, 989# { "props": { "core-id": 0 }, "type": "POWER8-spapr-cpu-core", 990# "vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"} 991# ]}' 992# 993# For pc machine type started with -smp 1,maxcpus=2: 994# 995# -> { "execute": "query-hotpluggable-cpus" } 996# <- {"return": [ 997# { 998# "type": "qemu64-x86_64-cpu", "vcpus-count": 1, 999# "props": {"core-id": 0, "socket-id": 1, "thread-id": 0} 1000# }, 1001# { 1002# "qom-path": "/machine/unattached/device[0]", 1003# "type": "qemu64-x86_64-cpu", "vcpus-count": 1, 1004# "props": {"core-id": 0, "socket-id": 0, "thread-id": 0} 1005# } 1006# ]} 1007# 1008# For s390x-virtio-ccw machine type started with -smp 1,maxcpus=2 -cpu 1009# qemu (Since: 2.11): 1010# 1011# -> { "execute": "query-hotpluggable-cpus" } 1012# <- {"return": [ 1013# { 1014# "type": "qemu-s390x-cpu", "vcpus-count": 1, 1015# "props": { "core-id": 1 } 1016# }, 1017# { 1018# "qom-path": "/machine/unattached/device[0]", 1019# "type": "qemu-s390x-cpu", "vcpus-count": 1, 1020# "props": { "core-id": 0 } 1021# } 1022# ]} 1023## 1024{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'], 1025 'allow-preconfig': true } 1026 1027## 1028# @set-numa-node: 1029# 1030# Runtime equivalent of '-numa' CLI option, available at preconfigure 1031# stage to configure numa mapping before initializing machine. 1032# 1033# Since: 3.0 1034## 1035{ 'command': 'set-numa-node', 'boxed': true, 1036 'data': 'NumaOptions', 1037 'allow-preconfig': true 1038} 1039 1040## 1041# @balloon: 1042# 1043# Request the balloon driver to change its balloon size. 1044# 1045# @value: the target logical size of the VM in bytes. We can deduce 1046# the size of the balloon using this formula: 1047# 1048# logical_vm_size = vm_ram_size - balloon_size 1049# 1050# From it we have: balloon_size = vm_ram_size - @value 1051# 1052# Returns: 1053# - Nothing on success 1054# - If the balloon driver is enabled but not functional because the 1055# KVM kernel module cannot support it, KVMMissingCap 1056# - If no balloon device is present, DeviceNotActive 1057# 1058# Notes: This command just issues a request to the guest. When it 1059# returns, the balloon size may not have changed. A guest can 1060# change the balloon size independent of this command. 1061# 1062# Since: 0.14 1063# 1064# Example: 1065# 1066# -> { "execute": "balloon", "arguments": { "value": 536870912 } } 1067# <- { "return": {} } 1068# 1069# With a 2.5GiB guest this command inflated the ballon to 3GiB. 1070## 1071{ 'command': 'balloon', 'data': {'value': 'int'} } 1072 1073## 1074# @BalloonInfo: 1075# 1076# Information about the guest balloon device. 1077# 1078# @actual: the logical size of the VM in bytes Formula used: 1079# logical_vm_size = vm_ram_size - balloon_size 1080# 1081# Since: 0.14 1082## 1083{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } } 1084 1085## 1086# @query-balloon: 1087# 1088# Return information about the balloon device. 1089# 1090# Returns: 1091# - @BalloonInfo on success 1092# - If the balloon driver is enabled but not functional because the 1093# KVM kernel module cannot support it, KVMMissingCap 1094# - If no balloon device is present, DeviceNotActive 1095# 1096# Since: 0.14 1097# 1098# Example: 1099# 1100# -> { "execute": "query-balloon" } 1101# <- { "return": { 1102# "actual": 1073741824 1103# } 1104# } 1105## 1106{ 'command': 'query-balloon', 'returns': 'BalloonInfo' } 1107 1108## 1109# @BALLOON_CHANGE: 1110# 1111# Emitted when the guest changes the actual BALLOON level. This value 1112# is equivalent to the @actual field return by the 'query-balloon' 1113# command 1114# 1115# @actual: the logical size of the VM in bytes Formula used: 1116# logical_vm_size = vm_ram_size - balloon_size 1117# 1118# Note: this event is rate-limited. 1119# 1120# Since: 1.2 1121# 1122# Example: 1123# 1124# <- { "event": "BALLOON_CHANGE", 1125# "data": { "actual": 944766976 }, 1126# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } } 1127## 1128{ 'event': 'BALLOON_CHANGE', 1129 'data': { 'actual': 'int' } } 1130 1131## 1132# @MemoryInfo: 1133# 1134# Actual memory information in bytes. 1135# 1136# @base-memory: size of "base" memory specified with command line 1137# option -m. 1138# 1139# @plugged-memory: size of memory that can be hot-unplugged. This 1140# field is omitted if target doesn't support memory hotplug (i.e. 1141# CONFIG_MEM_DEVICE not defined at build time). 1142# 1143# Since: 2.11 1144## 1145{ 'struct': 'MemoryInfo', 1146 'data' : { 'base-memory': 'size', '*plugged-memory': 'size' } } 1147 1148## 1149# @query-memory-size-summary: 1150# 1151# Return the amount of initially allocated and present hotpluggable 1152# (if enabled) memory in bytes. 1153# 1154# Example: 1155# 1156# -> { "execute": "query-memory-size-summary" } 1157# <- { "return": { "base-memory": 4294967296, "plugged-memory": 0 } } 1158# 1159# Since: 2.11 1160## 1161{ 'command': 'query-memory-size-summary', 'returns': 'MemoryInfo' } 1162 1163## 1164# @PCDIMMDeviceInfo: 1165# 1166# PCDIMMDevice state information 1167# 1168# @id: device's ID 1169# 1170# @addr: physical address, where device is mapped 1171# 1172# @size: size of memory that the device provides 1173# 1174# @slot: slot number at which device is plugged in 1175# 1176# @node: NUMA node number where device is plugged in 1177# 1178# @memdev: memory backend linked with device 1179# 1180# @hotplugged: true if device was hotplugged 1181# 1182# @hotpluggable: true if device if could be added/removed while 1183# machine is running 1184# 1185# Since: 2.1 1186## 1187{ 'struct': 'PCDIMMDeviceInfo', 1188 'data': { '*id': 'str', 1189 'addr': 'int', 1190 'size': 'int', 1191 'slot': 'int', 1192 'node': 'int', 1193 'memdev': 'str', 1194 'hotplugged': 'bool', 1195 'hotpluggable': 'bool' 1196 } 1197} 1198 1199## 1200# @VirtioPMEMDeviceInfo: 1201# 1202# VirtioPMEM state information 1203# 1204# @id: device's ID 1205# 1206# @memaddr: physical address in memory, where device is mapped 1207# 1208# @size: size of memory that the device provides 1209# 1210# @memdev: memory backend linked with device 1211# 1212# Since: 4.1 1213## 1214{ 'struct': 'VirtioPMEMDeviceInfo', 1215 'data': { '*id': 'str', 1216 'memaddr': 'size', 1217 'size': 'size', 1218 'memdev': 'str' 1219 } 1220} 1221 1222## 1223# @VirtioMEMDeviceInfo: 1224# 1225# VirtioMEMDevice state information 1226# 1227# @id: device's ID 1228# 1229# @memaddr: physical address in memory, where device is mapped 1230# 1231# @requested-size: the user requested size of the device 1232# 1233# @size: the (current) size of memory that the device provides 1234# 1235# @max-size: the maximum size of memory that the device can provide 1236# 1237# @block-size: the block size of memory that the device provides 1238# 1239# @node: NUMA node number where device is assigned to 1240# 1241# @memdev: memory backend linked with the region 1242# 1243# Since: 5.1 1244## 1245{ 'struct': 'VirtioMEMDeviceInfo', 1246 'data': { '*id': 'str', 1247 'memaddr': 'size', 1248 'requested-size': 'size', 1249 'size': 'size', 1250 'max-size': 'size', 1251 'block-size': 'size', 1252 'node': 'int', 1253 'memdev': 'str' 1254 } 1255} 1256 1257## 1258# @SgxEPCDeviceInfo: 1259# 1260# Sgx EPC state information 1261# 1262# @id: device's ID 1263# 1264# @memaddr: physical address in memory, where device is mapped 1265# 1266# @size: size of memory that the device provides 1267# 1268# @memdev: memory backend linked with device 1269# 1270# @node: the numa node (Since: 7.0) 1271# 1272# Since: 6.2 1273## 1274{ 'struct': 'SgxEPCDeviceInfo', 1275 'data': { '*id': 'str', 1276 'memaddr': 'size', 1277 'size': 'size', 1278 'node': 'int', 1279 'memdev': 'str' 1280 } 1281} 1282 1283## 1284# @MemoryDeviceInfoKind: 1285# 1286# @nvdimm: since 2.12 1287# 1288# @virtio-pmem: since 4.1 1289# 1290# @virtio-mem: since 5.1 1291# 1292# @sgx-epc: since 6.2. 1293# 1294# Since: 2.1 1295## 1296{ 'enum': 'MemoryDeviceInfoKind', 1297 'data': [ 'dimm', 'nvdimm', 'virtio-pmem', 'virtio-mem', 'sgx-epc' ] } 1298 1299## 1300# @PCDIMMDeviceInfoWrapper: 1301# 1302# Since: 2.1 1303## 1304{ 'struct': 'PCDIMMDeviceInfoWrapper', 1305 'data': { 'data': 'PCDIMMDeviceInfo' } } 1306 1307## 1308# @VirtioPMEMDeviceInfoWrapper: 1309# 1310# Since: 2.1 1311## 1312{ 'struct': 'VirtioPMEMDeviceInfoWrapper', 1313 'data': { 'data': 'VirtioPMEMDeviceInfo' } } 1314 1315## 1316# @VirtioMEMDeviceInfoWrapper: 1317# 1318# Since: 2.1 1319## 1320{ 'struct': 'VirtioMEMDeviceInfoWrapper', 1321 'data': { 'data': 'VirtioMEMDeviceInfo' } } 1322 1323## 1324# @SgxEPCDeviceInfoWrapper: 1325# 1326# Since: 6.2 1327## 1328{ 'struct': 'SgxEPCDeviceInfoWrapper', 1329 'data': { 'data': 'SgxEPCDeviceInfo' } } 1330 1331## 1332# @MemoryDeviceInfo: 1333# 1334# Union containing information about a memory device 1335# 1336# Since: 2.1 1337## 1338{ 'union': 'MemoryDeviceInfo', 1339 'base': { 'type': 'MemoryDeviceInfoKind' }, 1340 'discriminator': 'type', 1341 'data': { 'dimm': 'PCDIMMDeviceInfoWrapper', 1342 'nvdimm': 'PCDIMMDeviceInfoWrapper', 1343 'virtio-pmem': 'VirtioPMEMDeviceInfoWrapper', 1344 'virtio-mem': 'VirtioMEMDeviceInfoWrapper', 1345 'sgx-epc': 'SgxEPCDeviceInfoWrapper' 1346 } 1347} 1348 1349## 1350# @SgxEPC: 1351# 1352# Sgx EPC cmdline information 1353# 1354# @memdev: memory backend linked with device 1355# 1356# @node: the numa node (Since: 7.0) 1357# 1358# Since: 6.2 1359## 1360{ 'struct': 'SgxEPC', 1361 'data': { 'memdev': 'str', 1362 'node': 'int' 1363 } 1364} 1365 1366## 1367# @SgxEPCProperties: 1368# 1369# SGX properties of machine types. 1370# 1371# @sgx-epc: list of ids of memory-backend-epc objects. 1372# 1373# Since: 6.2 1374## 1375{ 'struct': 'SgxEPCProperties', 1376 'data': { 'sgx-epc': ['SgxEPC'] } 1377} 1378 1379## 1380# @query-memory-devices: 1381# 1382# Lists available memory devices and their state 1383# 1384# Since: 2.1 1385# 1386# Example: 1387# 1388# -> { "execute": "query-memory-devices" } 1389# <- { "return": [ { "data": 1390# { "addr": 5368709120, 1391# "hotpluggable": true, 1392# "hotplugged": true, 1393# "id": "d1", 1394# "memdev": "/objects/memX", 1395# "node": 0, 1396# "size": 1073741824, 1397# "slot": 0}, 1398# "type": "dimm" 1399# } ] } 1400## 1401{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] } 1402 1403## 1404# @MEMORY_DEVICE_SIZE_CHANGE: 1405# 1406# Emitted when the size of a memory device changes. Only emitted for 1407# memory devices that can actually change the size (e.g., virtio-mem 1408# due to guest action). 1409# 1410# @id: device's ID 1411# 1412# @size: the new size of memory that the device provides 1413# 1414# @qom-path: path to the device object in the QOM tree (since 6.2) 1415# 1416# Note: this event is rate-limited. 1417# 1418# Since: 5.1 1419# 1420# Example: 1421# 1422# <- { "event": "MEMORY_DEVICE_SIZE_CHANGE", 1423# "data": { "id": "vm0", "size": 1073741824, 1424# "qom-path": "/machine/unattached/device[2]" }, 1425# "timestamp": { "seconds": 1588168529, "microseconds": 201316 } } 1426## 1427{ 'event': 'MEMORY_DEVICE_SIZE_CHANGE', 1428 'data': { '*id': 'str', 'size': 'size', 'qom-path' : 'str'} } 1429 1430## 1431# @MEM_UNPLUG_ERROR: 1432# 1433# Emitted when memory hot unplug error occurs. 1434# 1435# @device: device name 1436# 1437# @msg: Informative message 1438# 1439# Features: 1440# 1441# @deprecated: This event is deprecated. Use 1442# @DEVICE_UNPLUG_GUEST_ERROR instead. 1443# 1444# Since: 2.4 1445# 1446# Example: 1447# 1448# <- { "event": "MEM_UNPLUG_ERROR", 1449# "data": { "device": "dimm1", 1450# "msg": "acpi: device unplug for unsupported device" 1451# }, 1452# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 1453## 1454{ 'event': 'MEM_UNPLUG_ERROR', 1455 'data': { 'device': 'str', 'msg': 'str' }, 1456 'features': ['deprecated'] } 1457 1458## 1459# @BootConfiguration: 1460# 1461# Schema for virtual machine boot configuration. 1462# 1463# @order: Boot order (a=floppy, c=hard disk, d=CD-ROM, n=network) 1464# 1465# @once: Boot order to apply on first boot 1466# 1467# @menu: Whether to show a boot menu 1468# 1469# @splash: The name of the file to be passed to the firmware as logo 1470# picture, if @menu is true. 1471# 1472# @splash-time: How long to show the logo picture, in milliseconds 1473# 1474# @reboot-timeout: Timeout before guest reboots after boot fails 1475# 1476# @strict: Whether to attempt booting from devices not included in the 1477# boot order 1478# 1479# Since: 7.1 1480## 1481{ 'struct': 'BootConfiguration', 'data': { 1482 '*order': 'str', 1483 '*once': 'str', 1484 '*menu': 'bool', 1485 '*splash': 'str', 1486 '*splash-time': 'int', 1487 '*reboot-timeout': 'int', 1488 '*strict': 'bool' } } 1489 1490## 1491# @SMPConfiguration: 1492# 1493# Schema for CPU topology configuration. A missing value lets QEMU 1494# figure out a suitable value based on the ones that are provided. 1495# 1496# The members other than @cpus and @maxcpus define a topology of 1497# containers. 1498# 1499# The ordering from highest/coarsest to lowest/finest is: 1500# @drawers, @books, @sockets, @dies, @clusters, @cores, @threads. 1501# 1502# Different architectures support different subsets of topology 1503# containers. 1504# 1505# For example, s390x does not have clusters and dies, and the socket 1506# is the parent container of cores. 1507# 1508# @cpus: number of virtual CPUs in the virtual machine 1509# 1510# @maxcpus: maximum number of hotpluggable virtual CPUs in the virtual 1511# machine 1512# 1513# @drawers: number of drawers in the CPU topology (since 8.2) 1514# 1515# @books: number of books in the CPU topology (since 8.2) 1516# 1517# @sockets: number of sockets per parent container 1518# 1519# @dies: number of dies per parent container 1520# 1521# @clusters: number of clusters per parent container (since 7.0) 1522# 1523# @cores: number of cores per parent container 1524# 1525# @threads: number of threads per core 1526# 1527# Since: 6.1 1528## 1529{ 'struct': 'SMPConfiguration', 'data': { 1530 '*cpus': 'int', 1531 '*drawers': 'int', 1532 '*books': 'int', 1533 '*sockets': 'int', 1534 '*dies': 'int', 1535 '*clusters': 'int', 1536 '*cores': 'int', 1537 '*threads': 'int', 1538 '*maxcpus': 'int' } } 1539 1540## 1541# @x-query-irq: 1542# 1543# Query interrupt statistics 1544# 1545# Features: 1546# 1547# @unstable: This command is meant for debugging. 1548# 1549# Returns: interrupt statistics 1550# 1551# Since: 6.2 1552## 1553{ 'command': 'x-query-irq', 1554 'returns': 'HumanReadableText', 1555 'features': [ 'unstable' ] } 1556 1557## 1558# @x-query-jit: 1559# 1560# Query TCG compiler statistics 1561# 1562# Features: 1563# 1564# @unstable: This command is meant for debugging. 1565# 1566# Returns: TCG compiler statistics 1567# 1568# Since: 6.2 1569## 1570{ 'command': 'x-query-jit', 1571 'returns': 'HumanReadableText', 1572 'if': 'CONFIG_TCG', 1573 'features': [ 'unstable' ] } 1574 1575## 1576# @x-query-numa: 1577# 1578# Query NUMA topology information 1579# 1580# Features: 1581# 1582# @unstable: This command is meant for debugging. 1583# 1584# Returns: topology information 1585# 1586# Since: 6.2 1587## 1588{ 'command': 'x-query-numa', 1589 'returns': 'HumanReadableText', 1590 'features': [ 'unstable' ] } 1591 1592## 1593# @x-query-opcount: 1594# 1595# Query TCG opcode counters 1596# 1597# Features: 1598# 1599# @unstable: This command is meant for debugging. 1600# 1601# Returns: TCG opcode counters 1602# 1603# Since: 6.2 1604## 1605{ 'command': 'x-query-opcount', 1606 'returns': 'HumanReadableText', 1607 'if': 'CONFIG_TCG', 1608 'features': [ 'unstable' ] } 1609 1610## 1611# @x-query-ramblock: 1612# 1613# Query system ramblock information 1614# 1615# Features: 1616# 1617# @unstable: This command is meant for debugging. 1618# 1619# Returns: system ramblock information 1620# 1621# Since: 6.2 1622## 1623{ 'command': 'x-query-ramblock', 1624 'returns': 'HumanReadableText', 1625 'features': [ 'unstable' ] } 1626 1627## 1628# @x-query-rdma: 1629# 1630# Query RDMA state 1631# 1632# Features: 1633# 1634# @unstable: This command is meant for debugging. 1635# 1636# Returns: RDMA state 1637# 1638# Since: 6.2 1639## 1640{ 'command': 'x-query-rdma', 1641 'returns': 'HumanReadableText', 1642 'features': [ 'unstable' ] } 1643 1644## 1645# @x-query-roms: 1646# 1647# Query information on the registered ROMS 1648# 1649# Features: 1650# 1651# @unstable: This command is meant for debugging. 1652# 1653# Returns: registered ROMs 1654# 1655# Since: 6.2 1656## 1657{ 'command': 'x-query-roms', 1658 'returns': 'HumanReadableText', 1659 'features': [ 'unstable' ] } 1660 1661## 1662# @x-query-usb: 1663# 1664# Query information on the USB devices 1665# 1666# Features: 1667# 1668# @unstable: This command is meant for debugging. 1669# 1670# Returns: USB device information 1671# 1672# Since: 6.2 1673## 1674{ 'command': 'x-query-usb', 1675 'returns': 'HumanReadableText', 1676 'features': [ 'unstable' ] } 1677 1678## 1679# @SmbiosEntryPointType: 1680# 1681# @32: SMBIOS version 2.1 (32-bit) Entry Point 1682# 1683# @64: SMBIOS version 3.0 (64-bit) Entry Point 1684# 1685# Since: 7.0 1686## 1687{ 'enum': 'SmbiosEntryPointType', 1688 'data': [ '32', '64' ] } 1689 1690## 1691# @MemorySizeConfiguration: 1692# 1693# Schema for memory size configuration. 1694# 1695# @size: memory size in bytes 1696# 1697# @max-size: maximum hotpluggable memory size in bytes 1698# 1699# @slots: number of available memory slots for hotplug 1700# 1701# Since: 7.1 1702## 1703{ 'struct': 'MemorySizeConfiguration', 'data': { 1704 '*size': 'size', 1705 '*max-size': 'size', 1706 '*slots': 'uint64' } } 1707 1708## 1709# @dumpdtb: 1710# 1711# Save the FDT in dtb format. 1712# 1713# @filename: name of the dtb file to be created 1714# 1715# Since: 7.2 1716# 1717# Example: 1718# 1719# -> { "execute": "dumpdtb" } 1720# "arguments": { "filename": "fdt.dtb" } } 1721# <- { "return": {} } 1722## 1723{ 'command': 'dumpdtb', 1724 'data': { 'filename': 'str' }, 1725 'if': 'CONFIG_FDT' } 1726