From eba1c83c2fd4b8b5704eaa21113346d18753de46 Mon Sep 17 00:00:00 2001 From: fef Date: Wed, 10 Nov 2021 02:04:06 +0100 Subject: [PATCH] x86: add inline CPUID instruction --- arch/x86/include/arch/cpufunc.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/x86/include/arch/cpufunc.h b/arch/x86/include/arch/cpufunc.h index 6122295..da0ccd2 100644 --- a/arch/x86/include/arch/cpufunc.h +++ b/arch/x86/include/arch/cpufunc.h @@ -74,6 +74,22 @@ static __always_inline void halt(void) __asm__ volatile("hlt"); } +struct x86_cpuid_ret { + u32 eax; + u32 ebx; + u32 ecx; + u32 edx; +}; + +static inline void x86_cpuid(struct x86_cpuid_ret *ret, u32 eax, u32 ecx) +{ + __asm__ volatile( + "cpuid" + : "=a"(ret->eax), "=b"(ret->ebx), "=c"(ret->ecx), "=d"(ret->edx) + : "0"(eax), "c"(ecx) + ); +} + static __always_inline void x86_pause(void) { __asm__ volatile("pause");