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 Listruct 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