IA32_IDT_GATE_DESCRIPTOR mIdtEntryTable[33];\r
BOOLEAN mSkipBreakpoint = FALSE;\r
BOOLEAN mSmmDebugIdtInitFlag = FALSE;\r
+BOOLEAN mApicTimerRestore = FALSE;\r
+BOOLEAN mPeriodicMode;\r
+UINT32 mTimerCycle;\r
+UINTN mApicTimerDivisor;\r
+UINT8 mVector;\r
\r
CHAR8 mWarningMsgIgnoreSmmEntryBreak[] = "Ignore smmentrybreak setting for SMI issued during DXE debugging!\r\n";\r
\r
DEBUG_AGENT_MAILBOX *Mailbox;\r
UINT64 *MailboxLocation;\r
UINT32 DebugTimerFrequency;\r
- BOOLEAN PeriodicMode;\r
- UINTN TimerCycle;\r
\r
switch (InitFlag) {\r
case DEBUG_AGENT_INIT_SMM:\r
// Check if CPU APIC Timer is working, otherwise initialize it.\r
//\r
InitializeLocalApicSoftwareEnable (TRUE);\r
- GetApicTimerState (NULL, &PeriodicMode, NULL);\r
- TimerCycle = GetApicTimerInitCount ();\r
- if (!PeriodicMode || TimerCycle == 0) {\r
+ GetApicTimerState (&mApicTimerDivisor, &mPeriodicMode, &mVector);\r
+ mTimerCycle = GetApicTimerInitCount ();\r
+ if (!mPeriodicMode || mTimerCycle == 0) {\r
+ mApicTimerRestore = TRUE;\r
InitializeDebugTimer (NULL, FALSE);\r
}\r
Mailbox = GetMailboxPointer ();\r
//\r
mSkipBreakpoint = FALSE;\r
RestoreDebugRegister ();\r
+ //\r
+ // Restore APIC Timer\r
+ //\r
+ if (mApicTimerRestore) {\r
+ InitializeApicTimer (mApicTimerDivisor, mTimerCycle, mPeriodicMode, mVector);\r
+ mApicTimerRestore = FALSE;\r
+ }\r
break;\r
\r
case DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64:\r