1
+ use crate :: apic:: get_local_apic;
1
2
use crate :: error:: Result ;
3
+ use crate :: vcpu:: VCpu ;
2
4
use crate :: { vcpu, vmexit} ;
3
- use raw_cpuid:: CpuIdResult ;
4
5
use arrayvec:: ArrayVec ;
5
- use core:: convert:: TryInto ;
6
6
use bitfield:: bitfield;
7
7
use bitflags:: _core:: num:: flt2dec:: to_shortest_exp_str;
8
- use crate :: apic :: get_local_apic ;
9
- use crate :: vcpu :: VCpu ;
8
+ use core :: convert :: TryInto ;
9
+ use raw_cpuid :: CpuIdResult ;
10
10
11
11
const CPUID_NAME : u32 = 0 ;
12
12
const CPUID_MODEL_FAMILY_STEPPING : u32 = 1 ;
@@ -26,13 +26,13 @@ const MAX_CPUID_INPUT: u32 = 0x80000008;
26
26
//todo //CPUID leaves above 2 and below 80000000H are visible only when
27
27
// // IA32_MISC_ENABLE[bit 22] has its default value of 0.
28
28
29
-
30
-
31
-
32
-
33
- fn get_cpu_id_result ( vcpu : & vcpu :: VCpu , eax_in : u32 , ecx_in : u32 ) -> CpuIdResult {
34
- const NAME_CREATION_ERROR_MESSAGE : & ' static str = "Somehow bytes was not actually a 12 element array" ;
35
-
29
+ fn get_cpu_id_result (
30
+ vcpu : & vcpu :: VCpu ,
31
+ eax_in : u32 ,
32
+ ecx_in : u32 ,
33
+ ) -> CpuIdResult {
34
+ const NAME_CREATION_ERROR_MESSAGE : & ' static str =
35
+ "Somehow bytes was not actually a 12 element array" ;
36
36
37
37
let mut actual = raw_cpuid:: native_cpuid:: cpuid_count (
38
38
guest_cpu. rax as u32 ,
@@ -100,8 +100,6 @@ bitfield! {
100
100
max_addressable_ids_physical, _: 26 , 31 ;
101
101
}
102
102
103
-
104
-
105
103
fn intel_cache_topo ( mut actual : CpuIdResult ) -> CpuIdResult {
106
104
let mut cache_topo_eax = IntelCoreCacheTopologyEaxRes ( actual. eax ) ;
107
105
cache_topo_eax. set_max_addressable_ids_logical ( todo ! ( "waiting on apics" ) ) ;
@@ -112,7 +110,7 @@ fn intel_cache_topo(mut actual: CpuIdResult) -> CpuIdResult {
112
110
//no changes should be required for these:
113
111
ebx : actual. ebx ,
114
112
ecx : actual. ecx ,
115
- edx : actual. edx
113
+ edx : actual. edx ,
116
114
}
117
115
}
118
116
@@ -152,12 +150,14 @@ bitfield! {
152
150
}
153
151
154
152
fn cpuid_model_family_stepping ( actual : CpuIdResult ) -> CpuIdResult {
155
- let family_model_stepping = IntelTypeFamilyModelSteppingIDEaxRes ( actual. eax ) ;
153
+ let family_model_stepping =
154
+ IntelTypeFamilyModelSteppingIDEaxRes ( actual. eax ) ;
156
155
//we can change family_model_stepping, but for now just use actual.
157
156
let eax = family_model_stepping. 0 ;
158
157
let mut brand_cflush_max_initial = BrandCFlushMaxIDsInitialAPIC ( actual. ebx ) ;
159
158
brand_cflush_max_initial. set_apic_id ( todo ! ( "Waiting on virtual APICs" ) ) ;
160
- brand_cflush_max_initial. set_max_processor_ids ( todo ! ( "Waiting on virtual APICs" ) ) ;
159
+ brand_cflush_max_initial
160
+ . set_max_processor_ids ( todo ! ( "Waiting on virtual APICs" ) ) ;
161
161
let ebx = brand_cflush_max_initial. 0 ;
162
162
let mut features_ecx = FeatureInformationECX ( actual. ecx ) ;
163
163
let mut features_edx = FeatureInformationEDX ( actual. edx ) ;
@@ -174,21 +174,22 @@ fn cpuid_model_family_stepping(actual: CpuIdResult) -> CpuIdResult {
174
174
features_ecx. set_hypervisor ( 0 ) ;
175
175
let ecx = features_ecx. 0 ;
176
176
let edx = features_edx. 0 ;
177
- CpuIdResult {
178
- eax,
179
- ebx,
180
- ecx,
181
- edx
182
- }
177
+ CpuIdResult { eax, ebx, ecx, edx }
183
178
}
184
179
185
180
fn cpuid_name ( vcpu : & VCpu , actual : CpuIdResult ) -> CpuIdResult {
186
181
if vcpu. vm . read ( ) . config . override_cpu_name ( ) {
187
182
let cpu_name = "MythrilCPU__" ;
188
- let bytes = cpu_name. chars ( ) . map ( |char| char as u8 ) . collect :: < ArrayVec < [ u8 ; 12 ] > > ( ) ;
189
- let first_bytes: [ u8 ; 4 ] = bytes[ 0 ..4 ] . try_into ( ) . expect ( NAME_CREATION_ERROR_MESSAGE ) ;
190
- let second_bytes: [ u8 ; 4 ] = bytes[ 4 ..8 ] . try_into ( ) . expect ( NAME_CREATION_ERROR_MESSAGE ) ;
191
- let third_bytes: [ u8 ; 4 ] = bytes[ 8 ..12 ] . try_into ( ) . expect ( NAME_CREATION_ERROR_MESSAGE ) ;
183
+ let bytes = cpu_name
184
+ . chars ( )
185
+ . map ( |char| char as u8 )
186
+ . collect :: < ArrayVec < [ u8 ; 12 ] > > ( ) ;
187
+ let first_bytes: [ u8 ; 4 ] =
188
+ bytes[ 0 ..4 ] . try_into ( ) . expect ( NAME_CREATION_ERROR_MESSAGE ) ;
189
+ let second_bytes: [ u8 ; 4 ] =
190
+ bytes[ 4 ..8 ] . try_into ( ) . expect ( NAME_CREATION_ERROR_MESSAGE ) ;
191
+ let third_bytes: [ u8 ; 4 ] =
192
+ bytes[ 8 ..12 ] . try_into ( ) . expect ( NAME_CREATION_ERROR_MESSAGE ) ;
192
193
return CpuIdResult {
193
194
eax : MAX_CPUID_INPUT ,
194
195
ebx : u32:: from_le_bytes ( first_bytes) ,
0 commit comments