From 297e65f19a30b22fbce5e782161f314a1dfd04f5 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 13 Jul 2023 14:24:58 +0300 Subject: [PATCH] Kernel: CPUID can detect wether cpu supports nxe bit --- kernel/include/kernel/CPUID.h | 1 + kernel/kernel/CPUID.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/kernel/include/kernel/CPUID.h b/kernel/include/kernel/CPUID.h index 8e0c8a00..075c3a96 100644 --- a/kernel/include/kernel/CPUID.h +++ b/kernel/include/kernel/CPUID.h @@ -77,5 +77,6 @@ namespace CPUID const char* get_vendor(); void get_features(uint32_t& ecx, uint32_t& edx); bool is_64_bit(); + bool has_nxe(); } \ No newline at end of file diff --git a/kernel/kernel/CPUID.cpp b/kernel/kernel/CPUID.cpp index 0ef63838..08c040e3 100644 --- a/kernel/kernel/CPUID.cpp +++ b/kernel/kernel/CPUID.cpp @@ -39,6 +39,17 @@ namespace CPUID return buffer[3] & (1 << 29); } + bool has_nxe() + { + uint32_t buffer[4] {}; + get_cpuid(0x80000000, buffer); + if (buffer[0] < 0x80000001) + return false; + + get_cpuid(0x80000001, buffer); + return buffer[3] & (1 << 20); + } + const char* feature_string_ecx(uint32_t feat) { switch (feat)