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/ReportStatusCodeLib.h>
|
||||||
#include <Library/TimerLib.h>
|
#include <Library/TimerLib.h>
|
||||||
#include <Library/DxeServicesLib.h>
|
#include <Library/DxeServicesLib.h>
|
||||||
|
#include <Library/DebugAgentLib.h>
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -89,6 +89,7 @@
|
||||||
ReportStatusCodeLib
|
ReportStatusCodeLib
|
||||||
TimerLib
|
TimerLib
|
||||||
DxeServicesLib
|
DxeServicesLib
|
||||||
|
DebugAgentLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventMemoryMapChangeGuid ## CONSUMES ## Event
|
gEfiEventMemoryMapChangeGuid ## CONSUMES ## Event
|
||||||
|
|
|
@ -241,6 +241,11 @@ DxeMain (
|
||||||
EFI_PHYSICAL_ADDRESS MemoryBaseAddress;
|
EFI_PHYSICAL_ADDRESS MemoryBaseAddress;
|
||||||
UINT64 MemoryLength;
|
UINT64 MemoryLength;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initialize Debug Agent to support source level debug in DXE phase
|
||||||
|
//
|
||||||
|
InitializeDebugAgent (DEBUG_AGENT_INIT_DXE, HobStart);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize Memory Services
|
// Initialize Memory Services
|
||||||
//
|
//
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Master header file for DxeIpl PEIM. All source files in this module should
|
Master header file for DxeIpl PEIM. All source files in this module should
|
||||||
include this file for common definitions.
|
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
|
All rights reserved. This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
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/PcdLib.h>
|
||||||
#include <Library/S3Lib.h>
|
#include <Library/S3Lib.h>
|
||||||
#include <Library/RecoveryLib.h>
|
#include <Library/RecoveryLib.h>
|
||||||
|
#include <Library/DebugAgentLib.h>
|
||||||
|
|
||||||
#define STACK_SIZE 0x20000
|
#define STACK_SIZE 0x20000
|
||||||
#define BSP_STORE_SIZE 0x4000
|
#define BSP_STORE_SIZE 0x4000
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
BaseLib
|
BaseLib
|
||||||
PeimEntryPoint
|
PeimEntryPoint
|
||||||
DebugLib
|
DebugLib
|
||||||
|
DebugAgentLib
|
||||||
|
|
||||||
[Ppis]
|
[Ppis]
|
||||||
gEfiDxeIplPpiGuid ## PRODUCES
|
gEfiDxeIplPpiGuid ## PRODUCES
|
||||||
|
|
|
@ -15,6 +15,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
#include "DxeIpl.h"
|
#include "DxeIpl.h"
|
||||||
#include "VirtualMemory.h"
|
#include "VirtualMemory.h"
|
||||||
|
|
||||||
|
#define IDT_ENTRY_COUNT 33
|
||||||
|
|
||||||
//
|
//
|
||||||
// Global Descriptor Table (GDT)
|
// Global Descriptor Table (GDT)
|
||||||
//
|
//
|
||||||
|
@ -40,7 +42,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR gGdt = {
|
||||||
};
|
};
|
||||||
|
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED IA32_DESCRIPTOR gLidtDescriptor = {
|
GLOBAL_REMOVE_IF_UNREFERENCED IA32_DESCRIPTOR gLidtDescriptor = {
|
||||||
sizeof (X64_IDT_GATE_DESCRIPTOR) * 32 - 1,
|
sizeof (X64_IDT_GATE_DESCRIPTOR) * IDT_ENTRY_COUNT - 1,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -118,13 +120,13 @@ HandOffToDxeCore (
|
||||||
|
|
||||||
Status = PeiServicesAllocatePages (
|
Status = PeiServicesAllocatePages (
|
||||||
EfiBootServicesData,
|
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
|
&VectorAddress
|
||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
IdtTable = (X64_IDT_GATE_DESCRIPTOR *) (UINTN) (VectorAddress + SizeOfTemplate * 32);
|
IdtTable = (X64_IDT_GATE_DESCRIPTOR *) (UINTN) (VectorAddress + SizeOfTemplate * IDT_ENTRY_COUNT);
|
||||||
for (Index = 0; Index < 32; Index++) {
|
for (Index = 0; Index < IDT_ENTRY_COUNT; Index++) {
|
||||||
IdtTable[Index].Ia32IdtEntry.Bits.GateType = 0x8e;
|
IdtTable[Index].Ia32IdtEntry.Bits.GateType = 0x8e;
|
||||||
IdtTable[Index].Ia32IdtEntry.Bits.Reserved_0 = 0;
|
IdtTable[Index].Ia32IdtEntry.Bits.Reserved_0 = 0;
|
||||||
IdtTable[Index].Ia32IdtEntry.Bits.Selector = SYS_CODE64_SEL;
|
IdtTable[Index].Ia32IdtEntry.Bits.Selector = SYS_CODE64_SEL;
|
||||||
|
@ -142,6 +144,11 @@ HandOffToDxeCore (
|
||||||
|
|
||||||
gLidtDescriptor.Base = (UINTN) IdtTable;
|
gLidtDescriptor.Base = (UINTN) IdtTable;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Disable interrupt of Debug timer, since new IDT table cannot handle it.
|
||||||
|
//
|
||||||
|
SaveAndSetDebugTimerInterrupt (FALSE);
|
||||||
|
|
||||||
AsmWriteIdtr (&gLidtDescriptor);
|
AsmWriteIdtr (&gLidtDescriptor);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
#define DEBUG_AGENT_INIT_POSTMEM_SEC 2
|
#define DEBUG_AGENT_INIT_POSTMEM_SEC 2
|
||||||
#define DEBUG_AGENT_INIT_DXE 3
|
#define DEBUG_AGENT_INIT_DXE 3
|
||||||
#define DEBUG_AGENT_INIT_SMM 4
|
#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.
|
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 TRUE, enable the interrupt of debug timer.
|
||||||
If EnableStatus is FALSE, disable the interrupt of debug timer.
|
If EnableStatus is FALSE, disable the interrupt of debug timer.
|
||||||
|
|
||||||
@param[in] EnableStatus Enable/Disable.
|
@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
|
EFIAPI
|
||||||
SetDebugTimerInterrupt (
|
SaveAndSetDebugTimerInterrupt (
|
||||||
IN BOOLEAN EnableStatus
|
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 TRUE, enable the interrupt of debug timer.
|
||||||
If EnableStatus is FALSE, disable the interrupt of debug timer.
|
If EnableStatus is FALSE, disable the interrupt of debug timer.
|
||||||
|
|
||||||
@param[in] EnableStatus Enable/Disable.
|
@param[in] EnableStatus Enable/Disable.
|
||||||
|
|
||||||
|
@return FALSE always.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetDebugTimerInterrupt (
|
SaveAndSetDebugTimerInterrupt (
|
||||||
IN BOOLEAN EnableStatus
|
IN BOOLEAN EnableStatus
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue