-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-Module Name:\r
-\r
- EbcExecute.h\r
-\r
-Abstract:\r
-\r
+/** @file\r
Header file for Virtual Machine support. Contains EBC defines that can\r
- be of use to a disassembler for the most part. Also provides function \r
+ be of use to a disassembler for the most part. Also provides function\r
prototypes for VM functions.\r
\r
---*/\r
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
\r
#ifndef _EBC_EXECUTE_H_\r
#define _EBC_EXECUTE_H_\r
#define OPERAND1_CHAR(op) ('0' + OPERAND1_REGNUM (op))\r
#define OPERAND2_CHAR(op) ('0' + OPERAND2_REGNUM (op))\r
\r
-#define OPERAND1_REGDATA(pvm, op) pvm->R[OPERAND1_REGNUM (op)]\r
-#define OPERAND2_REGDATA(pvm, op) pvm->R[OPERAND2_REGNUM (op)]\r
+#define OPERAND1_REGDATA(pvm, op) pvm->Gpr[OPERAND1_REGNUM (op)]\r
+#define OPERAND2_REGDATA(pvm, op) pvm->Gpr[OPERAND2_REGNUM (op)]\r
\r
//\r
// Condition masks usually for byte 1 encodings of code\r
#define OPCODE_MOVIN 0x38\r
#define OPCODE_MOVREL 0x39\r
\r
+/**\r
+ Execute an EBC image from an entry point or from a published protocol.\r
+\r
+ @param VmPtr A pointer to a VM context.\r
+\r
+ @retval EFI_UNSUPPORTED At least one of the opcodes is not supported.\r
+ @retval EFI_SUCCESS All of the instructions are executed successfully.\r
+\r
+**/\r
EFI_STATUS\r
EbcExecute (\r
IN VM_CONTEXT *VmPtr\r
- )\r
-;\r
+ );\r
+\r
+\r
\r
+/**\r
+ Returns the version of the EBC virtual machine.\r
\r
+ @return The 64-bit version of EBC virtual machine.\r
\r
+**/\r
UINT64\r
GetVmVersion (\r
VOID\r
- )\r
-;\r
+ );\r
+\r
+/**\r
+ Writes UINTN data to memory address.\r
+\r
+ This routine is called by the EBC data\r
+ movement instructions that write to memory. Since these writes\r
+ may be to the stack, which looks like (high address on top) this,\r
+\r
+ [EBC entry point arguments]\r
+ [VM stack]\r
+ [EBC stack]\r
+\r
+ we need to detect all attempts to write to the EBC entry point argument\r
+ stack area and adjust the address (which will initially point into the\r
+ VM stack) to point into the EBC entry point arguments.\r
+\r
+ @param VmPtr A pointer to a VM context.\r
+ @param Addr Address to write to.\r
+ @param Data Value to write to Addr.\r
+\r
+ @retval EFI_SUCCESS The instruction is executed successfully.\r
+ @retval Other Some error occurs when writing data to the address.\r
\r
+**/\r
EFI_STATUS\r
VmWriteMemN (\r
IN VM_CONTEXT *VmPtr,\r
IN UINTN Addr,\r
IN UINTN Data\r
- )\r
-;\r
+ );\r
\r
-EFI_STATUS\r
-VmWriteMem64 (\r
- IN VM_CONTEXT *VmPtr,\r
- UINTN Addr,\r
- IN UINT64 Data\r
- )\r
-;\r
+/**\r
+ Writes 64-bit data to memory address.\r
\r
-//\r
-// Define a protocol for an EBC VM test interface.\r
-//\r
-#define EFI_EBC_VM_TEST_PROTOCOL_GUID \\r
- { \\r
- 0xAAEACCFDL, 0xF27B, 0x4C17, { 0xB6, 0x10, 0x75, 0xCA, 0x1F, 0x2D, 0xFB, 0x52 } \\r
- }\r
+ This routine is called by the EBC data\r
+ movement instructions that write to memory. Since these writes\r
+ may be to the stack, which looks like (high address on top) this,\r
\r
-//\r
-// Define for forward reference.\r
-//\r
-typedef struct _EFI_EBC_VM_TEST_PROTOCOL EFI_EBC_VM_TEST_PROTOCOL;\r
+ [EBC entry point arguments]\r
+ [VM stack]\r
+ [EBC stack]\r
\r
-typedef\r
-EFI_STATUS\r
-(*EBC_VM_TEST_EXECUTE) (\r
- IN EFI_EBC_VM_TEST_PROTOCOL * This,\r
- IN VM_CONTEXT * VmPtr,\r
- IN OUT UINTN *InstructionCount\r
- );\r
+ we need to detect all attempts to write to the EBC entry point argument\r
+ stack area and adjust the address (which will initially point into the\r
+ VM stack) to point into the EBC entry point arguments.\r
\r
-typedef\r
-EFI_STATUS\r
-(*EBC_VM_TEST_ASM) (\r
- IN EFI_EBC_VM_TEST_PROTOCOL * This,\r
- IN CHAR16 *AsmText,\r
- IN OUT INT8 *Buffer,\r
- IN OUT UINTN *BufferLen\r
- );\r
+ @param VmPtr A pointer to a VM context.\r
+ @param Addr Address to write to.\r
+ @param Data Value to write to Addr.\r
+\r
+ @retval EFI_SUCCESS The instruction is executed successfully.\r
+ @retval Other Some error occurs when writing data to the address.\r
\r
-typedef\r
+**/\r
EFI_STATUS\r
-(*EBC_VM_TEST_DASM) (\r
- IN EFI_EBC_VM_TEST_PROTOCOL * This,\r
- IN OUT CHAR16 *AsmText,\r
- IN OUT INT8 *Buffer,\r
- IN OUT UINTN *Len\r
+VmWriteMem64 (\r
+ IN VM_CONTEXT *VmPtr,\r
+ IN UINTN Addr,\r
+ IN UINT64 Data\r
);\r
\r
-//\r
-// Prototype for the actual EBC test protocol interface\r
-//\r
-struct _EFI_EBC_VM_TEST_PROTOCOL {\r
- EBC_VM_TEST_EXECUTE Execute;\r
- EBC_VM_TEST_ASM Assemble;\r
- EBC_VM_TEST_DASM Disassemble;\r
-};\r
+/**\r
+ Given a pointer to a new VM context, execute one or more instructions. This\r
+ function is only used for test purposes via the EBC VM test protocol.\r
+\r
+ @param This A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.\r
+ @param VmPtr A pointer to a VM context.\r
+ @param InstructionCount A pointer to a UINTN value holding the number of\r
+ instructions to execute. If it holds value of 0,\r
+ then the instruction to be executed is 1.\r
\r
+ @retval EFI_UNSUPPORTED At least one of the opcodes is not supported.\r
+ @retval EFI_SUCCESS All of the instructions are executed successfully.\r
+\r
+**/\r
EFI_STATUS\r
+EFIAPI\r
EbcExecuteInstructions (\r
IN EFI_EBC_VM_TEST_PROTOCOL *This,\r
IN VM_CONTEXT *VmPtr,\r
IN OUT UINTN *InstructionCount\r
- )\r
-;\r
+ );\r
\r
#endif // ifndef _EBC_EXECUTE_H_\r