1b0227cdbSMarkus Armbruster# -*- Mode: Python -*- 2f7160f32SAndrea Bolognani# vim: filetype=python 3b0227cdbSMarkus Armbruster# 4b0227cdbSMarkus Armbruster 5b0227cdbSMarkus Armbruster## 6b0227cdbSMarkus Armbruster# @RTC_CHANGE: 7b0227cdbSMarkus Armbruster# 8b0227cdbSMarkus Armbruster# Emitted when the guest changes the RTC time. 9b0227cdbSMarkus Armbruster# 10b0227cdbSMarkus Armbruster# @offset: offset between base RTC clock (as specified by -rtc base), and 11b0227cdbSMarkus Armbruster# new RTC clock value 12b0227cdbSMarkus Armbruster# 13b0227cdbSMarkus Armbruster# Note: This event is rate-limited. 14b0227cdbSMarkus Armbruster# 15*9bc6e893SMarkus Armbruster# Since: 0.13 16b0227cdbSMarkus Armbruster# 17b0227cdbSMarkus Armbruster# Example: 18b0227cdbSMarkus Armbruster# 19b0227cdbSMarkus Armbruster# <- { "event": "RTC_CHANGE", 20b0227cdbSMarkus Armbruster# "data": { "offset": 78 }, 21b0227cdbSMarkus Armbruster# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } } 22b0227cdbSMarkus Armbruster# 23b0227cdbSMarkus Armbruster## 24b0227cdbSMarkus Armbruster{ 'event': 'RTC_CHANGE', 25b0227cdbSMarkus Armbruster 'data': { 'offset': 'int' }, 26b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_ALPHA) || defined(TARGET_ARM) || defined(TARGET_HPPA) || defined(TARGET_I386) || defined(TARGET_MIPS) || defined(TARGET_MIPS64) || defined(TARGET_MOXIE) || defined(TARGET_PPC) || defined(TARGET_PPC64) || defined(TARGET_S390X) || defined(TARGET_SH4) || defined(TARGET_SPARC)' } 27b0227cdbSMarkus Armbruster 28b0227cdbSMarkus Armbruster## 29b0227cdbSMarkus Armbruster# @rtc-reset-reinjection: 30b0227cdbSMarkus Armbruster# 31b0227cdbSMarkus Armbruster# This command will reset the RTC interrupt reinjection backlog. 32b0227cdbSMarkus Armbruster# Can be used if another mechanism to synchronize guest time 33b0227cdbSMarkus Armbruster# is in effect, for example QEMU guest agent's guest-set-time 34b0227cdbSMarkus Armbruster# command. 35b0227cdbSMarkus Armbruster# 36b0227cdbSMarkus Armbruster# Since: 2.1 37b0227cdbSMarkus Armbruster# 38b0227cdbSMarkus Armbruster# Example: 39b0227cdbSMarkus Armbruster# 40b0227cdbSMarkus Armbruster# -> { "execute": "rtc-reset-reinjection" } 41b0227cdbSMarkus Armbruster# <- { "return": {} } 42b0227cdbSMarkus Armbruster# 43b0227cdbSMarkus Armbruster## 44b0227cdbSMarkus Armbruster{ 'command': 'rtc-reset-reinjection', 45b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' } 46b0227cdbSMarkus Armbruster 47b0227cdbSMarkus Armbruster 48b0227cdbSMarkus Armbruster## 49b0227cdbSMarkus Armbruster# @SevState: 50b0227cdbSMarkus Armbruster# 51b0227cdbSMarkus Armbruster# An enumeration of SEV state information used during @query-sev. 52b0227cdbSMarkus Armbruster# 53b0227cdbSMarkus Armbruster# @uninit: The guest is uninitialized. 54b0227cdbSMarkus Armbruster# 55b0227cdbSMarkus Armbruster# @launch-update: The guest is currently being launched; plaintext data and 56b0227cdbSMarkus Armbruster# register state is being imported. 57b0227cdbSMarkus Armbruster# 58b0227cdbSMarkus Armbruster# @launch-secret: The guest is currently being launched; ciphertext data 59b0227cdbSMarkus Armbruster# is being imported. 60b0227cdbSMarkus Armbruster# 61b0227cdbSMarkus Armbruster# @running: The guest is fully launched or migrated in. 62b0227cdbSMarkus Armbruster# 63b0227cdbSMarkus Armbruster# @send-update: The guest is currently being migrated out to another machine. 64b0227cdbSMarkus Armbruster# 65b0227cdbSMarkus Armbruster# @receive-update: The guest is currently being migrated from another machine. 66b0227cdbSMarkus Armbruster# 67b0227cdbSMarkus Armbruster# Since: 2.12 68b0227cdbSMarkus Armbruster## 69b0227cdbSMarkus Armbruster{ 'enum': 'SevState', 70b0227cdbSMarkus Armbruster 'data': ['uninit', 'launch-update', 'launch-secret', 'running', 71b0227cdbSMarkus Armbruster 'send-update', 'receive-update' ], 72b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' } 73b0227cdbSMarkus Armbruster 74b0227cdbSMarkus Armbruster## 75b0227cdbSMarkus Armbruster# @SevInfo: 76b0227cdbSMarkus Armbruster# 77b0227cdbSMarkus Armbruster# Information about Secure Encrypted Virtualization (SEV) support 78b0227cdbSMarkus Armbruster# 79b0227cdbSMarkus Armbruster# @enabled: true if SEV is active 80b0227cdbSMarkus Armbruster# 81b0227cdbSMarkus Armbruster# @api-major: SEV API major version 82b0227cdbSMarkus Armbruster# 83b0227cdbSMarkus Armbruster# @api-minor: SEV API minor version 84b0227cdbSMarkus Armbruster# 85b0227cdbSMarkus Armbruster# @build-id: SEV FW build id 86b0227cdbSMarkus Armbruster# 87b0227cdbSMarkus Armbruster# @policy: SEV policy value 88b0227cdbSMarkus Armbruster# 89b0227cdbSMarkus Armbruster# @state: SEV guest state 90b0227cdbSMarkus Armbruster# 91b0227cdbSMarkus Armbruster# @handle: SEV firmware handle 92b0227cdbSMarkus Armbruster# 93b0227cdbSMarkus Armbruster# Since: 2.12 94b0227cdbSMarkus Armbruster## 95b0227cdbSMarkus Armbruster{ 'struct': 'SevInfo', 96b0227cdbSMarkus Armbruster 'data': { 'enabled': 'bool', 97b0227cdbSMarkus Armbruster 'api-major': 'uint8', 98b0227cdbSMarkus Armbruster 'api-minor' : 'uint8', 99b0227cdbSMarkus Armbruster 'build-id' : 'uint8', 100b0227cdbSMarkus Armbruster 'policy' : 'uint32', 101b0227cdbSMarkus Armbruster 'state' : 'SevState', 102b0227cdbSMarkus Armbruster 'handle' : 'uint32' 103b0227cdbSMarkus Armbruster }, 104b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' 105b0227cdbSMarkus Armbruster} 106b0227cdbSMarkus Armbruster 107b0227cdbSMarkus Armbruster## 108b0227cdbSMarkus Armbruster# @query-sev: 109b0227cdbSMarkus Armbruster# 110b0227cdbSMarkus Armbruster# Returns information about SEV 111b0227cdbSMarkus Armbruster# 112b0227cdbSMarkus Armbruster# Returns: @SevInfo 113b0227cdbSMarkus Armbruster# 114b0227cdbSMarkus Armbruster# Since: 2.12 115b0227cdbSMarkus Armbruster# 116b0227cdbSMarkus Armbruster# Example: 117b0227cdbSMarkus Armbruster# 118b0227cdbSMarkus Armbruster# -> { "execute": "query-sev" } 119b0227cdbSMarkus Armbruster# <- { "return": { "enabled": true, "api-major" : 0, "api-minor" : 0, 120b0227cdbSMarkus Armbruster# "build-id" : 0, "policy" : 0, "state" : "running", 121b0227cdbSMarkus Armbruster# "handle" : 1 } } 122b0227cdbSMarkus Armbruster# 123b0227cdbSMarkus Armbruster## 124b0227cdbSMarkus Armbruster{ 'command': 'query-sev', 'returns': 'SevInfo', 125b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' } 126b0227cdbSMarkus Armbruster 127b0227cdbSMarkus Armbruster 128b0227cdbSMarkus Armbruster## 129b0227cdbSMarkus Armbruster# @SevLaunchMeasureInfo: 130b0227cdbSMarkus Armbruster# 131b0227cdbSMarkus Armbruster# SEV Guest Launch measurement information 132b0227cdbSMarkus Armbruster# 133b0227cdbSMarkus Armbruster# @data: the measurement value encoded in base64 134b0227cdbSMarkus Armbruster# 135b0227cdbSMarkus Armbruster# Since: 2.12 136b0227cdbSMarkus Armbruster# 137b0227cdbSMarkus Armbruster## 138b0227cdbSMarkus Armbruster{ 'struct': 'SevLaunchMeasureInfo', 'data': {'data': 'str'}, 139b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' } 140b0227cdbSMarkus Armbruster 141b0227cdbSMarkus Armbruster## 142b0227cdbSMarkus Armbruster# @query-sev-launch-measure: 143b0227cdbSMarkus Armbruster# 144b0227cdbSMarkus Armbruster# Query the SEV guest launch information. 145b0227cdbSMarkus Armbruster# 146b0227cdbSMarkus Armbruster# Returns: The @SevLaunchMeasureInfo for the guest 147b0227cdbSMarkus Armbruster# 148b0227cdbSMarkus Armbruster# Since: 2.12 149b0227cdbSMarkus Armbruster# 150b0227cdbSMarkus Armbruster# Example: 151b0227cdbSMarkus Armbruster# 152b0227cdbSMarkus Armbruster# -> { "execute": "query-sev-launch-measure" } 153b0227cdbSMarkus Armbruster# <- { "return": { "data": "4l8LXeNlSPUDlXPJG5966/8%YZ" } } 154b0227cdbSMarkus Armbruster# 155b0227cdbSMarkus Armbruster## 156b0227cdbSMarkus Armbruster{ 'command': 'query-sev-launch-measure', 'returns': 'SevLaunchMeasureInfo', 157b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' } 158b0227cdbSMarkus Armbruster 159b0227cdbSMarkus Armbruster 160b0227cdbSMarkus Armbruster## 161b0227cdbSMarkus Armbruster# @SevCapability: 162b0227cdbSMarkus Armbruster# 163b0227cdbSMarkus Armbruster# The struct describes capability for a Secure Encrypted Virtualization 164b0227cdbSMarkus Armbruster# feature. 165b0227cdbSMarkus Armbruster# 166b0227cdbSMarkus Armbruster# @pdh: Platform Diffie-Hellman key (base64 encoded) 167b0227cdbSMarkus Armbruster# 168b0227cdbSMarkus Armbruster# @cert-chain: PDH certificate chain (base64 encoded) 169b0227cdbSMarkus Armbruster# 170b0227cdbSMarkus Armbruster# @cbitpos: C-bit location in page table entry 171b0227cdbSMarkus Armbruster# 172b0227cdbSMarkus Armbruster# @reduced-phys-bits: Number of physical Address bit reduction when SEV is 173b0227cdbSMarkus Armbruster# enabled 174b0227cdbSMarkus Armbruster# 175b0227cdbSMarkus Armbruster# Since: 2.12 176b0227cdbSMarkus Armbruster## 177b0227cdbSMarkus Armbruster{ 'struct': 'SevCapability', 178b0227cdbSMarkus Armbruster 'data': { 'pdh': 'str', 179b0227cdbSMarkus Armbruster 'cert-chain': 'str', 180b0227cdbSMarkus Armbruster 'cbitpos': 'int', 181b0227cdbSMarkus Armbruster 'reduced-phys-bits': 'int'}, 182b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' } 183b0227cdbSMarkus Armbruster 184b0227cdbSMarkus Armbruster## 185b0227cdbSMarkus Armbruster# @query-sev-capabilities: 186b0227cdbSMarkus Armbruster# 187b0227cdbSMarkus Armbruster# This command is used to get the SEV capabilities, and is supported on AMD 188b0227cdbSMarkus Armbruster# X86 platforms only. 189b0227cdbSMarkus Armbruster# 190b0227cdbSMarkus Armbruster# Returns: SevCapability objects. 191b0227cdbSMarkus Armbruster# 192b0227cdbSMarkus Armbruster# Since: 2.12 193b0227cdbSMarkus Armbruster# 194b0227cdbSMarkus Armbruster# Example: 195b0227cdbSMarkus Armbruster# 196b0227cdbSMarkus Armbruster# -> { "execute": "query-sev-capabilities" } 197b0227cdbSMarkus Armbruster# <- { "return": { "pdh": "8CCDD8DDD", "cert-chain": "888CCCDDDEE", 198b0227cdbSMarkus Armbruster# "cbitpos": 47, "reduced-phys-bits": 5}} 199b0227cdbSMarkus Armbruster# 200b0227cdbSMarkus Armbruster## 201b0227cdbSMarkus Armbruster{ 'command': 'query-sev-capabilities', 'returns': 'SevCapability', 202b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_I386)' } 203b0227cdbSMarkus Armbruster 204b0227cdbSMarkus Armbruster## 205b0227cdbSMarkus Armbruster# @dump-skeys: 206b0227cdbSMarkus Armbruster# 207b0227cdbSMarkus Armbruster# Dump guest's storage keys 208b0227cdbSMarkus Armbruster# 209b0227cdbSMarkus Armbruster# @filename: the path to the file to dump to 210b0227cdbSMarkus Armbruster# 211b0227cdbSMarkus Armbruster# This command is only supported on s390 architecture. 212b0227cdbSMarkus Armbruster# 213b0227cdbSMarkus Armbruster# Since: 2.5 214b0227cdbSMarkus Armbruster# 215b0227cdbSMarkus Armbruster# Example: 216b0227cdbSMarkus Armbruster# 217b0227cdbSMarkus Armbruster# -> { "execute": "dump-skeys", 218b0227cdbSMarkus Armbruster# "arguments": { "filename": "/tmp/skeys" } } 219b0227cdbSMarkus Armbruster# <- { "return": {} } 220b0227cdbSMarkus Armbruster# 221b0227cdbSMarkus Armbruster## 222b0227cdbSMarkus Armbruster{ 'command': 'dump-skeys', 223b0227cdbSMarkus Armbruster 'data': { 'filename': 'str' }, 224b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_S390X)' } 225b0227cdbSMarkus Armbruster 226b0227cdbSMarkus Armbruster## 227b0227cdbSMarkus Armbruster# @GICCapability: 228b0227cdbSMarkus Armbruster# 229b0227cdbSMarkus Armbruster# The struct describes capability for a specific GIC (Generic 230b0227cdbSMarkus Armbruster# Interrupt Controller) version. These bits are not only decided by 231b0227cdbSMarkus Armbruster# QEMU/KVM software version, but also decided by the hardware that 232b0227cdbSMarkus Armbruster# the program is running upon. 233b0227cdbSMarkus Armbruster# 234b0227cdbSMarkus Armbruster# @version: version of GIC to be described. Currently, only 2 and 3 235b0227cdbSMarkus Armbruster# are supported. 236b0227cdbSMarkus Armbruster# 237b0227cdbSMarkus Armbruster# @emulated: whether current QEMU/hardware supports emulated GIC 238b0227cdbSMarkus Armbruster# device in user space. 239b0227cdbSMarkus Armbruster# 240b0227cdbSMarkus Armbruster# @kernel: whether current QEMU/hardware supports hardware 241b0227cdbSMarkus Armbruster# accelerated GIC device in kernel. 242b0227cdbSMarkus Armbruster# 243b0227cdbSMarkus Armbruster# Since: 2.6 244b0227cdbSMarkus Armbruster## 245b0227cdbSMarkus Armbruster{ 'struct': 'GICCapability', 246b0227cdbSMarkus Armbruster 'data': { 'version': 'int', 247b0227cdbSMarkus Armbruster 'emulated': 'bool', 248b0227cdbSMarkus Armbruster 'kernel': 'bool' }, 249b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_ARM)' } 250b0227cdbSMarkus Armbruster 251b0227cdbSMarkus Armbruster## 252b0227cdbSMarkus Armbruster# @query-gic-capabilities: 253b0227cdbSMarkus Armbruster# 254b0227cdbSMarkus Armbruster# This command is ARM-only. It will return a list of GICCapability 255b0227cdbSMarkus Armbruster# objects that describe its capability bits. 256b0227cdbSMarkus Armbruster# 257b0227cdbSMarkus Armbruster# Returns: a list of GICCapability objects. 258b0227cdbSMarkus Armbruster# 259b0227cdbSMarkus Armbruster# Since: 2.6 260b0227cdbSMarkus Armbruster# 261b0227cdbSMarkus Armbruster# Example: 262b0227cdbSMarkus Armbruster# 263b0227cdbSMarkus Armbruster# -> { "execute": "query-gic-capabilities" } 264b0227cdbSMarkus Armbruster# <- { "return": [{ "version": 2, "emulated": true, "kernel": false }, 265b0227cdbSMarkus Armbruster# { "version": 3, "emulated": false, "kernel": true } ] } 266b0227cdbSMarkus Armbruster# 267b0227cdbSMarkus Armbruster## 268b0227cdbSMarkus Armbruster{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'], 269b0227cdbSMarkus Armbruster 'if': 'defined(TARGET_ARM)' } 270