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");