vmm/cpu_config/x86_64/
test_utils.rs1use super::custom_cpu_template::{
5 CpuidLeafModifier, CpuidRegister, CpuidRegisterModifier, RegisterModifier,
6};
7use crate::cpu_config::templates::{CustomCpuTemplate, RegisterValueFilter};
8use crate::cpu_config::x86_64::cpuid::KvmCpuidFlags;
9
10pub const TEST_TEMPLATE_JSON: &str = r#"{
12 "cpuid_modifiers": [
13 {
14 "leaf": "0x80000001",
15 "subleaf": "0x0007",
16 "flags": 0,
17 "modifiers": [
18 {
19 "register": "eax",
20 "bitmap": "0bx00100xxx1xxxxxxxxxxxxxxxxxxxxx1"
21 }
22 ]
23 },
24 {
25 "leaf": "0x80000002",
26 "subleaf": "0x0004",
27 "flags": 0,
28 "modifiers": [
29 {
30 "register": "ebx",
31 "bitmap": "0bxxx1xxxxxxxxxxxxxxxxxxxxx1"
32 },
33 {
34 "register": "ecx",
35 "bitmap": "0bx00100xxx1xxxxxxxxxxx0xxxxx0xxx1"
36 }
37 ]
38 },
39 {
40 "leaf": "0x80000003",
41 "subleaf": "0x0004",
42 "flags": 0,
43 "modifiers": [
44 {
45 "register": "edx",
46 "bitmap": "0bx00100xxx1xxxxxxxxxxx0xxxxx0xxx1"
47 }
48 ]
49 },
50 {
51 "leaf": "0x80000004",
52 "subleaf": "0x0004",
53 "flags": 0,
54 "modifiers": [
55 {
56 "register": "edx",
57 "bitmap": "0b00100xxx1xxxxxx1xxxxxxxxxxxxxx1"
58 },
59 {
60 "register": "ecx",
61 "bitmap": "0bx00100xxx1xxxxxxxxxxxxx111xxxxx1"
62 }
63 ]
64 },
65 {
66 "leaf": "0x80000005",
67 "subleaf": "0x0004",
68 "flags": 0,
69 "modifiers": [
70 {
71 "register": "eax",
72 "bitmap": "0bx00100xxx1xxxxx00xxxxxx000xxxxx1"
73 },
74 {
75 "register": "edx",
76 "bitmap": "0bx10100xxx1xxxxxxxxxxxxx000xxxxx1"
77 }
78 ]
79 }
80 ],
81 "msr_modifiers": [
82 {
83 "addr": "0x0",
84 "bitmap": "0bx00100xxx1xxxx00xxx1xxxxxxxxxxx1"
85 },
86 {
87 "addr": "0x1",
88 "bitmap": "0bx00111xxx1xxxx111xxxxx101xxxxxx1"
89 },
90 {
91 "addr": "0b11",
92 "bitmap": "0bx00100xxx1xxxxxx0000000xxxxxxxx1"
93 },
94 {
95 "addr": "0xbbca",
96 "bitmap": "0bx00100xxx1xxxxxxxxx1"
97 }
98 ]
99}"#;
100
101pub const TEST_INVALID_TEMPLATE_JSON: &str = r#"{
104 "reg_modifiers": [
105 {
106 "addr": "0x0AAC",
107 "bitmap": "0b1xx1"
108 }
109 ]
110}"#;
111
112pub fn build_test_template() -> CustomCpuTemplate {
114 CustomCpuTemplate {
115 cpuid_modifiers: vec![CpuidLeafModifier {
116 leaf: 0x3,
117 subleaf: 0x0,
118 flags: KvmCpuidFlags(kvm_bindings::KVM_CPUID_FLAG_STATEFUL_FUNC),
119 modifiers: vec![
120 CpuidRegisterModifier {
121 register: CpuidRegister::Eax,
122 bitmap: RegisterValueFilter {
123 filter: 0b0111,
124 value: 0b0101,
125 },
126 },
127 CpuidRegisterModifier {
128 register: CpuidRegister::Ebx,
129 bitmap: RegisterValueFilter {
130 filter: 0b0111,
131 value: 0b0100,
132 },
133 },
134 CpuidRegisterModifier {
135 register: CpuidRegister::Ecx,
136 bitmap: RegisterValueFilter {
137 filter: 0b0111,
138 value: 0b0111,
139 },
140 },
141 CpuidRegisterModifier {
142 register: CpuidRegister::Edx,
143 bitmap: RegisterValueFilter {
144 filter: 0b0111,
145 value: 0b0001,
146 },
147 },
148 ],
149 }],
150 msr_modifiers: vec![
151 RegisterModifier {
152 addr: 0x9999,
153 bitmap: RegisterValueFilter {
154 filter: 0,
155 value: 0,
156 },
157 },
158 RegisterModifier {
159 addr: 0x8000,
160 bitmap: RegisterValueFilter {
161 filter: 0,
162 value: 0,
163 },
164 },
165 ],
166 ..Default::default()
167 }
168}