mirror of https://github.com/acidanthera/audk.git
ECC clean up.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6405 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
e1a590c3e7
commit
9e604fe42d
|
@ -2242,7 +2242,7 @@ ConSplitterAddOutputMode (
|
|||
}
|
||||
|
||||
/**
|
||||
Reconstruct TextOutModeMap to get intersection of modes
|
||||
Reconstruct TextOutModeMap to get intersection of modes.
|
||||
|
||||
This routine reconstruct TextOutModeMap to get the intersection
|
||||
of modes for all console out devices. Because EFI/UEFI spec require
|
||||
|
@ -2256,8 +2256,6 @@ ConSplitterAddOutputMode (
|
|||
@param MaxMode Current max text mode
|
||||
@param CurrentMode Current text mode
|
||||
|
||||
@retval None
|
||||
|
||||
**/
|
||||
VOID
|
||||
ConSplitterGetIntersection (
|
||||
|
|
|
@ -30,7 +30,7 @@ CHAR16 mCrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };
|
|||
|
||||
@param This Protocol instance pointer.
|
||||
@param Mode Are we in text of grahics mode.
|
||||
@param GopExists TRUE if Console Spliter has found a GOP or UGA device
|
||||
@param GopUgaExists TRUE if Console Spliter has found a GOP or UGA device
|
||||
@param StdInLocked TRUE if StdIn device is keyboard locked
|
||||
|
||||
@retval EFI_SUCCESS Mode information returned.
|
||||
|
|
|
@ -586,7 +586,7 @@ TerminalConOutEnableCursor (
|
|||
Test to see if this driver supports Controller.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param Controller Handle of device to test
|
||||
@param ControllerHandle Handle of device to test
|
||||
@param RemainingDevicePath Optional parameter use to pick a specific child
|
||||
device to start.
|
||||
|
||||
|
@ -1305,8 +1305,6 @@ UnicodeToUtf8 (
|
|||
@param ValidBytes The count of returned VT-VTF8 characters.
|
||||
If ValidBytes is zero, no valid VT-UTF8 returned.
|
||||
|
||||
@retval None.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetOneValidUtf8Char (
|
||||
|
|
|
@ -60,8 +60,6 @@ VTUTF8RawDataToUnicode (
|
|||
@param ValidBytes The count of returned VT-VTF8 characters.
|
||||
If ValidBytes is zero, no valid VT-UTF8 returned.
|
||||
|
||||
@retval None.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetOneValidUtf8Char (
|
||||
|
|
|
@ -114,7 +114,7 @@ GetDebugPortVariable (
|
|||
//
|
||||
|
||||
/**
|
||||
Debug Port Driver entry pointo.
|
||||
Debug Port Driver entry point.
|
||||
|
||||
Reads DebugPort variable to determine what device and settings to use as the
|
||||
debug port. Binds exclusively to SerialIo. Reverts to defaults if no variable
|
||||
|
|
|
@ -28,31 +28,26 @@ EFI_DEBUG_SUPPORT_PROTOCOL gDebugSupportProtocolInterface = {
|
|||
InvalidateInstructionCache
|
||||
};
|
||||
|
||||
//
|
||||
// Driver Entry Point
|
||||
//
|
||||
|
||||
/**
|
||||
Debug Port Driver entry point.
|
||||
|
||||
Checks to see there's not already a DebugSupport protocol installed for
|
||||
the selected processor before installing protocol.
|
||||
|
||||
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
||||
@param[in] SystemTable A pointer to the EFI System Table.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
@retval EFI_ALREADY_STARTED DebugSupport protocol is installed already.
|
||||
@retval other Some error occurs when executing this entry point.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
InitializeDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Driver entry point. Checks to see there's not already a DebugSupport protocol
|
||||
installed for the selected processor before installing protocol.
|
||||
|
||||
Arguments:
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_STATUS
|
||||
|
||||
--*/
|
||||
// TODO: ImageHandle - add argument and description to function comment
|
||||
// TODO: SystemTable - add argument and description to function comment
|
||||
{
|
||||
EFI_LOADED_IMAGE_PROTOCOL *LoadedImageProtocolPtr;
|
||||
EFI_STATUS Status;
|
||||
|
@ -111,12 +106,12 @@ Returns:
|
|||
goto ErrExit;
|
||||
}
|
||||
|
||||
LoadedImageProtocolPtr->Unload = plUnloadDebugSupportDriver;
|
||||
LoadedImageProtocolPtr->Unload = PlUnloadDebugSupportDriver;
|
||||
|
||||
//
|
||||
// Call hook for platform specific initialization
|
||||
//
|
||||
Status = plInitializeDebugSupportDriver ();
|
||||
Status = PlInitializeDebugSupportDriver ();
|
||||
ASSERT (!EFI_ERROR (Status));
|
||||
if (Status != EFI_SUCCESS) {
|
||||
goto ErrExit;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/**@file
|
||||
/** @file
|
||||
IA32 specific debug support functions
|
||||
|
||||
Copyright (c) 2006 - 2007, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
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
|
||||
|
@ -23,25 +23,24 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
IDT_ENTRY *IdtEntryTable = NULL;
|
||||
DESCRIPTOR NullDesc = 0;
|
||||
|
||||
/**
|
||||
Allocate pool for a new IDT entry stub.
|
||||
|
||||
Copy the generic stub into the new buffer and fixup the vector number
|
||||
and jump target address.
|
||||
|
||||
@param ExceptionType This is the exception type that the new stub will be created
|
||||
for.
|
||||
@param Stub On successful exit, *Stub contains the newly allocated entry stub.
|
||||
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
CreateEntryStub (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
OUT VOID **Stub
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: Allocate pool for a new IDT entry stub. Copy the generic
|
||||
stub into the new buffer and fixup the vector number and jump target address.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - This is the exception type that the new stub will be created
|
||||
for.
|
||||
Stub - On successful exit, *Stub contains the newly allocated entry stub.
|
||||
Returns:
|
||||
Typically EFI_SUCCESS
|
||||
other possibilities are passed through from AllocatePool
|
||||
|
||||
--*/
|
||||
{
|
||||
UINT8 *StubCopy;
|
||||
|
||||
|
@ -73,14 +72,7 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
HookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN VOID (*NewCallback) ()
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Creates a nes entry stub. Then saves the current IDT entry and replaces it
|
||||
with an interrupt gate for the new entry point. The IdtEntryTable is updated
|
||||
with the new registered function.
|
||||
|
@ -88,15 +80,17 @@ Routine Description:
|
|||
This code executes in boot services context. The stub entry executes in interrupt
|
||||
context.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - specifies which vector to hook.
|
||||
NewCallback - a pointer to the new function to be registered.
|
||||
@param ExceptionType Specifies which vector to hook.
|
||||
@param NewCallback A pointer to the new function to be registered.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
Other possibilities are passed through by CreateEntryStub
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
--*/
|
||||
**/
|
||||
EFI_STATUS
|
||||
HookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN VOID (*NewCallback) ()
|
||||
)
|
||||
{
|
||||
BOOLEAN OldIntFlagState;
|
||||
EFI_STATUS Status;
|
||||
|
@ -104,81 +98,72 @@ Returns:
|
|||
Status = CreateEntryStub (ExceptionType, (VOID **) &IdtEntryTable[ExceptionType].StubEntry);
|
||||
if (Status == EFI_SUCCESS) {
|
||||
OldIntFlagState = WriteInterruptFlag (0);
|
||||
ReadIdt (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
READ_IDT (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
|
||||
((UINT16 *) &IdtEntryTable[ExceptionType].OrigVector)[0] = ((UINT16 *) &IdtEntryTable[ExceptionType].OrigDesc)[0];
|
||||
((UINT16 *) &IdtEntryTable[ExceptionType].OrigVector)[1] = ((UINT16 *) &IdtEntryTable[ExceptionType].OrigDesc)[3];
|
||||
|
||||
Vect2Desc (&IdtEntryTable[ExceptionType].NewDesc, IdtEntryTable[ExceptionType].StubEntry);
|
||||
IdtEntryTable[ExceptionType].RegisteredCallback = NewCallback;
|
||||
WriteIdt (ExceptionType, &(IdtEntryTable[ExceptionType].NewDesc));
|
||||
WRITE_IDT (ExceptionType, &(IdtEntryTable[ExceptionType].NewDesc));
|
||||
WriteInterruptFlag (OldIntFlagState);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Undoes HookEntry. This code executes in boot services context.
|
||||
|
||||
@param ExceptionType Specifies which entry to unhook
|
||||
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
UnhookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Undoes HookEntry. This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - specifies which entry to unhook
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
{
|
||||
BOOLEAN OldIntFlagState;
|
||||
|
||||
OldIntFlagState = WriteInterruptFlag (0);
|
||||
WriteIdt (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
WRITE_IDT (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
WriteInterruptFlag (OldIntFlagState);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
ManageIdtEntryTable (
|
||||
VOID (*NewCallback)(),
|
||||
EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
This is the main worker function that manages the state of the interrupt
|
||||
handlers. It both installs and uninstalls interrupt handlers based on the
|
||||
value of NewCallback. If NewCallback is NULL, then uninstall is indicated.
|
||||
If NewCallback is non-NULL, then install is indicated.
|
||||
|
||||
Arguments:
|
||||
NewCallback - If non-NULL, NewCallback specifies the new handler to register.
|
||||
If NULL, specifies that the previously registered handler should
|
||||
be uninstalled.
|
||||
ExceptionType - Indicates which entry to manage
|
||||
@param NewCallback If non-NULL, NewCallback specifies the new handler to register.
|
||||
If NULL, specifies that the previously registered handler should
|
||||
be uninstalled.
|
||||
@param ExceptionType Indicates which entry to manage.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
@retval EFI_SUCCESS Process is ok.
|
||||
@retval EFI_INVALID_PARAMETER Requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
@retval EFI_ALREADY_STARTED Requested install to a vector that already has a handler registered.
|
||||
@retval others Possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
**/
|
||||
EFI_STATUS
|
||||
ManageIdtEntryTable (
|
||||
VOID (*NewCallback)(),
|
||||
EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
if (!FeaturePcdGet (PcdNtEmulatorEnable)) {
|
||||
if (CompareDescriptor (&IdtEntryTable[ExceptionType].NewDesc, &NullDesc)) {
|
||||
if (COMPARE_DESCRIPTOR (&IdtEntryTable[ExceptionType].NewDesc, &NullDesc)) {
|
||||
//
|
||||
// we've already installed to this vector
|
||||
//
|
||||
|
@ -208,29 +193,38 @@ Returns:
|
|||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
This is a DebugSupport protocol member function, hard
|
||||
coded to support only 1 processor for now.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param MaxProcessorIndex The maximuim supported processor index
|
||||
|
||||
@retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetMaximumProcessorIndex (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
OUT UINTN *MaxProcessorIndex
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
MaxProcessorIndex - The maximuim supported processor index
|
||||
|
||||
Returns:
|
||||
Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
|
||||
|
||||
--*/
|
||||
{
|
||||
*MaxProcessorIndex = 0;
|
||||
return (EFI_SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param PeriodicCallback Callback function
|
||||
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterPeriodicCallback (
|
||||
|
@ -238,29 +232,24 @@ RegisterPeriodicCallback (
|
|||
IN UINTN ProcessorIndex,
|
||||
IN EFI_PERIODIC_CALLBACK PeriodicCallback
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
PeriodicCallback - Callback function
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
{
|
||||
return ManageIdtEntryTable (PeriodicCallback, SYSTEM_TIMER_VECTOR);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param NewCallback Callback function
|
||||
@param ExceptionType Which exception to hook
|
||||
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterExceptionCallback (
|
||||
|
@ -269,33 +258,21 @@ RegisterExceptionCallback (
|
|||
IN EFI_EXCEPTION_CALLBACK NewCallback,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
NewCallback - Callback function
|
||||
ExceptionType - Which exception to hook
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
{
|
||||
return ManageIdtEntryTable (NewCallback, ExceptionType);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param Start Physical base of the memory range to be invalidated
|
||||
@param Length mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
@retval EFI_SUCCESS Always returned.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InvalidateInstructionCache (
|
||||
|
@ -304,49 +281,27 @@ InvalidateInstructionCache (
|
|||
IN VOID *Start,
|
||||
IN UINT64 Length
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
Calls assembly routine to flush cache.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
Start - Physical base of the memory range to be invalidated
|
||||
Length - mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
|
||||
--*/
|
||||
{
|
||||
AsmWbinvd ();
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Initializes driver's handler registration databas.
|
||||
|
||||
This code executes in boot services context
|
||||
Must be public because it's referenced from DebugSupport.c
|
||||
|
||||
@retval EFI_UNSUPPORTED If IA32 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
@retval EFI_OUT_OF_RESOURCES Fails to allocate memory.
|
||||
@retval EFI_SUCCESS Initializes successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
plInitializeDebugSupportDriver (
|
||||
PlInitializeDebugSupportDriver (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Initializes driver's handler registration database.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
None
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_UNSUPPORTED - if IA32 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
EFI_OUT_OF_RESOURCES - not resource to finish initialization
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_EXCEPTION_TYPE ExceptionType;
|
||||
|
||||
|
@ -381,28 +336,21 @@ ErrorCleanup:
|
|||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
plUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
This is the callback that is written to the LoadedImage protocol instance
|
||||
on the image handle. It uninstalls all registered handlers and frees all entry
|
||||
stub memory.
|
||||
|
||||
This code executes in boot services context.
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
|
||||
Arguments:
|
||||
ImageHandle - The image handle of the unload handler
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
|
||||
--*/
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
{
|
||||
EFI_EXCEPTION_TYPE ExceptionType;
|
||||
|
||||
|
@ -414,26 +362,20 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Common piece of code that invokes the registered handlers.
|
||||
|
||||
This code executes in exception context so no efi calls are allowed.
|
||||
|
||||
@param ExceptionType Exception type
|
||||
@param ContextRecord System context
|
||||
|
||||
**/
|
||||
VOID
|
||||
InterruptDistrubutionHub (
|
||||
EFI_EXCEPTION_TYPE ExceptionType,
|
||||
EFI_SYSTEM_CONTEXT_IA32 *ContextRecord
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: Common piece of code that invokes the registered handlers.
|
||||
|
||||
This code executes in exception context so no efi calls are allowed.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - exception type
|
||||
ContextRecord - system context
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
if (IdtEntryTable[ExceptionType].RegisteredCallback != NULL) {
|
||||
if (ExceptionType != SYSTEM_TIMER_VECTOR) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/**@file
|
||||
/** @file
|
||||
IA32 specific debug support macros, typedefs and prototypes.
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
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
|
||||
|
@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
|
||||
**/
|
||||
|
||||
#ifndef _PLDEBUG_SUPPORT_H
|
||||
#define _PLDEBUG_SUPPORT_H
|
||||
#ifndef _PLDEBUG_SUPPORT_H_
|
||||
#define _PLDEBUG_SUPPORT_H_
|
||||
|
||||
|
||||
#include <Uefi.h>
|
||||
|
@ -32,11 +32,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#define NUM_IDT_ENTRIES 0x78
|
||||
#define SYSTEM_TIMER_VECTOR 0x68
|
||||
#define VECTOR_ENTRY_PAGES 1
|
||||
#define CopyDescriptor(Dest, Src) CopyMem ((Dest), (Src), sizeof (DESCRIPTOR))
|
||||
#define ZeroDescriptor(Dest) CopyDescriptor ((Dest), &NullDesc)
|
||||
#define ReadIdt(Vector, Dest) CopyDescriptor ((Dest), &((GetIdtr ())[(Vector)]))
|
||||
#define WriteIdt(Vector, Src) CopyDescriptor (&((GetIdtr ())[(Vector)]), (Src))
|
||||
#define CompareDescriptor(Desc1, Desc2) CompareMem ((Desc1), (Desc2), sizeof (DESCRIPTOR))
|
||||
#define COPY_DESCRIPTOR(Dest, Src) CopyMem ((Dest), (Src), sizeof (DESCRIPTOR))
|
||||
#define READ_IDT(Vector, Dest) COPY_DESCRIPTOR ((Dest), &((GetIdtr ())[(Vector)]))
|
||||
#define WRITE_IDT(Vector, Src) COPY_DESCRIPTOR (&((GetIdtr ())[(Vector)]), (Src))
|
||||
#define COMPARE_DESCRIPTOR(Desc1, Desc2) CompareMem ((Desc1), (Desc2), sizeof (DESCRIPTOR))
|
||||
#define EFI_ISA IsaIa32
|
||||
#define FF_FXSR (1 << 24)
|
||||
|
||||
|
@ -61,214 +60,149 @@ extern UINT8 InterruptEntryStub[];
|
|||
extern UINT32 StubSize;
|
||||
extern VOID (*OrigVector) (VOID);
|
||||
|
||||
/**
|
||||
Generic IDT entry.
|
||||
|
||||
**/
|
||||
VOID
|
||||
CommonIdtEntry (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
|
||||
Generic IDT entry
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
/**
|
||||
Check whether FXSTOR is supported
|
||||
|
||||
@retval TRUE FXSTOR is supported.
|
||||
@retval FALSE FXSTOR is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
FxStorSupport (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Return the physical address of IDTR.
|
||||
|
||||
Check whether FXSTOR is supported
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
TRUE - supported
|
||||
FALSE - not supported
|
||||
|
||||
--*/
|
||||
;
|
||||
@return The physical address of IDTR.
|
||||
|
||||
**/
|
||||
DESCRIPTOR *
|
||||
GetIdtr (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Encodes an IDT descriptor with the given physical address.
|
||||
|
||||
Return the physical address of IDTR
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
The physical address of IDTR
|
||||
|
||||
--*/
|
||||
;
|
||||
@param DestDesc The IDT descriptor address.
|
||||
@param Vecotr The interrupt vector entry.
|
||||
|
||||
**/
|
||||
VOID
|
||||
Vect2Desc (
|
||||
DESCRIPTOR * DestDesc,
|
||||
VOID (*Vector) (VOID)
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Encodes an IDT descriptor with the given physical address
|
||||
|
||||
Arguments:
|
||||
|
||||
DestDesc - The IDT descriptor address
|
||||
Vector - The interrupt vector entry
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
BOOLEAN
|
||||
WriteInterruptFlag (
|
||||
BOOLEAN NewState
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
);
|
||||
|
||||
/**
|
||||
Programs interrupt flag to the requested state and returns previous
|
||||
state.
|
||||
|
||||
Arguments:
|
||||
@param NewState New interrupt status.
|
||||
|
||||
NewState - New interrupt status
|
||||
@retval TRUE Old interrupt status is TRUE.
|
||||
@retval FALSE Old interrupt status is FALSE
|
||||
|
||||
Returns:
|
||||
**/
|
||||
BOOLEAN
|
||||
WriteInterruptFlag (
|
||||
BOOLEAN NewState
|
||||
);
|
||||
|
||||
Old interrupt status
|
||||
/**
|
||||
Initializes driver's handler registration databas.
|
||||
|
||||
This code executes in boot services context
|
||||
Must be public because it's referenced from DebugSupport.c
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_UNSUPPORTED If IA32 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
@retval EFI_OUT_OF_RESOURCES Fails to allocate memory.
|
||||
@retval EFI_SUCCESS Initializes successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
plInitializeDebugSupportDriver (
|
||||
PlInitializeDebugSupportDriver (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
Initializes driver's handler registration database.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
None
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_UNSUPPORTED - if IA32 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
EFI_OUT_OF_RESOURCES - not resource to finish initialization
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
plUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
This is the callback that is written to the LoadedImage protocol instance
|
||||
on the image handle. It uninstalls all registered handlers and frees all entry
|
||||
stub memory.
|
||||
|
||||
This code executes in boot services context.
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
|
||||
Arguments:
|
||||
ImageHandle - The image handle of the unload handler
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
Returns:
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
);
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
/**
|
||||
This is a DebugSupport protocol member function, hard
|
||||
coded to support only 1 processor for now.
|
||||
|
||||
--*/
|
||||
;
|
||||
@param This The DebugSupport instance
|
||||
@param MaxProcessorIndex The maximuim supported processor index
|
||||
|
||||
//
|
||||
// DebugSupport protocol member functions
|
||||
//
|
||||
@retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetMaximumProcessorIndex (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
OUT UINTN *MaxProcessorIndex
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
MaxProcessorIndex - The maximuim supported processor index
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param PeriodicCallback Callback function
|
||||
|
||||
Returns:
|
||||
Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterPeriodicCallback (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
IN UINTN ProcessorIndex,
|
||||
IN EFI_PERIODIC_CALLBACK PeriodicCallback
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
PeriodicCallback - Callback function
|
||||
This code executes in boot services context.
|
||||
|
||||
Returns:
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param NewCallback Callback function
|
||||
@param ExceptionType Which exception to hook
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterExceptionCallback (
|
||||
|
@ -276,32 +210,19 @@ RegisterExceptionCallback (
|
|||
IN UINTN ProcessorIndex,
|
||||
IN EFI_EXCEPTION_CALLBACK NewCallback,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
/**
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
This code executes in boot services context.
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param Start Physical base of the memory range to be invalidated
|
||||
@param Length mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
NewCallback - Callback function
|
||||
ExceptionType - Which exception to hook
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Always returned.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InvalidateInstructionCache (
|
||||
|
@ -309,24 +230,6 @@ InvalidateInstructionCache (
|
|||
IN UINTN ProcessorIndex,
|
||||
IN VOID *Start,
|
||||
IN UINT64 Length
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
Calls assembly routine to flush cache.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
Start - Physical base of the memory range to be invalidated
|
||||
Length - mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
|
||||
--*/
|
||||
;
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/**@file
|
||||
/** @file
|
||||
IPF specific debug support functions
|
||||
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
|
@ -35,35 +35,82 @@ typedef struct {
|
|||
VOID (*RegisteredCallback) ();
|
||||
} IVT_ENTRY;
|
||||
|
||||
/**
|
||||
This is the worker function that uninstalls and removes all handlers.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
@param NewBundles New Boundles
|
||||
@param NewCallback New Callback
|
||||
|
||||
@retval EFI_ALEADY_STARTED Ivt already hooked.
|
||||
@retval others Indicates the request was not satisfied.
|
||||
@retval EFI_SUCCESS Successfully uninstalled.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ManageIvtEntryTable (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN BUNDLE NewBundles[4],
|
||||
IN VOID (*NewCallback) ()
|
||||
);
|
||||
|
||||
/**
|
||||
Saves original IVT contents and inserts a few new bundles which are fixed up
|
||||
to store the ExceptionType and then call the common handler.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
@param NewBundles New Boundles
|
||||
@param NewCallback New Callback
|
||||
|
||||
**/
|
||||
VOID
|
||||
HookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN BUNDLE NewBundles[4],
|
||||
IN VOID (*NewCallback) ()
|
||||
);
|
||||
|
||||
/**
|
||||
Restores original IVT contents when unregistering a callback function.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
|
||||
**/
|
||||
VOID
|
||||
UnhookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
);
|
||||
|
||||
/**
|
||||
Sets up cache flush and calls assembly function to chain external interrupt.
|
||||
|
||||
Records new callback in IvtEntryTable.
|
||||
|
||||
@param NewCallback New Callback.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ChainExternalInterrupt (
|
||||
IN VOID (*NewCallback) ()
|
||||
);
|
||||
|
||||
/**
|
||||
Sets up cache flush and calls assembly function to restore external interrupt.
|
||||
Removes registered callback from IvtEntryTable.
|
||||
|
||||
**/
|
||||
VOID
|
||||
UnchainExternalInterrupt (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Given an integer number, return the physical address of the entry point in the IFT.
|
||||
|
||||
@param HandlerIndex Index of the Handler
|
||||
@param EntryPoint IFT Entrypoint
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetHandlerEntryPoint (
|
||||
UINTN HandlerIndex,
|
||||
|
@ -85,48 +132,38 @@ UINT8 IpfContextBuf[sizeof (EFI_SYSTEM_CONTEXT_IPF) + 512];
|
|||
UINT8 PatchSaveBuffer[0x400];
|
||||
UINTN ExternalInterruptCount;
|
||||
|
||||
/**
|
||||
IPF specific DebugSupport driver initialization.
|
||||
|
||||
Must be public because it's referenced from DebugSupport.c
|
||||
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
plInitializeDebugSupportDriver (
|
||||
PlInitializeDebugSupportDriver (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
IPF specific DebugSupport driver initialization. Must be public because it's
|
||||
referenced from DebugSupport.c
|
||||
|
||||
Arguments:
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
{
|
||||
SetMem (IvtEntryTable, sizeof (IvtEntryTable), 0);
|
||||
ExternalInterruptCount = 0;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
plUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Unload handler that is called during UnloadImage() - deallocates pool memory
|
||||
used by the driver. Must be public because it's referenced from DebugSuport.c
|
||||
|
||||
Arguments:
|
||||
ImageHandle - Image handle
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
|
||||
Returns:
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
EFI_STATUS - anything other than EFI_SUCCESS indicates the callback was not registered.
|
||||
|
||||
--*/
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
{
|
||||
EFI_EXCEPTION_TYPE ExceptionType;
|
||||
|
||||
|
@ -137,26 +174,18 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
C routine that is called for all registered exceptions. This is the main
|
||||
exception dispatcher. Must be public because it's referenced from AsmFuncs.s.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
@param Context System Context
|
||||
**/
|
||||
VOID
|
||||
CommonHandler (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN EFI_SYSTEM_CONTEXT Context
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
C routine that is called for all registered exceptions. This is the main
|
||||
exception dispatcher. Must be public because it's referenced from AsmFuncs.s.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - Exception Type
|
||||
Context - System Context
|
||||
|
||||
Returns:
|
||||
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
{
|
||||
DEBUG_CODE_BEGIN ();
|
||||
if (mInHandler) {
|
||||
|
@ -189,25 +218,18 @@ Returns:
|
|||
mInHandler = FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Given an integer number, return the physical address of the entry point in the IFT.
|
||||
|
||||
@param HandlerIndex Index of the Handler
|
||||
@param EntryPoint IFT Entrypoint
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetHandlerEntryPoint (
|
||||
UINTN HandlerIndex,
|
||||
VOID **EntryPoint
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Given an integer number, return the physical address of the entry point in the IFT
|
||||
|
||||
Arguments:
|
||||
HandlerIndex - Index of the Handler
|
||||
EntryPoint - IFT Entrypoint
|
||||
|
||||
Returns:
|
||||
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
{
|
||||
UINT8 *TempPtr;
|
||||
|
||||
|
@ -231,29 +253,24 @@ Returns:
|
|||
*EntryPoint = (VOID *) TempPtr;
|
||||
}
|
||||
|
||||
/**
|
||||
This is the worker function that uninstalls and removes all handlers.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
@param NewBundles New Boundles
|
||||
@param NewCallback New Callback
|
||||
|
||||
@retval EFI_ALEADY_STARTED Ivt already hooked.
|
||||
@retval others Indicates the request was not satisfied.
|
||||
@retval EFI_SUCCESS Successfully uninstalled.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ManageIvtEntryTable (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN BUNDLE NewBundles[NUM_BUNDLES_IN_STUB],
|
||||
IN VOID (*NewCallback) ()
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is the worker function that installs and removes all handlers
|
||||
|
||||
Arguments:
|
||||
ExceptionType - Exception Type
|
||||
NewBundles - New Boundles
|
||||
NewCallback - New Callback
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_STATUS - any return other than EFI_SUCCESS indicates the request was not
|
||||
satisfied.
|
||||
EFI_ALEADY_STARTED - Ivt already hooked.
|
||||
|
||||
--*/
|
||||
{
|
||||
BUNDLE *B0Ptr;
|
||||
UINT64 InterruptFlags;
|
||||
|
@ -313,28 +330,21 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Saves original IVT contents and inserts a few new bundles which are fixed up
|
||||
to store the ExceptionType and then call the common handler.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
@param NewBundles New Boundles
|
||||
@param NewCallback New Callback
|
||||
|
||||
**/
|
||||
VOID
|
||||
HookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN BUNDLE NewBundles[4],
|
||||
IN VOID (*NewCallback) ()
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Saves original IVT contents and inserts a few new bundles which are fixed up
|
||||
to store the ExceptionType and then call the common handler.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - Exception Type
|
||||
NewBundles - New Boundles
|
||||
NewCallback - New Callback
|
||||
|
||||
Returns:
|
||||
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
{
|
||||
BUNDLE *FixupBundle;
|
||||
BUNDLE *B0Ptr;
|
||||
|
@ -367,25 +377,16 @@ Returns:
|
|||
IvtEntryTable[ExceptionType].RegisteredCallback = NewCallback;
|
||||
}
|
||||
|
||||
/**
|
||||
Restores original IVT contents when unregistering a callback function.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
|
||||
**/
|
||||
VOID
|
||||
UnhookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Restores original IVT contents when unregistering a callback function
|
||||
|
||||
Arguments:
|
||||
ExceptionType - Exception Type
|
||||
NewBundles - New Boundles
|
||||
NewCallback - New Callback
|
||||
|
||||
Returns:
|
||||
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
{
|
||||
BUNDLE *B0Ptr;
|
||||
|
||||
|
@ -404,24 +405,18 @@ Returns:
|
|||
InstructionCacheFlush (B0Ptr, 5);
|
||||
}
|
||||
|
||||
/**
|
||||
Sets up cache flush and calls assembly function to chain external interrupt.
|
||||
|
||||
Records new callback in IvtEntryTable.
|
||||
|
||||
@param NewCallback New Callback
|
||||
|
||||
**/
|
||||
VOID
|
||||
ChainExternalInterrupt (
|
||||
IN VOID (*NewCallback) ()
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Sets up cache flush and calls assembly function to chain external interrupt.
|
||||
Records new callback in IvtEntryTable.
|
||||
|
||||
Arguments:
|
||||
NewCallback - New Callback
|
||||
|
||||
Returns:
|
||||
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
{
|
||||
VOID *Start;
|
||||
|
||||
|
@ -431,24 +426,15 @@ Returns:
|
|||
InstructionCacheFlush (Start, 0x400);
|
||||
}
|
||||
|
||||
/**
|
||||
Sets up cache flush and calls assembly function to restore external interrupt.
|
||||
Removes registered callback from IvtEntryTable.
|
||||
|
||||
**/
|
||||
VOID
|
||||
UnchainExternalInterrupt (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Sets up cache flush and calls assembly function to restore external interrupt.
|
||||
Removes registered callback from IvtEntryTable.
|
||||
|
||||
Arguments:
|
||||
Nothing
|
||||
|
||||
Returns:
|
||||
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
{
|
||||
VOID *Start;
|
||||
|
||||
|
@ -463,56 +449,61 @@ Returns:
|
|||
// DebugSupport protocol
|
||||
//
|
||||
|
||||
/**
|
||||
This is a DebugSupport protocol member function, hard
|
||||
coded to support only 1 processor for now.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param MaxProcessorIndex The maximuim supported processor index
|
||||
|
||||
@retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetMaximumProcessorIndex (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
OUT UINTN *MaxProcessorIndex
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function. Hard
|
||||
coded to support only 1 processor for now.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
MaxProcessorIndex - The maximuim supported processor index
|
||||
|
||||
Returns:
|
||||
Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
|
||||
|
||||
--*/
|
||||
{
|
||||
*MaxProcessorIndex = 0;
|
||||
return (EFI_SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param PeriodicCallback Callback function
|
||||
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterPeriodicCallback (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
IN UINTN ProcessorIndex,
|
||||
IN EFI_PERIODIC_CALLBACK NewPeriodicCallback
|
||||
IN EFI_PERIODIC_CALLBACK PeriodicCallback
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
DebugSupport protocol member function
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
PeriodicCallback - Callback function
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_STATUS - anything other than EFI_SUCCESS indicates the callback was not registered.
|
||||
|
||||
--*/
|
||||
{
|
||||
return ManageIvtEntryTable (EXCEPT_IPF_EXTERNAL_INTERRUPT, NULL, NewPeriodicCallback);
|
||||
return ManageIvtEntryTable (EXCEPT_IPF_EXTERNAL_INTERRUPT, NULL, PeriodicCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param NewCallback Callback function
|
||||
@param ExceptionType Which exception to hook
|
||||
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterExceptionCallback (
|
||||
|
@ -521,22 +512,6 @@ RegisterExceptionCallback (
|
|||
IN EFI_EXCEPTION_CALLBACK NewCallback,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
DebugSupport protocol member function
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
NewCallback - Callback function
|
||||
ExceptionType - Which exception to hook
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_STATUS - anything other than EFI_SUCCESS indicates the callback was not registered.
|
||||
|
||||
--*/
|
||||
{
|
||||
return ManageIvtEntryTable (
|
||||
ExceptionType,
|
||||
|
@ -545,6 +520,17 @@ Returns:
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param Start Physical base of the memory range to be invalidated
|
||||
@param Length mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
@retval EFI_SUCCESS Always returned.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InvalidateInstructionCache (
|
||||
|
@ -553,22 +539,7 @@ InvalidateInstructionCache (
|
|||
IN VOID *Start,
|
||||
IN UINTN Length
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
Start - Physical base of the memory range to be invalidated
|
||||
Length - mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
{
|
||||
InstructionCacheFlush (Start, Length);
|
||||
return (EFI_SUCCESS);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/**@file
|
||||
/** @file
|
||||
IPF specific debugsupport types, macros, and definitions.
|
||||
|
||||
Copyright (c) 2004 - 2006 Intel Corporation
|
||||
|
@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
|
||||
**/
|
||||
|
||||
#ifndef _PLDEBUG_SUPPORT_H
|
||||
#define _PLDEBUG_SUPPORT_H
|
||||
#ifndef _PLDEBUG_SUPPORT_H_
|
||||
#define _PLDEBUG_SUPPORT_H_
|
||||
|
||||
|
||||
#include <Uefi.h>
|
||||
|
@ -36,252 +36,167 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
//
|
||||
#define EFI_ISA IsaIpf
|
||||
|
||||
//
|
||||
// processor specific functions that must be public
|
||||
//
|
||||
/**
|
||||
IPF specific DebugSupport driver initialization.
|
||||
|
||||
Must be public because it's referenced from DebugSupport.c
|
||||
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
plInitializeDebugSupportDriver (
|
||||
PlInitializeDebugSupportDriver (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
IPF specific DebugSupport driver initialization. Must be public because it's
|
||||
referenced from DebugSupport.c
|
||||
|
||||
Arguments:
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
plUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Unload handler that is called during UnloadImage() - deallocates pool memory
|
||||
used by the driver. Must be public because it's referenced from DebugSuport.c
|
||||
|
||||
Arguments:
|
||||
ImageHandle - Image handle
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
|
||||
Returns:
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
EFI_STATUS - anything other than EFI_SUCCESS indicates the callback was not registered.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
);
|
||||
|
||||
--*/
|
||||
;
|
||||
/**
|
||||
C callable function to obtain the current value of IVA.
|
||||
|
||||
//
|
||||
// Assembly worker functions and data referenced from PlDebugSupport.c
|
||||
//
|
||||
@return Current value of IVA.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
GetIva (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
C callable function to obtain the current value of IVA
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
Current value if IVA
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
VOID
|
||||
HookStub (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
);
|
||||
|
||||
/**
|
||||
HookStub will be copied from it's loaded location into the IVT when
|
||||
an IVT entry is hooked.
|
||||
|
||||
Arguments:
|
||||
**/
|
||||
VOID
|
||||
HookStub (
|
||||
VOID
|
||||
);
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
/**
|
||||
Chains an interrupt handler.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ChainHandler (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
|
||||
Chains an interrupt handler
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
/**
|
||||
Unchains an interrupt handler.
|
||||
|
||||
**/
|
||||
VOID
|
||||
UnchainHandler (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
C callable function to enable/disable interrupts.
|
||||
|
||||
Unchains an interrupt handler
|
||||
@param NewInterruptState New Interrupt State.
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
@return Previous state of psr.ic.
|
||||
|
||||
**/
|
||||
UINT64
|
||||
ProgramInterruptFlags (
|
||||
IN UINT64 NewInterruptState
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Flushes instruction cache for specified number of bytes.
|
||||
|
||||
C callable function to enable/disable interrupts
|
||||
|
||||
Arguments:
|
||||
|
||||
NewInterruptState - New Interrupt State
|
||||
|
||||
Returns:
|
||||
|
||||
Previous state of psr.ic
|
||||
|
||||
--*/
|
||||
;
|
||||
@param StartAddress Cache Start Address.
|
||||
@param SizeInBytes Cache Size.
|
||||
|
||||
**/
|
||||
VOID
|
||||
InstructionCacheFlush (
|
||||
IN VOID *StartAddress,
|
||||
IN UINTN SizeInBytes
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
This is a DebugSupport protocol member function, hard
|
||||
coded to support only 1 processor for now.
|
||||
|
||||
Flushes instruction cache for specified number of bytes
|
||||
@param This The DebugSupport instance
|
||||
@param MaxProcessorIndex The maximuim supported processor index
|
||||
|
||||
Arguments:
|
||||
|
||||
StartAddress - Cache Start Address
|
||||
SizeInBytes - Cache Size
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetMaximumProcessorIndex (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
OUT UINTN *MaxProcessorIndex
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function. Hard
|
||||
coded to support only 1 processor for now.
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
MaxProcessorIndex - The maximuim supported processor index
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param PeriodicCallback Callback function
|
||||
|
||||
Returns:
|
||||
Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterPeriodicCallback (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
IN UINTN ProcessorIndex,
|
||||
IN EFI_PERIODIC_CALLBACK PeriodicCallback
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
DebugSupport protocol member function
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
PeriodicCallback - Callback function
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param NewCallback Callback function
|
||||
@param ExceptionType Which exception to hook
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_STATUS - anything other than EFI_SUCCESS indicates the callback was not registered.
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterExceptionCallback (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
IN UINTN ProcessorIndex,
|
||||
IN EFI_EXCEPTION_CALLBACK NewHandler,
|
||||
IN EFI_EXCEPTION_CALLBACK NewCallback,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
DebugSupport protocol member function
|
||||
/**
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
NewCallback - Callback function
|
||||
ExceptionType - Which exception to hook
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param Start Physical base of the memory range to be invalidated
|
||||
@param Length mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_STATUS - anything other than EFI_SUCCESS indicates the callback was not registered.
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Always returned.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InvalidateInstructionCache (
|
||||
|
@ -289,44 +204,19 @@ InvalidateInstructionCache (
|
|||
IN UINTN ProcessorIndex,
|
||||
IN VOID *Start,
|
||||
IN UINTN Length
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
Start - Physical base of the memory range to be invalidated
|
||||
Length - mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
;
|
||||
/**
|
||||
C routine that is called for all registered exceptions. This is the main
|
||||
exception dispatcher. Must be public because it's referenced from AsmFuncs.s.
|
||||
|
||||
@param ExceptionType Exception Type
|
||||
@param Context System Context
|
||||
**/
|
||||
VOID
|
||||
CommonHandler (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN EFI_SYSTEM_CONTEXT Context
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
C routine that is called for all registered exceptions. This is the main
|
||||
exception dispatcher. Must be public because it's referenced from AsmFuncs.s.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - Exception Type
|
||||
Context - System Context
|
||||
|
||||
Returns:
|
||||
|
||||
Nothing
|
||||
|
||||
--*/
|
||||
;
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/**@file
|
||||
/** @file
|
||||
X64 specific debug support functions
|
||||
|
||||
Copyright (c) 2006 - 2007, Intel Corporation
|
||||
|
@ -23,25 +23,24 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
IDT_ENTRY *IdtEntryTable = NULL;
|
||||
DESCRIPTOR NullDesc = {0, 0};
|
||||
|
||||
/**
|
||||
Allocate pool for a new IDT entry stub.
|
||||
|
||||
Copy the generic stub into the new buffer and fixup the vector number
|
||||
and jump target address.
|
||||
|
||||
@param ExceptionType This is the exception type that the new stub will be created
|
||||
for.
|
||||
@param Stub On successful exit, *Stub contains the newly allocated entry stub.
|
||||
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
CreateEntryStub (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
OUT VOID **Stub
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: Allocate pool for a new IDT entry stub. Copy the generic
|
||||
stub into the new buffer and fixup the vector number and jump target address.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - This is the exception type that the new stub will be created
|
||||
for.
|
||||
Stub - On successful exit, *Stub contains the newly allocated entry stub.
|
||||
Returns:
|
||||
Typically EFI_SUCCESS
|
||||
other possibilities are passed through from AllocatePool
|
||||
|
||||
--*/
|
||||
{
|
||||
UINT8 *StubCopy;
|
||||
|
||||
|
@ -71,14 +70,7 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
HookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN VOID (*NewCallback) ()
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Creates a nes entry stub. Then saves the current IDT entry and replaces it
|
||||
with an interrupt gate for the new entry point. The IdtEntryTable is updated
|
||||
with the new registered function.
|
||||
|
@ -86,15 +78,17 @@ Routine Description:
|
|||
This code executes in boot services context. The stub entry executes in interrupt
|
||||
context.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - specifies which vector to hook.
|
||||
NewCallback - a pointer to the new function to be registered.
|
||||
@param ExceptionType Specifies which vector to hook.
|
||||
@param NewCallback A pointer to the new function to be registered.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
Other possibilities are passed through by CreateEntryStub
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
--*/
|
||||
**/
|
||||
EFI_STATUS
|
||||
HookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType,
|
||||
IN VOID (*NewCallback) ()
|
||||
)
|
||||
{
|
||||
BOOLEAN OldIntFlagState;
|
||||
EFI_STATUS Status;
|
||||
|
@ -102,7 +96,7 @@ Returns:
|
|||
Status = CreateEntryStub (ExceptionType, (VOID **) &IdtEntryTable[ExceptionType].StubEntry);
|
||||
if (Status == EFI_SUCCESS) {
|
||||
OldIntFlagState = WriteInterruptFlag (0);
|
||||
ReadIdt (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
READ_IDT (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
|
||||
((UINT16 *) &IdtEntryTable[ExceptionType].OrigVector)[0] = ((UINT16 *) &IdtEntryTable[ExceptionType].OrigDesc.Low)[0];
|
||||
((UINT16 *) &IdtEntryTable[ExceptionType].OrigVector)[1] = ((UINT16 *) &IdtEntryTable[ExceptionType].OrigDesc.Low)[3];
|
||||
|
@ -110,73 +104,64 @@ Returns:
|
|||
|
||||
Vect2Desc (&IdtEntryTable[ExceptionType].NewDesc, IdtEntryTable[ExceptionType].StubEntry);
|
||||
IdtEntryTable[ExceptionType].RegisteredCallback = NewCallback;
|
||||
WriteIdt (ExceptionType, &(IdtEntryTable[ExceptionType].NewDesc));
|
||||
WRITE_IDT (ExceptionType, &(IdtEntryTable[ExceptionType].NewDesc));
|
||||
WriteInterruptFlag (OldIntFlagState);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Undoes HookEntry. This code executes in boot services context.
|
||||
|
||||
@param ExceptionType Specifies which entry to unhook
|
||||
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
UnhookEntry (
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Undoes HookEntry. This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - specifies which entry to unhook
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
|
||||
--*/
|
||||
{
|
||||
BOOLEAN OldIntFlagState;
|
||||
|
||||
OldIntFlagState = WriteInterruptFlag (0);
|
||||
WriteIdt (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
WRITE_IDT (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));
|
||||
WriteInterruptFlag (OldIntFlagState);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
ManageIdtEntryTable (
|
||||
VOID (*NewCallback)(),
|
||||
EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
This is the main worker function that manages the state of the interrupt
|
||||
handlers. It both installs and uninstalls interrupt handlers based on the
|
||||
value of NewCallback. If NewCallback is NULL, then uninstall is indicated.
|
||||
If NewCallback is non-NULL, then install is indicated.
|
||||
|
||||
Arguments:
|
||||
NewCallback - If non-NULL, NewCallback specifies the new handler to register.
|
||||
If NULL, specifies that the previously registered handler should
|
||||
be uninstalled.
|
||||
ExceptionType - Indicates which entry to manage
|
||||
@param NewCallback If non-NULL, NewCallback specifies the new handler to register.
|
||||
If NULL, specifies that the previously registered handler should
|
||||
be uninstalled.
|
||||
@param ExceptionType Indicates which entry to manage.
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
@retval EFI_SUCCESS Process is ok.
|
||||
@retval EFI_INVALID_PARAMETER Requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
@retval EFI_ALREADY_STARTED Requested install to a vector that already has a handler registered.
|
||||
@retval others Possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
**/
|
||||
EFI_STATUS
|
||||
ManageIdtEntryTable (
|
||||
VOID (*NewCallback)(),
|
||||
EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
if (CompareDescriptor (&IdtEntryTable[ExceptionType].NewDesc, &NullDesc)) {
|
||||
if (COMPARE_DESCRIPTOR (&IdtEntryTable[ExceptionType].NewDesc, &NullDesc)) {
|
||||
//
|
||||
// we've already installed to this vector
|
||||
//
|
||||
|
@ -205,29 +190,38 @@ Returns:
|
|||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
This is a DebugSupport protocol member function, hard
|
||||
coded to support only 1 processor for now.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param MaxProcessorIndex The maximuim supported processor index
|
||||
|
||||
@retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetMaximumProcessorIndex (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
OUT UINTN *MaxProcessorIndex
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
MaxProcessorIndex - The maximuim supported processor index
|
||||
|
||||
Returns:
|
||||
Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
|
||||
|
||||
--*/
|
||||
{
|
||||
*MaxProcessorIndex = 0;
|
||||
return (EFI_SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param PeriodicCallback Callback function
|
||||
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterPeriodicCallback (
|
||||
|
@ -235,29 +229,24 @@ RegisterPeriodicCallback (
|
|||
IN UINTN ProcessorIndex,
|
||||
IN EFI_PERIODIC_CALLBACK PeriodicCallback
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
PeriodicCallback - Callback function
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
{
|
||||
return ManageIdtEntryTable (PeriodicCallback, SYSTEM_TIMER_VECTOR);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param NewCallback Callback function
|
||||
@param ExceptionType Which exception to hook
|
||||
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterExceptionCallback (
|
||||
|
@ -266,33 +255,21 @@ RegisterExceptionCallback (
|
|||
IN EFI_EXCEPTION_CALLBACK NewCallback,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
NewCallback - Callback function
|
||||
ExceptionType - Which exception to hook
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
{
|
||||
return ManageIdtEntryTable (NewCallback, ExceptionType);
|
||||
}
|
||||
|
||||
/**
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param Start Physical base of the memory range to be invalidated
|
||||
@param Length mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
@retval EFI_SUCCESS Always returned.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InvalidateInstructionCache (
|
||||
|
@ -301,49 +278,27 @@ InvalidateInstructionCache (
|
|||
IN VOID *Start,
|
||||
IN UINT64 Length
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
Calls assembly routine to flush cache.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
Start - Physical base of the memory range to be invalidated
|
||||
Length - mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
|
||||
--*/
|
||||
{
|
||||
AsmWbinvd ();
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Initializes driver's handler registration databas.
|
||||
|
||||
This code executes in boot services context
|
||||
Must be public because it's referenced from DebugSupport.c
|
||||
|
||||
@retval EFI_UNSUPPORTED If x64 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
@retval EFI_OUT_OF_RESOURCES Fails to allocate memory.
|
||||
@retval EFI_SUCCESS Initializes successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
plInitializeDebugSupportDriver (
|
||||
PlInitializeDebugSupportDriver (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
Initializes driver's handler registration database.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
None
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_UNSUPPORTED - if X64 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
EFI_OUT_OF_RESOURCES - not resource to finish initialization
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_EXCEPTION_TYPE ExceptionType;
|
||||
|
||||
|
@ -378,28 +333,21 @@ ErrorCleanup:
|
|||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
plUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
This is the callback that is written to the LoadedImage protocol instance
|
||||
on the image handle. It uninstalls all registered handlers and frees all entry
|
||||
stub memory.
|
||||
|
||||
This code executes in boot services context.
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
|
||||
Arguments:
|
||||
ImageHandle - The image handle of the unload handler
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
|
||||
--*/
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
{
|
||||
EFI_EXCEPTION_TYPE ExceptionType;
|
||||
|
||||
|
@ -411,26 +359,20 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Common piece of code that invokes the registered handlers.
|
||||
|
||||
This code executes in exception context so no efi calls are allowed.
|
||||
|
||||
@param ExceptionType Exception type
|
||||
@param ContextRecord System context
|
||||
|
||||
**/
|
||||
VOID
|
||||
InterruptDistrubutionHub (
|
||||
EFI_EXCEPTION_TYPE ExceptionType,
|
||||
EFI_SYSTEM_CONTEXT_IA32 *ContextRecord
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description: Common piece of code that invokes the registered handlers.
|
||||
|
||||
This code executes in exception context so no efi calls are allowed.
|
||||
|
||||
Arguments:
|
||||
ExceptionType - exception type
|
||||
ContextRecord - system context
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
if (IdtEntryTable[ExceptionType].RegisteredCallback != NULL) {
|
||||
if (ExceptionType != SYSTEM_TIMER_VECTOR) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/**@file
|
||||
/** @file
|
||||
X64 specific debug support macros, typedefs and prototypes.
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
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
|
||||
|
@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
|
||||
**/
|
||||
|
||||
#ifndef _PLDEBUG_SUPPORT_H
|
||||
#define _PLDEBUG_SUPPORT_H
|
||||
#ifndef _PLDEBUG_SUPPORT_H_
|
||||
#define _PLDEBUG_SUPPORT_H_
|
||||
|
||||
|
||||
#include <Uefi.h>
|
||||
|
@ -32,11 +32,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#define NUM_IDT_ENTRIES 0x78
|
||||
#define SYSTEM_TIMER_VECTOR 0x68
|
||||
#define VECTOR_ENTRY_PAGES 1
|
||||
#define CopyDescriptor(Dest, Src) CopyMem ((Dest), (Src), sizeof (DESCRIPTOR))
|
||||
#define ZeroDescriptor(Dest) CopyDescriptor ((Dest), &NullDesc)
|
||||
#define ReadIdt(Vector, Dest) CopyDescriptor ((Dest), &((GetIdtr ())[(Vector)]))
|
||||
#define WriteIdt(Vector, Src) CopyDescriptor (&((GetIdtr ())[(Vector)]), (Src))
|
||||
#define CompareDescriptor(Desc1, Desc2) CompareMem ((Desc1), (Desc2), sizeof (DESCRIPTOR))
|
||||
#define COPY_DESCRIPTOR(Dest, Src) CopyMem ((Dest), (Src), sizeof (DESCRIPTOR))
|
||||
#define READ_IDT(Vector, Dest) COPY_DESCRIPTOR ((Dest), &((GetIdtr ())[(Vector)]))
|
||||
#define WRITE_IDT(Vector, Src) COPY_DESCRIPTOR (&((GetIdtr ())[(Vector)]), (Src))
|
||||
#define COMPARE_DESCRIPTOR(Desc1, Desc2) CompareMem ((Desc1), (Desc2), sizeof (DESCRIPTOR))
|
||||
#define EFI_ISA IsaX64
|
||||
#define FF_FXSR (1 << 24)
|
||||
|
||||
|
@ -64,214 +63,149 @@ extern UINT8 InterruptEntryStub[];
|
|||
extern UINT32 StubSize;
|
||||
extern VOID (*OrigVector) (VOID);
|
||||
|
||||
/**
|
||||
Generic IDT entry.
|
||||
|
||||
**/
|
||||
VOID
|
||||
CommonIdtEntry (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
|
||||
Generic IDT entry
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
/**
|
||||
Check whether FXSTOR is supported
|
||||
|
||||
@retval TRUE FXSTOR is supported.
|
||||
@retval FALSE FXSTOR is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
FxStorSupport (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Return the physical address of IDTR.
|
||||
|
||||
Check whether FXSTOR is supported
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
TRUE - supported
|
||||
FALSE - not supported
|
||||
|
||||
--*/
|
||||
;
|
||||
@return The physical address of IDTR.
|
||||
|
||||
**/
|
||||
DESCRIPTOR *
|
||||
GetIdtr (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
Encodes an IDT descriptor with the given physical address.
|
||||
|
||||
Return the physical address of IDTR
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
The physical address of IDTR
|
||||
|
||||
--*/
|
||||
;
|
||||
@param DestDesc The IDT descriptor address.
|
||||
@param Vecotr The interrupt vector entry.
|
||||
|
||||
**/
|
||||
VOID
|
||||
Vect2Desc (
|
||||
DESCRIPTOR * DestDesc,
|
||||
VOID (*Vector) (VOID)
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Encodes an IDT descriptor with the given physical address
|
||||
|
||||
Arguments:
|
||||
|
||||
DestDesc - The IDT descriptor address
|
||||
Vector - The interrupt vector entry
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
BOOLEAN
|
||||
WriteInterruptFlag (
|
||||
BOOLEAN NewState
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
);
|
||||
|
||||
/**
|
||||
Programs interrupt flag to the requested state and returns previous
|
||||
state.
|
||||
|
||||
Arguments:
|
||||
@param NewState New interrupt status.
|
||||
|
||||
NewState - New interrupt status
|
||||
@retval TRUE Old interrupt status is TRUE.
|
||||
@retval FALSE Old interrupt status is FALSE
|
||||
|
||||
Returns:
|
||||
**/
|
||||
BOOLEAN
|
||||
WriteInterruptFlag (
|
||||
BOOLEAN NewState
|
||||
);
|
||||
|
||||
Old interrupt status
|
||||
/**
|
||||
Initializes driver's handler registration databas.
|
||||
|
||||
This code executes in boot services context
|
||||
Must be public because it's referenced from DebugSupport.c
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_UNSUPPORTED If x64 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
@retval EFI_OUT_OF_RESOURCES Fails to allocate memory.
|
||||
@retval EFI_SUCCESS Initializes successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
plInitializeDebugSupportDriver (
|
||||
PlInitializeDebugSupportDriver (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
Initializes driver's handler registration database.
|
||||
|
||||
This code executes in boot services context.
|
||||
|
||||
Arguments:
|
||||
None
|
||||
|
||||
Returns:
|
||||
EFI_SUCCESS
|
||||
EFI_UNSUPPORTED - if X64 processor does not support FXSTOR/FXRSTOR instructions,
|
||||
the context save will fail, so these processor's are not supported.
|
||||
EFI_OUT_OF_RESOURCES - not resource to finish initialization
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
plUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
/**
|
||||
This is the callback that is written to the LoadedImage protocol instance
|
||||
on the image handle. It uninstalls all registered handlers and frees all entry
|
||||
stub memory.
|
||||
|
||||
This code executes in boot services context.
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
|
||||
Arguments:
|
||||
ImageHandle - The image handle of the unload handler
|
||||
@retval EFI_SUCCESS Always.
|
||||
|
||||
Returns:
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PlUnloadDebugSupportDriver (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
);
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
/**
|
||||
This is a DebugSupport protocol member function, hard
|
||||
coded to support only 1 processor for now.
|
||||
|
||||
--*/
|
||||
;
|
||||
@param This The DebugSupport instance
|
||||
@param MaxProcessorIndex The maximuim supported processor index
|
||||
|
||||
//
|
||||
// DebugSupport protocol member functions
|
||||
//
|
||||
@retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetMaximumProcessorIndex (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
OUT UINTN *MaxProcessorIndex
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
MaxProcessorIndex - The maximuim supported processor index
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param PeriodicCallback Callback function
|
||||
|
||||
Returns:
|
||||
Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterPeriodicCallback (
|
||||
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
|
||||
IN UINTN ProcessorIndex,
|
||||
IN EFI_PERIODIC_CALLBACK PeriodicCallback
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description: This is a DebugSupport protocol member function.
|
||||
/**
|
||||
DebugSupport protocol member function.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
PeriodicCallback - Callback function
|
||||
This code executes in boot services context.
|
||||
|
||||
Returns:
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param NewCallback Callback function
|
||||
@param ExceptionType Which exception to hook
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Indicates the callback was registered.
|
||||
@retval others Callback was not registered.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterExceptionCallback (
|
||||
|
@ -279,32 +213,19 @@ RegisterExceptionCallback (
|
|||
IN UINTN ProcessorIndex,
|
||||
IN EFI_EXCEPTION_CALLBACK NewCallback,
|
||||
IN EFI_EXCEPTION_TYPE ExceptionType
|
||||
)
|
||||
/*++
|
||||
);
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
/**
|
||||
DebugSupport protocol member function. Calls assembly routine to flush cache.
|
||||
|
||||
This code executes in boot services context.
|
||||
@param This The DebugSupport instance
|
||||
@param ProcessorIndex Which processor the callback applies to.
|
||||
@param Start Physical base of the memory range to be invalidated
|
||||
@param Length mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
NewCallback - Callback function
|
||||
ExceptionType - Which exception to hook
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS
|
||||
EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
|
||||
no handler registered for it
|
||||
EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
|
||||
|
||||
Other possible return values are passed through from UnHookEntry and HookEntry.
|
||||
|
||||
--*/
|
||||
;
|
||||
@retval EFI_SUCCESS Always returned.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InvalidateInstructionCache (
|
||||
|
@ -312,24 +233,6 @@ InvalidateInstructionCache (
|
|||
IN UINTN ProcessorIndex,
|
||||
IN VOID *Start,
|
||||
IN UINT64 Length
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
This is a DebugSupport protocol member function.
|
||||
Calls assembly routine to flush cache.
|
||||
|
||||
Arguments:
|
||||
This - The DebugSupport instance
|
||||
ProcessorIndex - Which processor the callback applies to.
|
||||
Start - Physical base of the memory range to be invalidated
|
||||
Length - mininum number of bytes in instruction cache to invalidate
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - always return success
|
||||
|
||||
--*/
|
||||
;
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue