Initialize segment registers
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
This commit is contained in:
parent
f37722b6e6
commit
f181215341
@ -53,13 +53,16 @@ ArInitializeProcessor(VOID)
|
|||||||
ArLoadInterruptDescriptorTable(&IdtDescriptor.Limit);
|
ArLoadInterruptDescriptorTable(&IdtDescriptor.Limit);
|
||||||
ArLoadTaskRegister((UINT)KGDT_SYS_TSS);
|
ArLoadTaskRegister((UINT)KGDT_SYS_TSS);
|
||||||
|
|
||||||
/* Set GS base */
|
|
||||||
ArWriteModelSpecificRegister(X86_MSR_GSBASE, (ULONGLONG)ProcessorBlock);
|
|
||||||
ArWriteModelSpecificRegister(X86_MSR_KERNEL_GSBASE, (ULONGLONG)ProcessorBlock);
|
|
||||||
|
|
||||||
/* Enter passive IRQ level */
|
/* Enter passive IRQ level */
|
||||||
ProcessorBlock->Irql = PASSIVE_LEVEL;
|
ProcessorBlock->Irql = PASSIVE_LEVEL;
|
||||||
ArWriteControlRegister(8, PASSIVE_LEVEL);
|
ArWriteControlRegister(8, PASSIVE_LEVEL);
|
||||||
|
|
||||||
|
/* Initialize segment registers */
|
||||||
|
ArpInitializeSegments();
|
||||||
|
|
||||||
|
/* Set GS base */
|
||||||
|
ArWriteModelSpecificRegister(X86_MSR_GSBASE, (ULONGLONG)ProcessorBlock);
|
||||||
|
ArWriteModelSpecificRegister(X86_MSR_KERNEL_GSBASE, (ULONGLONG)ProcessorBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -192,6 +195,30 @@ ArpInitializeProcessorBlock(OUT PKPROCESSOR_BLOCK ProcessorBlock,
|
|||||||
ProcessorBlock->Prcb.MxCsr = INITIAL_MXCSR;
|
ProcessorBlock->Prcb.MxCsr = INITIAL_MXCSR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes segment registers.
|
||||||
|
*
|
||||||
|
* @return This routine does not return any value.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
ArpInitializeSegments(VOID)
|
||||||
|
{
|
||||||
|
asm volatile("mov %0, %%ax\n"
|
||||||
|
"mov %%ax, %%fs\n"
|
||||||
|
"mov %1, %%ax\n"
|
||||||
|
"mov %%ax, %%ds\n"
|
||||||
|
"mov %%ax, %%es\n"
|
||||||
|
"mov %%ax, %%gs\n"
|
||||||
|
"swapgs\n"
|
||||||
|
"mov %%ax, %%gs\n"
|
||||||
|
:
|
||||||
|
: "i" (KGDT_R3_CMTEB | RPL_MASK),
|
||||||
|
"i" (KGDT_R3_DATA | RPL_MASK));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the kernel's Task State Segment (TSS).
|
* Initializes the kernel's Task State Segment (TSS).
|
||||||
*
|
*
|
||||||
|
@ -116,6 +116,10 @@ ArpInitializeProcessorBlock(OUT PKPROCESSOR_BLOCK ProcessorBlock,
|
|||||||
IN PKTSS Tss,
|
IN PKTSS Tss,
|
||||||
IN PVOID DpcStack);
|
IN PVOID DpcStack);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
ArpInitializeSegments(VOID);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
VOID
|
VOID
|
||||||
ArpInitializeTss(IN PKPROCESSOR_BLOCK ProcessorBlock);
|
ArpInitializeTss(IN PKPROCESSOR_BLOCK ProcessorBlock);
|
||||||
|
Loading…
Reference in New Issue
Block a user