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
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>
30 #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 IsaIa32
41 #define FF_FXSR (1 << 24)
43 typedef UINT64 DESCRIPTOR
;
53 DEBUG_PROC OrigVector
;
56 VOID (*RegisteredCallback
) ();
59 extern EFI_SYSTEM_CONTEXT SystemContext
;
60 extern UINT8 InterruptEntryStub
[];
61 extern UINT32 StubSize
;
62 extern VOID (*OrigVector
) (VOID
);
94 Check whether FXSTOR is supported
103 FALSE - not supported
116 Return the physical address of IDTR
124 The physical address of IDTR
131 DESCRIPTOR
* DestDesc
,
132 VOID (*Vector
) (VOID
)
138 Encodes an IDT descriptor with the given physical address
142 DestDesc - The IDT descriptor address
143 Vector - The interrupt vector entry
160 Programs interrupt flag to the requested state and returns previous
165 NewState - New interrupt status
175 plInitializeDebugSupportDriver (
181 Initializes driver's handler registration database.
183 This code executes in boot services context.
190 EFI_UNSUPPORTED - if IA32 processor does not support FXSTOR/FXRSTOR instructions,
191 the context save will fail, so these processor's are not supported.
192 EFI_OUT_OF_RESOURCES - not resource to finish initialization
199 plUnloadDebugSupportDriver (
200 IN EFI_HANDLE ImageHandle
205 This is the callback that is written to the LoadedImage protocol instance
206 on the image handle. It uninstalls all registered handlers and frees all entry
209 This code executes in boot services context.
212 ImageHandle - The image handle of the unload handler
216 EFI_SUCCESS - always return success
222 // DebugSupport protocol member functions
226 GetMaximumProcessorIndex (
227 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
228 OUT UINTN
*MaxProcessorIndex
232 Routine Description: This is a DebugSupport protocol member function.
235 This - The DebugSupport instance
236 MaxProcessorIndex - The maximuim supported processor index
239 Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
246 RegisterPeriodicCallback (
247 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
248 IN UINTN ProcessorIndex
,
249 IN EFI_PERIODIC_CALLBACK PeriodicCallback
253 Routine Description: This is a DebugSupport protocol member function.
256 This - The DebugSupport instance
257 ProcessorIndex - Which processor the callback applies to.
258 PeriodicCallback - Callback function
263 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
264 no handler registered for it
265 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
267 Other possible return values are passed through from UnHookEntry and HookEntry.
274 RegisterExceptionCallback (
275 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
276 IN UINTN ProcessorIndex
,
277 IN EFI_EXCEPTION_CALLBACK NewCallback
,
278 IN EFI_EXCEPTION_TYPE ExceptionType
283 This is a DebugSupport protocol member function.
285 This code executes in boot services context.
288 This - The DebugSupport instance
289 ProcessorIndex - Which processor the callback applies to.
290 NewCallback - Callback function
291 ExceptionType - Which exception to hook
296 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
297 no handler registered for it
298 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
300 Other possible return values are passed through from UnHookEntry and HookEntry.
307 InvalidateInstructionCache (
308 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
309 IN UINTN ProcessorIndex
,
316 This is a DebugSupport protocol member function.
317 Calls assembly routine to flush cache.
320 This - The DebugSupport instance
321 ProcessorIndex - Which processor the callback applies to.
322 Start - Physical base of the memory range to be invalidated
323 Length - mininum number of bytes in instruction cache to invalidate
327 EFI_SUCCESS - always return success