6 #include "../../include/sys/cpuid.h"
7 #include "../../include/sys/cpu_intel.h"
12 uint32_t ebx = 0, unused;
14 cpuid(0, unused, ebx, unused, unused);
19 void cpu_get_id_string(
char out[12]) {
20 uint32_t* out32 = (uint32_t*)out;
22 uint32_t ebx, ecx, edx, unused;
24 cpuid(0, unused, ebx, ecx, edx);
32 struct cpu_info cpu_get_basic_info() {
35 uint32_t eax, ebx, extended_max, unused;
37 info.manufacturer_id = cpu_get_id();
39 cpuid(1, eax, ebx, info.feature_flags_ecx, info.feature_flags_edx);
41 info.model_id = (eax >> 4) & 0xf;
42 info.family_id = (eax >> 8) & 0xf;
48 info.type_id = (eax >> 12) & 0x3;
49 info.type_string = info.type_id < 4 ? intel_cpu_types[info.type_id] : 0;
51 info.brand_id = ebx & 0xff;
53 if (info.family_id == 15) {
54 info.extended_family_id = (eax >> 20) & 0xff;
57 const char** family_models = intel_model_names[info.family_id];
59 info.model_string = family_models ? family_models[info.model_id] : 0;
61 cpuid(0x80000000, extended_max, unused, unused, unused);
63 if(info.brand_id > 0) {
64 if(eax == 0x000006B1 || eax == 0x00000F13) {
65 info.brand_string = intel_additional_brand_names[info.brand_id];
67 info.brand_string = intel_brand_names[info.brand_id];
71 uint32_t cache_info[4] = {0};
73 if (extended_max >= 0x80000005) {
82 if (extended_max >= 0x80000006) {
91 info.l1_i_size = cache_info[0] & 0xff;
92 info.l1_d_size = cache_info[1] & 0xff;
93 info.l2_size = cache_info[2] & 0xffff;
94 info.l3_size = cache_info[3] & 0x3fff;
96 info.stepping_id = eax & 0xf;
97 }
else if(info.manufacturer_id ==
AMD_MAGIC) {
106 bool is_long_mode_supported() {
107 uint32_t eax = 0, unused = 0;
109 cpuid(0x80000000, eax, unused, unused, unused);
111 if(eax < 0x80000001) {
Основные определения ядра
#define AMD_MAGIC
Ключ процессора AMD.
#define INTEL_MAGIC
Ключ процессора Intel.