diff --git a/kernel/include/kernel/CPUID.h b/kernel/include/kernel/CPUID.h index 8e0c8a006..075c3a962 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 0ef638383..08c040e31 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)