diff --git a/headers/private/kernel/arch/x86/arch_cpu.h b/headers/private/kernel/arch/x86/arch_cpu.h index 2acd0271bf..4cd304f2ee 100644 --- a/headers/private/kernel/arch/x86/arch_cpu.h +++ b/headers/private/kernel/arch/x86/arch_cpu.h @@ -222,13 +222,26 @@ #define IA32_FEATURE_INTERRUPT_MWAIT (1 << 1) // x86 defined features from cpuid eax 6, eax register -// reference http://www.intel.com/Assets/en_US/PDF/appnote/241618.pdf (Table 5-11) +// reference https://software.intel.com/content/dam/develop/public/us/en/documents/253666-sdm-vol-2a.pdf (Table 3-8) #define IA32_FEATURE_DTS (1 << 0) // Digital Thermal Sensor #define IA32_FEATURE_ITB (1 << 1) // Intel Turbo Boost Technology #define IA32_FEATURE_ARAT (1 << 2) // Always running APIC Timer #define IA32_FEATURE_PLN (1 << 4) // Power Limit Notification #define IA32_FEATURE_ECMD (1 << 5) // Extended Clock Modulation Duty #define IA32_FEATURE_PTM (1 << 6) // Package Thermal Management +#define IA32_FEATURE_HWP (1 << 7) // Hardware P-states +#define IA32_FEATURE_HWP_NOTIFY (1 << 8) // HWP Notification +#define IA32_FEATURE_HWP_ACTWIN (1 << 9) // HWP Activity Window +#define IA32_FEATURE_HWP_EPP (1 << 10) // HWP Energy Performance Preference +#define IA32_FEATURE_HWP_PLR (1 << 11) // HWP Package Level Request +#define IA32_FEATURE_HDC (1 << 13) // Hardware Duty Cycling +#define IA32_FEATURE_TBMT3 (1 << 14) // Turbo Boost Max Technology 3.0 +#define IA32_FEATURE_HWP_CAP (1 << 15) // HWP Capabilities +#define IA32_FEATURE_HWP_PECI (1 << 16) // HWP PECI override +#define IA32_FEATURE_HWP_FLEX (1 << 17) // Flexible HWP +#define IA32_FEATURE_HWP_FAST (1 << 18) // Fast access for HWP_REQUEST MSR +#define IA32_FEATURE_HW_FEEDBACK (1 << 19) // HW_FEEDBACK*, PACKAGE_THERM* +#define IA32_FEATURE_HWP_IGNIDL (1 << 20) // Ignore Idle Logical Processor HWP // x86 defined features from cpuid eax 6, ecx register // reference http://www.intel.com/Assets/en_US/PDF/appnote/241618.pdf (Table 5-11) diff --git a/src/system/kernel/arch/x86/arch_cpu.cpp b/src/system/kernel/arch/x86/arch_cpu.cpp index fc120be406..d3dd98434f 100644 --- a/src/system/kernel/arch/x86/arch_cpu.cpp +++ b/src/system/kernel/arch/x86/arch_cpu.cpp @@ -495,6 +495,32 @@ dump_feature_string(int currentCPU, cpu_ent* cpu) strlcat(features, "ecmd ", sizeof(features)); if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_PTM) strlcat(features, "ptm ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP) + strlcat(features, "hwp ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_NOTIFY) + strlcat(features, "hwp_notify ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_ACTWIN) + strlcat(features, "hwp_actwin ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_EPP) + strlcat(features, "hwp_epp ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_PLR) + strlcat(features, "hwp_plr ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HDC) + strlcat(features, "hdc ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_TBMT3) + strlcat(features, "tbmt3 ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_CAP) + strlcat(features, "hwp_cap ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_PECI) + strlcat(features, "hwp_peci ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_FLEX) + strlcat(features, "hwp_flex ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_FAST) + strlcat(features, "hwp_fast ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HW_FEEDBACK) + strlcat(features, "hw_feedback ", sizeof(features)); + if (cpu->arch.feature[FEATURE_6_EAX] & IA32_FEATURE_HWP_IGNIDL) + strlcat(features, "hwp_ignidl ", sizeof(features)); if (cpu->arch.feature[FEATURE_6_ECX] & IA32_FEATURE_APERFMPERF) strlcat(features, "aperfmperf ", sizeof(features)); if (cpu->arch.feature[FEATURE_6_ECX] & IA32_FEATURE_EPB)