UINT64 *MailboxLocationPointer;\r
EFI_PHYSICAL_ADDRESS Address;\r
UINT32 DebugTimerFrequency;\r
+ BOOLEAN CpuInterruptState;\r
\r
- DisableInterrupts ();\r
+ //\r
+ // Disable interrupts and save current interrupt state\r
+ //\r
+ CpuInterruptState = SaveAndDisableInterrupts();\r
\r
switch (InitFlag) {\r
\r
break;\r
}\r
\r
- //\r
- // Enable Debug Timer interrupt. In post-memory SEC, the caller enables it.\r
- //\r
- if (InitFlag != DEBUG_AGENT_INIT_POSTMEM_SEC) {\r
+ if (InitFlag == DEBUG_AGENT_INIT_POSTMEM_SEC) {\r
+ //\r
+ // Restore CPU Interrupt state and keep debug timer interrupt state as is\r
+ // in DEBUG_AGENT_INIT_POSTMEM_SEC case\r
+ //\r
+ SetInterruptState (CpuInterruptState);\r
+ } else {\r
+ //\r
+ // Enable Debug Timer interrupt\r
+ //\r
SaveAndSetDebugTimerInterrupt (TRUE);\r
+ //\r
+ // Enable CPU interrupts so debug timer interrupts can be delivered\r
+ //\r
+ EnableInterrupts ();\r
}\r
- //\r
- // Enable CPU interrupts so debug timer interrupts can be delivered\r
- //\r
- EnableInterrupts ();\r
-\r
//\r
// If Function is not NULL, invoke it always whatever debug agent was initialized sucesssfully or not.\r
//\r