2 X64 specific debug support macros, typedefs and prototypes.
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #ifndef _PLDEBUG_SUPPORT_H
16 #define _PLDEBUG_SUPPORT_H
19 // The package level header files this module uses
23 // The protocols, PPI and GUID defintions for this module
25 #include <Protocol/DebugSupport.h>
26 #include <Protocol/LoadedImage.h>
28 // The Library classes this module consumes
30 #include <Library/DebugLib.h>
31 #include <Library/UefiDriverEntryPoint.h>
32 #include <Library/BaseMemoryLib.h>
33 #include <Library/MemoryAllocationLib.h>
34 #include <Library/UefiBootServicesTableLib.h>
35 #include <Library/BaseLib.h>
37 #include <Library/PcdLib.h>
38 #define NUM_IDT_ENTRIES 0x78
39 #define SYSTEM_TIMER_VECTOR 0x68
40 #define VECTOR_ENTRY_PAGES 1
41 #define CopyDescriptor(Dest, Src) CopyMem ((Dest), (Src), sizeof (DESCRIPTOR))
42 #define ZeroDescriptor(Dest) CopyDescriptor ((Dest), &NullDesc)
43 #define ReadIdt(Vector, Dest) CopyDescriptor ((Dest), &((GetIdtr ())[(Vector)]))
44 #define WriteIdt(Vector, Src) CopyDescriptor (&((GetIdtr ())[(Vector)]), (Src))
45 #define CompareDescriptor(Desc1, Desc2) CompareMem ((Desc1), (Desc2), sizeof (DESCRIPTOR))
46 #define EFI_ISA IsaX64
47 #define FF_FXSR (1 << 24)
63 DEBUG_PROC OrigVector
;
66 VOID (*RegisteredCallback
) ();
69 extern EFI_SYSTEM_CONTEXT SystemContext
;
70 extern UINT8 InterruptEntryStub
[];
71 extern UINT32 StubSize
;
72 extern VOID (*OrigVector
) (VOID
);
104 Check whether FXSTOR is supported
113 FALSE - not supported
126 Return the physical address of IDTR
134 The physical address of IDTR
141 DESCRIPTOR
* DestDesc
,
142 VOID (*Vector
) (VOID
)
148 Encodes an IDT descriptor with the given physical address
152 DestDesc - The IDT descriptor address
153 Vector - The interrupt vector entry
170 Programs interrupt flag to the requested state and returns previous
175 NewState - New interrupt status
185 plInitializeDebugSupportDriver (
191 Initializes driver's handler registration database.
193 This code executes in boot services context.
200 EFI_UNSUPPORTED - if X64 processor does not support FXSTOR/FXRSTOR instructions,
201 the context save will fail, so these processor's are not supported.
202 EFI_OUT_OF_RESOURCES - not resource to finish initialization
209 plUnloadDebugSupportDriver (
210 IN EFI_HANDLE ImageHandle
215 This is the callback that is written to the LoadedImage protocol instance
216 on the image handle. It uninstalls all registered handlers and frees all entry
219 This code executes in boot services context.
222 ImageHandle - The image handle of the unload handler
226 EFI_SUCCESS - always return success
232 // DebugSupport protocol member functions
236 GetMaximumProcessorIndex (
237 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
238 OUT UINTN
*MaxProcessorIndex
242 Routine Description: This is a DebugSupport protocol member function.
245 This - The DebugSupport instance
246 MaxProcessorIndex - The maximuim supported processor index
249 Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
256 RegisterPeriodicCallback (
257 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
258 IN UINTN ProcessorIndex
,
259 IN EFI_PERIODIC_CALLBACK PeriodicCallback
263 Routine Description: This is a DebugSupport protocol member function.
266 This - The DebugSupport instance
267 ProcessorIndex - Which processor the callback applies to.
268 PeriodicCallback - Callback function
273 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
274 no handler registered for it
275 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
277 Other possible return values are passed through from UnHookEntry and HookEntry.
284 RegisterExceptionCallback (
285 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
286 IN UINTN ProcessorIndex
,
287 IN EFI_EXCEPTION_CALLBACK NewCallback
,
288 IN EFI_EXCEPTION_TYPE ExceptionType
293 This is a DebugSupport protocol member function.
295 This code executes in boot services context.
298 This - The DebugSupport instance
299 ProcessorIndex - Which processor the callback applies to.
300 NewCallback - Callback function
301 ExceptionType - Which exception to hook
306 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
307 no handler registered for it
308 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
310 Other possible return values are passed through from UnHookEntry and HookEntry.
317 InvalidateInstructionCache (
318 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
319 IN UINTN ProcessorIndex
,
326 This is a DebugSupport protocol member function.
327 Calls assembly routine to flush cache.
330 This - The DebugSupport instance
331 ProcessorIndex - Which processor the callback applies to.
332 Start - Physical base of the memory range to be invalidated
333 Length - mininum number of bytes in instruction cache to invalidate
337 EFI_SUCCESS - always return success