stos/amd64: cpu: Hardware enable Local APIC
Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <machine/lapic.h>
|
||||
#include <machine/lapicreg.h>
|
||||
#include <machine/msr.h>
|
||||
#include <machine/cpuid.h>
|
||||
#include <ex/trace.h>
|
||||
@@ -39,6 +40,20 @@ LapicIsSupported(VOID)
|
||||
return ISSET(Edx, BIT(9)) != 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable the Local APIC unit
|
||||
*/
|
||||
static VOID
|
||||
LapicEnable(VOID)
|
||||
{
|
||||
UQUAD ApicBase;
|
||||
|
||||
/* Hardware enable the Local APIC unit */
|
||||
ApicBase = MdRdmsr(IA32_APIC_BASE_MSR);
|
||||
ApicBase |= LAPIC_HW_ENABLE;
|
||||
MdWrmsr(IA32_APIC_BASE_MSR, ApicBase);
|
||||
}
|
||||
|
||||
VOID
|
||||
MdLapicInit(KPCR *Kpcr)
|
||||
{
|
||||
@@ -49,4 +64,6 @@ MdLapicInit(KPCR *Kpcr)
|
||||
if (!LapicIsSupported()) {
|
||||
KeKnot(KNOT_MISSING_HARDWARE, "local apic not supported\n");
|
||||
}
|
||||
|
||||
LapicEnable();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user