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
18 #define NUM_IDT_ENTRIES 0x78
19 #define SYSTEM_TIMER_VECTOR 0x68
20 #define VECTOR_ENTRY_PAGES 1
21 #define CopyDescriptor(Dest, Src) CopyMem ((Dest), (Src), sizeof (DESCRIPTOR))
22 #define ZeroDescriptor(Dest) CopyDescriptor ((Dest), &NullDesc)
23 #define ReadIdt(Vector, Dest) CopyDescriptor ((Dest), &((GetIdtr ())[(Vector)]))
24 #define WriteIdt(Vector, Src) CopyDescriptor (&((GetIdtr ())[(Vector)]), (Src))
25 #define CompareDescriptor(Desc1, Desc2) CompareMem ((Desc1), (Desc2), sizeof (DESCRIPTOR))
26 #define EFI_ISA IsaX64
27 #define FF_FXSR (1 << 24)
36 VOID (*OrigVector
) (VOID
);
38 VOID (*StubEntry
) (VOID
);
39 VOID (*RegisteredCallback
) ();
42 extern EFI_SYSTEM_CONTEXT SystemContext
;
43 extern UINT8 InterruptEntryStub
[];
44 extern UINT32 StubSize
;
45 extern VOID (*OrigVector
) (VOID
);
77 Check whether FXSTOR is supported
99 Return the physical address of IDTR
107 The physical address of IDTR
114 DESCRIPTOR
* DestDesc
,
115 VOID (*Vector
) (VOID
)
121 Encodes an IDT descriptor with the given physical address
125 DestDesc - The IDT descriptor address
126 Vector - The interrupt vector entry
143 Programs interrupt flag to the requested state and returns previous
148 NewState - New interrupt status
158 plInitializeDebugSupportDriver (
164 Initializes driver's handler registration database.
166 This code executes in boot services context.
173 EFI_UNSUPPORTED - if X64 processor does not support FXSTOR/FXRSTOR instructions,
174 the context save will fail, so these processor's are not supported.
175 EFI_OUT_OF_RESOURCES - not resource to finish initialization
182 plUnloadDebugSupportDriver (
183 IN EFI_HANDLE ImageHandle
188 This is the callback that is written to the LoadedImage protocol instance
189 on the image handle. It uninstalls all registered handlers and frees all entry
192 This code executes in boot services context.
195 ImageHandle - The image handle of the unload handler
199 EFI_SUCCESS - always return success
205 // DebugSupport protocol member functions
209 GetMaximumProcessorIndex (
210 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
211 OUT UINTN
*MaxProcessorIndex
215 Routine Description: This is a DebugSupport protocol member function.
218 This - The DebugSupport instance
219 MaxProcessorIndex - The maximuim supported processor index
222 Always returns EFI_SUCCESS with *MaxProcessorIndex set to 0
229 RegisterPeriodicCallback (
230 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
231 IN UINTN ProcessorIndex
,
232 IN EFI_PERIODIC_CALLBACK PeriodicCallback
236 Routine Description: This is a DebugSupport protocol member function.
239 This - The DebugSupport instance
240 ProcessorIndex - Which processor the callback applies to.
241 PeriodicCallback - Callback function
246 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
247 no handler registered for it
248 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
250 Other possible return values are passed through from UnHookEntry and HookEntry.
257 RegisterExceptionCallback (
258 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
259 IN UINTN ProcessorIndex
,
260 IN EFI_EXCEPTION_CALLBACK NewCallback
,
261 IN EFI_EXCEPTION_TYPE ExceptionType
266 This is a DebugSupport protocol member function.
268 This code executes in boot services context.
271 This - The DebugSupport instance
272 ProcessorIndex - Which processor the callback applies to.
273 NewCallback - Callback function
274 ExceptionType - Which exception to hook
279 EFI_INVALID_PARAMETER - requested uninstalling a handler from a vector that has
280 no handler registered for it
281 EFI_ALREADY_STARTED - requested install to a vector that already has a handler registered.
283 Other possible return values are passed through from UnHookEntry and HookEntry.
290 InvalidateInstructionCache (
291 IN EFI_DEBUG_SUPPORT_PROTOCOL
*This
,
292 IN UINTN ProcessorIndex
,
299 This is a DebugSupport protocol member function.
300 Calls assembly routine to flush cache.
303 This - The DebugSupport instance
304 ProcessorIndex - Which processor the callback applies to.
305 Start - Physical base of the memory range to be invalidated
306 Length - mininum number of bytes in instruction cache to invalidate
310 EFI_SUCCESS - always return success