diff options
Diffstat (limited to 'MdeModulePkg')
-rw-r--r-- | MdeModulePkg/Core/Dxe/DxeMain.h | 1 | ||||
-rw-r--r-- | MdeModulePkg/Core/Dxe/DxeMain.inf | 1 | ||||
-rw-r--r-- | MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 15 | ||||
-rw-r--r-- | MdeModulePkg/Core/DxeIplPeim/DxeIpl.h | 29 | ||||
-rw-r--r-- | MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 13 | ||||
-rw-r--r-- | MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c | 15 | ||||
-rw-r--r-- | MdeModulePkg/Include/Library/DebugAgentLib.h | 13 | ||||
-rw-r--r-- | MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.c | 11 |
8 files changed, 61 insertions, 37 deletions
diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMain.h index da56c88fd7..5c17b02d53 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.h +++ b/MdeModulePkg/Core/Dxe/DxeMain.h @@ -81,6 +81,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include <Library/ReportStatusCodeLib.h>
#include <Library/TimerLib.h>
#include <Library/DxeServicesLib.h>
+#include <Library/DebugAgentLib.h>
//
diff --git a/MdeModulePkg/Core/Dxe/DxeMain.inf b/MdeModulePkg/Core/Dxe/DxeMain.inf index 6d5f6f5071..2f50ed0223 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.inf +++ b/MdeModulePkg/Core/Dxe/DxeMain.inf @@ -89,6 +89,7 @@ ReportStatusCodeLib
TimerLib
DxeServicesLib
+ DebugAgentLib
[Guids]
gEfiEventMemoryMapChangeGuid ## CONSUMES ## Event
diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c index 77c4227c30..2f72670c2a 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c @@ -215,8 +215,8 @@ EFI_DECOMPRESS_PROTOCOL gEfiDecompress = { };
//
-// For Loading modules at fixed address feature, the configuration table is to cache the top address below which to load
-// Runtime code&boot time code
+// For Loading modules at fixed address feature, the configuration table is to cache the top address below which to load
+// Runtime code&boot time code
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_LOAD_FIXED_ADDRESS_CONFIGURATION_TABLE gLoadModuleAtFixAddressConfigurationTable = {0, 0};
@@ -242,6 +242,11 @@ DxeMain ( UINT64 MemoryLength;
//
+ // Initialize Debug Agent to support source level debug in DXE phase
+ //
+ InitializeDebugAgent (DEBUG_AGENT_INIT_DXE, HobStart);
+
+ //
// Initialize Memory Services
//
CoreInitializeMemoryServices (&HobStart, &MemoryBaseAddress, &MemoryLength);
@@ -294,11 +299,11 @@ DxeMain ( //
Status = CoreInstallConfigurationTable (&gEfiMemoryTypeInformationGuid, &gMemoryTypeInformation);
ASSERT_EFI_ERROR (Status);
-
+
//
- // If Loading modules At fixed address feature is enabled, install Load moduels at fixed address
+ // If Loading modules At fixed address feature is enabled, install Load moduels at fixed address
// Configuration Table so that user could easily to retrieve the top address to load Dxe and PEI
- // Code and Tseg base to load SMM driver.
+ // Code and Tseg base to load SMM driver.
//
if (PcdGet64(PcdLoadModuleAtFixAddressEnable) != 0) {
Status = CoreInstallConfigurationTable (&gLoadFixedAddressConfigurationTableGuid, &gLoadModuleAtFixAddressConfigurationTable);
diff --git a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.h b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.h index 1240ce6c2b..8f3538e4d1 100644 --- a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.h +++ b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.h @@ -2,7 +2,7 @@ Master header file for DxeIpl PEIM. All source files in this module should
include this file for common definitions.
-Copyright (c) 2006 - 2009, Intel Corporation. <BR>
+Copyright (c) 2006 - 2010, Intel Corporation. <BR>
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -45,13 +45,14 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include <Library/PcdLib.h>
#include <Library/S3Lib.h>
#include <Library/RecoveryLib.h>
+#include <Library/DebugAgentLib.h>
#define STACK_SIZE 0x20000
#define BSP_STORE_SIZE 0x4000
//
-// This PPI is installed to indicate the end of the PEI usage of memory
+// This PPI is installed to indicate the end of the PEI usage of memory
//
extern CONST EFI_PEI_PPI_DESCRIPTOR gEndOfPeiSignalPpi;
@@ -61,7 +62,7 @@ extern CONST EFI_PEI_PPI_DESCRIPTOR gEndOfPeiSignalPpi; instance that contains DxeCore.
@return FileHandle of DxeCore to load DxeCore.
-
+
**/
EFI_PEI_FILE_HANDLE
DxeIplFindDxeCore (
@@ -70,13 +71,13 @@ DxeIplFindDxeCore ( /**
- Main entry point to last PEIM
-
+ Main entry point to last PEIM
+
@param This Entry point for DXE IPL PPI
@param PeiServices General purpose services available to every PEIM.
@param HobList Address to the Pei HOB list
-
- @return EFI_SUCCESS DXE core was successfully loaded.
+
+ @return EFI_SUCCESS DXE core was successfully loaded.
@return EFI_OUT_OF_RESOURCES There are not enough resources to load DXE core.
**/
@@ -156,7 +157,7 @@ UpdateStackHob ( output buffer. If the input
section's GuidedSectionHeader.
Attributes field has the
- EFI_GUIDED_SECTION_AUTH_STATUS_VALID
+ EFI_GUIDED_SECTION_AUTH_STATUS_VALID
bit as clear,
AuthenticationStatus must return
zero. These bits reflect the
@@ -166,14 +167,14 @@ UpdateStackHob ( EFI_SUCCESS, the value of
AuthenticationStatus is
undefined.
-
+
@retval EFI_SUCCESS The InputSection was
successfully processed and the
section contents were returned.
-
+
@retval EFI_OUT_OF_RESOURCES The system has insufficient
resources to process the request.
-
+
@retval EFI_INVALID_PARAMETER The GUID in InputSection does
not match this instance of the
GUIDed Section Extraction PPI.
@@ -196,7 +197,7 @@ CustomGuidedSectionExtract ( This function looks up the compression type field in the input section and
applies the appropriate compression algorithm to compress the section to a
callee allocated buffer.
-
+
@param This Points to this instance of the
EFI_PEI_DECOMPRESS_PEI PPI.
@param CompressionSection Points to the compressed section.
@@ -204,14 +205,14 @@ CustomGuidedSectionExtract ( sections.
@param OutputSize Holds the returned size of the decompress
section streams.
-
+
@retval EFI_SUCCESS The section was decompressed successfully.
OutputBuffer contains the resulting data and
OutputSize contains the resulting size.
**/
EFI_STATUS
-EFIAPI
+EFIAPI
Decompress (
IN CONST EFI_PEI_DECOMPRESS_PPI *This,
IN CONST EFI_COMPRESSION_SECTION *CompressionSection,
diff --git a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf index 0fcaf44f57..c3dd5f6719 100644 --- a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf +++ b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf @@ -1,6 +1,6 @@ ## @file
# Last PEIM executed in PEI phase to load DXE Core from a Firmware Volume.
-#
+#
# This module produces a special PPI named the DXE Initial Program Load (IPL)
# PPI to discover and dispatch the DXE Foundation and components that are
# needed to run the DXE Foundation.
@@ -10,10 +10,10 @@ # are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
-#
+#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
+#
##
[Defines]
@@ -72,6 +72,7 @@ BaseLib
PeimEntryPoint
DebugLib
+ DebugAgentLib
[Ppis]
gEfiDxeIplPpiGuid ## PRODUCES
@@ -96,11 +97,11 @@ gEfiPeiMemoryDiscoveredPpiGuid AND gEfiPeiLoadFilePpiGuid
#
-# [BootMode]
+# [BootMode]
# S3_RESUME ## SOMETIMES_CONSUMES
# RECOVERY ## SOMETIMES_CONSUMES
#
-#
+#
# [Hob]
# ##
# # New Stack HoB
@@ -114,4 +115,4 @@ # # BSP Stack HOB for IPF
# MEMORY_ALLOCATION ## PRODUCES
#
-#
+#
diff --git a/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c b/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c index 7e99ac5e02..29ff8416a2 100644 --- a/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c +++ b/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c @@ -15,6 +15,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "DxeIpl.h"
#include "VirtualMemory.h"
+#define IDT_ENTRY_COUNT 33
+
//
// Global Descriptor Table (GDT)
//
@@ -40,7 +42,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR gGdt = { };
GLOBAL_REMOVE_IF_UNREFERENCED IA32_DESCRIPTOR gLidtDescriptor = {
- sizeof (X64_IDT_GATE_DESCRIPTOR) * 32 - 1,
+ sizeof (X64_IDT_GATE_DESCRIPTOR) * IDT_ENTRY_COUNT - 1,
0
};
@@ -118,13 +120,13 @@ HandOffToDxeCore ( Status = PeiServicesAllocatePages (
EfiBootServicesData,
- EFI_SIZE_TO_PAGES((SizeOfTemplate + sizeof (X64_IDT_GATE_DESCRIPTOR)) * 32),
+ EFI_SIZE_TO_PAGES((SizeOfTemplate + sizeof (X64_IDT_GATE_DESCRIPTOR)) * IDT_ENTRY_COUNT),
&VectorAddress
);
ASSERT_EFI_ERROR (Status);
- IdtTable = (X64_IDT_GATE_DESCRIPTOR *) (UINTN) (VectorAddress + SizeOfTemplate * 32);
- for (Index = 0; Index < 32; Index++) {
+ IdtTable = (X64_IDT_GATE_DESCRIPTOR *) (UINTN) (VectorAddress + SizeOfTemplate * IDT_ENTRY_COUNT);
+ for (Index = 0; Index < IDT_ENTRY_COUNT; Index++) {
IdtTable[Index].Ia32IdtEntry.Bits.GateType = 0x8e;
IdtTable[Index].Ia32IdtEntry.Bits.Reserved_0 = 0;
IdtTable[Index].Ia32IdtEntry.Bits.Selector = SYS_CODE64_SEL;
@@ -142,6 +144,11 @@ HandOffToDxeCore ( gLidtDescriptor.Base = (UINTN) IdtTable;
+ //
+ // Disable interrupt of Debug timer, since new IDT table cannot handle it.
+ //
+ SaveAndSetDebugTimerInterrupt (FALSE);
+
AsmWriteIdtr (&gLidtDescriptor);
//
diff --git a/MdeModulePkg/Include/Library/DebugAgentLib.h b/MdeModulePkg/Include/Library/DebugAgentLib.h index 9a5c57e8de..a5c311482d 100644 --- a/MdeModulePkg/Include/Library/DebugAgentLib.h +++ b/MdeModulePkg/Include/Library/DebugAgentLib.h @@ -19,7 +19,8 @@ #define DEBUG_AGENT_INIT_POSTMEM_SEC 2
#define DEBUG_AGENT_INIT_DXE 3
#define DEBUG_AGENT_INIT_SMM 4
-#define DEBUG_AGENT_INIT_SMI 5
+#define DEBUG_AGENT_INIT_ENTER_SMI 5
+#define DEBUG_AGENT_INIT_EXIT_SMI 6
/**
Initialize debug agent.
@@ -38,17 +39,21 @@ InitializeDebugAgent ( );
/**
- Enable/Disable the interrupt of debug timer.
+ Enable/Disable the interrupt of debug timer and return the interrupt state
+ prior to the operation.
If EnableStatus is TRUE, enable the interrupt of debug timer.
If EnableStatus is FALSE, disable the interrupt of debug timer.
@param[in] EnableStatus Enable/Disable.
+ @retval TRUE Debug timer interrupt were enabled on entry to this call.
+ @retval FALSE Debug timer interrupt were disabled on entry to this call.
+
**/
-VOID
+BOOLEAN
EFIAPI
-SetDebugTimerInterrupt (
+SaveAndSetDebugTimerInterrupt (
IN BOOLEAN EnableStatus
);
diff --git a/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.c b/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.c index cf945d01ad..58c756d4d4 100644 --- a/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.c +++ b/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.c @@ -32,20 +32,23 @@ InitializeDebugAgent ( }
/**
- Enable/Disable the interrupt of debug timer.
+ Enable/Disable the interrupt of debug timer and return the interrupt state
+ prior to the operation.
If EnableStatus is TRUE, enable the interrupt of debug timer.
If EnableStatus is FALSE, disable the interrupt of debug timer.
@param[in] EnableStatus Enable/Disable.
+ @return FALSE always.
+
**/
-VOID
+BOOLEAN
EFIAPI
-SetDebugTimerInterrupt (
+SaveAndSetDebugTimerInterrupt (
IN BOOLEAN EnableStatus
)
{
-
+ return FALSE;
}
|