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:
Rafal Kupiec 2024-05-05 15:24:17 +02:00
parent 5a013e3ab5
commit 40e0dd8c5e
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4

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);