Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   EBC VM Test protocol for test purposes.
      3 
      4 Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
      5 
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions
      8 of the BSD License which accompanies this distribution.  The
      9 full text of the license may be found at
     10 http://opensource.org/licenses/bsd-license.php
     11 
     12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 **/
     16 
     17 #ifndef _EBC_VM_TEST_PROTOCOL_H_
     18 #define _EBC_VM_TEST_PROTOCOL_H_
     19 
     20 //
     21 // Define a protocol for an EBC VM test interface.
     22 //
     23 #define EFI_EBC_VM_TEST_PROTOCOL_GUID \
     24   { \
     25     0xAAEACCFD, 0xF27B, 0x4C17, { 0xB6, 0x10, 0x75, 0xCA, 0x1F, 0x2D, 0xFB, 0x52 } \
     26   }
     27 
     28 //
     29 // Define for forward reference.
     30 //
     31 typedef struct _EFI_EBC_VM_TEST_PROTOCOL EFI_EBC_VM_TEST_PROTOCOL;
     32 
     33 ///
     34 /// instruction pointer for the VM
     35 ///
     36 typedef UINT8   *VMIP;
     37 
     38 typedef INT64   VM_REGISTER;
     39 typedef UINT32  EXCEPTION_FLAGS;
     40 
     41 typedef struct {
     42   VM_REGISTER       Gpr[8];                 ///< General purpose registers.
     43                                             ///< Flags register:
     44                                             ///<   0  Set to 1 if the result of the last compare was true
     45                                             ///<   1  Set to 1 if stepping
     46   UINT64            Flags;                  ///<   2..63 Reserved.
     47   VMIP              Ip;                     ///< Instruction pointer.
     48   UINTN             LastException;
     49   EXCEPTION_FLAGS   ExceptionFlags;         ///< to keep track of exceptions
     50   UINT32            StopFlags;
     51   UINT32            CompilerVersion;        ///< via break(6)
     52   UINTN             HighStackBottom;        ///< bottom of the upper stack
     53   UINTN             LowStackTop;            ///< top of the lower stack
     54   UINT64            StackRetAddr;           ///< location of final return address on stack
     55   UINTN             *StackMagicPtr;         ///< pointer to magic value on stack to detect corruption
     56   EFI_HANDLE        ImageHandle;            ///< for this EBC driver
     57   EFI_SYSTEM_TABLE  *SystemTable;           ///< for debugging only
     58   UINTN             LastAddrConverted;      ///< for debug
     59   UINTN             LastAddrConvertedValue; ///< for debug
     60   VOID              *FramePtr;
     61   VOID              *EntryPoint;            ///< entry point of EBC image
     62   UINTN             ImageBase;
     63   VOID              *StackPool;
     64   VOID              *StackTop;
     65 } VM_CONTEXT;
     66 
     67 /**
     68   Given a pointer to a new VM context, execute one or more instructions. This
     69   function is only used for test purposes.
     70 
     71   @param[in]      This              A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
     72   @param[in]      VmPtr             A pointer to a VM context.
     73   @param[in, out] InstructionCount  A pointer to a UINTN value holding the number of
     74                                     instructions to execute. If it holds value of 0,
     75                                     then the instruction to be executed is 1.
     76 
     77   @retval EFI_UNSUPPORTED       At least one of the opcodes is not supported.
     78   @retval EFI_SUCCESS           All of the instructions are executed successfully.
     79 
     80 **/
     81 typedef
     82 EFI_STATUS
     83 (EFIAPI *EBC_VM_TEST_EXECUTE) (
     84   IN EFI_EBC_VM_TEST_PROTOCOL         *This,
     85   IN VM_CONTEXT                       *VmPtr,
     86   IN OUT UINTN                        *InstructionCount
     87   );
     88 
     89 /**
     90   Convert AsmText to the instruction. This function is only used for test purposes.
     91 
     92   @param[in]  This              A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
     93   @param[in]  AsmText           A pointer to EBC ASM text code.
     94   @param[out] Buffer            Buffer to store the instruction.
     95   @param[out] BufferLen         Size of buffer that is requried to store data.
     96 
     97   @retval EFI_UNSUPPORTED       This functionality is unsupported.
     98   @retval EFI_SUCCESS           Successfully convert AsmText to the instruction.
     99 
    100 **/
    101 typedef
    102 EFI_STATUS
    103 (EFIAPI *EBC_VM_TEST_ASM) (
    104   IN EFI_EBC_VM_TEST_PROTOCOL         *This,
    105   IN CHAR16                           *AsmText,
    106   IN OUT INT8                         *Buffer,
    107   IN OUT UINTN                        *BufferLen
    108   );
    109 
    110 /**
    111   Dump the executed instruction. This function is only used for test purposes.
    112 
    113   @param[in]  This              A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
    114   @param[out] AsmText           Contain the disasm text.
    115   @param[out] Buffer            Buffer to store the instruction.
    116   @param[out] BufferLen         Size of buffer that is requried to store data.
    117 
    118   @retval EFI_UNSUPPORTED       This functionality is unsupported.
    119   @retval EFI_SUCCESS           Successfully dump the executed instruction.
    120 
    121 **/
    122 typedef
    123 EFI_STATUS
    124 (EFIAPI *EBC_VM_TEST_DASM) (
    125   IN EFI_EBC_VM_TEST_PROTOCOL         *This,
    126   IN OUT CHAR16                       *AsmText,
    127   IN OUT INT8                         *Buffer,
    128   IN OUT UINTN                        *Len
    129   );
    130 
    131 //
    132 // Prototype for the actual EBC test protocol interface
    133 //
    134 struct _EFI_EBC_VM_TEST_PROTOCOL {
    135   EBC_VM_TEST_EXECUTE Execute;
    136   EBC_VM_TEST_ASM     Assemble;
    137   EBC_VM_TEST_DASM    Disassemble;
    138 };
    139 
    140 extern EFI_GUID gEfiEbcVmTestProtocolGuid;
    141 
    142 #endif
    143