1 // Copyright 2018 The Fuchsia Authors
2 //
3 // Use of this source code is governed by a MIT-style
4 // license that can be found in the LICENSE file or at
5 // https://opensource.org/licenses/MIT
6 
7 #pragma once
8 
9 #include <stdint.h>
10 
11 enum VcpuMeta : uint32_t {
12     // Waits.
13     VCPU_INTERRUPT,
14     VCPU_PORT,
15 
16     // Do not use.
17     VCPU_META_COUNT,
18 };
19 
20 enum VcpuExit : uint32_t {
21 #if ARCH_ARM64
22     VCPU_UNDERFLOW_MAINTENANCE_INTERRUPT,
23     VCPU_PHYSICAL_INTERRUPT,
24     VCPU_WFI_INSTRUCTION,
25     VCPU_WFE_INSTRUCTION,
26     VCPU_SMC_INSTRUCTION,
27     VCPU_SYSTEM_INSTRUCTION,
28     VCPU_INSTRUCTION_ABORT,
29     VCPU_DATA_ABORT,
30 #elif ARCH_X86
31     VCPU_EXTERNAL_INTERRUPT,
32     VCPU_INTERRUPT_WINDOW,
33     VCPU_CPUID,
34     VCPU_HLT,
35     VCPU_CONTROL_REGISTER_ACCESS,
36     VCPU_IO_INSTRUCTION,
37     VCPU_RDMSR,
38     VCPU_WRMSR,
39     VCPU_VM_ENTRY_FAILURE,
40     VCPU_EPT_VIOLATION,
41     VCPU_XSETBV,
42     VCPU_PAUSE,
43     VCPU_VMCALL,
44 #endif
45     VCPU_UNKNOWN,
46     VCPU_FAILURE,
47 
48     // Do not use.
49     VCPU_EXIT_COUNT,
50 };
51 
52 void ktrace_report_vcpu_meta();
53 void ktrace_vcpu(uint32_t tag, VcpuMeta meta);
54 void ktrace_vcpu_exit(VcpuExit exit, uint64_t exit_address);
55