a66bd91f03
The SGX NUMA patches were merged into Qemu 7.0 release, we need clarify detailed version history information and also change some related comments, which make SGX related comments clearer. The QMP command schema promises backwards compatibility as standard. We temporarily restore "@section-size", which can avoid incompatible API breakage. The "@section-size" will be deprecated in 7.2 version. Suggested-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Yang Zhong <yang.zhong@intel.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20220120223104.437161-1-yang.zhong@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
427 lines
9.5 KiB
Python
427 lines
9.5 KiB
Python
# -*- Mode: Python -*-
|
|
# vim: filetype=python
|
|
#
|
|
|
|
##
|
|
# @RTC_CHANGE:
|
|
#
|
|
# Emitted when the guest changes the RTC time.
|
|
#
|
|
# @offset: offset between base RTC clock (as specified by -rtc base), and
|
|
# new RTC clock value
|
|
#
|
|
# Note: This event is rate-limited.
|
|
#
|
|
# Since: 0.13
|
|
#
|
|
# Example:
|
|
#
|
|
# <- { "event": "RTC_CHANGE",
|
|
# "data": { "offset": 78 },
|
|
# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
|
|
#
|
|
##
|
|
{ 'event': 'RTC_CHANGE',
|
|
'data': { 'offset': 'int' },
|
|
'if': { 'any': [ 'TARGET_ALPHA',
|
|
'TARGET_ARM',
|
|
'TARGET_HPPA',
|
|
'TARGET_I386',
|
|
'TARGET_MIPS',
|
|
'TARGET_MIPS64',
|
|
'TARGET_PPC',
|
|
'TARGET_PPC64',
|
|
'TARGET_S390X',
|
|
'TARGET_SH4',
|
|
'TARGET_SPARC' ] } }
|
|
|
|
##
|
|
# @rtc-reset-reinjection:
|
|
#
|
|
# This command will reset the RTC interrupt reinjection backlog.
|
|
# Can be used if another mechanism to synchronize guest time
|
|
# is in effect, for example QEMU guest agent's guest-set-time
|
|
# command.
|
|
#
|
|
# Since: 2.1
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "rtc-reset-reinjection" }
|
|
# <- { "return": {} }
|
|
#
|
|
##
|
|
{ 'command': 'rtc-reset-reinjection',
|
|
'if': 'TARGET_I386' }
|
|
|
|
|
|
##
|
|
# @SevState:
|
|
#
|
|
# An enumeration of SEV state information used during @query-sev.
|
|
#
|
|
# @uninit: The guest is uninitialized.
|
|
#
|
|
# @launch-update: The guest is currently being launched; plaintext data and
|
|
# register state is being imported.
|
|
#
|
|
# @launch-secret: The guest is currently being launched; ciphertext data
|
|
# is being imported.
|
|
#
|
|
# @running: The guest is fully launched or migrated in.
|
|
#
|
|
# @send-update: The guest is currently being migrated out to another machine.
|
|
#
|
|
# @receive-update: The guest is currently being migrated from another machine.
|
|
#
|
|
# Since: 2.12
|
|
##
|
|
{ 'enum': 'SevState',
|
|
'data': ['uninit', 'launch-update', 'launch-secret', 'running',
|
|
'send-update', 'receive-update' ],
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @SevInfo:
|
|
#
|
|
# Information about Secure Encrypted Virtualization (SEV) support
|
|
#
|
|
# @enabled: true if SEV is active
|
|
#
|
|
# @api-major: SEV API major version
|
|
#
|
|
# @api-minor: SEV API minor version
|
|
#
|
|
# @build-id: SEV FW build id
|
|
#
|
|
# @policy: SEV policy value
|
|
#
|
|
# @state: SEV guest state
|
|
#
|
|
# @handle: SEV firmware handle
|
|
#
|
|
# Since: 2.12
|
|
##
|
|
{ 'struct': 'SevInfo',
|
|
'data': { 'enabled': 'bool',
|
|
'api-major': 'uint8',
|
|
'api-minor' : 'uint8',
|
|
'build-id' : 'uint8',
|
|
'policy' : 'uint32',
|
|
'state' : 'SevState',
|
|
'handle' : 'uint32'
|
|
},
|
|
'if': 'TARGET_I386'
|
|
}
|
|
|
|
##
|
|
# @query-sev:
|
|
#
|
|
# Returns information about SEV
|
|
#
|
|
# Returns: @SevInfo
|
|
#
|
|
# Since: 2.12
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "query-sev" }
|
|
# <- { "return": { "enabled": true, "api-major" : 0, "api-minor" : 0,
|
|
# "build-id" : 0, "policy" : 0, "state" : "running",
|
|
# "handle" : 1 } }
|
|
#
|
|
##
|
|
{ 'command': 'query-sev', 'returns': 'SevInfo',
|
|
'if': 'TARGET_I386' }
|
|
|
|
|
|
##
|
|
# @SevLaunchMeasureInfo:
|
|
#
|
|
# SEV Guest Launch measurement information
|
|
#
|
|
# @data: the measurement value encoded in base64
|
|
#
|
|
# Since: 2.12
|
|
#
|
|
##
|
|
{ 'struct': 'SevLaunchMeasureInfo', 'data': {'data': 'str'},
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @query-sev-launch-measure:
|
|
#
|
|
# Query the SEV guest launch information.
|
|
#
|
|
# Returns: The @SevLaunchMeasureInfo for the guest
|
|
#
|
|
# Since: 2.12
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "query-sev-launch-measure" }
|
|
# <- { "return": { "data": "4l8LXeNlSPUDlXPJG5966/8%YZ" } }
|
|
#
|
|
##
|
|
{ 'command': 'query-sev-launch-measure', 'returns': 'SevLaunchMeasureInfo',
|
|
'if': 'TARGET_I386' }
|
|
|
|
|
|
##
|
|
# @SevCapability:
|
|
#
|
|
# The struct describes capability for a Secure Encrypted Virtualization
|
|
# feature.
|
|
#
|
|
# @pdh: Platform Diffie-Hellman key (base64 encoded)
|
|
#
|
|
# @cert-chain: PDH certificate chain (base64 encoded)
|
|
#
|
|
# @cbitpos: C-bit location in page table entry
|
|
#
|
|
# @reduced-phys-bits: Number of physical Address bit reduction when SEV is
|
|
# enabled
|
|
#
|
|
# Since: 2.12
|
|
##
|
|
{ 'struct': 'SevCapability',
|
|
'data': { 'pdh': 'str',
|
|
'cert-chain': 'str',
|
|
'cbitpos': 'int',
|
|
'reduced-phys-bits': 'int'},
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @query-sev-capabilities:
|
|
#
|
|
# This command is used to get the SEV capabilities, and is supported on AMD
|
|
# X86 platforms only.
|
|
#
|
|
# Returns: SevCapability objects.
|
|
#
|
|
# Since: 2.12
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "query-sev-capabilities" }
|
|
# <- { "return": { "pdh": "8CCDD8DDD", "cert-chain": "888CCCDDDEE",
|
|
# "cbitpos": 47, "reduced-phys-bits": 5}}
|
|
#
|
|
##
|
|
{ 'command': 'query-sev-capabilities', 'returns': 'SevCapability',
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @sev-inject-launch-secret:
|
|
#
|
|
# This command injects a secret blob into memory of SEV guest.
|
|
#
|
|
# @packet-header: the launch secret packet header encoded in base64
|
|
#
|
|
# @secret: the launch secret data to be injected encoded in base64
|
|
#
|
|
# @gpa: the guest physical address where secret will be injected.
|
|
#
|
|
# Since: 6.0
|
|
#
|
|
##
|
|
{ 'command': 'sev-inject-launch-secret',
|
|
'data': { 'packet-header': 'str', 'secret': 'str', '*gpa': 'uint64' },
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @SevAttestationReport:
|
|
#
|
|
# The struct describes attestation report for a Secure Encrypted
|
|
# Virtualization feature.
|
|
#
|
|
# @data: guest attestation report (base64 encoded)
|
|
#
|
|
#
|
|
# Since: 6.1
|
|
##
|
|
{ 'struct': 'SevAttestationReport',
|
|
'data': { 'data': 'str'},
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @query-sev-attestation-report:
|
|
#
|
|
# This command is used to get the SEV attestation report, and is
|
|
# supported on AMD X86 platforms only.
|
|
#
|
|
# @mnonce: a random 16 bytes value encoded in base64 (it will be
|
|
# included in report)
|
|
#
|
|
# Returns: SevAttestationReport objects.
|
|
#
|
|
# Since: 6.1
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute" : "query-sev-attestation-report",
|
|
# "arguments": { "mnonce": "aaaaaaa" } }
|
|
# <- { "return" : { "data": "aaaaaaaabbbddddd"} }
|
|
#
|
|
##
|
|
{ 'command': 'query-sev-attestation-report',
|
|
'data': { 'mnonce': 'str' },
|
|
'returns': 'SevAttestationReport',
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @dump-skeys:
|
|
#
|
|
# Dump guest's storage keys
|
|
#
|
|
# @filename: the path to the file to dump to
|
|
#
|
|
# This command is only supported on s390 architecture.
|
|
#
|
|
# Since: 2.5
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "dump-skeys",
|
|
# "arguments": { "filename": "/tmp/skeys" } }
|
|
# <- { "return": {} }
|
|
#
|
|
##
|
|
{ 'command': 'dump-skeys',
|
|
'data': { 'filename': 'str' },
|
|
'if': 'TARGET_S390X' }
|
|
|
|
##
|
|
# @GICCapability:
|
|
#
|
|
# The struct describes capability for a specific GIC (Generic
|
|
# Interrupt Controller) version. These bits are not only decided by
|
|
# QEMU/KVM software version, but also decided by the hardware that
|
|
# the program is running upon.
|
|
#
|
|
# @version: version of GIC to be described. Currently, only 2 and 3
|
|
# are supported.
|
|
#
|
|
# @emulated: whether current QEMU/hardware supports emulated GIC
|
|
# device in user space.
|
|
#
|
|
# @kernel: whether current QEMU/hardware supports hardware
|
|
# accelerated GIC device in kernel.
|
|
#
|
|
# Since: 2.6
|
|
##
|
|
{ 'struct': 'GICCapability',
|
|
'data': { 'version': 'int',
|
|
'emulated': 'bool',
|
|
'kernel': 'bool' },
|
|
'if': 'TARGET_ARM' }
|
|
|
|
##
|
|
# @query-gic-capabilities:
|
|
#
|
|
# This command is ARM-only. It will return a list of GICCapability
|
|
# objects that describe its capability bits.
|
|
#
|
|
# Returns: a list of GICCapability objects.
|
|
#
|
|
# Since: 2.6
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "query-gic-capabilities" }
|
|
# <- { "return": [{ "version": 2, "emulated": true, "kernel": false },
|
|
# { "version": 3, "emulated": false, "kernel": true } ] }
|
|
#
|
|
##
|
|
{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'],
|
|
'if': 'TARGET_ARM' }
|
|
|
|
|
|
##
|
|
# @SGXEPCSection:
|
|
#
|
|
# Information about intel SGX EPC section info
|
|
#
|
|
# @node: the numa node
|
|
#
|
|
# @size: the size of EPC section
|
|
#
|
|
# Since: 7.0
|
|
##
|
|
{ 'struct': 'SGXEPCSection',
|
|
'data': { 'node': 'int',
|
|
'size': 'uint64'}}
|
|
|
|
##
|
|
# @SGXInfo:
|
|
#
|
|
# Information about intel Safe Guard eXtension (SGX) support
|
|
#
|
|
# @sgx: true if SGX is supported
|
|
#
|
|
# @sgx1: true if SGX1 is supported
|
|
#
|
|
# @sgx2: true if SGX2 is supported
|
|
#
|
|
# @flc: true if FLC is supported
|
|
#
|
|
# @section-size: The EPC section size for guest
|
|
# Redundant with @sections. Just for backward compatibility.
|
|
#
|
|
# @sections: The EPC sections info for guest (Since: 7.0)
|
|
#
|
|
# Features:
|
|
# @deprecated: Member @section-size is deprecated. Use @sections instead.
|
|
#
|
|
# Since: 6.2
|
|
##
|
|
{ 'struct': 'SGXInfo',
|
|
'data': { 'sgx': 'bool',
|
|
'sgx1': 'bool',
|
|
'sgx2': 'bool',
|
|
'flc': 'bool',
|
|
'section-size': { 'type': 'uint64',
|
|
'features': [ 'deprecated' ] },
|
|
'sections': ['SGXEPCSection']},
|
|
'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @query-sgx:
|
|
#
|
|
# Returns information about SGX
|
|
#
|
|
# Returns: @SGXInfo
|
|
#
|
|
# Since: 6.2
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "query-sgx" }
|
|
# <- { "return": { "sgx": true, "sgx1" : true, "sgx2" : true,
|
|
# "flc": true, "section-size" : 96468992,
|
|
# "sections": [{"node": 0, "size": 67108864},
|
|
# {"node": 1, "size": 29360128}]} }
|
|
#
|
|
##
|
|
{ 'command': 'query-sgx', 'returns': 'SGXInfo', 'if': 'TARGET_I386' }
|
|
|
|
##
|
|
# @query-sgx-capabilities:
|
|
#
|
|
# Returns information from host SGX capabilities
|
|
#
|
|
# Returns: @SGXInfo
|
|
#
|
|
# Since: 6.2
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "query-sgx-capabilities" }
|
|
# <- { "return": { "sgx": true, "sgx1" : true, "sgx2" : true,
|
|
# "flc": true, "section-size" : 96468992,
|
|
# "section" : [{"node": 0, "size": 67108864},
|
|
# {"node": 1, "size": 29360128}]} }
|
|
#
|
|
##
|
|
{ 'command': 'query-sgx-capabilities', 'returns': 'SGXInfo', 'if': 'TARGET_I386' }
|