2 IA32 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>
36 #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 IsaIa32
47 #define FF_FXSR (1 << 24)
49 typedef UINT64 DESCRIPTOR
;
60 DEBUG_PROC OrigVector
;
63 VOID (*RegisteredCallback
) ();
66 extern EFI_SYSTEM_CONTEXT SystemContext
;
67 extern UINT8 InterruptEntryStub
[];
68 extern UINT32 StubSize
;
69 extern VOID (*OrigVector
) (VOID
);
101 Check whether FXSTOR is supported
110 FALSE - not supported
123 Return the physical address of IDTR
131 The physical address of IDTR
138 DESCRIPTOR
* DestDesc
,
139 VOID (*Vector
) (VOID
)
145 Encodes an IDT descriptor with the given physical address
149 DestDesc - The IDT descriptor address
150 Vector - The interrupt vector entry
167 Programs interrupt flag to the requested state and returns previous
172 NewState - New interrupt status
182 plInitializeDebugSupportDriver (
188 Initializes driver's handler registration database.
190 This code executes in boot services context.
197 EFI_UNSUPPORTED - if IA32 processor does not support FXSTOR/FXRSTOR instructions,
198 the context save will fail, so these processor's are not supported.
199 EFI_OUT_OF_RESOURCES - not resource to finish initialization
206 plUnloadDebugSupportDriver (
207 IN EFI_HANDLE ImageHandle
212 This is the callback that is written to the LoadedImage protocol instance
213 on the image handle. It uninstalls all registered handlers and frees all entry
216 This code executes in boot services context.
219 ImageHandle - The image handle of the unload handler
223 EFI_SUCCESS - always return success
229 // DebugSupport protocol member functions
233 GetMaximumProcessorIndex (
234 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
235 OUT UINTN
*MaxProcessorIndex
239 Routine Description: This is a DebugSupport protocol member function.
242 This - The DebugSupport instance
243 MaxProcessorIndex - The maximuim supported processor index
246 Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
253 RegisterPeriodicCallback (
254 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
255 IN UINTN ProcessorIndex
,
256 IN EFI_PERIODIC_CALLBACK PeriodicCallback
260 Routine Description: This is a DebugSupport protocol member function.
263 This - The DebugSupport instance
264 ProcessorIndex - Which processor the callback applies to.
265 PeriodicCallback - Callback function
270 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
271 no handler registered for it
272 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
274 Other possible return values are passed through from UnHookEntry and HookEntry.
281 RegisterExceptionCallback (
282 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
283 IN UINTN ProcessorIndex
,
284 IN EFI_EXCEPTION_CALLBACK NewCallback
,
285 IN EFI_EXCEPTION_TYPE ExceptionType
290 This is a DebugSupport protocol member function.
292 This code executes in boot services context.
295 This - The DebugSupport instance
296 ProcessorIndex - Which processor the callback applies to.
297 NewCallback - Callback function
298 ExceptionType - Which exception to hook
303 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
304 no handler registered for it
305 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
307 Other possible return values are passed through from UnHookEntry and HookEntry.
314 InvalidateInstructionCache (
315 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
316 IN UINTN ProcessorIndex
,
323 This is a DebugSupport protocol member function.
324 Calls assembly routine to flush cache.
327 This - The DebugSupport instance
328 ProcessorIndex - Which processor the callback applies to.
329 Start - Physical base of the memory range to be invalidated
330 Length - mininum number of bytes in instruction cache to invalidate
334 EFI_SUCCESS - always return success