BOOLEAN DebugTimerInterruptState;\r
DEBUG_AGENT_MAILBOX *Mailbox;\r
DEBUG_AGENT_MAILBOX *NewMailbox;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
+ EFI_VECTOR_HANDOFF_INFO *VectorHandoffInfo;\r
+\r
+ //\r
+ // Check persisted vector handoff info\r
+ //\r
+ Status = EFI_SUCCESS;\r
+ GuidHob = GetFirstGuidHob (&gEfiVectorHandoffInfoPpiGuid);\r
+ if (GuidHob != NULL && !mDxeCoreFlag) {\r
+ //\r
+ // Check if configuration table is installed or not if GUIDed HOB existed,\r
+ // only when Debug Agent is not linked by DXE Core\r
+ //\r
+ Status = EfiGetSystemConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID **) &VectorHandoffInfo);\r
+ }\r
+ if (GuidHob == NULL || Status != EFI_SUCCESS) {\r
+ //\r
+ // Install configuration table for persisted vector handoff info if GUIDed HOB cannot be found or\r
+ // configuration table does not exist\r
+ //\r
+ Status = gBS->InstallConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID *) &mVectorHandoffInfoDebugAgent[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((EFI_D_ERROR, "DebugAgent: Cannot install configuration table for persisted vector handoff info!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
+ }\r
\r
//\r
// Install EFI Serial IO protocol on debug port\r
EFI_SIZE_TO_PAGES (sizeof(DEBUG_AGENT_MAILBOX) + PcdGet16(PcdDebugPortHandleBufferSize)),\r
&Address\r
);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((EFI_D_ERROR, "DebugAgent: Cannot install configuration table for mailbox!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
\r
DebugTimerInterruptState = SaveAndSetDebugTimerInterrupt (FALSE);\r
\r
DebugTimerInterruptState = SaveAndSetDebugTimerInterrupt (DebugTimerInterruptState);\r
\r
Status = gBS->InstallConfigurationTable (&gEfiDebugAgentGuid, (VOID *) mMailboxPointer);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((EFI_D_ERROR, "DebugAgent: Failed to install configuration for mailbox!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
}\r
\r
/**\r
AsmReadIdtr ((IA32_DESCRIPTOR *) &Idtr);\r
IdtEntryCount = (UINT16) ((Idtr.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
if (IdtEntryCount < 33) {\r
+ ZeroMem (&mIdtEntryTable, sizeof (IA32_IDT_GATE_DESCRIPTOR) * 33);\r
+ //\r
+ // Copy original IDT table into new one\r
+ //\r
+ CopyMem (&mIdtEntryTable, (VOID *) Idtr.Base, Idtr.Limit + 1);\r
+ //\r
+ // Load new IDT table\r
+ //\r
Idtr.Limit = (UINT16) (sizeof (IA32_IDT_GATE_DESCRIPTOR) * 33 - 1);\r
Idtr.Base = (UINTN) &mIdtEntryTable;\r
- ZeroMem (&mIdtEntryTable, Idtr.Limit + 1);\r
AsmWriteIdtr ((IA32_DESCRIPTOR *) &Idtr);\r
}\r
\r