diff --git a/MdeModulePkg/Include/Library/DebugAgentLib.h b/MdeModulePkg/Include/Library/DebugAgentLib.h index 1eb8988606..01b06a73fb 100644 --- a/MdeModulePkg/Include/Library/DebugAgentLib.h +++ b/MdeModulePkg/Include/Library/DebugAgentLib.h @@ -15,17 +15,18 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #ifndef __DEBUG_AGENT_LIB_H__ #define __DEBUG_AGENT_LIB_H__ -#define DEBUG_AGENT_INIT_PREMEM_SEC 1 -#define DEBUG_AGENT_INIT_POSTMEM_SEC 2 -#define DEBUG_AGENT_INIT_DXE_CORE 3 -#define DEBUG_AGENT_INIT_SMM 4 -#define DEBUG_AGENT_INIT_ENTER_SMI 5 -#define DEBUG_AGENT_INIT_EXIT_SMI 6 -#define DEBUG_AGENT_INIT_S3 7 -#define DEBUG_AGENT_INIT_DXE_AP 8 -#define DEBUG_AGENT_INIT_PEI 9 -#define DEBUG_AGENT_INIT_DXE_LOAD 10 -#define DEBUG_AGENT_INIT_DXE_UNLOAD 11 +#define DEBUG_AGENT_INIT_PREMEM_SEC 1 +#define DEBUG_AGENT_INIT_POSTMEM_SEC 2 +#define DEBUG_AGENT_INIT_DXE_CORE 3 +#define DEBUG_AGENT_INIT_SMM 4 +#define DEBUG_AGENT_INIT_ENTER_SMI 5 +#define DEBUG_AGENT_INIT_EXIT_SMI 6 +#define DEBUG_AGENT_INIT_S3 7 +#define DEBUG_AGENT_INIT_DXE_AP 8 +#define DEBUG_AGENT_INIT_PEI 9 +#define DEBUG_AGENT_INIT_DXE_LOAD 10 +#define DEBUG_AGENT_INIT_DXE_UNLOAD 11 +#define DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64 12 // // Context for DEBUG_AGENT_INIT_POSTMEM_SEC diff --git a/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c b/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c index 933c328262..50165126c8 100644 --- a/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c +++ b/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c @@ -45,21 +45,23 @@ S3BootScriptExecutorEntryFunction ( UINTN TempStackTop; UINTN TempStack[0x10]; UINTN AsmTransferControl16Address; + IA32_DESCRIPTOR IdtDescriptor; // // Disable interrupt of Debug timer, since new IDT table cannot handle it. // SaveAndSetDebugTimerInterrupt (FALSE); + AsmReadIdtr (&IdtDescriptor); // // Restore IDT for debug // SetIdtEntry (AcpiS3Context); // - // Initialize Debug Agent to support source level debug in S3 path. + // Initialize Debug Agent to support source level debug in S3 path, it will disable interrupt and Debug Timer. // - InitializeDebugAgent (DEBUG_AGENT_INIT_S3, NULL, NULL); + InitializeDebugAgent (DEBUG_AGENT_INIT_S3, (VOID *)&IdtDescriptor, NULL); // // Because not install BootScriptExecute PPI(used just in this module), So just pass NULL diff --git a/MdeModulePkg/Universal/CapsulePei/Capsule.h b/MdeModulePkg/Universal/CapsulePei/Capsule.h index 57af114c40..68d8e42745 100644 --- a/MdeModulePkg/Universal/CapsulePei/Capsule.h +++ b/MdeModulePkg/Universal/CapsulePei/Capsule.h @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions @@ -35,6 +35,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include "Common/CommonHeader.h" diff --git a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf index 8f96d9ec8a..5ca9afa5b5 100644 --- a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf +++ b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf @@ -59,6 +59,7 @@ [LibraryClasses.IA32] PeCoffGetEntryPointLib PcdLib + DebugAgentLib [Guids] gEfiCapsuleVendorGuid # ALWAYS_CONSUMED diff --git a/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf b/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf index 1c155ce5f3..6af8cbfc47 100644 --- a/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf +++ b/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf @@ -47,6 +47,7 @@ BaseLib DebugLib CpuExceptionHandlerLib + DebugAgentLib [Depex] FALSE diff --git a/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c b/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c index 98b0d56457..f5dd85b2b6 100644 --- a/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c +++ b/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c @@ -1,7 +1,7 @@ /** @file Capsule update PEIM for UEFI2.0 -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions @@ -349,6 +349,10 @@ Thunk32To64 ( // AsmWriteCr3 ((UINTN) PageTableAddress); + // + // Disable interrupt of Debug timer, since the IDT table cannot work in long mode + // + SaveAndSetDebugTimerInterrupt (FALSE); // // Transfer to long mode // diff --git a/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c b/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c index fa29e3dbfb..56913e6b03 100644 --- a/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c +++ b/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c @@ -15,9 +15,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include "CommonHeader.h" -#define EXCEPTION_VECTOR_NUMBER 0x20 +#define EXCEPTION_VECTOR_NUMBER 0x22 /** The X64 entrypoint is used to process capsule in long mode then @@ -58,6 +59,11 @@ _ModuleEntryPoint ( // Setup the default CPU exception handlers // SetupCpuExceptionHandlers (); + + // + // Initialize Debug Agent to support source level debug + // + InitializeDebugAgent (DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64, (VOID *) &Ia32Idtr, NULL); // // Call CapsuleDataCoalesce to process capsule. @@ -71,6 +77,10 @@ _ModuleEntryPoint ( ReturnContext->ReturnStatus = Status; + // + // Disable interrupt of Debug timer, since the new IDT table cannot work in long mode + // + SaveAndSetDebugTimerInterrupt (FALSE); // // Restore IA32 IDT table //