Mask LVTERR first to prevent local APIC errors
All checks were successful
Builds / ExectOS (amd64) (push) Successful in 58s
Builds / ExectOS (i686) (push) Successful in 57s

This commit is contained in:
2024-05-05 15:24:17 +02:00
parent 5a013e3ab5
commit 40e0dd8c5e

View File

@@ -231,7 +231,6 @@ HlpInitializeApic(VOID)
/* Initialize Logical Vector Table */
LvtRegister.Long = 0;
LvtRegister.Vector = APIC_VECTOR_NMI;
LvtRegister.MessageType = APIC_DM_FIXED;
LvtRegister.DeliveryStatus = 0;
LvtRegister.RemoteIRR = 0;
@@ -239,7 +238,12 @@ HlpInitializeApic(VOID)
LvtRegister.Mask = 0;
LvtRegister.TimerMode = 0;
/* Mask LVTR_ERROR first, to prevent local APIC error */
LvtRegister.Vector = APIC_VECTOR_ERROR;
HlWriteApicRegister(APIC_ERRLVTR, LvtRegister.Long);
/* Mask LVT tables */
LvtRegister.Vector = APIC_VECTOR_NMI;
HlWriteApicRegister(APIC_TMRLVTR, LvtRegister.Long);
HlWriteApicRegister(APIC_THRMLVTR, LvtRegister.Long);
HlWriteApicRegister(APIC_PCLVTR, LvtRegister.Long);
@@ -250,17 +254,11 @@ HlpInitializeApic(VOID)
HlWriteApicRegister(APIC_LINT0, LvtRegister.Long);
/* Mask LINT1 */
LvtRegister.Mask = 0;
LvtRegister.Vector = APIC_VECTOR_NMI;
LvtRegister.MessageType = APIC_DM_NMI;
LvtRegister.TriggerMode = APIC_TGM_LEVEL;
HlWriteApicRegister(APIC_LINT1, LvtRegister.Long);
/* Mask LVTR_ERROR */
LvtRegister.Vector = APIC_VECTOR_ERROR;
LvtRegister.MessageType = APIC_DM_FIXED;
HlWriteApicRegister(APIC_ERRLVTR, LvtRegister.Long);
/* Clear errors after enabling vectors */
HlWriteApicRegister(APIC_ESR, 0);