xref: /aosp_15_r20/external/cpuinfo/src/x86/info.c (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
1*2b54f0dbSXin Li #include <stdint.h>
2*2b54f0dbSXin Li 
3*2b54f0dbSXin Li #include <cpuinfo.h>
4*2b54f0dbSXin Li #include <x86/api.h>
5*2b54f0dbSXin Li 
6*2b54f0dbSXin Li 
cpuinfo_x86_decode_model_info(uint32_t eax)7*2b54f0dbSXin Li struct cpuinfo_x86_model_info cpuinfo_x86_decode_model_info(uint32_t eax) {
8*2b54f0dbSXin Li 	struct cpuinfo_x86_model_info model_info;
9*2b54f0dbSXin Li 	model_info.stepping        =  eax        & 0xF;
10*2b54f0dbSXin Li 	model_info.base_model      = (eax >> 4)  & 0xF;
11*2b54f0dbSXin Li 	model_info.base_family     = (eax >> 8)  & 0xF;
12*2b54f0dbSXin Li 	model_info.processor_type  = (eax >> 12) & 0x3;
13*2b54f0dbSXin Li 	model_info.extended_model  = (eax >> 16) & 0xF;
14*2b54f0dbSXin Li 	model_info.extended_family = (eax >> 20) & 0xFF;
15*2b54f0dbSXin Li 
16*2b54f0dbSXin Li 	model_info.family = model_info.base_family + model_info.extended_family;
17*2b54f0dbSXin Li 	model_info.model  = model_info.base_model + (model_info.extended_model << 4);
18*2b54f0dbSXin Li 	return model_info;
19*2b54f0dbSXin Li }
20