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
21 #include <Protocol/DebugSupport.h>
22 #include <Protocol/LoadedImage.h>
24 #include <Library/DebugLib.h>
25 #include <Library/UefiDriverEntryPoint.h>
26 #include <Library/BaseMemoryLib.h>
27 #include <Library/MemoryAllocationLib.h>
28 #include <Library/UefiBootServicesTableLib.h>
29 #include <Library/BaseLib.h>
31 #include <Library/PcdLib.h>
32 #define NUM_IDT_ENTRIES 0x78
33 #define SYSTEM_TIMER_VECTOR 0x68
34 #define VECTOR_ENTRY_PAGES 1
35 #define CopyDescriptor(Dest, Src) CopyMem ((Dest), (Src), sizeof (DESCRIPTOR))
36 #define ZeroDescriptor(Dest) CopyDescriptor ((Dest), &NullDesc)
37 #define ReadIdt(Vector, Dest) CopyDescriptor ((Dest), &((GetIdtr ())[(Vector)]))
38 #define WriteIdt(Vector, Src) CopyDescriptor (&((GetIdtr ())[(Vector)]), (Src))
39 #define CompareDescriptor(Desc1, Desc2) CompareMem ((Desc1), (Desc2), sizeof (DESCRIPTOR))
40 #define EFI_ISA IsaX64
41 #define FF_FXSR (1 << 24)
57 DEBUG_PROC OrigVector
;
60 VOID (*RegisteredCallback
) ();
63 extern EFI_SYSTEM_CONTEXT SystemContext
;
64 extern UINT8 InterruptEntryStub
[];
65 extern UINT32 StubSize
;
66 extern VOID (*OrigVector
) (VOID
);
98 Check whether FXSTOR is supported
107 FALSE - not supported
120 Return the physical address of IDTR
128 The physical address of IDTR
135 DESCRIPTOR
* DestDesc
,
136 VOID (*Vector
) (VOID
)
142 Encodes an IDT descriptor with the given physical address
146 DestDesc - The IDT descriptor address
147 Vector - The interrupt vector entry
164 Programs interrupt flag to the requested state and returns previous
169 NewState - New interrupt status
179 plInitializeDebugSupportDriver (
185 Initializes driver's handler registration database.
187 This code executes in boot services context.
194 EFI_UNSUPPORTED - if X64 processor does not support FXSTOR/FXRSTOR instructions,
195 the context save will fail, so these processor's are not supported.
196 EFI_OUT_OF_RESOURCES - not resource to finish initialization
203 plUnloadDebugSupportDriver (
204 IN EFI_HANDLE ImageHandle
209 This is the callback that is written to the LoadedImage protocol instance
210 on the image handle. It uninstalls all registered handlers and frees all entry
213 This code executes in boot services context.
216 ImageHandle - The image handle of the unload handler
220 EFI_SUCCESS - always return success
226 // DebugSupport protocol member functions
230 GetMaximumProcessorIndex (
231 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
232 OUT UINTN
*MaxProcessorIndex
236 Routine Description: This is a DebugSupport protocol member function.
239 This - The DebugSupport instance
240 MaxProcessorIndex - The maximuim supported processor index
243 Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
250 RegisterPeriodicCallback (
251 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
252 IN UINTN ProcessorIndex
,
253 IN EFI_PERIODIC_CALLBACK PeriodicCallback
257 Routine Description: This is a DebugSupport protocol member function.
260 This - The DebugSupport instance
261 ProcessorIndex - Which processor the callback applies to.
262 PeriodicCallback - Callback function
267 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
268 no handler registered for it
269 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
271 Other possible return values are passed through from UnHookEntry and HookEntry.
278 RegisterExceptionCallback (
279 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
280 IN UINTN ProcessorIndex
,
281 IN EFI_EXCEPTION_CALLBACK NewCallback
,
282 IN EFI_EXCEPTION_TYPE ExceptionType
287 This is a DebugSupport protocol member function.
289 This code executes in boot services context.
292 This - The DebugSupport instance
293 ProcessorIndex - Which processor the callback applies to.
294 NewCallback - Callback function
295 ExceptionType - Which exception to hook
300 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
301 no handler registered for it
302 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
304 Other possible return values are passed through from UnHookEntry and HookEntry.
311 InvalidateInstructionCache (
312 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
313 IN UINTN ProcessorIndex
,
320 This is a DebugSupport protocol member function.
321 Calls assembly routine to flush cache.
324 This - The DebugSupport instance
325 ProcessorIndex - Which processor the callback applies to.
326 Start - Physical base of the memory range to be invalidated
327 Length - mininum number of bytes in instruction cache to invalidate
331 EFI_SUCCESS - always return success