11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 2e43888b8SJens Wiklander /* 35cf48737SJens Wiklander * Copyright (c) 2015-2017, Linaro Limited 4e43888b8SJens Wiklander */ 5e43888b8SJens Wiklander #ifndef _OPTEE_MSG_H 6e43888b8SJens Wiklander #define _OPTEE_MSG_H 7e43888b8SJens Wiklander 80638aa9fSJens Wiklander #include <compiler.h> 90638aa9fSJens Wiklander #include <types_ext.h> 105cf48737SJens Wiklander #include <util.h> 110638aa9fSJens Wiklander 12e43888b8SJens Wiklander /* 13e43888b8SJens Wiklander * This file defines the OP-TEE message protocol used to communicate 14e43888b8SJens Wiklander * with an instance of OP-TEE running in secure world. 15e43888b8SJens Wiklander * 16e43888b8SJens Wiklander * This file is divided into three sections. 17e43888b8SJens Wiklander * 1. Formatting of messages. 18e43888b8SJens Wiklander * 2. Requests from normal world 19e43888b8SJens Wiklander * 3. Requests from secure world, Remote Procedure Call (RPC), handled by 20e43888b8SJens Wiklander * tee-supplicant. 21e43888b8SJens Wiklander */ 22e43888b8SJens Wiklander 23e43888b8SJens Wiklander /***************************************************************************** 24e43888b8SJens Wiklander * Part 1 - formatting of messages 25e43888b8SJens Wiklander *****************************************************************************/ 26e43888b8SJens Wiklander 27e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_NONE 0x0 28e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT 0x1 29e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT 0x2 30e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT 0x3 31e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT 0x5 32e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT 0x6 33e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT 0x7 34e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT 0x9 35e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT 0xa 36e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT 0xb 37e43888b8SJens Wiklander 385cf48737SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_MASK GENMASK_32(7, 0) 39e43888b8SJens Wiklander 40e43888b8SJens Wiklander /* 41e43888b8SJens Wiklander * Meta parameter to be absorbed by the Secure OS and not passed 42e43888b8SJens Wiklander * to the Trusted Application. 43e43888b8SJens Wiklander * 44e43888b8SJens Wiklander * Currently only used with OPTEE_MSG_CMD_OPEN_SESSION. 45e43888b8SJens Wiklander */ 465cf48737SJens Wiklander #define OPTEE_MSG_ATTR_META BIT(8) 47e43888b8SJens Wiklander 48e43888b8SJens Wiklander /* 49e7a8839bSVolodymyr Babchuk * Pointer to a list of pages used to register user-defined SHM buffer. 50e7a8839bSVolodymyr Babchuk * Used with OPTEE_MSG_ATTR_TYPE_TMEM_*. 51e7a8839bSVolodymyr Babchuk * buf_ptr should point to the beginning of the buffer. Buffer will contain 52e7a8839bSVolodymyr Babchuk * list of page addresses. OP-TEE core can reconstruct contiguous buffer from 53e7a8839bSVolodymyr Babchuk * that page addresses list. Page addresses are stored as 64 bit values. 54e7a8839bSVolodymyr Babchuk * Last entry on a page should point to the next page of buffer. 55e7a8839bSVolodymyr Babchuk * Every entry in buffer should point to a 4k page beginning (12 least 56e7a8839bSVolodymyr Babchuk * significant bits must be equal to zero). 57e7a8839bSVolodymyr Babchuk * 58e7a8839bSVolodymyr Babchuk * 12 least significant of optee_msg_param.u.tmem.buf_ptr should hold page 59e7a8839bSVolodymyr Babchuk * offset of user buffer. 60e7a8839bSVolodymyr Babchuk * 61e7a8839bSVolodymyr Babchuk * So, entries should be placed like members of this structure: 62e7a8839bSVolodymyr Babchuk * 63e7a8839bSVolodymyr Babchuk * struct page_data { 64e7a8839bSVolodymyr Babchuk * uint64_t pages_array[OPTEE_MSG_NONCONTIG_PAGE_SIZE/sizeof(uint64_t) - 1]; 65e7a8839bSVolodymyr Babchuk * uint64_t next_page_data; 66e7a8839bSVolodymyr Babchuk * }; 67e7a8839bSVolodymyr Babchuk * 68e7a8839bSVolodymyr Babchuk * Structure is designed to exactly fit into the page size 69e7a8839bSVolodymyr Babchuk * OPTEE_MSG_NONCONTIG_PAGE_SIZE which is a standard 4KB page. 70e7a8839bSVolodymyr Babchuk * 71e7a8839bSVolodymyr Babchuk * The size of 4KB is chosen because this is the smallest page size for ARM 72e7a8839bSVolodymyr Babchuk * architectures. If REE uses larger pages, it should divide them to 4KB ones. 73e43888b8SJens Wiklander */ 74e7a8839bSVolodymyr Babchuk #define OPTEE_MSG_ATTR_NONCONTIG BIT(9) 75e43888b8SJens Wiklander 76e43888b8SJens Wiklander /* 77e43888b8SJens Wiklander * Memory attributes for caching passed with temp memrefs. The actual value 78e43888b8SJens Wiklander * used is defined outside the message protocol with the exception of 79e43888b8SJens Wiklander * OPTEE_MSG_ATTR_CACHE_PREDEFINED which means the attributes already 80e43888b8SJens Wiklander * defined for the memory range should be used. If optee_smc.h is used as 81e43888b8SJens Wiklander * bearer of this protocol OPTEE_SMC_SHM_* is used for values. 82e43888b8SJens Wiklander */ 83e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_CACHE_SHIFT 16 845cf48737SJens Wiklander #define OPTEE_MSG_ATTR_CACHE_MASK GENMASK_32(2, 0) 85e43888b8SJens Wiklander #define OPTEE_MSG_ATTR_CACHE_PREDEFINED 0 86e43888b8SJens Wiklander 87e43888b8SJens Wiklander /* 88e43888b8SJens Wiklander * Same values as TEE_LOGIN_* from TEE Internal API 89e43888b8SJens Wiklander */ 90e43888b8SJens Wiklander #define OPTEE_MSG_LOGIN_PUBLIC 0x00000000 91e43888b8SJens Wiklander #define OPTEE_MSG_LOGIN_USER 0x00000001 92e43888b8SJens Wiklander #define OPTEE_MSG_LOGIN_GROUP 0x00000002 93e43888b8SJens Wiklander #define OPTEE_MSG_LOGIN_APPLICATION 0x00000004 94e43888b8SJens Wiklander #define OPTEE_MSG_LOGIN_APPLICATION_USER 0x00000005 95e43888b8SJens Wiklander #define OPTEE_MSG_LOGIN_APPLICATION_GROUP 0x00000006 96e43888b8SJens Wiklander 97e7a8839bSVolodymyr Babchuk /* 98e7a8839bSVolodymyr Babchuk * Page size used in non-contiguous buffer entries 99e7a8839bSVolodymyr Babchuk */ 100e7a8839bSVolodymyr Babchuk #define OPTEE_MSG_NONCONTIG_PAGE_SIZE 4096 101e7a8839bSVolodymyr Babchuk 102e43888b8SJens Wiklander #ifndef ASM 103e43888b8SJens Wiklander /** 1045cf48737SJens Wiklander * struct optee_msg_param_tmem - temporary memory reference parameter 105e43888b8SJens Wiklander * @buf_ptr: Address of the buffer 106e43888b8SJens Wiklander * @size: Size of the buffer 107e43888b8SJens Wiklander * @shm_ref: Temporary shared memory reference, pointer to a struct tee_shm 108e43888b8SJens Wiklander * 109e43888b8SJens Wiklander * Secure and normal world communicates pointers as physical address 110e43888b8SJens Wiklander * instead of the virtual address. This is because secure and normal world 111e43888b8SJens Wiklander * have completely independent memory mapping. Normal world can even have a 112e43888b8SJens Wiklander * hypervisor which need to translate the guest physical address (AKA IPA 113e43888b8SJens Wiklander * in ARM documentation) to a real physical address before passing the 114e43888b8SJens Wiklander * structure to secure world. 115e43888b8SJens Wiklander */ 116e43888b8SJens Wiklander struct optee_msg_param_tmem { 117e43888b8SJens Wiklander uint64_t buf_ptr; 118e43888b8SJens Wiklander uint64_t size; 119e43888b8SJens Wiklander uint64_t shm_ref; 120e43888b8SJens Wiklander }; 121e43888b8SJens Wiklander 122e43888b8SJens Wiklander /** 1235cf48737SJens Wiklander * struct optee_msg_param_rmem - registered memory reference parameter 124e43888b8SJens Wiklander * @offs: Offset into shared memory reference 125e43888b8SJens Wiklander * @size: Size of the buffer 126e43888b8SJens Wiklander * @shm_ref: Shared memory reference, pointer to a struct tee_shm 127e43888b8SJens Wiklander */ 128e43888b8SJens Wiklander struct optee_msg_param_rmem { 129e43888b8SJens Wiklander uint64_t offs; 130e43888b8SJens Wiklander uint64_t size; 131e43888b8SJens Wiklander uint64_t shm_ref; 132e43888b8SJens Wiklander }; 133e43888b8SJens Wiklander 134e43888b8SJens Wiklander /** 135e43888b8SJens Wiklander * struct optee_msg_param_value - values 136e43888b8SJens Wiklander * @a: first value 137e43888b8SJens Wiklander * @b: second value 138e43888b8SJens Wiklander * @c: third value 139e43888b8SJens Wiklander */ 140e43888b8SJens Wiklander struct optee_msg_param_value { 141e43888b8SJens Wiklander uint64_t a; 142e43888b8SJens Wiklander uint64_t b; 143e43888b8SJens Wiklander uint64_t c; 144e43888b8SJens Wiklander }; 145e43888b8SJens Wiklander 146e43888b8SJens Wiklander /** 147e43888b8SJens Wiklander * struct optee_msg_param - parameter 148e43888b8SJens Wiklander * @attr: attributes 149e43888b8SJens Wiklander * @memref: a memory reference 150e43888b8SJens Wiklander * @value: a value 151e43888b8SJens Wiklander * 152e43888b8SJens Wiklander * @attr & OPTEE_MSG_ATTR_TYPE_MASK indicates if tmem, rmem or value is used in 153e43888b8SJens Wiklander * the union. OPTEE_MSG_ATTR_TYPE_VALUE_* indicates value, 154e43888b8SJens Wiklander * OPTEE_MSG_ATTR_TYPE_TMEM_* indicates tmem and 155e43888b8SJens Wiklander * OPTEE_MSG_ATTR_TYPE_RMEM_* indicates rmem. 156e43888b8SJens Wiklander * OPTEE_MSG_ATTR_TYPE_NONE indicates that none of the members are used. 157e43888b8SJens Wiklander */ 158e43888b8SJens Wiklander struct optee_msg_param { 159e43888b8SJens Wiklander uint64_t attr; 160e43888b8SJens Wiklander union { 161e43888b8SJens Wiklander struct optee_msg_param_tmem tmem; 162e43888b8SJens Wiklander struct optee_msg_param_rmem rmem; 163e43888b8SJens Wiklander struct optee_msg_param_value value; 164e43888b8SJens Wiklander } u; 165e43888b8SJens Wiklander }; 166e43888b8SJens Wiklander 167e43888b8SJens Wiklander /** 168e43888b8SJens Wiklander * struct optee_msg_arg - call argument 169e43888b8SJens Wiklander * @cmd: Command, one of OPTEE_MSG_CMD_* or OPTEE_MSG_RPC_CMD_* 170e43888b8SJens Wiklander * @func: Trusted Application function, specific to the Trusted Application, 171e43888b8SJens Wiklander * used if cmd == OPTEE_MSG_CMD_INVOKE_COMMAND 172e43888b8SJens Wiklander * @session: In parameter for all OPTEE_MSG_CMD_* except 173e43888b8SJens Wiklander * OPTEE_MSG_CMD_OPEN_SESSION where it's an output parameter instead 174e43888b8SJens Wiklander * @cancel_id: Cancellation id, a unique value to identify this request 175e43888b8SJens Wiklander * @ret: return value 176e43888b8SJens Wiklander * @ret_origin: origin of the return value 177e43888b8SJens Wiklander * @num_params: number of parameters supplied to the OS Command 178e43888b8SJens Wiklander * @params: the parameters supplied to the OS Command 179e43888b8SJens Wiklander * 180e43888b8SJens Wiklander * All normal calls to Trusted OS uses this struct. If cmd requires further 181e43888b8SJens Wiklander * information than what these fields hold it can be passed as a parameter 182e43888b8SJens Wiklander * tagged as meta (setting the OPTEE_MSG_ATTR_META bit in corresponding 183e43888b8SJens Wiklander * attrs field). All parameters tagged as meta have to come first. 184e43888b8SJens Wiklander */ 185e43888b8SJens Wiklander struct optee_msg_arg { 186e43888b8SJens Wiklander uint32_t cmd; 187e43888b8SJens Wiklander uint32_t func; 188e43888b8SJens Wiklander uint32_t session; 189e43888b8SJens Wiklander uint32_t cancel_id; 190e43888b8SJens Wiklander uint32_t pad; 191e43888b8SJens Wiklander uint32_t ret; 192e43888b8SJens Wiklander uint32_t ret_origin; 193e43888b8SJens Wiklander uint32_t num_params; 194e43888b8SJens Wiklander 1955cf48737SJens Wiklander /* num_params tells the actual number of element in params */ 1965cf48737SJens Wiklander struct optee_msg_param params[]; 1975cf48737SJens Wiklander }; 198e43888b8SJens Wiklander 199e43888b8SJens Wiklander /** 200e43888b8SJens Wiklander * OPTEE_MSG_GET_ARG_SIZE - return size of struct optee_msg_arg 201e43888b8SJens Wiklander * 202e43888b8SJens Wiklander * @num_params: Number of parameters embedded in the struct optee_msg_arg 203e43888b8SJens Wiklander * 204e43888b8SJens Wiklander * Returns the size of the struct optee_msg_arg together with the number 205e43888b8SJens Wiklander * of embedded parameters. 206e43888b8SJens Wiklander */ 207e43888b8SJens Wiklander #define OPTEE_MSG_GET_ARG_SIZE(num_params) \ 208e43888b8SJens Wiklander (sizeof(struct optee_msg_arg) + \ 209e43888b8SJens Wiklander sizeof(struct optee_msg_param) * (num_params)) 210e43888b8SJens Wiklander #endif /*ASM*/ 211e43888b8SJens Wiklander 212e43888b8SJens Wiklander /***************************************************************************** 213e43888b8SJens Wiklander * Part 2 - requests from normal world 214e43888b8SJens Wiklander *****************************************************************************/ 215e43888b8SJens Wiklander 216e43888b8SJens Wiklander /* 217e43888b8SJens Wiklander * Return the following UID if using API specified in this file without 218e43888b8SJens Wiklander * further extensions: 219e43888b8SJens Wiklander * 384fb3e0-e7f8-11e3-af63-0002a5d5c51b. 220e43888b8SJens Wiklander * Represented in 4 32-bit words in OPTEE_MSG_UID_0, OPTEE_MSG_UID_1, 221e43888b8SJens Wiklander * OPTEE_MSG_UID_2, OPTEE_MSG_UID_3. 222e43888b8SJens Wiklander */ 223e43888b8SJens Wiklander #define OPTEE_MSG_UID_0 0x384fb3e0 224e43888b8SJens Wiklander #define OPTEE_MSG_UID_1 0xe7f811e3 225e43888b8SJens Wiklander #define OPTEE_MSG_UID_2 0xaf630002 226e43888b8SJens Wiklander #define OPTEE_MSG_UID_3 0xa5d5c51b 227e43888b8SJens Wiklander #define OPTEE_MSG_FUNCID_CALLS_UID 0xFF01 228e43888b8SJens Wiklander 229e43888b8SJens Wiklander /* 230e43888b8SJens Wiklander * Returns 2.0 if using API specified in this file without further 231e43888b8SJens Wiklander * extensions. Represented in 2 32-bit words in OPTEE_MSG_REVISION_MAJOR 232e43888b8SJens Wiklander * and OPTEE_MSG_REVISION_MINOR 233e43888b8SJens Wiklander */ 234e43888b8SJens Wiklander #define OPTEE_MSG_REVISION_MAJOR 2 235e43888b8SJens Wiklander #define OPTEE_MSG_REVISION_MINOR 0 236e43888b8SJens Wiklander #define OPTEE_MSG_FUNCID_CALLS_REVISION 0xFF03 237e43888b8SJens Wiklander 238e43888b8SJens Wiklander /* 239e43888b8SJens Wiklander * Get UUID of Trusted OS. 240e43888b8SJens Wiklander * 241e43888b8SJens Wiklander * Used by non-secure world to figure out which Trusted OS is installed. 242e43888b8SJens Wiklander * Note that returned UUID is the UUID of the Trusted OS, not of the API. 243e43888b8SJens Wiklander * 244e43888b8SJens Wiklander * Returns UUID in 4 32-bit words in the same way as 245e43888b8SJens Wiklander * OPTEE_MSG_FUNCID_CALLS_UID described above. 246e43888b8SJens Wiklander */ 247e43888b8SJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_0 0x486178e0 248e43888b8SJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_1 0xe7f811e3 249e43888b8SJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_2 0xbc5e0002 250e43888b8SJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_3 0xa5d5c51b 251e43888b8SJens Wiklander #define OPTEE_MSG_FUNCID_GET_OS_UUID 0x0000 252e43888b8SJens Wiklander 253e43888b8SJens Wiklander /* 254e43888b8SJens Wiklander * Get revision of Trusted OS. 255e43888b8SJens Wiklander * 256e43888b8SJens Wiklander * Used by non-secure world to figure out which version of the Trusted OS 257e43888b8SJens Wiklander * is installed. Note that the returned revision is the revision of the 258e43888b8SJens Wiklander * Trusted OS, not of the API. 259e43888b8SJens Wiklander * 260e43888b8SJens Wiklander * Returns revision in 2 32-bit words in the same way as 261e43888b8SJens Wiklander * OPTEE_MSG_CALLS_REVISION described above. 262e43888b8SJens Wiklander */ 263e43888b8SJens Wiklander #define OPTEE_MSG_FUNCID_GET_OS_REVISION 0x0001 264e43888b8SJens Wiklander 265e43888b8SJens Wiklander /* 266e43888b8SJens Wiklander * Do a secure call with struct optee_msg_arg as argument 267e43888b8SJens Wiklander * The OPTEE_MSG_CMD_* below defines what goes in struct optee_msg_arg::cmd 268e43888b8SJens Wiklander * 269e43888b8SJens Wiklander * OPTEE_MSG_CMD_OPEN_SESSION opens a session to a Trusted Application. 270e43888b8SJens Wiklander * The first two parameters are tagged as meta, holding two value 271e43888b8SJens Wiklander * parameters to pass the following information: 272e43888b8SJens Wiklander * param[0].u.value.a-b uuid of Trusted Application 273e43888b8SJens Wiklander * param[1].u.value.a-b uuid of Client 274e43888b8SJens Wiklander * param[1].u.value.c Login class of client OPTEE_MSG_LOGIN_* 275e43888b8SJens Wiklander * 276e43888b8SJens Wiklander * OPTEE_MSG_CMD_INVOKE_COMMAND invokes a command a previously opened 277e43888b8SJens Wiklander * session to a Trusted Application. struct optee_msg_arg::func is Trusted 278e43888b8SJens Wiklander * Application function, specific to the Trusted Application. 279e43888b8SJens Wiklander * 280e43888b8SJens Wiklander * OPTEE_MSG_CMD_CLOSE_SESSION closes a previously opened session to 281e43888b8SJens Wiklander * Trusted Application. 282e43888b8SJens Wiklander * 283e43888b8SJens Wiklander * OPTEE_MSG_CMD_CANCEL cancels a currently invoked command. 284e43888b8SJens Wiklander * 285e43888b8SJens Wiklander * OPTEE_MSG_CMD_REGISTER_SHM registers a shared memory reference. The 286e43888b8SJens Wiklander * information is passed as: 287e43888b8SJens Wiklander * [in] param[0].attr OPTEE_MSG_ATTR_TYPE_TMEM_INPUT 288*2197c7c2SJens Wiklander * [| OPTEE_MSG_ATTR_NONCONTIG] 289e43888b8SJens Wiklander * [in] param[0].u.tmem.buf_ptr physical address (of first fragment) 290e43888b8SJens Wiklander * [in] param[0].u.tmem.size size (of first fragment) 291e43888b8SJens Wiklander * [in] param[0].u.tmem.shm_ref holds shared memory reference 292e43888b8SJens Wiklander * 293e43888b8SJens Wiklander * OPTEE_MSG_CMD_UNREGISTER_SHM unregisteres a previously registered shared 294e43888b8SJens Wiklander * memory reference. The information is passed as: 295e43888b8SJens Wiklander * [in] param[0].attr OPTEE_MSG_ATTR_TYPE_RMEM_INPUT 296e43888b8SJens Wiklander * [in] param[0].u.rmem.shm_ref holds shared memory reference 297e43888b8SJens Wiklander * [in] param[0].u.rmem.offs 0 298e43888b8SJens Wiklander * [in] param[0].u.rmem.size 0 299e43888b8SJens Wiklander */ 300e43888b8SJens Wiklander #define OPTEE_MSG_CMD_OPEN_SESSION 0 301e43888b8SJens Wiklander #define OPTEE_MSG_CMD_INVOKE_COMMAND 1 302e43888b8SJens Wiklander #define OPTEE_MSG_CMD_CLOSE_SESSION 2 303e43888b8SJens Wiklander #define OPTEE_MSG_CMD_CANCEL 3 304e43888b8SJens Wiklander #define OPTEE_MSG_CMD_REGISTER_SHM 4 305e43888b8SJens Wiklander #define OPTEE_MSG_CMD_UNREGISTER_SHM 5 306e43888b8SJens Wiklander #define OPTEE_MSG_FUNCID_CALL_WITH_ARG 0x0004 307e43888b8SJens Wiklander 308e43888b8SJens Wiklander /***************************************************************************** 309e43888b8SJens Wiklander * Part 3 - Requests from secure world, RPC 310e43888b8SJens Wiklander *****************************************************************************/ 311e43888b8SJens Wiklander 312e43888b8SJens Wiklander /* 313e43888b8SJens Wiklander * All RPC is done with a struct optee_msg_arg as bearer of information, 314add06171SJerome Forissier * struct optee_msg_arg::arg holds values defined by OPTEE_MSG_RPC_CMD_* below. 315add06171SJerome Forissier * Only the commands handled by the kernel driver are defined here. 316e43888b8SJens Wiklander * 317e43888b8SJens Wiklander * RPC communication with tee-supplicant is reversed compared to normal 318add06171SJerome Forissier * client communication described above. The supplicant receives requests 319add06171SJerome Forissier * and sends responses. The command codes and exact protocol are defined in an 320add06171SJerome Forissier * external header file. 321e43888b8SJens Wiklander */ 322e43888b8SJens Wiklander 323e43888b8SJens Wiklander /* 324e43888b8SJens Wiklander * Get time 325e43888b8SJens Wiklander * 326e43888b8SJens Wiklander * Returns number of seconds and nano seconds since the Epoch, 327e43888b8SJens Wiklander * 1970-01-01 00:00:00 +0000 (UTC). 328e43888b8SJens Wiklander * 329e43888b8SJens Wiklander * [out] param[0].u.value.a Number of seconds 330e43888b8SJens Wiklander * [out] param[0].u.value.b Number of nano seconds. 331e43888b8SJens Wiklander */ 332e43888b8SJens Wiklander #define OPTEE_MSG_RPC_CMD_GET_TIME 3 333e43888b8SJens Wiklander 334e43888b8SJens Wiklander /* 3355cf48737SJens Wiklander * Wait queue primitive, helper for secure world to implement a wait queue. 3365cf48737SJens Wiklander * 3375cf48737SJens Wiklander * If secure world needs to wait for a secure world mutex it issues a sleep 3385cf48737SJens Wiklander * request instead of spinning in secure world. Conversely is a wakeup 3395cf48737SJens Wiklander * request issued when a secure world mutex with a thread waiting thread is 3405cf48737SJens Wiklander * unlocked. 341e43888b8SJens Wiklander * 342e43888b8SJens Wiklander * Waiting on a key 343e43888b8SJens Wiklander * [in] param[0].u.value.a OPTEE_MSG_RPC_WAIT_QUEUE_SLEEP 344e43888b8SJens Wiklander * [in] param[0].u.value.b wait key 345e43888b8SJens Wiklander * 346e43888b8SJens Wiklander * Waking up a key 347e43888b8SJens Wiklander * [in] param[0].u.value.a OPTEE_MSG_RPC_WAIT_QUEUE_WAKEUP 348e43888b8SJens Wiklander * [in] param[0].u.value.b wakeup key 349e43888b8SJens Wiklander */ 350e43888b8SJens Wiklander #define OPTEE_MSG_RPC_CMD_WAIT_QUEUE 4 351e43888b8SJens Wiklander #define OPTEE_MSG_RPC_WAIT_QUEUE_SLEEP 0 352e43888b8SJens Wiklander #define OPTEE_MSG_RPC_WAIT_QUEUE_WAKEUP 1 353e43888b8SJens Wiklander 354e43888b8SJens Wiklander /* 355e43888b8SJens Wiklander * Suspend execution 356e43888b8SJens Wiklander * 357e43888b8SJens Wiklander * [in] param[0].value .a number of milliseconds to suspend 358e43888b8SJens Wiklander */ 359e43888b8SJens Wiklander #define OPTEE_MSG_RPC_CMD_SUSPEND 5 360e43888b8SJens Wiklander 361e43888b8SJens Wiklander /* 362e43888b8SJens Wiklander * Allocate a piece of shared memory 363e43888b8SJens Wiklander * 364*2197c7c2SJens Wiklander * Shared memory can optionally be physically non-contiguous. 365*2197c7c2SJens Wiklander * OPTEE_MSG_ATTR_NONCONTIG is used to indicate that a list of pages is 366*2197c7c2SJens Wiklander * used to describe the memory. 367e43888b8SJens Wiklander * 368e43888b8SJens Wiklander * [in] param[0].u.value.a type of memory one of 369e43888b8SJens Wiklander * OPTEE_MSG_RPC_SHM_TYPE_* below 370e43888b8SJens Wiklander * [in] param[0].u.value.b requested size 371e43888b8SJens Wiklander * [in] param[0].u.value.c required alignment 372e43888b8SJens Wiklander * 373*2197c7c2SJens Wiklander * [out] param[0].u.tmem.buf_ptr physical address 374*2197c7c2SJens Wiklander * [out] param[0].u.tmem.size size 375e43888b8SJens Wiklander * [out] param[0].u.tmem.shm_ref shared memory reference 376e43888b8SJens Wiklander */ 377e43888b8SJens Wiklander #define OPTEE_MSG_RPC_CMD_SHM_ALLOC 6 378e43888b8SJens Wiklander /* Memory that can be shared with a non-secure user space application */ 379e43888b8SJens Wiklander #define OPTEE_MSG_RPC_SHM_TYPE_APPL 0 380e43888b8SJens Wiklander /* Memory only shared with non-secure kernel */ 381e43888b8SJens Wiklander #define OPTEE_MSG_RPC_SHM_TYPE_KERNEL 1 382afefa2ccSIgor Opaniuk /* 383afefa2ccSIgor Opaniuk * Memory shared with non-secure kernel and exported to a non-secure user 384afefa2ccSIgor Opaniuk * space application 385afefa2ccSIgor Opaniuk */ 386afefa2ccSIgor Opaniuk #define OPTEE_MSG_RPC_SHM_TYPE_GLOBAL 2 387e43888b8SJens Wiklander 3888a86d345SJens Wiklander /* 3898a86d345SJens Wiklander * Free shared memory previously allocated with OPTEE_MSG_RPC_CMD_SHM_ALLOC 3908a86d345SJens Wiklander * 3918a86d345SJens Wiklander * [in] param[0].u.value.a type of memory one of 3928a86d345SJens Wiklander * OPTEE_MSG_RPC_SHM_TYPE_* above 3938a86d345SJens Wiklander * [in] param[0].u.value.b value of shared memory reference 3948a86d345SJens Wiklander * returned in param[0].u.tmem.shm_ref 3958a86d345SJens Wiklander * above 3968a86d345SJens Wiklander */ 3978a86d345SJens Wiklander #define OPTEE_MSG_RPC_CMD_SHM_FREE 7 3988a86d345SJens Wiklander 399d5b65f30SIgor Opaniuk /* 400d5b65f30SIgor Opaniuk * Register timestamp buffer in the linux kernel optee driver 401d5b65f30SIgor Opaniuk * 402d5b65f30SIgor Opaniuk * [in] param[0].u.value.a Subcommand (register buffer, unregister buffer) 403d5b65f30SIgor Opaniuk * [in] param[0].u.value.b Physical address of timestamp buffer 404d5b65f30SIgor Opaniuk * [in] param[0].u.value.c Size of buffer 405d5b65f30SIgor Opaniuk */ 406d5b65f30SIgor Opaniuk #define OPTEE_MSG_RPC_CMD_BENCH_REG 20 407d5b65f30SIgor Opaniuk 408e43888b8SJens Wiklander #endif /* _OPTEE_MSG_H */ 409