Processor identification structures
All checks were successful
ci/woodpecker/push/build Pipeline was successful

This commit is contained in:
Rafal Kupiec 2023-02-10 17:14:12 +01:00
parent e645cf664c
commit e94cb2d3a7
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
6 changed files with 70 additions and 0 deletions

View File

@ -110,6 +110,14 @@
#define X86_EFLAGS_VIP_MASK 0x00100000 #define X86_EFLAGS_VIP_MASK 0x00100000
#define X86_EFLAGS_ID_MASK 0x00200000 #define X86_EFLAGS_ID_MASK 0x00200000
/* CPU vendor enumeration list */
typedef enum _CPU_VENDOR
{
CPU_VENDOR_AMD = 0x68747541,
CPU_VENDOR_INTEL = 0x756e6547,
CPU_VENDOR_UNKNOWN = 0xFFFFFFFF
} CPU_VENDOR, *PCPU_VENDOR;
/* CPUID features enumeration list */ /* CPUID features enumeration list */
typedef enum _CPUID_FEATURES typedef enum _CPUID_FEATURES
{ {
@ -185,6 +193,16 @@ typedef enum _CPUID_REQUESTS
CPUID_GET_SERIAL CPUID_GET_SERIAL
} CPUID_REQUESTS, *PCPUID_REQUESTS; } CPUID_REQUESTS, *PCPUID_REQUESTS;
/* Processor identification information */
typedef struct _CPU_IDENTIFICATION
{
USHORT Family;
USHORT Model;
USHORT Stepping;
CPU_VENDOR Vendor;
UCHAR VendorName[13];
} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
/* CPUID registers */ /* CPUID registers */
typedef struct _CPUID_REGISTERS typedef struct _CPUID_REGISTERS
{ {
@ -196,4 +214,16 @@ typedef struct _CPUID_REGISTERS
UINT32 Edx; UINT32 Edx;
} CPUID_REGISTERS, *PCPUID_REGISTERS; } CPUID_REGISTERS, *PCPUID_REGISTERS;
/* CPU signature read from CPUID structure definition */
typedef struct _CPUID_SIGNATURE
{
ULONG Stepping:4;
ULONG Model:4;
ULONG Family:4;
ULONG Unused1:4;
ULONG ExtendedModel:4;
ULONG ExtendedFamily:8;
ULONG Unused2:4;
} CPU_SIGNATURE, *PCPU_SIGNATURE;
#endif /* __XTDK_AMD64_ARTYPES_H */ #endif /* __XTDK_AMD64_ARTYPES_H */

View File

@ -13,6 +13,7 @@
#include <xtstruct.h> #include <xtstruct.h>
#include <xttypes.h> #include <xttypes.h>
#include ARCH_HEADER(xtstruct.h) #include ARCH_HEADER(xtstruct.h)
#include ARCH_HEADER(artypes.h)
/* Selector masks */ /* Selector masks */
@ -449,6 +450,7 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
PKTHREAD NextThread; PKTHREAD NextThread;
ULONG64 RspBase; ULONG64 RspBase;
ULONG_PTR SetMember; ULONG_PTR SetMember;
CPU_IDENTIFICATION CpuId;
KPROCESSOR_STATE ProcessorState; KPROCESSOR_STATE ProcessorState;
PVOID DpcStack; PVOID DpcStack;
ULONG_PTR MultiThreadProcessorSet; ULONG_PTR MultiThreadProcessorSet;

View File

@ -13,12 +13,15 @@
/* Architecture-specific enumeration lists forward references */ /* Architecture-specific enumeration lists forward references */
typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR;
typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES; typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES;
typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS; typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS;
/* Architecture-specific structures forward references */ /* Architecture-specific structures forward references */
typedef struct _CONTEXT CONTEXT, *PCONTEXT; typedef struct _CONTEXT CONTEXT, *PCONTEXT;
typedef struct _CPU_IDENTIFICATION CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS;
typedef struct _CPUID_SIGNATURE CPUID_SIGNATURE, *PCPUID_SIGNATURE;
typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE; typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE;
typedef struct _KDESCRIPTOR KDESCRIPTOR, *PKDESCRIPTOR; typedef struct _KDESCRIPTOR KDESCRIPTOR, *PKDESCRIPTOR;

