Rework _CPU_FEATURES structure

This commit is contained in:
Pedro Valadés 2023-11-27 22:04:31 +01:00
parent 323c173abe
commit 289b1bdebc
No known key found for this signature in database
GPG Key ID: 25780ED196EFD8F5
2 changed files with 165 additions and 144 deletions

View File

@ -190,80 +190,88 @@ typedef enum _CPUID_FEATURES
} CPUID_FEATURES, *PCPUID_FEATURES; } CPUID_FEATURES, *PCPUID_FEATURES;
/* CPU features, as reported by CPUID instruction */ /* CPU features, as reported by CPUID instruction */
typedef struct _CPU_FEATURES { typedef union _CPU_FEATURES
union { {
struct { UINT64 Value;
BOOLEAN SSE3 : 1; union
BOOLEAN PCLMUL : 1; {
BOOLEAN DTES64 : 1; UINT32 Ecx;
BOOLEAN MONITOR : 1;
BOOLEAN DS_CPL : 1;
BOOLEAN VMX : 1;
BOOLEAN SMX : 1;
BOOLEAN EST : 1;
BOOLEAN TM2 : 1;
BOOLEAN SSSE3 : 1;
BOOLEAN CID : 1;
BOOLEAN SDBG : 1;
BOOLEAN FMA : 1;
BOOLEAN CX16 : 1;
BOOLEAN XTPR : 1;
BOOLEAN PDCM : 1;
BOOLEAN Reserved1 : 1; // Bit 16 is reserved
BOOLEAN PCID : 1;
BOOLEAN DCA : 1;
BOOLEAN SSE4_1 : 1;
BOOLEAN SSE4_2 : 1;
BOOLEAN X2APIC : 1;
BOOLEAN MOVBE : 1;
BOOLEAN POPCNT : 1;
BOOLEAN TSC_DEADLINE : 1;
BOOLEAN AES : 1;
BOOLEAN XSAVE : 1;
BOOLEAN OSXSAVE : 1;
BOOLEAN AVX : 1;
BOOLEAN F16C : 1;
BOOLEAN RDRAND : 1;
BOOLEAN HYPERVISOR : 1;
};
UINT32 ExtendedFeatures; UINT32 ExtendedFeatures;
struct
{
BYTE SSE3 : 1;
BYTE PCLMUL : 1;
BYTE DTES64 : 1;
BYTE MONITOR : 1;
BYTE DS_CPL : 1;
BYTE VMX : 1;
BYTE SMX : 1;
BYTE EST : 1;
BYTE TM2 : 1;
BYTE SSSE3 : 1;
BYTE CID : 1;
BYTE SDBG : 1;
BYTE FMA : 1;
BYTE CX16 : 1;
BYTE XTPR : 1;
BYTE PDCM : 1;
BYTE Reserved4 : 1; // Bit 16 is reserved
BYTE PCID : 1;
BYTE DCA : 1;
BYTE SSE4_1 : 1;
BYTE SSE4_2 : 1;
BYTE X2APIC : 1;
BYTE MOVBE : 1;
BYTE POPCNT : 1;
BYTE TSC_DEADLINE : 1;
BYTE AES : 1;
BYTE XSAVE : 1;
BYTE OSXSAVE : 1;
BYTE AVX : 1;
BYTE F16C : 1;
BYTE RDRAND : 1;
BYTE HYPERVISOR : 1;
}; };
union {
struct {
BOOLEAN FPU : 1;
BOOLEAN VME : 1;
BOOLEAN DE : 1;
BOOLEAN PSE : 1;
BOOLEAN TSC : 1;
BOOLEAN MSR : 1;
BOOLEAN PAE : 1;
BOOLEAN MCE : 1;
BOOLEAN CX8 : 1;
BOOLEAN APIC : 1;
BOOLEAN Reserved2 : 1; // Bit 10 is reserved
BOOLEAN SEP : 1;
BOOLEAN MTRR : 1;
BOOLEAN PGE : 1;
BOOLEAN MCA : 1;
BOOLEAN CMOV : 1;
BOOLEAN PAT : 1;
BOOLEAN PSE36 : 1;
BOOLEAN PSN : 1;
BOOLEAN CLFLUSH : 1;
BOOLEAN Reserved3 : 1; // Bit 20 is reserved
BOOLEAN DS : 1;
BOOLEAN ACPI : 1;
BOOLEAN MMX : 1;
BOOLEAN FXSR : 1;
BOOLEAN SSE : 1;
BOOLEAN SSE2 : 1;
BOOLEAN SS : 1;
BOOLEAN HTT : 1;
BOOLEAN TM : 1;
BOOLEAN Reserved4 : 1; // Bit 30 is reserved
BOOLEAN PBE : 1;
}; };
UINT64 Features; union
{
UINT32 Edx;
UINT32 Features;
struct
{
BYTE FPU : 1;
BYTE VME : 1;
BYTE DE : 1;
BYTE PSE : 1;
BYTE TSC : 1;
BYTE MSR : 1;
BYTE PAE : 1;
BYTE MCE : 1;
BYTE CX8 : 1;
BYTE APIC : 1;
BYTE Reserved1 : 1; // Bit 10 is reserved
BYTE SEP : 1;
BYTE MTRR : 1;
BYTE PGE : 1;
BYTE MCA : 1;
BYTE CMOV : 1;
BYTE PAT : 1;
BYTE PSE36 : 1;
BYTE PSN : 1;
BYTE CLFLUSH : 1;
BYTE Reserved2 : 1; // Bit 20 is reserved
BYTE DS : 1;
BYTE ACPI : 1;
BYTE MMX : 1;
BYTE FXSR : 1;
BYTE SSE : 1;
BYTE SSE2 : 1;
BYTE SS : 1;
BYTE HTT : 1;
BYTE TM : 1;
BYTE Reserved3 : 1; // Bit 30 is reserved
BYTE PBE : 1;
};
}; };
} CPU_FEATURES, *PCPU_FEATURES; } CPU_FEATURES, *PCPU_FEATURES;

