4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EBC VM Test protocol for test purposes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncof the BSD License which accompanies this distribution. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfull text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _EBC_VM_TEST_PROTOCOL_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _EBC_VM_TEST_PROTOCOL_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Define a protocol for an EBC VM test interface.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_EBC_VM_TEST_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0xAAEACCFD, 0xF27B, 0x4C17, { 0xB6, 0x10, 0x75, 0xCA, 0x1F, 0x2D, 0xFB, 0x52 } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Define for forward reference.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_EBC_VM_TEST_PROTOCOL EFI_EBC_VM_TEST_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// instruction pointer for the VM
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef UINT8 *VMIP;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef INT64 VM_REGISTER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef UINT32 EXCEPTION_FLAGS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VM_REGISTER Gpr[8]; ///< General purpose registers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< Flags register:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< 0 Set to 1 if the result of the last compare was true
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< 1 Set to 1 if stepping
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Flags; ///< 2..63 Reserved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VMIP Ip; ///< Instruction pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LastException;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EXCEPTION_FLAGS ExceptionFlags; ///< to keep track of exceptions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StopFlags;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CompilerVersion; ///< via break(6)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HighStackBottom; ///< bottom of the upper stack
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LowStackTop; ///< top of the lower stack
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 StackRetAddr; ///< location of final return address on stack
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN *StackMagicPtr; ///< pointer to magic value on stack to detect corruption
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ImageHandle; ///< for this EBC driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SYSTEM_TABLE *SystemTable; ///< for debugging only
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LastAddrConverted; ///< for debug
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LastAddrConvertedValue; ///< for debug
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *FramePtr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *EntryPoint; ///< entry point of EBC image
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ImageBase;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *StackPool;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *StackTop;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} VM_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Given a pointer to a new VM context, execute one or more instructions. This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function is only used for test purposes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] VmPtr A pointer to a VM context.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] InstructionCount A pointer to a UINTN value holding the number of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync instructions to execute. If it holds value of 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the instruction to be executed is 1.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED At least one of the opcodes is not supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS All of the instructions are executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EBC_VM_TEST_EXECUTE) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EBC_VM_TEST_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VM_CONTEXT *VmPtr,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *InstructionCount
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert AsmText to the instruction. This function is only used for test purposes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AsmText A pointer to EBC ASM text code.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Buffer Buffer to store the instruction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] BufferLen Size of buffer that is requried to store data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED This functionality is unsupported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully convert AsmText to the instruction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EBC_VM_TEST_ASM) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EBC_VM_TEST_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *AsmText,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT INT8 *Buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *BufferLen
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Dump the executed instruction. This function is only used for test purposes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] AsmText Contain the disasm text.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Buffer Buffer to store the instruction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] BufferLen Size of buffer that is requried to store data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED This functionality is unsupported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully dump the executed instruction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EBC_VM_TEST_DASM) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EBC_VM_TEST_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR16 *AsmText,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT INT8 *Buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *Len
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Prototype for the actual EBC test protocol interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_EBC_VM_TEST_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EBC_VM_TEST_EXECUTE Execute;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EBC_VM_TEST_ASM Assemble;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EBC_VM_TEST_DASM Disassemble;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiEbcVmTestProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif