Architecture specific initialization prior to processor structures initialization

This commit is contained in:
2023-01-30 20:34:05 +01:00
parent 6f068513cd
commit a761d3125a
8 changed files with 82 additions and 3 deletions

View File

@@ -20,6 +20,21 @@ XTAPI
VOID
KepArchInitialize(VOID)
{
/* Enable global paging support */
ArWriteControlRegister(4, ArReadControlRegister(4) | CR4_PGE);
/* Enable write-protection */
ArWriteControlRegister(0, ArReadControlRegister(0) | CR0_WP);
/* Set alignment mask */
ArWriteControlRegister(0, ArReadControlRegister(0) | CR0_AM);
/* Re-enable IDE interrupts */
HlIoPortOutByte(0x376, 0);
HlIoPortOutByte(0x3F6, 0);
/* Set system call extensions (SCE) flag in EFER MSR */
ArWriteModelSpecificRegister(X86_MSR_EFER, ArReadModelSpecificRegister(X86_MSR_EFER) | X86_MSR_EFER_SCE);
}
/**

View File

@@ -20,6 +20,15 @@ XTAPI
VOID
KepArchInitialize(VOID)
{
/* Clear EFLAGS register */
ArWriteEflagsRegister(0);
/* Enable write-protection */
ArWriteControlRegister(0, ArReadControlRegister(0) | CR0_WP);
/* Re-enable IDE interrupts */
HlIoPortOutByte(0x376, 0);
HlIoPortOutByte(0x3F6, 0);
}
/**

View File

@@ -49,12 +49,12 @@ KeStartXtSystem(IN PKERNEL_INITIALIZATION_BLOCK Parameters)
/* Initialize kernel stacks */
KepInitializeStack(Parameters);
/* Initialize boot CPU */
ArInitializeProcessor();
/* Architecture specific initialization */
KepArchInitialize();
/* Initialize boot CPU */
ArInitializeProcessor();
/* Switch boot stack alligning it to 4 byte boundary */
KepSwitchBootStack(KeInitializationBlock->KernelBootStack & ~0x3);
}