View File

@ -141,75 +141,88 @@ typedef enum _CPUID_FEATURES
} CPUID_FEATURES, *PCPUID_FEATURES; } CPUID_FEATURES, *PCPUID_FEATURES;
/* CPU features, as reported by CPUID instruction */ /* CPU features, as reported by CPUID instruction */
typedef struct _CPU_FEATURES { typedef union _CPU_FEATURES
union { {
struct { UINT64 Value;
BOOLEAN SSE3 : 1; union
BOOLEAN PCLMUL : 1; {
BOOLEAN DTES64 : 1; UINT32 Ecx;
BOOLEAN MONITOR : 1; UINT32 ExtendedFeatures;
BOOLEAN DS_CPL : 1; struct
BOOLEAN VMX : 1; {
BOOLEAN SMX : 1; BYTE SSE3 : 1;
BOOLEAN EST : 1; BYTE PCLMUL : 1;
BOOLEAN TM2 : 1; BYTE DTES64 : 1;
BOOLEAN SSSE3 : 1; BYTE MONITOR : 1;
BOOLEAN CID : 1; BYTE DS_CPL : 1;
BOOLEAN SDBG : 1; BYTE VMX : 1;
BOOLEAN FMA : 1; BYTE SMX : 1;
BOOLEAN CX16 : 1; BYTE EST : 1;
BOOLEAN XTPR : 1; BYTE TM2 : 1;
BOOLEAN PDCM : 1; BYTE SSSE3 : 1;
BOOLEAN Reserved1 : 1; // Bit 16 is reserved BYTE CID : 1;
BOOLEAN PCID : 1; BYTE SDBG : 1;
BOOLEAN DCA : 1; BYTE FMA : 1;
BOOLEAN SSE4_1 : 1; BYTE CX16 : 1;
BOOLEAN SSE4_2 : 1; BYTE XTPR : 1;
BOOLEAN X2APIC : 1; BYTE PDCM : 1;
BOOLEAN MOVBE : 1; BYTE Reserved1 : 1; // Bit 16 is reserved
BOOLEAN POPCNT : 1; BYTE PCID : 1;
BOOLEAN TSC_DEADLINE : 1; BYTE DCA : 1;
BOOLEAN AES : 1; BYTE SSE4_1 : 1;
BOOLEAN XSAVE : 1; BYTE SSE4_2 : 1;
BOOLEAN OSXSAVE : 1; BYTE X2APIC : 1;
BOOLEAN AVX : 1; BYTE MOVBE : 1;
BOOLEAN F16C : 1; BYTE POPCNT : 1;
BOOLEAN RDRAND : 1; BYTE TSC_DEADLINE : 1;
BOOLEAN HYPERVISOR : 1; BYTE AES : 1;
BOOLEAN FPU : 1; BYTE XSAVE : 1;
BOOLEAN VME : 1; BYTE OSXSAVE : 1;
BOOLEAN DE : 1; BYTE AVX : 1;
BOOLEAN PSE : 1; BYTE F16C : 1;
BOOLEAN TSC : 1; BYTE RDRAND : 1;
BOOLEAN MSR : 1; BYTE HYPERVISOR : 1;
BOOLEAN PAE : 1; };
BOOLEAN MCE : 1; };
BOOLEAN CX8 : 1; union
BOOLEAN APIC : 1; {
BOOLEAN Reserved2 : 1; // Bit 10 is reserved UINT32 Edx;
BOOLEAN SEP : 1; UINT32 Features;
BOOLEAN MTRR : 1; struct
BOOLEAN PGE : 1; {
BOOLEAN MCA : 1; BYTE FPU : 1;
BOOLEAN CMOV : 1; BYTE VME : 1;
BOOLEAN PAT : 1; BYTE DE : 1;
BOOLEAN PSE36 : 1; BYTE PSE : 1;
BOOLEAN PSN : 1; BYTE TSC : 1;
BOOLEAN CLFLUSH : 1; BYTE MSR : 1;
BOOLEAN Reserved3 : 1; // Bit 20 is reserved BYTE PAE : 1;
BOOLEAN DS : 1; BYTE MCE : 1;
BOOLEAN ACPI : 1; BYTE CX8 : 1;
BOOLEAN MMX : 1; BYTE APIC : 1;
BOOLEAN FXSR : 1; BYTE Reserved2 : 1; // Bit 10 is reserved
BOOLEAN SSE : 1; BYTE SEP : 1;
BOOLEAN SSE2 : 1; BYTE MTRR : 1;
BOOLEAN SS : 1; BYTE PGE : 1;
BOOLEAN HTT : 1; BYTE MCA : 1;
BOOLEAN TM : 1; BYTE CMOV : 1;
BOOLEAN Reserved4 : 1; // Bit 30 is reserved BYTE PAT : 1;
BOOLEAN PBE : 1; BYTE PSE36 : 1;
BYTE PSN : 1;
BYTE CLFLUSH : 1;
BYTE Reserved3 : 1; // Bit 20 is reserved
BYTE DS : 1;
BYTE ACPI : 1;
BYTE MMX : 1;
BYTE FXSR : 1;
BYTE SSE : 1;
BYTE SSE2 : 1;
BYTE SS : 1;
BYTE HTT : 1;
BYTE TM : 1;
BYTE Reserved4 : 1; // Bit 30 is reserved
BYTE PBE : 1;
}; };
UINT64 AsUINT64;
}; };
} CPU_FEATURES, *PCPU_FEATURES; } CPU_FEATURES, *PCPU_FEATURES;