From 3973bfdf7936f4574aa28a97b7343319aa344bc3 Mon Sep 17 00:00:00 2001 From: aqua Date: Sun, 17 Jul 2022 23:04:47 +0300 Subject: Print version, compiler id and version, and cpuid on boot --- arch/i686/include/sys/cpuid.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 arch/i686/include/sys/cpuid.h (limited to 'arch/i686/include') diff --git a/arch/i686/include/sys/cpuid.h b/arch/i686/include/sys/cpuid.h new file mode 100644 index 0000000..f2ffe37 --- /dev/null +++ b/arch/i686/include/sys/cpuid.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +struct CPUVersion { + unsigned int stepping : 4; + unsigned int model : 4; + unsigned int family : 4; + unsigned int type : 2; + unsigned int __unused_1 : 2; + unsigned int model_ex : 4; + unsigned int family_ex : 8; + unsigned int __unused_2 : 4; +} __attribute__((packed, aligned(__alignof__(unsigned int)))); +_Static_assert(sizeof(struct CPUVersion) == sizeof(unsigned int)); + +unsigned int +family(const struct CPUVersion v) +{ + if (v.family == 0x0f) return v.family + v.family_ex; + else + return v.family; +} + +unsigned int +model(const struct CPUVersion v) +{ + switch (v.family) { + case 0x06: + case 0x0f: + return ((unsigned int)v.model_ex << 4) | v.model; + default: + return v.model; + } +} -- cgit v1.2.1