From cfee4d84b350bb4bdcd18ea9f5b53ca30124290f Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Sun, 25 Oct 2015 23:43:47 +0100 Subject: [PATCH] check CPU for mwait and dca support --- hermit/arch/x86/include/asm/processor.h | 18 ++++++++++++++---- hermit/arch/x86/kernel/processor.c | 6 ++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/hermit/arch/x86/include/asm/processor.h b/hermit/arch/x86/include/asm/processor.h index f5367aab8..b5bdeb02d 100644 --- a/hermit/arch/x86/include/asm/processor.h +++ b/hermit/arch/x86/include/asm/processor.h @@ -62,8 +62,10 @@ extern "C" { #define CPU_FEATURE_SSE2 (1 << 26) // feature list 0x00000001 (ecx) +#define CPU_FEATURE_MWAIT (1 << 3) #define CPU_FEATURE_SSE3 (1 << 9) #define CPU_FEATURE_FMA (1 << 12) +#define CPU_FEATURE_DCA (1 << 18) #define CPU_FEATURE_SSE4_1 (1 << 19) #define CPU_FEATURE_SSE4_2 (1 << 20) #define CPU_FEATURE_X2APIC (1 << 21) @@ -250,19 +252,27 @@ inline static uint32_t has_movbe(void) { } inline static uint32_t has_fma(void) { - return (cpu_info.feature2 & CPU_FEATURE_FMA); + return (cpu_info.feature2 & CPU_FEATURE_FMA); +} + +inline static uint32_t has_mwait(void) { + return (cpu_info.feature2 & CPU_FEATURE_MWAIT); } inline static uint32_t has_sse3(void) { - return (cpu_info.feature2 & CPU_FEATURE_SSE3); + return (cpu_info.feature2 & CPU_FEATURE_SSE3); +} + +inline static uint32_t has_dca(void) { + return (cpu_info.feature2 & CPU_FEATURE_DCA); } inline static uint32_t has_sse4_1(void) { - return (cpu_info.feature2 & CPU_FEATURE_SSE4_1); + return (cpu_info.feature2 & CPU_FEATURE_SSE4_1); } inline static uint32_t has_sse4_2(void) { - return (cpu_info.feature2 & CPU_FEATURE_SSE4_2); + return (cpu_info.feature2 & CPU_FEATURE_SSE4_2); } inline static uint32_t has_x2apic(void) { diff --git a/hermit/arch/x86/kernel/processor.c b/hermit/arch/x86/kernel/processor.c index f8ec84281..7c4821708 100644 --- a/hermit/arch/x86/kernel/processor.c +++ b/hermit/arch/x86/kernel/processor.c @@ -349,7 +349,7 @@ int cpu_detection(void) { a = b = c = d = 0; cpuid(1, &a, &b, &cpu_info.feature2, &cpu_info.feature1); - kprintf("CPU features: %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", + kprintf("CPU features: %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", has_sse() ? "SSE " : "", has_sse2() ? "SSE2 " : "", has_sse3() ? "SSE3 " : "", @@ -365,7 +365,9 @@ int cpu_detection(void) { has_xsave() ? "XSAVE " : "", has_osxsave() ? "OSXSAVE " : "", has_rdtscp() ? "RDTSCP " : "", - has_fsgsbase() ? "FSGSBASE " : ""); + has_fsgsbase() ? "FSGSBASE " : "", + has_mwait() ? "MWAIT " : "", + has_dca() ? "DCA " : ""); } if (first_time && has_osxsave()) {