]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Include/Library/OpteeLib.h
ArmPkg/OpteeLib: Add APIs to communicate with OP-TEE
[mirror_edk2.git] / ArmPkg / Include / Library / OpteeLib.h
index f65d8674d9b8bddf70877f0f4a8d5622bea0af66..6884d5681831c90ce1c402929aba82403d131785 100644 (file)
 #define OPTEE_OS_UID2          0xaf630002\r
 #define OPTEE_OS_UID3          0xa5d5c51b\r
 \r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE                0x0\r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INPUT         0x1\r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_OUTPUT        0x2\r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INOUT         0x3\r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INPUT        0x9\r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_OUTPUT       0xa\r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INOUT        0xb\r
+\r
+#define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MASK                0xff\r
+\r
+#define OPTEE_ORIGIN_COMMUNICATION              0x00000002\r
+#define OPTEE_ERROR_COMMUNICATION               0xFFFF000E\r
+\r
+typedef struct {\r
+  UINT64    BufferAddress;\r
+  UINT64    Size;\r
+  UINT64    SharedMemoryReference;\r
+} OPTEE_MESSAGE_PARAM_MEMORY;\r
+\r
+typedef struct {\r
+  UINT64    A;\r
+  UINT64    B;\r
+  UINT64    C;\r
+} OPTEE_MESSAGE_PARAM_VALUE;\r
+\r
+typedef struct {\r
+  UINT64 Attribute;\r
+  union {\r
+    OPTEE_MESSAGE_PARAM_MEMORY   Memory;\r
+    OPTEE_MESSAGE_PARAM_VALUE    Value;\r
+  } Union;\r
+} OPTEE_MESSAGE_PARAM;\r
+\r
+#define OPTEE_MAX_CALL_PARAMS       4\r
+\r
+typedef struct {\r
+  UINT32    Command;\r
+  UINT32    Function;\r
+  UINT32    Session;\r
+  UINT32    CancelId;\r
+  UINT32    Pad;\r
+  UINT32    Return;\r
+  UINT32    ReturnOrigin;\r
+  UINT32    NumParams;\r
+\r
+  // NumParams tells the actual number of element in Params\r
+  OPTEE_MESSAGE_PARAM  Params[OPTEE_MAX_CALL_PARAMS];\r
+} OPTEE_MESSAGE_ARG;\r
+\r
+typedef struct {\r
+  EFI_GUID  Uuid;           // [in] GUID/UUID of the Trusted Application\r
+  UINT32    Session;        // [out] Session id\r
+  UINT32    Return;         // [out] Return value\r
+  UINT32    ReturnOrigin;   // [out] Origin of the return value\r
+} OPTEE_OPEN_SESSION_ARG;\r
+\r
+typedef struct {\r
+  UINT32    Function;       // [in] Trusted Application function, specific to the TA\r
+  UINT32    Session;        // [in] Session id\r
+  UINT32    Return;         // [out] Return value\r
+  UINT32    ReturnOrigin;   // [out] Origin of the return value\r
+  OPTEE_MESSAGE_PARAM  Params[OPTEE_MAX_CALL_PARAMS]; // Params for function to be invoked\r
+} OPTEE_INVOKE_FUNCTION_ARG;\r
+\r
 BOOLEAN\r
 EFIAPI\r
 IsOpteePresent (\r
   VOID\r
   );\r
 \r
+EFI_STATUS\r
+EFIAPI\r
+OpteeInit (\r
+  VOID\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OpteeOpenSession (\r
+  IN OUT OPTEE_OPEN_SESSION_ARG      *OpenSessionArg\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OpteeCloseSession (\r
+  IN UINT32                      Session\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OpteeInvokeFunction (\r
+  IN OUT OPTEE_INVOKE_FUNCTION_ARG       *InvokeFunctionArg\r
+  );\r
+\r
 #endif\r