]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Protocol/EbcVmTest.h
b84608357b905fc87c36d37076efd3fe743fbaca
[mirror_edk2.git] / MdeModulePkg / Include / Protocol / EbcVmTest.h
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