summaryrefslogtreecommitdiff
path: root/edk2/MdeModulePkg
diff options
context:
space:
mode:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2012-08-27 08:36:23 +0000
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2012-08-27 08:36:23 +0000
commitb52bf370d9fe21f5a09ca2be95cd3766a0292e1f (patch)
tree089afc037e5676c17d1a55c57fcd8c0a09d3f79d /edk2/MdeModulePkg
parentf3d04717064f3e523c6a841f0769d198b0a5e907 (diff)
1. Add debug init flag DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64 in Debug Agent Library.
2. Update Capsule modules to consume debug agent library to support source debugging in x64 code. 3. Update BootScriptExecutorDxe module to support source debugging on S3 path. signed-off-by: Jeff Fan <jeff.fan@intel.com> reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk@13680 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'edk2/MdeModulePkg')
-rw-r--r--edk2/MdeModulePkg/Include/Library/DebugAgentLib.h23
-rw-r--r--edk2/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c6
-rw-r--r--edk2/MdeModulePkg/Universal/CapsulePei/Capsule.h3
-rw-r--r--edk2/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf1
-rw-r--r--edk2/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf1
-rw-r--r--edk2/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c6
-rw-r--r--edk2/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c12
7 files changed, 36 insertions, 16 deletions
diff --git a/edk2/MdeModulePkg/Include/Library/DebugAgentLib.h b/edk2/MdeModulePkg/Include/Library/DebugAgentLib.h
index 1eb898860..01b06a73f 100644
--- a/edk2/MdeModulePkg/Include/Library/DebugAgentLib.h
+++ b/edk2/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/edk2/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c b/edk2/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
index 933c32826..50165126c 100644
--- a/edk2/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
+++ b/edk2/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/edk2/MdeModulePkg/Universal/CapsulePei/Capsule.h b/edk2/MdeModulePkg/Universal/CapsulePei/Capsule.h
index 57af114c4..68d8e4274 100644
--- a/edk2/MdeModulePkg/Universal/CapsulePei/Capsule.h
+++ b/edk2/MdeModulePkg/Universal/CapsulePei/Capsule.h
@@ -1,6 +1,6 @@
/** @file
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
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 <Library/PeCoffGetEntryPointLib.h>
#include <Library/PcdLib.h>
#include <Library/ReportStatusCodeLib.h>
+#include <Library/DebugAgentLib.h>
#include <IndustryStandard/PeImage.h>
#include "Common/CommonHeader.h"
diff --git a/edk2/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf b/edk2/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
index 8f96d9ec8..5ca9afa5b 100644
--- a/edk2/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
+++ b/edk2/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
@@ -59,6 +59,7 @@
[LibraryClasses.IA32]
PeCoffGetEntryPointLib
PcdLib
+ DebugAgentLib
[Guids]
gEfiCapsuleVendorGuid # ALWAYS_CONSUMED
diff --git a/edk2/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf b/edk2/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf
index 1c155ce5f..6af8cbfc4 100644
--- a/edk2/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf
+++ b/edk2/MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf
@@ -47,6 +47,7 @@
BaseLib
DebugLib
CpuExceptionHandlerLib
+ DebugAgentLib
[Depex]
FALSE
diff --git a/edk2/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c b/edk2/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c
index 98b0d5645..f5dd85b2b 100644
--- a/edk2/MdeModulePkg/Universal/CapsulePei/UefiCapsule.c
+++ b/edk2/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.<BR>
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
@@ -350,6 +350,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
//
AsmEnablePaging64 (
diff --git a/edk2/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c b/edk2/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c
index fa29e3dbf..56913e6b0 100644
--- a/edk2/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c
+++ b/edk2/MdeModulePkg/Universal/CapsulePei/X64/X64Entry.c
@@ -15,9 +15,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/CpuExceptionHandlerLib.h>
+#include <Library/DebugAgentLib.h>
#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.
@@ -72,6 +78,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
//
AsmWriteIdtr ((IA32_DESCRIPTOR *) &Ia32Idtr);