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