DebugSupport.h

Go to the documentation of this file.
00001 /** @file
00002   DebugSupport protocol and supporting definitions as defined in the UEFI2.0
00003   specification.
00004 
00005   The DebugSupport protocol is used by source level debuggers to abstract the
00006   processor and handle context save and restore operations.
00007 
00008   Copyright (c) 2006 - 2008, Intel Corporation
00009   All rights reserved. This program and the accompanying materials
00010   are licensed and made available under the terms and conditions of the BSD License
00011   which accompanies this distribution.  The full text of the license may be found at
00012   http://opensource.org/licenses/bsd-license.php
00013 
00014   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
00015   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
00016 
00017 **/
00018 
00019 #ifndef __DEBUG_SUPPORT_H__
00020 #define __DEBUG_SUPPORT_H__
00021 
00022 #include <gpxe/efi/ProcessorBind.h>
00023 #include <gpxe/efi/IndustryStandard/PeImage.h>
00024 
00025 typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL EFI_DEBUG_SUPPORT_PROTOCOL;
00026 
00027 ///
00028 /// Debug Support protocol {2755590C-6F3C-42FA-9EA4-A3BA543CDA25}
00029 ///
00030 #define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \
00031   { \
00032     0x2755590C, 0x6F3C, 0x42FA, {0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25 } \
00033   }
00034 
00035 ///
00036 /// Debug Support definitions
00037 ///
00038 typedef INTN  EFI_EXCEPTION_TYPE;
00039 
00040 //
00041 //  IA-32 processor exception types
00042 //
00043 #define EXCEPT_IA32_DIVIDE_ERROR    0
00044 #define EXCEPT_IA32_DEBUG           1
00045 #define EXCEPT_IA32_NMI             2
00046 #define EXCEPT_IA32_BREAKPOINT      3
00047 #define EXCEPT_IA32_OVERFLOW        4
00048 #define EXCEPT_IA32_BOUND           5
00049 #define EXCEPT_IA32_INVALID_OPCODE  6
00050 #define EXCEPT_IA32_DOUBLE_FAULT    8
00051 #define EXCEPT_IA32_INVALID_TSS     10
00052 #define EXCEPT_IA32_SEG_NOT_PRESENT 11
00053 #define EXCEPT_IA32_STACK_FAULT     12
00054 #define EXCEPT_IA32_GP_FAULT        13
00055 #define EXCEPT_IA32_PAGE_FAULT      14
00056 #define EXCEPT_IA32_FP_ERROR        16
00057 #define EXCEPT_IA32_ALIGNMENT_CHECK 17
00058 #define EXCEPT_IA32_MACHINE_CHECK   18
00059 #define EXCEPT_IA32_SIMD            19
00060 
00061 ///
00062 ///  IA-32 processor context definition
00063 ///
00064 ///
00065 /// FXSAVE_STATE
00066 /// FP / MMX / XMM registers (see fxrstor instruction definition)
00067 ///
00068 typedef struct {
00069   UINT16  Fcw;
00070   UINT16  Fsw;
00071   UINT16  Ftw;
00072   UINT16  Opcode;
00073   UINT32  Eip;
00074   UINT16  Cs;
00075   UINT16  Reserved1;
00076   UINT32  DataOffset;
00077   UINT16  Ds;
00078   UINT8   Reserved2[10];
00079   UINT8   St0Mm0[10], Reserved3[6];
00080   UINT8   St1Mm1[10], Reserved4[6];
00081   UINT8   St2Mm2[10], Reserved5[6];
00082   UINT8   St3Mm3[10], Reserved6[6];
00083   UINT8   St4Mm4[10], Reserved7[6];
00084   UINT8   St5Mm5[10], Reserved8[6];
00085   UINT8   St6Mm6[10], Reserved9[6];
00086   UINT8   St7Mm7[10], Reserved10[6];
00087   UINT8   Xmm0[16];
00088   UINT8   Xmm1[16];
00089   UINT8   Xmm2[16];
00090   UINT8   Xmm3[16];
00091   UINT8   Xmm4[16];
00092   UINT8   Xmm5[16];
00093   UINT8   Xmm6[16];
00094   UINT8   Xmm7[16];
00095   UINT8   Reserved11[14 * 16];
00096 } EFI_FX_SAVE_STATE_IA32;
00097 
00098 typedef struct {
00099   UINT32                 ExceptionData;
00100   EFI_FX_SAVE_STATE_IA32 FxSaveState;
00101   UINT32                 Dr0;
00102   UINT32                 Dr1;
00103   UINT32                 Dr2;
00104   UINT32                 Dr3;
00105   UINT32                 Dr6;
00106   UINT32                 Dr7;
00107   UINT32                 Cr0;
00108   UINT32                 Cr1;  /* Reserved */
00109   UINT32                 Cr2;
00110   UINT32                 Cr3;
00111   UINT32                 Cr4;
00112   UINT32                 Eflags;
00113   UINT32                 Ldtr;
00114   UINT32                 Tr;
00115   UINT32                 Gdtr[2];
00116   UINT32                 Idtr[2];
00117   UINT32                 Eip;
00118   UINT32                 Gs;
00119   UINT32                 Fs;
00120   UINT32                 Es;
00121   UINT32                 Ds;
00122   UINT32                 Cs;
00123   UINT32                 Ss;
00124   UINT32                 Edi;
00125   UINT32                 Esi;
00126   UINT32                 Ebp;
00127   UINT32                 Esp;
00128   UINT32                 Ebx;
00129   UINT32                 Edx;
00130   UINT32                 Ecx;
00131   UINT32                 Eax;
00132 } EFI_SYSTEM_CONTEXT_IA32;
00133 
00134 //
00135 //  X64 processor exception types
00136 //
00137 #define EXCEPT_X64_DIVIDE_ERROR    0
00138 #define EXCEPT_X64_DEBUG           1
00139 #define EXCEPT_X64_NMI             2
00140 #define EXCEPT_X64_BREAKPOINT      3
00141 #define EXCEPT_X64_OVERFLOW        4
00142 #define EXCEPT_X64_BOUND           5
00143 #define EXCEPT_X64_INVALID_OPCODE  6
00144 #define EXCEPT_X64_DOUBLE_FAULT    8
00145 #define EXCEPT_X64_INVALID_TSS     10
00146 #define EXCEPT_X64_SEG_NOT_PRESENT 11
00147 #define EXCEPT_X64_STACK_FAULT     12
00148 #define EXCEPT_X64_GP_FAULT        13
00149 #define EXCEPT_X64_PAGE_FAULT      14
00150 #define EXCEPT_X64_FP_ERROR        16
00151 #define EXCEPT_X64_ALIGNMENT_CHECK 17
00152 #define EXCEPT_X64_MACHINE_CHECK   18
00153 #define EXCEPT_X64_SIMD            19
00154 
00155 ///
00156 ///  X64 processor context definition
00157 ///
00158 /// FXSAVE_STATE
00159 /// FP / MMX / XMM registers (see fxrstor instruction definition)
00160 ///
00161 typedef struct {
00162   UINT16  Fcw;
00163   UINT16  Fsw;
00164   UINT16  Ftw;
00165   UINT16  Opcode;
00166   UINT64  Rip;
00167   UINT64  DataOffset;
00168   UINT8   Reserved1[8];
00169   UINT8   St0Mm0[10], Reserved2[6];
00170   UINT8   St1Mm1[10], Reserved3[6];
00171   UINT8   St2Mm2[10], Reserved4[6];
00172   UINT8   St3Mm3[10], Reserved5[6];
00173   UINT8   St4Mm4[10], Reserved6[6];
00174   UINT8   St5Mm5[10], Reserved7[6];
00175   UINT8   St6Mm6[10], Reserved8[6];
00176   UINT8   St7Mm7[10], Reserved9[6];
00177   UINT8   Xmm0[16];
00178   UINT8   Xmm1[16];
00179   UINT8   Xmm2[16];
00180   UINT8   Xmm3[16];
00181   UINT8   Xmm4[16];
00182   UINT8   Xmm5[16];
00183   UINT8   Xmm6[16];
00184   UINT8   Xmm7[16];
00185   //
00186   // NOTE: UEFI 2.0 spec definition as follows.
00187   //
00188   UINT8   Reserved11[14 * 16];
00189 } EFI_FX_SAVE_STATE_X64;
00190 
00191 typedef struct {
00192   UINT64                ExceptionData;
00193   EFI_FX_SAVE_STATE_X64 FxSaveState;
00194   UINT64                Dr0;
00195   UINT64                Dr1;
00196   UINT64                Dr2;
00197   UINT64                Dr3;
00198   UINT64                Dr6;
00199   UINT64                Dr7;
00200   UINT64                Cr0;
00201   UINT64                Cr1;  /* Reserved */
00202   UINT64                Cr2;
00203   UINT64                Cr3;
00204   UINT64                Cr4;
00205   UINT64                Cr8;
00206   UINT64                Rflags;
00207   UINT64                Ldtr;
00208   UINT64                Tr;
00209   UINT64                Gdtr[2];
00210   UINT64                Idtr[2];
00211   UINT64                Rip;
00212   UINT64                Gs;
00213   UINT64                Fs;
00214   UINT64                Es;
00215   UINT64                Ds;
00216   UINT64                Cs;
00217   UINT64                Ss;
00218   UINT64                Rdi;
00219   UINT64                Rsi;
00220   UINT64                Rbp;
00221   UINT64                Rsp;
00222   UINT64                Rbx;
00223   UINT64                Rdx;
00224   UINT64                Rcx;
00225   UINT64                Rax;
00226   UINT64                R8;
00227   UINT64                R9;
00228   UINT64                R10;
00229   UINT64                R11;
00230   UINT64                R12;
00231   UINT64                R13;
00232   UINT64                R14;
00233   UINT64                R15;
00234 } EFI_SYSTEM_CONTEXT_X64;
00235 
00236 //
00237 //  IPF processor exception types
00238 //
00239 #define EXCEPT_IPF_VHTP_TRANSLATION       0
00240 #define EXCEPT_IPF_INSTRUCTION_TLB        1
00241 #define EXCEPT_IPF_DATA_TLB               2
00242 #define EXCEPT_IPF_ALT_INSTRUCTION_TLB    3
00243 #define EXCEPT_IPF_ALT_DATA_TLB           4
00244 #define EXCEPT_IPF_DATA_NESTED_TLB        5
00245 #define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6
00246 #define EXCEPT_IPF_DATA_KEY_MISSED        7
00247 #define EXCEPT_IPF_DIRTY_BIT              8
00248 #define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9
00249 #define EXCEPT_IPF_DATA_ACCESS_BIT        10
00250 #define EXCEPT_IPF_BREAKPOINT             11
00251 #define EXCEPT_IPF_EXTERNAL_INTERRUPT     12
00252 //
00253 // 13 - 19 reserved
00254 //
00255 #define EXCEPT_IPF_PAGE_NOT_PRESENT           20
00256 #define EXCEPT_IPF_KEY_PERMISSION             21
00257 #define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS  22
00258 #define EXCEPT_IPF_DATA_ACCESS_RIGHTS         23
00259 #define EXCEPT_IPF_GENERAL_EXCEPTION          24
00260 #define EXCEPT_IPF_DISABLED_FP_REGISTER       25
00261 #define EXCEPT_IPF_NAT_CONSUMPTION            26
00262 #define EXCEPT_IPF_SPECULATION                27
00263 //
00264 // 28 reserved
00265 //
00266 #define EXCEPT_IPF_DEBUG                          29
00267 #define EXCEPT_IPF_UNALIGNED_REFERENCE            30
00268 #define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE     31
00269 #define EXCEPT_IPF_FP_FAULT                       32
00270 #define EXCEPT_IPF_FP_TRAP                        33
00271 #define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP  34
00272 #define EXCEPT_IPF_TAKEN_BRANCH                   35
00273 #define EXCEPT_IPF_SINGLE_STEP                    36
00274 //
00275 // 37 - 44 reserved
00276 //
00277 #define EXCEPT_IPF_IA32_EXCEPTION 45
00278 #define EXCEPT_IPF_IA32_INTERCEPT 46
00279 #define EXCEPT_IPF_IA32_INTERRUPT 47
00280 
00281 ///
00282 ///  IPF processor context definition
00283 ///
00284 typedef struct {
00285   //
00286   // The first reserved field is necessary to preserve alignment for the correct
00287   // bits in UNAT and to insure F2 is 16 byte aligned..
00288   //
00289   UINT64  Reserved;
00290   UINT64  R1;
00291   UINT64  R2;
00292   UINT64  R3;
00293   UINT64  R4;
00294   UINT64  R5;
00295   UINT64  R6;
00296   UINT64  R7;
00297   UINT64  R8;
00298   UINT64  R9;
00299   UINT64  R10;
00300   UINT64  R11;
00301   UINT64  R12;
00302   UINT64  R13;
00303   UINT64  R14;
00304   UINT64  R15;
00305   UINT64  R16;
00306   UINT64  R17;
00307   UINT64  R18;
00308   UINT64  R19;
00309   UINT64  R20;
00310   UINT64  R21;
00311   UINT64  R22;
00312   UINT64  R23;
00313   UINT64  R24;
00314   UINT64  R25;
00315   UINT64  R26;
00316   UINT64  R27;
00317   UINT64  R28;
00318   UINT64  R29;
00319   UINT64  R30;
00320   UINT64  R31;
00321 
00322   UINT64  F2[2];
00323   UINT64  F3[2];
00324   UINT64  F4[2];
00325   UINT64  F5[2];
00326   UINT64  F6[2];
00327   UINT64  F7[2];
00328   UINT64  F8[2];
00329   UINT64  F9[2];
00330   UINT64  F10[2];
00331   UINT64  F11[2];
00332   UINT64  F12[2];
00333   UINT64  F13[2];
00334   UINT64  F14[2];
00335   UINT64  F15[2];
00336   UINT64  F16[2];
00337   UINT64  F17[2];
00338   UINT64  F18[2];
00339   UINT64  F19[2];
00340   UINT64  F20[2];
00341   UINT64  F21[2];
00342   UINT64  F22[2];
00343   UINT64  F23[2];
00344   UINT64  F24[2];
00345   UINT64  F25[2];
00346   UINT64  F26[2];
00347   UINT64  F27[2];
00348   UINT64  F28[2];
00349   UINT64  F29[2];
00350   UINT64  F30[2];
00351   UINT64  F31[2];
00352 
00353   UINT64  Pr;
00354 
00355   UINT64  B0;
00356   UINT64  B1;
00357   UINT64  B2;
00358   UINT64  B3;
00359   UINT64  B4;
00360   UINT64  B5;
00361   UINT64  B6;
00362   UINT64  B7;
00363 
00364   //
00365   // application registers
00366   //
00367   UINT64  ArRsc;
00368   UINT64  ArBsp;
00369   UINT64  ArBspstore;
00370   UINT64  ArRnat;
00371 
00372   UINT64  ArFcr;
00373 
00374   UINT64  ArEflag;
00375   UINT64  ArCsd;
00376   UINT64  ArSsd;
00377   UINT64  ArCflg;
00378   UINT64  ArFsr;
00379   UINT64  ArFir;
00380   UINT64  ArFdr;
00381 
00382   UINT64  ArCcv;
00383 
00384   UINT64  ArUnat;
00385 
00386   UINT64  ArFpsr;
00387 
00388   UINT64  ArPfs;
00389   UINT64  ArLc;
00390   UINT64  ArEc;
00391 
00392   //
00393   // control registers
00394   //
00395   UINT64  CrDcr;
00396   UINT64  CrItm;
00397   UINT64  CrIva;
00398   UINT64  CrPta;
00399   UINT64  CrIpsr;
00400   UINT64  CrIsr;
00401   UINT64  CrIip;
00402   UINT64  CrIfa;
00403   UINT64  CrItir;
00404   UINT64  CrIipa;
00405   UINT64  CrIfs;
00406   UINT64  CrIim;
00407   UINT64  CrIha;
00408 
00409   //
00410   // debug registers
00411   //
00412   UINT64  Dbr0;
00413   UINT64  Dbr1;
00414   UINT64  Dbr2;
00415   UINT64  Dbr3;
00416   UINT64  Dbr4;
00417   UINT64  Dbr5;
00418   UINT64  Dbr6;
00419   UINT64  Dbr7;
00420 
00421   UINT64  Ibr0;
00422   UINT64  Ibr1;
00423   UINT64  Ibr2;
00424   UINT64  Ibr3;
00425   UINT64  Ibr4;
00426   UINT64  Ibr5;
00427   UINT64  Ibr6;
00428   UINT64  Ibr7;
00429 
00430   //
00431   // virtual registers - nat bits for R1-R31
00432   //
00433   UINT64  IntNat;
00434 
00435 } EFI_SYSTEM_CONTEXT_IPF;
00436 
00437 //
00438 //  EBC processor exception types
00439 //
00440 #define EXCEPT_EBC_UNDEFINED            0
00441 #define EXCEPT_EBC_DIVIDE_ERROR         1
00442 #define EXCEPT_EBC_DEBUG                2
00443 #define EXCEPT_EBC_BREAKPOINT           3
00444 #define EXCEPT_EBC_OVERFLOW             4
00445 #define EXCEPT_EBC_INVALID_OPCODE       5   // opcode out of range
00446 #define EXCEPT_EBC_STACK_FAULT          6
00447 #define EXCEPT_EBC_ALIGNMENT_CHECK      7
00448 #define EXCEPT_EBC_INSTRUCTION_ENCODING 8   // malformed instruction
00449 #define EXCEPT_EBC_BAD_BREAK            9   // BREAK 0 or undefined BREAK
00450 #define EXCEPT_EBC_STEP                 10  // to support debug stepping
00451 ///
00452 /// For coding convenience, define the maximum valid EBC exception.
00453 ///
00454 #define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP
00455 
00456 ///
00457 ///  EBC processor context definition
00458 ///
00459 typedef struct {
00460   UINT64  R0;
00461   UINT64  R1;
00462   UINT64  R2;
00463   UINT64  R3;
00464   UINT64  R4;
00465   UINT64  R5;
00466   UINT64  R6;
00467   UINT64  R7;
00468   UINT64  Flags;
00469   UINT64  ControlFlags;
00470   UINT64  Ip;
00471 } EFI_SYSTEM_CONTEXT_EBC;
00472 
00473 ///
00474 /// Universal EFI_SYSTEM_CONTEXT definition
00475 ///
00476 typedef union {
00477   EFI_SYSTEM_CONTEXT_EBC  *SystemContextEbc;
00478   EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32;
00479   EFI_SYSTEM_CONTEXT_X64  *SystemContextX64;
00480   EFI_SYSTEM_CONTEXT_IPF  *SystemContextIpf;
00481 } EFI_SYSTEM_CONTEXT;
00482 
00483 //
00484 // DebugSupport callback function prototypes
00485 //
00486 
00487 /**
00488   Registers and enables an exception callback function for the specified exception.
00489 
00490   @param  ExceptionType         Exception types in EBC, IA-32, X64, or IPF
00491   @param  SystemContext         Exception content.
00492 
00493 **/
00494 typedef
00495 VOID
00496 (*EFI_EXCEPTION_CALLBACK)(
00497   IN     EFI_EXCEPTION_TYPE               ExceptionType,
00498   IN OUT EFI_SYSTEM_CONTEXT               SystemContext
00499   );
00500 
00501 /**
00502   Registers and enables the on-target debug agent's periodic entry point.
00503 
00504   @param  SystemContext         Exception content.
00505 
00506 **/
00507 typedef
00508 VOID
00509 (*EFI_PERIODIC_CALLBACK)(
00510   IN OUT EFI_SYSTEM_CONTEXT               SystemContext
00511   );
00512 
00513 ///
00514 /// Machine type definition
00515 ///
00516 typedef enum {
00517   IsaIa32 = IMAGE_FILE_MACHINE_I386,  ///< 0x014C
00518   IsaX64  = IMAGE_FILE_MACHINE_X64,   ///< 0x8664
00519   IsaIpf  = IMAGE_FILE_MACHINE_IA64,  ///< 0x0200
00520   IsaEbc  = IMAGE_FILE_MACHINE_EBC    ///< 0x0EBC
00521 } EFI_INSTRUCTION_SET_ARCHITECTURE;
00522 
00523 
00524 //
00525 // DebugSupport member function definitions
00526 //
00527 
00528 /**
00529   Returns the maximum value that may be used for the ProcessorIndex parameter in
00530   RegisterPeriodicCallback() and RegisterExceptionCallback().
00531 
00532   @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
00533   @param  MaxProcessorIndex     Pointer to a caller-allocated UINTN in which the maximum supported
00534                                 processor index is returned.
00535 
00536   @retval EFI_SUCCESS           The function completed successfully.
00537 
00538 **/
00539 typedef
00540 EFI_STATUS
00541 (EFIAPI *EFI_GET_MAXIMUM_PROCESSOR_INDEX)(
00542   IN EFI_DEBUG_SUPPORT_PROTOCOL          *This,
00543   OUT UINTN                              *MaxProcessorIndex
00544   );
00545 
00546 /**
00547   Registers a function to be called back periodically in interrupt context.
00548 
00549   @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
00550   @param  ProcessorIndex        Specifies which processor the callback function applies to.
00551   @param  PeriodicCallback      A pointer to a function of type PERIODIC_CALLBACK that is the main
00552                                 periodic entry point of the debug agent.
00553 
00554   @retval EFI_SUCCESS           The function completed successfully.
00555   @retval EFI_ALREADY_STARTED   Non-NULL PeriodicCallback parameter when a callback
00556                                 function was previously registered.
00557   @retval EFI_OUT_OF_RESOURCES  System has insufficient memory resources to register new callback
00558                                 function.
00559 
00560 **/
00561 typedef
00562 EFI_STATUS
00563 (EFIAPI *EFI_REGISTER_PERIODIC_CALLBACK)(
00564   IN EFI_DEBUG_SUPPORT_PROTOCOL          *This,
00565   IN UINTN                               ProcessorIndex,
00566   IN EFI_PERIODIC_CALLBACK               PeriodicCallback
00567   );
00568 
00569 /**
00570   Registers a function to be called when a given processor exception occurs.
00571 
00572   @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
00573   @param  ProcessorIndex        Specifies which processor the callback function applies to.
00574   @param  PeriodicCallback      A pointer to a function of type EXCEPTION_CALLBACK that is called
00575                                 when the processor exception specified by ExceptionType occurs.
00576   @param  ExceptionType         Specifies which processor exception to hook.
00577 
00578   @retval EFI_SUCCESS           The function completed successfully.
00579   @retval EFI_ALREADY_STARTED   Non-NULL PeriodicCallback parameter when a callback
00580                                 function was previously registered.
00581   @retval EFI_OUT_OF_RESOURCES  System has insufficient memory resources to register new callback
00582                                 function.
00583 
00584 **/
00585 typedef
00586 EFI_STATUS
00587 (EFIAPI *EFI_REGISTER_EXCEPTION_CALLBACK)(
00588   IN EFI_DEBUG_SUPPORT_PROTOCOL          *This,
00589   IN UINTN                               ProcessorIndex,
00590   IN EFI_EXCEPTION_CALLBACK              ExceptionCallback,
00591   IN EFI_EXCEPTION_TYPE                  ExceptionType
00592   );
00593 
00594 /**
00595   Invalidates processor instruction cache for a memory range. Subsequent execution in this range
00596   causes a fresh memory fetch to retrieve code to be executed.
00597 
00598   @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
00599   @param  ProcessorIndex        Specifies which processor's instruction cache is to be invalidated.
00600   @param  Start                 Specifies the physical base of the memory range to be invalidated.
00601   @param  Length                Specifies the minimum number of bytes in the processor's instruction
00602                                 cache to invalidate.
00603 
00604   @retval EFI_SUCCESS           The function completed successfully.
00605 
00606 **/
00607 typedef
00608 EFI_STATUS
00609 (EFIAPI *EFI_INVALIDATE_INSTRUCTION_CACHE)(
00610   IN EFI_DEBUG_SUPPORT_PROTOCOL          *This,
00611   IN UINTN                               ProcessorIndex,
00612   IN VOID                                *Start,
00613   IN UINT64                              Length
00614   );
00615 
00616 ///
00617 /// This protocol provides the services to allow the debug agent to register
00618 /// callback functions that are called either periodically or when specific
00619 /// processor exceptions occur.
00620 ///
00621 struct _EFI_DEBUG_SUPPORT_PROTOCOL {
00622   ///
00623   /// Declares the processor architecture for this instance of the EFI Debug Support protocol.
00624   ///
00625   EFI_INSTRUCTION_SET_ARCHITECTURE  Isa;
00626   EFI_GET_MAXIMUM_PROCESSOR_INDEX   GetMaximumProcessorIndex;
00627   EFI_REGISTER_PERIODIC_CALLBACK    RegisterPeriodicCallback;
00628   EFI_REGISTER_EXCEPTION_CALLBACK   RegisterExceptionCallback;
00629   EFI_INVALIDATE_INSTRUCTION_CACHE  InvalidateInstructionCache;
00630 };
00631 
00632 extern EFI_GUID gEfiDebugSupportProtocolGuid;
00633 
00634 #endif

Generated on Tue Apr 6 20:01:07 2010 for gPXE by  doxygen 1.5.7.1