Ticket #8444: 0001-x86-add-cpuid-feature-6-flags.2.patch
File 0001-x86-add-cpuid-feature-6-flags.2.patch, 4.6 KB (added by , 12 years ago) |
---|
-
headers/private/kernel/arch/x86/arch_cpu.h
From 673a5d9ffd9869a5f7271cc351b6fc473b90acde Mon Sep 17 00:00:00 2001 From: Yongcong Du <ycdu.vmcore@gmail.com> Date: Tue, 3 Apr 2012 22:02:24 +0800 Subject: [PATCH 1/2] x86: add cpuid feature 6 flags --- headers/private/kernel/arch/x86/arch_cpu.h | 20 ++++++++++++++++++-- src/system/kernel/arch/x86/arch_cpu.cpp | 19 +++++++++++++++++++ 2 个文件被修改,插入 37 行(+),删除 2 行(-) diff --git a/headers/private/kernel/arch/x86/arch_cpu.h b/headers/private/kernel/arch/x86/arch_cpu.h index ff5523b..4365fe1 100644
a b 37 37 #define K8_MSR_IPM 0xc0010055 38 38 39 39 // x86 features from cpuid eax 1, edx register 40 // reference http://www.intel.com/ assets/pdf/appnote/241618.pdf (Table 5-5)40 // reference http://www.intel.com/Assets/en_US/PDF/appnote/241618.pdf (Table 5-5) 41 41 #define IA32_FEATURE_FPU (1 << 0) // x87 fpu 42 42 #define IA32_FEATURE_VME (1 << 1) // virtual 8086 43 43 #define IA32_FEATURE_DE (1 << 2) // debugging extensions … … 72 72 #define IA32_FEATURE_PBE (1 << 31) // pending break enable 73 73 74 74 // x86 features from cpuid eax 1, ecx register 75 // reference http://www.intel.com/ assets/pdf/appnote/241618.pdf (Table 5-4)75 // reference http://www.intel.com/Assets/en_US/PDF/appnote/241618.pdf (Table 5-4) 76 76 #define IA32_FEATURE_EXT_SSE3 (1 << 0) // SSE3 77 77 #define IA32_FEATURE_EXT_PCLMULQDQ (1 << 1) // PCLMULQDQ Instruction 78 78 #define IA32_FEATURE_EXT_DTES64 (1 << 2) // 64-Bit Debug Store … … 117 117 #define IA32_FEATURE_AMD_EXT_3DNOWEXT (1 << 30) // 3DNow! extensions 118 118 #define IA32_FEATURE_AMD_EXT_3DNOW (1 << 31) // 3DNow! 119 119 120 // x86 defined features from cpuid eax 6, eax register 121 // reference http://www.intel.com/Assets/en_US/PDF/appnote/241618.pdf (Table 5-11) 122 #define IA32_FEATURE_DTS (1 << 0) //Digital Thermal Sensor 123 #define IA32_FEATURE_ITB (1 << 1) //Intel Turbo Boost Technology 124 #define IA32_FEATURE_ARAT (1 << 2) //Always running APIC Timer 125 #define IA32_FEATURE_PLN (1 << 4) //Power Limit Notification 126 #define IA32_FEATURE_ECMD (1 << 5) //Extended Clock Modulation Duty 127 #define IA32_FEATURE_PTM (1 << 6) //Package Thermal Management 128 129 // x86 defined features from cpuid eax 6, ecx register 130 // reference http://www.intel.com/Assets/en_US/PDF/appnote/241618.pdf (Table 5-11) 131 #define IA32_FEATURE_APERFMPERF (1 << 0) //IA32_APERF, IA32_MPERF 132 #define IA32_FEATURE_EPB (1 << 3) //IA32_ENERGY_PERF_BIAS 133 120 134 // cr4 flags 121 135 #define IA32_CR4_PAE (1UL << 5) 122 136 #define IA32_CR4_GLOBAL_PAGES (1UL << 7) … … enum x86_feature_type { 280 294 FEATURE_COMMON = 0, // cpuid eax=1, ecx register 281 295 FEATURE_EXT, // cpuid eax=1, edx register 282 296 FEATURE_EXT_AMD, // cpuid eax=0x80000001, edx register (AMD) 297 FEATURE_6_EAX, // cpuid eax=6, eax registers 298 FEATURE_6_ECX, // cpuid eax=6, ecx registers 283 299 284 300 FEATURE_NUM 285 301 }; -
src/system/kernel/arch/x86/arch_cpu.cpp
diff --git a/src/system/kernel/arch/x86/arch_cpu.cpp b/src/system/kernel/arch/x86/arch_cpu.cpp index 81daaf8..5ebb194 100644
a b dump_feature_string(int currentCPU, cpu_ent *cpu) 516 516 strlcat(features, "3dnowext ", sizeof(features)); 517 517 if (cpu->arch.feature[FEATURE_EXT_AMD] & IA32_FEATURE_AMD_EXT_3DNOW) 518 518 strlcat(features, "3dnow ", sizeof(features)); 519 if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_DTS) 520 strlcat(features, "dts ", sizeof(features)); 521 if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_ITB) 522 strlcat(features, "itb ", sizeof(features)); 523 if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_ARAT) 524 strlcat(features, "arat ", sizeof(features)); 525 if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_PLN) 526 strlcat(features, "pln ", sizeof(features)); 527 if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_ECMD) 528 strlcat(features, "ecmd ", sizeof(features)); 529 if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_PTM) 530 strlcat(features, "ptm ", sizeof(features)); 531 if (cpu->arch.feature[FEATURE_6_ECX] & IA32_FEATURE_APERFMPERF) 532 strlcat(features, "aperfmperf ", sizeof(features)); 533 if (cpu->arch.feature[FEATURE_6_ECX] & IA32_FEATURE_EPB) 534 strlcat(features, "epb ", sizeof(features)); 519 535 520 536 dprintf("CPU %d: features: %s\n", currentCPU, features); 521 537 } … … detect_cpu(int currentCPU) 625 641 get_current_cpuid(&cpuid, 0x80000001); 626 642 cpu->arch.feature[FEATURE_EXT_AMD] = cpuid.regs.edx; // edx 627 643 } 644 get_current_cpuid(&cpuid, 6); 645 cpu->arch.feature[FEATURE_6_EAX] = cpuid.regs.eax; 646 cpu->arch.feature[FEATURE_6_ECX] = cpuid.regs.ecx; 628 647 629 648 #if DUMP_FEATURE_STRING 630 649 dump_feature_string(currentCPU, cpu);