Initialize Page Attribute Table
All checks were successful
ci/woodpecker/push/build Pipeline was successful

This commit is contained in:
Rafal Kupiec 2023-02-05 00:14:34 +01:00
parent 55cdae7c83
commit 5eaf7d63a3
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
4 changed files with 20 additions and 4 deletions

View File

@ -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

View File

@ -12,11 +12,11 @@
#include <xtdefs.h>
/* 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;

View File

@ -12,11 +12,11 @@
#include <xtdefs.h>
/* 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;

View File

@ -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);
}
/**