diff --git a/sdk/xtdk/amd64/artypes.h b/sdk/xtdk/amd64/artypes.h index 59f7415..93cd15c 100644 --- a/sdk/xtdk/amd64/artypes.h +++ b/sdk/xtdk/amd64/artypes.h @@ -53,6 +53,14 @@ /* Initial MXCSR control */ #define INITIAL_MXCSR 0x1F80 +/* Page Attributes Table types */ +#define PAT_TYPE_STRONG_UC 0ULL +#define PAT_TYPE_USWC 1ULL +#define PAT_TYPE_WT 4ULL +#define PAT_TYPE_WP 5ULL +#define PAT_TYPE_WB 6ULL +#define PAT_TYPE_WEAK_UC 7ULL + /* Segment defintions */ #define SEGMENT_CS 0x2E #define SEGMENT_DS 0x3E @@ -66,6 +74,7 @@ #define X86_MSR_SYSENTER_ESP 0x00000175 #define X86_MSR_SYSENTER_EIP 0x00000176 #define X86_MSR_POWER_CONTROL 0x000001FC +#define X86_MSR_PAT 0x00000277 #define X86_MSR_EFER 0xC0000080 #define X86_MSR_STAR 0xC0000081 #define X86_MSR_LSTAR 0xC0000082 diff --git a/sdk/xtdk/amd64/xtstruct.h b/sdk/xtdk/amd64/xtstruct.h index 155b213..84614e1 100644 --- a/sdk/xtdk/amd64/xtstruct.h +++ b/sdk/xtdk/amd64/xtstruct.h @@ -12,11 +12,11 @@ #include -/* Architecture-related enumeration lists forward references */ +/* Architecture-specific enumeration lists forward references */ typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES; typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS; -/* Architecture-related structures forward references */ +/* Architecture-specific structures forward references */ typedef struct _CONTEXT CONTEXT, *PCONTEXT; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; diff --git a/sdk/xtdk/i686/xtstruct.h b/sdk/xtdk/i686/xtstruct.h index 61fee73..a17e854 100644 --- a/sdk/xtdk/i686/xtstruct.h +++ b/sdk/xtdk/i686/xtstruct.h @@ -12,11 +12,11 @@ #include -/* Architecture-related enumeration lists forward references */ +/* Architecture-specific enumeration lists forward references */ typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES; typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS; -/* Architecture-related structures forward references */ +/* Architecture-specific structures forward references */ typedef struct _CONTEXT CONTEXT, *PCONTEXT; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; diff --git a/xtoskrnl/ar/amd64/procsup.c b/xtoskrnl/ar/amd64/procsup.c index a409093..bba02c4 100644 --- a/xtoskrnl/ar/amd64/procsup.c +++ b/xtoskrnl/ar/amd64/procsup.c @@ -209,6 +209,8 @@ XTAPI VOID ArpInitializeProcessorRegisters(VOID) { + ULONGLONG PatAttributes; + /* Enable FXSAVE restore */ ArWriteControlRegister(4, ArReadControlRegister(4) | CR4_FXSR); @@ -247,6 +249,11 @@ ArpInitializeProcessorRegisters(VOID) /* Enable No-Execute (NXE) in EFER MSR */ ArWriteModelSpecificRegister(X86_MSR_EFER, ArReadModelSpecificRegister(X86_MSR_EFER) | X86_MSR_EFER_NXE); + + /* Initialize Page Attribute Table */ + PatAttributes = (PAT_TYPE_WB << 0) | (PAT_TYPE_USWC << 8) | (PAT_TYPE_WEAK_UC << 16) | (PAT_TYPE_STRONG_UC << 24) | + (PAT_TYPE_WB << 32) | (PAT_TYPE_USWC << 40) | (PAT_TYPE_WEAK_UC << 48) | (PAT_TYPE_STRONG_UC << 56); + ArWriteModelSpecificRegister(X86_MSR_PAT, PatAttributes); } /**