#ifndef _DEBUG_SUPPORT_H_\r
#define _DEBUG_SUPPORT_H_\r
\r
-\r
#include <Uefi.h>\r
\r
#include <Protocol/DebugSupport.h>\r
\r
#define NUM_IDT_ENTRIES 0x78\r
#define SYSTEM_TIMER_VECTOR 0x68\r
-#define VECTOR_ENTRY_PAGES 1\r
-\r
-#define FF_FXSR (1 << 24)\r
\r
typedef\r
VOID\r
VOID (*RegisteredCallback) ();\r
} IDT_ENTRY;\r
\r
-extern EFI_SYSTEM_CONTEXT SystemContext;\r
-extern UINT8 InterruptEntryStub[];\r
-extern UINT32 StubSize;\r
-extern VOID (*OrigVector) (VOID);\r
-extern IDT_ENTRY *IdtEntryTable;\r
+extern UINT8 InterruptEntryStub[];\r
+extern UINT32 StubSize;\r
+extern VOID (*OrigVector) (VOID);\r
+extern IDT_ENTRY *IdtEntryTable;\r
extern IA32_IDT_GATE_DESCRIPTOR NullDesc;\r
\r
/**\r
);\r
\r
/**\r
- Programs interrupt flag to the requested state and returns previous\r
- state.\r
-\r
- @param NewState New interrupt status.\r
-\r
- @retval TRUE Old interrupt status is TRUE.\r
- @retval FALSE Old interrupt status is FALSE\r
-\r
-**/\r
-BOOLEAN\r
-WriteInterruptFlag (\r
- BOOLEAN NewState\r
- );\r
-\r
-/**\r
- Initializes driver's handler registration databas. \r
+ Initializes driver's handler registration database. \r
\r
This code executes in boot services context\r
Must be public because it's referenced from DebugSupport.c\r
);\r
\r
/**\r
- This is a DebugSupport protocol member function, hard\r
- coded to support only 1 processor for now.\r
-\r
- @param This The DebugSupport instance\r
- @param MaxProcessorIndex The maximuim supported processor index\r
+ Returns the maximum value that may be used for the ProcessorIndex parameter in\r
+ RegisterPeriodicCallback() and RegisterExceptionCallback(). \r
+ \r
+ Hard coded to support only 1 processor for now.\r
\r
- @retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.\r
+ @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.\r
+ @param MaxProcessorIndex Pointer to a caller-allocated UINTN in which the maximum supported\r
+ processor index is returned. Always 0 returned. \r
+ \r
+ @retval EFI_SUCCESS Always returned with **MaxProcessorIndex set to 0.\r
\r
**/\r
EFI_STATUS\r
);\r
\r
/**\r
- DebugSupport protocol member function.\r
-\r
- @param This The DebugSupport instance\r
- @param ProcessorIndex Which processor the callback applies to.\r
- @param PeriodicCallback Callback function\r
-\r
- @retval EFI_SUCCESS Indicates the callback was registered.\r
- @retval others Callback was not registered.\r
-\r
+ Registers a function to be called back periodically in interrupt context.\r
+ \r
+ @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.\r
+ @param ProcessorIndex Specifies which processor the callback function applies to.\r
+ @param PeriodicCallback A pointer to a function of type PERIODIC_CALLBACK that is the main\r
+ periodic entry point of the debug agent.\r
+ \r
+ @retval EFI_SUCCESS The function completed successfully. \r
+ @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback\r
+ function was previously registered. \r
+ @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback \r
+ function. \r
**/\r
EFI_STATUS\r
EFIAPI\r
);\r
\r
/**\r
- DebugSupport protocol member function.\r
+ Registers a function to be called when a given processor exception occurs.\r
\r
This code executes in boot services context.\r
-\r
- @param This The DebugSupport instance\r
- @param ProcessorIndex Which processor the callback applies to.\r
- @param NewCallback Callback function\r
- @param ExceptionType Which exception to hook\r
-\r
- @retval EFI_SUCCESS Indicates the callback was registered.\r
- @retval others Callback was not registered.\r
-\r
+ \r
+ @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.\r
+ @param ProcessorIndex Specifies which processor the callback function applies to.\r
+ @param ExceptionCallback A pointer to a function of type EXCEPTION_CALLBACK that is called\r
+ when the processor exception specified by ExceptionType occurs. \r
+ @param ExceptionType Specifies which processor exception to hook. \r
+ \r
+ @retval EFI_SUCCESS The function completed successfully. \r
+ @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback\r
+ function was previously registered. \r
+ @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback \r
+ function.\r
**/\r
EFI_STATUS\r
EFIAPI\r
RegisterExceptionCallback (\r
IN EFI_DEBUG_SUPPORT_PROTOCOL *This,\r
IN UINTN ProcessorIndex,\r
- IN EFI_EXCEPTION_CALLBACK NewCallback,\r
+ IN EFI_EXCEPTION_CALLBACK ExceptionCallback,\r
IN EFI_EXCEPTION_TYPE ExceptionType\r
);\r
\r
/**\r
- DebugSupport protocol member function. Calls assembly routine to flush cache.\r
-\r
- @param This The DebugSupport instance\r
- @param ProcessorIndex Which processor the callback applies to.\r
- @param Start Physical base of the memory range to be invalidated\r
- @param Length mininum number of bytes in instruction cache to invalidate\r
-\r
- @retval EFI_SUCCESS Always returned.\r
+ Invalidates processor instruction cache for a memory range. Subsequent execution in this range\r
+ causes a fresh memory fetch to retrieve code to be executed. \r
+ \r
+ @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.\r
+ @param ProcessorIndex Specifies which processor's instruction cache is to be invalidated.\r
+ @param Start Specifies the physical base of the memory range to be invalidated. \r
+ @param Length Specifies the minimum number of bytes in the processor's instruction\r
+ cache to invalidate. \r
+ \r
+ @retval EFI_SUCCESS Always returned.\r
\r
**/\r
EFI_STATUS\r
for.\r
@param Stub On successful exit, *Stub contains the newly allocated entry stub.\r
\r
- @retval EFI_SUCCESS Always.\r
-\r
**/\r
-EFI_STATUS\r
+VOID\r
CreateEntryStub (\r
IN EFI_EXCEPTION_TYPE ExceptionType,\r
OUT VOID **Stub\r
);\r
\r
/**\r
- Get Procedure Entry Point from IDT Gate Descriptor.\r
+ Get Interrupt Handle from IDT Gate Descriptor.\r
\r
@param IdtGateDecriptor IDT Gate Descriptor.\r
\r
- @return Procedure Entry Point located in IDT Gate Descriptor.\r
+ @return Interrupt Handle stored in IDT Gate Descriptor.\r
\r
**/\r
-UINTN GetProcedureEntryPoint (\r
+UINTN\r
+GetInterruptHandleFromIdt (\r
IN IA32_IDT_GATE_DESCRIPTOR *IdtGateDecriptor\r
);\r
\r
**/\r
EFI_STATUS\r
ManageIdtEntryTable (\r
- VOID (*NewCallback)(),\r
+ VOID (*NewCallback)(),\r
EFI_EXCEPTION_TYPE ExceptionType\r
);\r
\r
@param ExceptionType Specifies which vector to hook.\r
@param NewCallback A pointer to the new function to be registered.\r
\r
- @retval EFI_SUCCESS Always.\r
-\r
**/\r
-EFI_STATUS\r
+VOID\r
HookEntry (\r
IN EFI_EXCEPTION_TYPE ExceptionType,\r
IN VOID (*NewCallback) ()\r
\r
@param ExceptionType Specifies which entry to unhook\r
\r
- @retval EFI_SUCCESS Always.\r
-\r
**/\r
-EFI_STATUS\r
+VOID\r
UnhookEntry (\r
IN EFI_EXCEPTION_TYPE ExceptionType\r
);\r