XenevaOS
Loading...
Searching...
No Matches
Ebc.h
Go to the documentation of this file.
1
15#ifndef __EFI_EBC_PROTOCOL_H__
16#define __EFI_EBC_PROTOCOL_H__
17
18#define EFI_EBC_INTERPRETER_PROTOCOL_GUID \
19 { \
20 0x13AC6DD1, 0x73D0, 0x11D4, {0xB0, 0x6B, 0x00, 0xAA, 0x00, 0xBD, 0x6D, 0xE7 } \
21 }
22
23//
24// Define OPCODES
25//
26#define OPCODE_BREAK 0x00
27#define OPCODE_JMP 0x01
28#define OPCODE_JMP8 0x02
29#define OPCODE_CALL 0x03
30#define OPCODE_RET 0x04
31#define OPCODE_CMPEQ 0x05
32#define OPCODE_CMPLTE 0x06
33#define OPCODE_CMPGTE 0x07
34#define OPCODE_CMPULTE 0x08
35#define OPCODE_CMPUGTE 0x09
36#define OPCODE_NOT 0x0A
37#define OPCODE_NEG 0x0B
38#define OPCODE_ADD 0x0C
39#define OPCODE_SUB 0x0D
40#define OPCODE_MUL 0x0E
41#define OPCODE_MULU 0x0F
42#define OPCODE_DIV 0x10
43#define OPCODE_DIVU 0x11
44#define OPCODE_MOD 0x12
45#define OPCODE_MODU 0x13
46#define OPCODE_AND 0x14
47#define OPCODE_OR 0x15
48#define OPCODE_XOR 0x16
49#define OPCODE_SHL 0x17
50#define OPCODE_SHR 0x18
51#define OPCODE_ASHR 0x19
52#define OPCODE_EXTNDB 0x1A
53#define OPCODE_EXTNDW 0x1B
54#define OPCODE_EXTNDD 0x1C
55#define OPCODE_MOVBW 0x1D
56#define OPCODE_MOVWW 0x1E
57#define OPCODE_MOVDW 0x1F
58#define OPCODE_MOVQW 0x20
59#define OPCODE_MOVBD 0x21
60#define OPCODE_MOVWD 0x22
61#define OPCODE_MOVDD 0x23
62#define OPCODE_MOVQD 0x24
63#define OPCODE_MOVSNW 0x25 // Move signed natural with word index
64#define OPCODE_MOVSND 0x26 // Move signed natural with dword index
65//
66// #define OPCODE_27 0x27
67//
68#define OPCODE_MOVQQ 0x28 // Does this go away?
69#define OPCODE_LOADSP 0x29
70#define OPCODE_STORESP 0x2A
71#define OPCODE_PUSH 0x2B
72#define OPCODE_POP 0x2C
73#define OPCODE_CMPIEQ 0x2D
74#define OPCODE_CMPILTE 0x2E
75#define OPCODE_CMPIGTE 0x2F
76#define OPCODE_CMPIULTE 0x30
77#define OPCODE_CMPIUGTE 0x31
78#define OPCODE_MOVNW 0x32
79#define OPCODE_MOVND 0x33
80//
81// #define OPCODE_34 0x34
82//
83#define OPCODE_PUSHN 0x35
84#define OPCODE_POPN 0x36
85#define OPCODE_MOVI 0x37
86#define OPCODE_MOVIN 0x38
87#define OPCODE_MOVREL 0x39
88
89//
90// Bit masks for opcode encodings
91//
92#define OPCODE_M_OPCODE 0x3F // bits of interest for first level decode
93#define OPCODE_M_IMMDATA 0x80
94#define OPCODE_M_IMMDATA64 0x40
95#define OPCODE_M_64BIT 0x40 // for CMP
96#define OPCODE_M_RELADDR 0x10 // for CALL instruction
97#define OPCODE_M_CMPI32_DATA 0x80 // for CMPI
98#define OPCODE_M_CMPI64 0x40 // for CMPI 32 or 64 bit comparison
99#define OPERAND_M_MOVIN_N 0x80
100#define OPERAND_M_CMPI_INDEX 0x10
101
102//
103// Masks for instructions that encode presence of indexes for operand1 and/or
104// operand2.
105//
106#define OPCODE_M_IMMED_OP1 0x80
107#define OPCODE_M_IMMED_OP2 0x40
108
109//
110// Bit masks for operand encodings
111//
112#define OPERAND_M_INDIRECT1 0x08
113#define OPERAND_M_INDIRECT2 0x80
114#define OPERAND_M_OP1 0x07
115#define OPERAND_M_OP2 0x70
116
117//
118// Masks for data manipulation instructions
119//
120#define DATAMANIP_M_64 0x40 // 64-bit width operation
121#define DATAMANIP_M_IMMDATA 0x80
122
123//
124// For MOV instructions, need a mask for the opcode when immediate
125// data applies to R2.
126//
127#define OPCODE_M_IMMED_OP2 0x40
128
129//
130// The MOVI/MOVIn instructions use bit 6 of operands byte to indicate
131// if an index is present. Then bits 4 and 5 are used to indicate the width
132// of the move.
133//
134#define MOVI_M_IMMDATA 0x40
135#define MOVI_M_DATAWIDTH 0xC0
136#define MOVI_DATAWIDTH16 0x40
137#define MOVI_DATAWIDTH32 0x80
138#define MOVI_DATAWIDTH64 0xC0
139#define MOVI_M_MOVEWIDTH 0x30
140#define MOVI_MOVEWIDTH8 0x00
141#define MOVI_MOVEWIDTH16 0x10
142#define MOVI_MOVEWIDTH32 0x20
143#define MOVI_MOVEWIDTH64 0x30
144
145//
146// Masks for CALL instruction encodings
147//
148#define OPERAND_M_RELATIVE_ADDR 0x10
149#define OPERAND_M_NATIVE_CALL 0x20
150
151//
152// Masks for decoding push/pop instructions
153//
154#define PUSHPOP_M_IMMDATA 0x80 // opcode bit indicating immediate data
155#define PUSHPOP_M_64 0x40 // opcode bit indicating 64-bit operation
156//
157// Mask for operand of JMP instruction
158//
159#define JMP_M_RELATIVE 0x10
160#define JMP_M_CONDITIONAL 0x80
161#define JMP_M_CS 0x40
162
163//
164// Macros to determine if a given operand is indirect
165//
166#define OPERAND1_INDIRECT(op) ((op) & OPERAND_M_INDIRECT1)
167#define OPERAND2_INDIRECT(op) ((op) & OPERAND_M_INDIRECT2)
168
169//
170// Macros to extract the operands from second byte of instructions
171//
172#define OPERAND1_REGNUM(op) ((op) & OPERAND_M_OP1)
173#define OPERAND2_REGNUM(op) (((op) & OPERAND_M_OP2) >> 4)
174
175#define OPERAND1_CHAR(op) ('0' + OPERAND1_REGNUM (op))
176#define OPERAND2_CHAR(op) ('0' + OPERAND2_REGNUM (op))
177
178//
179// Condition masks usually for byte 1 encodings of code
180//
181#define CONDITION_M_CONDITIONAL 0x80
182#define CONDITION_M_CS 0x40
183
187#define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID
188
193
212typedef
215 IN EFI_EBC_PROTOCOL *This,
216 IN EFI_HANDLE ImageHandle,
217 IN VOID *EbcEntryPoint,
218 OUT VOID **Thunk
219 );
220
235typedef
238 IN EFI_EBC_PROTOCOL *This,
239 IN EFI_HANDLE ImageHandle
240 );
241
252typedef
257 );
258
269typedef
272 IN EFI_EBC_PROTOCOL *This,
273 IN EBC_ICACHE_FLUSH Flush
274 );
275
289typedef
292 IN EFI_EBC_PROTOCOL *This,
293 IN OUT UINT64 *Version
294 );
295
308
309//
310// Extern the global EBC protocol GUID
311//
313
314#endif
#define EFIAPI
Definition ProcessorBind.h:172
#define IN
Definition Base.h:347
#define OUT
Definition Base.h:352
EFI_GUID gEfiEbcProtocolGuid
EFI_STATUS(EFIAPI * EFI_EBC_CREATE_THUNK)(IN EFI_EBC_PROTOCOL *This, IN EFI_HANDLE ImageHandle, IN VOID *EbcEntryPoint, OUT VOID **Thunk)
Definition Ebc.h:214
EFI_STATUS(EFIAPI * EFI_EBC_UNLOAD_IMAGE)(IN EFI_EBC_PROTOCOL *This, IN EFI_HANDLE ImageHandle)
Definition Ebc.h:237
EFI_STATUS(EFIAPI * EFI_EBC_GET_VERSION)(IN EFI_EBC_PROTOCOL *This, IN OUT UINT64 *Version)
Definition Ebc.h:291
EFI_STATUS(EFIAPI * EFI_EBC_REGISTER_ICACHE_FLUSH)(IN EFI_EBC_PROTOCOL *This, IN EBC_ICACHE_FLUSH Flush)
Definition Ebc.h:271
EFI_STATUS(EFIAPI * EBC_ICACHE_FLUSH)(IN EFI_PHYSICAL_ADDRESS Start, IN UINT64 Length)
Definition Ebc.h:254
UINT64 EFI_PHYSICAL_ADDRESS
Definition UefiBaseType.h:54
RETURN_STATUS EFI_STATUS
Definition UefiBaseType.h:33
VOID * EFI_HANDLE
Definition UefiBaseType.h:37
#define VOID
Definition acefi.h:190
ACPI_PHYSICAL_ADDRESS ACPI_SIZE Length
Definition acpixf.h:638
COMPILER_DEPENDENT_UINT64 UINT64
Definition actypes.h:239
Definition Base.h:281
Definition Ebc.h:302
EFI_EBC_GET_VERSION GetVersion
Definition Ebc.h:306
EFI_EBC_UNLOAD_IMAGE UnloadImage
Definition Ebc.h:304
EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush
Definition Ebc.h:305
EFI_EBC_CREATE_THUNK CreateThunk
Definition Ebc.h:303