From 3c92aa45fb2d49f0b6d161a96da68899ded5cf00 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 28 Dec 2022 19:46:37 +0200 Subject: [PATCH] Kernel: 'cpuinfo' command in shell now shows wheter you are running on 64-bit cpu --- kernel/arch/i386/CPUID.cpp | 14 ++++++++++++++ kernel/include/kernel/CPUID.h | 1 + kernel/kernel/Shell.cpp | 1 + 3 files changed, 16 insertions(+) diff --git a/kernel/arch/i386/CPUID.cpp b/kernel/arch/i386/CPUID.cpp index ce7ee428..02075eff 100644 --- a/kernel/arch/i386/CPUID.cpp +++ b/kernel/arch/i386/CPUID.cpp @@ -46,4 +46,18 @@ namespace CPUID edx = buffer[3]; } + bool Is64Bit() + { + if (!IsAvailable()) + return false; + + uint32_t buffer[4] {}; + get_cpuid(0x80000000, buffer); + if (buffer[0] < 0x80000001) + return false; + + get_cpuid(0x80000001, buffer); + return buffer[3] & (1 << 29); + } + } diff --git a/kernel/include/kernel/CPUID.h b/kernel/include/kernel/CPUID.h index 6d631139..6f9cf776 100644 --- a/kernel/include/kernel/CPUID.h +++ b/kernel/include/kernel/CPUID.h @@ -151,5 +151,6 @@ namespace CPUID bool IsAvailable(); const char* GetVendor(); void GetFeatures(uint32_t& ecx, uint32_t& edx); + bool Is64Bit(); } \ No newline at end of file diff --git a/kernel/kernel/Shell.cpp b/kernel/kernel/Shell.cpp index 1b643f1b..18ef3df2 100644 --- a/kernel/kernel/Shell.cpp +++ b/kernel/kernel/Shell.cpp @@ -120,6 +120,7 @@ namespace Kernel CPUID::GetFeatures(ecx, edx); TTY_PRINTLN("Vendor: '{}'", vendor); + TTY_PRINTLN("64-bit: {}", CPUID::Is64Bit()); bool first = true; for (int i = 0; i < 32; i++) if (ecx & ((uint32_t)1 << i))