View File

@ -61,6 +61,14 @@
#define SEGMENT_FS 0x64 #define SEGMENT_FS 0x64
#define SEGMENT_GS 0x65 #define SEGMENT_GS 0x65
/* CPU vendor enumeration list */
typedef enum _CPU_VENDOR
{
CPU_VENDOR_AMD = 0x68747541,
CPU_VENDOR_INTEL = 0x756e6547,
CPU_VENDOR_UNKNOWN = 0xFFFFFFFF
} CPU_VENDOR, *PCPU_VENDOR;
/* CPUID features enumeration list */ /* CPUID features enumeration list */
typedef enum _CPUID_FEATURES typedef enum _CPUID_FEATURES
{ {
@ -136,6 +144,16 @@ typedef enum _CPUID_REQUESTS
CPUID_GET_SERIAL CPUID_GET_SERIAL
} CPUID_REQUESTS, *PCPUID_REQUESTS; } CPUID_REQUESTS, *PCPUID_REQUESTS;
/* Processor identification information */
typedef struct _CPU_IDENTIFICATION
{
USHORT Family;
USHORT Model;
USHORT Stepping;
CPU_VENDOR Vendor;
UCHAR VendorName[13];
} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
/* CPUID registers */ /* CPUID registers */
typedef struct _CPUID_REGISTERS typedef struct _CPUID_REGISTERS
{ {
@ -147,4 +165,16 @@ typedef struct _CPUID_REGISTERS
UINT32 Edx; UINT32 Edx;
} CPUID_REGISTERS, *PCPUID_REGISTERS; } CPUID_REGISTERS, *PCPUID_REGISTERS;
/* CPU signature read from CPUID structure definition */
typedef struct _CPUID_SIGNATURE
{
ULONG Stepping:4;
ULONG Model:4;
ULONG Family:4;
ULONG Unused1:4;
ULONG ExtendedModel:4;
ULONG ExtendedFamily:8;
ULONG Unused2:4;
} CPU_SIGNATURE, *PCPU_SIGNATURE;
#endif /* __XTDK_I686_ARTYPES_H */ #endif /* __XTDK_I686_ARTYPES_H */

View File

@ -13,6 +13,7 @@
#include <xtstruct.h> #include <xtstruct.h>
#include <xttypes.h> #include <xttypes.h>
#include ARCH_HEADER(xtstruct.h) #include ARCH_HEADER(xtstruct.h)
#include ARCH_HEADER(artypes.h)
/* Selector masks */ /* Selector masks */
@ -352,6 +353,7 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
PKTHREAD NextThread; PKTHREAD NextThread;
UCHAR Number; UCHAR Number;
ULONG_PTR SetMember; ULONG_PTR SetMember;
CPU_IDENTIFICATION CpuId;
KPROCESSOR_STATE ProcessorState; KPROCESSOR_STATE ProcessorState;
ULONG_PTR MultiThreadProcessorSet; ULONG_PTR MultiThreadProcessorSet;
PVOID DpcStack; PVOID DpcStack;

View File

@ -13,12 +13,15 @@
/* Architecture-specific enumeration lists forward references */ /* Architecture-specific enumeration lists forward references */
typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR;
typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES; typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES;
typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS; typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS;
/* Architecture-specific structures forward references */ /* Architecture-specific structures forward references */
typedef struct _CONTEXT CONTEXT, *PCONTEXT; typedef struct _CONTEXT CONTEXT, *PCONTEXT;
typedef struct _CPU_IDENTIFICATION CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS;
typedef struct _CPUID_SIGNATURE CPUID_SIGNATURE, *PCPUID_SIGNATURE;
typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE; typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE;
typedef struct _HARDWARE_PTE_PAE HARDWARE_PTE_PAE, *PHARDWARE_PTE_PAE; typedef struct _HARDWARE_PTE_PAE HARDWARE_PTE_PAE, *PHARDWARE_PTE_PAE;