mirror of https://github.com/acidanthera/audk.git
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:
parent
53f3249595
commit
e7af83aece
|
@ -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>
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
ReportStatusCodeLib
|
||||
TimerLib
|
||||
DxeServicesLib
|
||||
DebugAgentLib
|
||||
|
||||
[Guids]
|
||||
gEfiEventMemoryMapChangeGuid ## CONSUMES ## Event
|
||||
|
|
|
@ -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
|
||||
//
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -72,6 +72,7 @@
|
|||
BaseLib
|
||||
PeimEntryPoint
|
||||
DebugLib
|
||||
DebugAgentLib
|
||||
|
||||
[Ppis]
|
||||
gEfiDxeIplPpiGuid ## PRODUCES
|
||||
|
|
|
@ -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);
|
||||
|
||||
//
|
||||
|
|
|
@ -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
|
||||
);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue