1. Refine debug agent library.

2. DxeCore and DxeIpl consume debug agent library. 

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10119 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
vanjeff 2010-02-27 17:04:12 +00:00
parent 53f3249595
commit e7af83aece
8 changed files with 61 additions and 37 deletions

View File

@ -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>
//

View File

@ -89,6 +89,7 @@
ReportStatusCodeLib
TimerLib
DxeServicesLib
DebugAgentLib
[Guids]
gEfiEventMemoryMapChangeGuid ## CONSUMES ## Event

View File

@ -241,6 +241,11 @@ DxeMain (
EFI_PHYSICAL_ADDRESS MemoryBaseAddress;
UINT64 MemoryLength;
//
// Initialize Debug Agent to support source level debug in DXE phase
//
InitializeDebugAgent (DEBUG_AGENT_INIT_DXE, HobStart);
//
// Initialize Memory Services
//

View File

@ -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,6 +45,7 @@ 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

View File

@ -72,6 +72,7 @@
BaseLib
PeimEntryPoint
DebugLib
DebugAgentLib
[Ppis]
gEfiDxeIplPpiGuid ## PRODUCES

View File

@ -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);
//

View File

@ -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
);

View File

@ -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;
}