diff --git a/kernel/arch/i386/CPUID.cpp b/kernel/arch/i386/CPUID.cpp index dadde7e87..a88b24c77 100644 --- a/kernel/arch/i386/CPUID.cpp +++ b/kernel/arch/i386/CPUID.cpp @@ -39,4 +39,81 @@ namespace CPUID return buffer[3] & (1 << 29); } + const char* FeatStringECX(uint32_t feat) + { + switch (feat) + { + case Features::ECX_SSE3: return "ECX_SSE3"; + case Features::ECX_PCLMULQDQ: return "ECX_PCLMULQDQ"; + case Features::ECX_DTES64: return "ECX_DTES64"; + case Features::ECX_MONITOR: return "ECX_MONITOR"; + case Features::ECX_DS_CPL: return "ECX_DS_CPL"; + case Features::ECX_VMX: return "ECX_VMX"; + case Features::ECX_SMX: return "ECX_SMX"; + case Features::ECX_EST: return "ECX_EST"; + case Features::ECX_TM2: return "ECX_TM2"; + case Features::ECX_SSSE3: return "ECX_SSSE3"; + case Features::ECX_CNTX_ID: return "ECX_CNTX_ID"; + case Features::ECX_SDBG: return "ECX_SDBG"; + case Features::ECX_FMA: return "ECX_FMA"; + case Features::ECX_CX16: return "ECX_CX16"; + case Features::ECX_XTPR: return "ECX_XTPR"; + case Features::ECX_PDCM: return "ECX_PDCM"; + case Features::ECX_PCID: return "ECX_PCID"; + case Features::ECX_DCA: return "ECX_DCA"; + case Features::ECX_SSE4_1: return "ECX_SSE4_1"; + case Features::ECX_SSE4_2: return "ECX_SSE4_2"; + case Features::ECX_X2APIC: return "ECX_X2APIC"; + case Features::ECX_MOVBE: return "ECX_MOVBE"; + case Features::ECX_POPCNT: return "ECX_POPCNT"; + case Features::ECX_TSC_DEADLINE: return "ECX_TSC_DEADLINE"; + case Features::ECX_AES: return "ECX_AES"; + case Features::ECX_XSAVE: return "ECX_XSAVE"; + case Features::ECX_OSXSAVE: return "ECX_OSXSAVE"; + case Features::ECX_AVX: return "ECX_AVX"; + case Features::ECX_F16C: return "ECX_F16C"; + case Features::ECX_RDRND: return "ECX_RDRND"; + case Features::ECX_HYPERVISOR: return "ECX_HYPERVISOR"; + default: return "UNKNOWN"; + } + } + + const char* FeatStringEDX(uint32_t feat) + { + switch (feat) + { + case Features::EDX_FPU: return "EDX_FPU"; + case Features::EDX_VME: return "EDX_VME"; + case Features::EDX_DE: return "EDX_DE"; + case Features::EDX_PSE: return "EDX_PSE"; + case Features::EDX_TSC: return "EDX_TSC"; + case Features::EDX_MSR: return "EDX_MSR"; + case Features::EDX_PAE: return "EDX_PAE"; + case Features::EDX_MCE: return "EDX_MCE"; + case Features::EDX_CX8: return "EDX_CX8"; + case Features::EDX_APIC: return "EDX_APIC"; + case Features::EDX_SEP: return "EDX_SEP"; + case Features::EDX_MTRR: return "EDX_MTRR"; + case Features::EDX_PGE: return "EDX_PGE"; + case Features::EDX_MCA: return "EDX_MCA"; + case Features::EDX_CMOV: return "EDX_CMOV"; + case Features::EDX_PAT: return "EDX_PAT"; + case Features::EDX_PSE36: return "EDX_PSE36"; + case Features::EDX_PSN: return "EDX_PSN"; + case Features::EDX_CLFSH: return "EDX_CLFSH"; + case Features::EDX_DS: return "EDX_DS"; + case Features::EDX_ACPI: return "EDX_ACPI"; + case Features::EDX_MMX: return "EDX_MMX"; + case Features::EDX_FXSR: return "EDX_FXSR"; + case Features::EDX_SSE: return "EDX_SSE"; + case Features::EDX_SSE2: return "EDX_SSE2"; + case Features::EDX_SS: return "EDX_SS"; + case Features::EDX_HTT: return "EDX_HTT"; + case Features::EDX_TM: return "EDX_TM"; + case Features::EDX_IA64: return "EDX_IA64"; + case Features::EDX_PBE: return "EDX_PBE"; + default: return "NONE"; + } + } + } diff --git a/kernel/include/kernel/CPUID.h b/kernel/include/kernel/CPUID.h index 0e9445ac6..5b08c2321 100644 --- a/kernel/include/kernel/CPUID.h +++ b/kernel/include/kernel/CPUID.h @@ -71,83 +71,9 @@ namespace CPUID EDX_PBE = (uint32_t)1 << 31, }; - static const char* FeatStringECX(uint32_t feat) - { - switch (feat) - { - case Features::ECX_SSE3: return "ECX_SSE3"; - case Features::ECX_PCLMULQDQ: return "ECX_PCLMULQDQ"; - case Features::ECX_DTES64: return "ECX_DTES64"; - case Features::ECX_MONITOR: return "ECX_MONITOR"; - case Features::ECX_DS_CPL: return "ECX_DS_CPL"; - case Features::ECX_VMX: return "ECX_VMX"; - case Features::ECX_SMX: return "ECX_SMX"; - case Features::ECX_EST: return "ECX_EST"; - case Features::ECX_TM2: return "ECX_TM2"; - case Features::ECX_SSSE3: return "ECX_SSSE3"; - case Features::ECX_CNTX_ID: return "ECX_CNTX_ID"; - case Features::ECX_SDBG: return "ECX_SDBG"; - case Features::ECX_FMA: return "ECX_FMA"; - case Features::ECX_CX16: return "ECX_CX16"; - case Features::ECX_XTPR: return "ECX_XTPR"; - case Features::ECX_PDCM: return "ECX_PDCM"; - case Features::ECX_PCID: return "ECX_PCID"; - case Features::ECX_DCA: return "ECX_DCA"; - case Features::ECX_SSE4_1: return "ECX_SSE4_1"; - case Features::ECX_SSE4_2: return "ECX_SSE4_2"; - case Features::ECX_X2APIC: return "ECX_X2APIC"; - case Features::ECX_MOVBE: return "ECX_MOVBE"; - case Features::ECX_POPCNT: return "ECX_POPCNT"; - case Features::ECX_TSC_DEADLINE: return "ECX_TSC_DEADLINE"; - case Features::ECX_AES: return "ECX_AES"; - case Features::ECX_XSAVE: return "ECX_XSAVE"; - case Features::ECX_OSXSAVE: return "ECX_OSXSAVE"; - case Features::ECX_AVX: return "ECX_AVX"; - case Features::ECX_F16C: return "ECX_F16C"; - case Features::ECX_RDRND: return "ECX_RDRND"; - case Features::ECX_HYPERVISOR: return "ECX_HYPERVISOR"; - default: return "UNKNOWN"; - } - } - - static const char* FeatStringEDX(uint32_t feat) - { - switch (feat) - { - case Features::EDX_FPU: return "EDX_FPU"; - case Features::EDX_VME: return "EDX_VME"; - case Features::EDX_DE: return "EDX_DE"; - case Features::EDX_PSE: return "EDX_PSE"; - case Features::EDX_TSC: return "EDX_TSC"; - case Features::EDX_MSR: return "EDX_MSR"; - case Features::EDX_PAE: return "EDX_PAE"; - case Features::EDX_MCE: return "EDX_MCE"; - case Features::EDX_CX8: return "EDX_CX8"; - case Features::EDX_APIC: return "EDX_APIC"; - case Features::EDX_SEP: return "EDX_SEP"; - case Features::EDX_MTRR: return "EDX_MTRR"; - case Features::EDX_PGE: return "EDX_PGE"; - case Features::EDX_MCA: return "EDX_MCA"; - case Features::EDX_CMOV: return "EDX_CMOV"; - case Features::EDX_PAT: return "EDX_PAT"; - case Features::EDX_PSE36: return "EDX_PSE36"; - case Features::EDX_PSN: return "EDX_PSN"; - case Features::EDX_CLFSH: return "EDX_CLFSH"; - case Features::EDX_DS: return "EDX_DS"; - case Features::EDX_ACPI: return "EDX_ACPI"; - case Features::EDX_MMX: return "EDX_MMX"; - case Features::EDX_FXSR: return "EDX_FXSR"; - case Features::EDX_SSE: return "EDX_SSE"; - case Features::EDX_SSE2: return "EDX_SSE2"; - case Features::EDX_SS: return "EDX_SS"; - case Features::EDX_HTT: return "EDX_HTT"; - case Features::EDX_TM: return "EDX_TM"; - case Features::EDX_IA64: return "EDX_IA64"; - case Features::EDX_PBE: return "EDX_PBE"; - default: return "NONE"; - } - } - + const char* FeatStringECX(uint32_t feat); + const char* FeatStringEDX(uint32_t feat); + const char* GetVendor(); void GetFeatures(uint32_t& ecx, uint32_t& edx); bool Is64Bit();