132356d30SJerome Forissier /* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */ 24fb0a5ebSJens Wiklander /* 3617d8e8bSJens Wiklander * Copyright (c) 2015-2021, Linaro Limited 44fb0a5ebSJens Wiklander */ 54fb0a5ebSJens Wiklander #ifndef _OPTEE_MSG_H 64fb0a5ebSJens Wiklander #define _OPTEE_MSG_H 74fb0a5ebSJens Wiklander 84fb0a5ebSJens Wiklander #include <linux/bitops.h> 94fb0a5ebSJens Wiklander #include <linux/types.h> 104fb0a5ebSJens Wiklander 114fb0a5ebSJens Wiklander /* 12673c7aa2SJens Wiklander * This file defines the OP-TEE message protocol (ABI) used to communicate 134fb0a5ebSJens Wiklander * with an instance of OP-TEE running in secure world. 144fb0a5ebSJens Wiklander * 15617d8e8bSJens Wiklander * This file is divided into two sections. 164fb0a5ebSJens Wiklander * 1. Formatting of messages. 174fb0a5ebSJens Wiklander * 2. Requests from normal world 184fb0a5ebSJens Wiklander */ 194fb0a5ebSJens Wiklander 204fb0a5ebSJens Wiklander /***************************************************************************** 214fb0a5ebSJens Wiklander * Part 1 - formatting of messages 224fb0a5ebSJens Wiklander *****************************************************************************/ 234fb0a5ebSJens Wiklander 244fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_NONE 0x0 254fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT 0x1 264fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT 0x2 274fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT 0x3 284fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT 0x5 294fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT 0x6 304fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT 0x7 314615e5a3SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_FMEM_INPUT OPTEE_MSG_ATTR_TYPE_RMEM_INPUT 324615e5a3SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_FMEM_OUTPUT OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT 334615e5a3SJens Wiklander #define OPTEE_MSG_ATTR_TYPE_FMEM_INOUT OPTEE_MSG_ATTR_TYPE_RMEM_INOUT 344fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT 0x9 354fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT 0xa 364fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT 0xb 374fb0a5ebSJens Wiklander 384fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_TYPE_MASK GENMASK(7, 0) 394fb0a5ebSJens Wiklander 404fb0a5ebSJens Wiklander /* 414fb0a5ebSJens Wiklander * Meta parameter to be absorbed by the Secure OS and not passed 424fb0a5ebSJens Wiklander * to the Trusted Application. 434fb0a5ebSJens Wiklander * 444fb0a5ebSJens Wiklander * Currently only used with OPTEE_MSG_CMD_OPEN_SESSION. 454fb0a5ebSJens Wiklander */ 464fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_META BIT(8) 474fb0a5ebSJens Wiklander 484fb0a5ebSJens Wiklander /* 49de5c6dfcSVolodymyr Babchuk * Pointer to a list of pages used to register user-defined SHM buffer. 50de5c6dfcSVolodymyr Babchuk * Used with OPTEE_MSG_ATTR_TYPE_TMEM_*. 51de5c6dfcSVolodymyr Babchuk * buf_ptr should point to the beginning of the buffer. Buffer will contain 52de5c6dfcSVolodymyr Babchuk * list of page addresses. OP-TEE core can reconstruct contiguous buffer from 53de5c6dfcSVolodymyr Babchuk * that page addresses list. Page addresses are stored as 64 bit values. 54de5c6dfcSVolodymyr Babchuk * Last entry on a page should point to the next page of buffer. 55de5c6dfcSVolodymyr Babchuk * Every entry in buffer should point to a 4k page beginning (12 least 56de5c6dfcSVolodymyr Babchuk * significant bits must be equal to zero). 57de5c6dfcSVolodymyr Babchuk * 58617d8e8bSJens Wiklander * 12 least significant bits of optee_msg_param.u.tmem.buf_ptr should hold 59617d8e8bSJens Wiklander * page offset of user buffer. 60de5c6dfcSVolodymyr Babchuk * 61de5c6dfcSVolodymyr Babchuk * So, entries should be placed like members of this structure: 62de5c6dfcSVolodymyr Babchuk * 63de5c6dfcSVolodymyr Babchuk * struct page_data { 64de5c6dfcSVolodymyr Babchuk * uint64_t pages_array[OPTEE_MSG_NONCONTIG_PAGE_SIZE/sizeof(uint64_t) - 1]; 65de5c6dfcSVolodymyr Babchuk * uint64_t next_page_data; 66de5c6dfcSVolodymyr Babchuk * }; 67de5c6dfcSVolodymyr Babchuk * 68de5c6dfcSVolodymyr Babchuk * Structure is designed to exactly fit into the page size 69de5c6dfcSVolodymyr Babchuk * OPTEE_MSG_NONCONTIG_PAGE_SIZE which is a standard 4KB page. 70de5c6dfcSVolodymyr Babchuk * 71de5c6dfcSVolodymyr Babchuk * The size of 4KB is chosen because this is the smallest page size for ARM 72de5c6dfcSVolodymyr Babchuk * architectures. If REE uses larger pages, it should divide them to 4KB ones. 734fb0a5ebSJens Wiklander */ 74de5c6dfcSVolodymyr Babchuk #define OPTEE_MSG_ATTR_NONCONTIG BIT(9) 754fb0a5ebSJens Wiklander 764fb0a5ebSJens Wiklander /* 774fb0a5ebSJens Wiklander * Memory attributes for caching passed with temp memrefs. The actual value 784fb0a5ebSJens Wiklander * used is defined outside the message protocol with the exception of 794fb0a5ebSJens Wiklander * OPTEE_MSG_ATTR_CACHE_PREDEFINED which means the attributes already 804fb0a5ebSJens Wiklander * defined for the memory range should be used. If optee_smc.h is used as 814fb0a5ebSJens Wiklander * bearer of this protocol OPTEE_SMC_SHM_* is used for values. 824fb0a5ebSJens Wiklander */ 834fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_CACHE_SHIFT 16 844fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_CACHE_MASK GENMASK(2, 0) 854fb0a5ebSJens Wiklander #define OPTEE_MSG_ATTR_CACHE_PREDEFINED 0 864fb0a5ebSJens Wiklander 874fb0a5ebSJens Wiklander /* 884fb0a5ebSJens Wiklander * Same values as TEE_LOGIN_* from TEE Internal API 894fb0a5ebSJens Wiklander */ 904fb0a5ebSJens Wiklander #define OPTEE_MSG_LOGIN_PUBLIC 0x00000000 914fb0a5ebSJens Wiklander #define OPTEE_MSG_LOGIN_USER 0x00000001 924fb0a5ebSJens Wiklander #define OPTEE_MSG_LOGIN_GROUP 0x00000002 934fb0a5ebSJens Wiklander #define OPTEE_MSG_LOGIN_APPLICATION 0x00000004 944fb0a5ebSJens Wiklander #define OPTEE_MSG_LOGIN_APPLICATION_USER 0x00000005 954fb0a5ebSJens Wiklander #define OPTEE_MSG_LOGIN_APPLICATION_GROUP 0x00000006 964fb0a5ebSJens Wiklander 97de5c6dfcSVolodymyr Babchuk /* 98de5c6dfcSVolodymyr Babchuk * Page size used in non-contiguous buffer entries 99de5c6dfcSVolodymyr Babchuk */ 100de5c6dfcSVolodymyr Babchuk #define OPTEE_MSG_NONCONTIG_PAGE_SIZE 4096 101de5c6dfcSVolodymyr Babchuk 1024615e5a3SJens Wiklander #define OPTEE_MSG_FMEM_INVALID_GLOBAL_ID 0xffffffffffffffff 1034615e5a3SJens Wiklander 1044fb0a5ebSJens Wiklander /** 1054fb0a5ebSJens Wiklander * struct optee_msg_param_tmem - temporary memory reference parameter 1064fb0a5ebSJens Wiklander * @buf_ptr: Address of the buffer 1074fb0a5ebSJens Wiklander * @size: Size of the buffer 1084fb0a5ebSJens Wiklander * @shm_ref: Temporary shared memory reference, pointer to a struct tee_shm 1094fb0a5ebSJens Wiklander * 1104fb0a5ebSJens Wiklander * Secure and normal world communicates pointers as physical address 1114fb0a5ebSJens Wiklander * instead of the virtual address. This is because secure and normal world 1124fb0a5ebSJens Wiklander * have completely independent memory mapping. Normal world can even have a 1134fb0a5ebSJens Wiklander * hypervisor which need to translate the guest physical address (AKA IPA 1144fb0a5ebSJens Wiklander * in ARM documentation) to a real physical address before passing the 1154fb0a5ebSJens Wiklander * structure to secure world. 1164fb0a5ebSJens Wiklander */ 1174fb0a5ebSJens Wiklander struct optee_msg_param_tmem { 1184fb0a5ebSJens Wiklander u64 buf_ptr; 1194fb0a5ebSJens Wiklander u64 size; 1204fb0a5ebSJens Wiklander u64 shm_ref; 1214fb0a5ebSJens Wiklander }; 1224fb0a5ebSJens Wiklander 1234fb0a5ebSJens Wiklander /** 1244fb0a5ebSJens Wiklander * struct optee_msg_param_rmem - registered memory reference parameter 1254fb0a5ebSJens Wiklander * @offs: Offset into shared memory reference 1264fb0a5ebSJens Wiklander * @size: Size of the buffer 1274fb0a5ebSJens Wiklander * @shm_ref: Shared memory reference, pointer to a struct tee_shm 1284fb0a5ebSJens Wiklander */ 1294fb0a5ebSJens Wiklander struct optee_msg_param_rmem { 1304fb0a5ebSJens Wiklander u64 offs; 1314fb0a5ebSJens Wiklander u64 size; 1324fb0a5ebSJens Wiklander u64 shm_ref; 1334fb0a5ebSJens Wiklander }; 1344fb0a5ebSJens Wiklander 1354fb0a5ebSJens Wiklander /** 1364615e5a3SJens Wiklander * struct optee_msg_param_fmem - ffa memory reference parameter 1374615e5a3SJens Wiklander * @offs_lower: Lower bits of offset into shared memory reference 1384615e5a3SJens Wiklander * @offs_upper: Upper bits of offset into shared memory reference 1394615e5a3SJens Wiklander * @internal_offs: Internal offset into the first page of shared memory 1404615e5a3SJens Wiklander * reference 1414615e5a3SJens Wiklander * @size: Size of the buffer 1424615e5a3SJens Wiklander * @global_id: Global identifier of Shared memory 1434615e5a3SJens Wiklander */ 1444615e5a3SJens Wiklander struct optee_msg_param_fmem { 1454615e5a3SJens Wiklander u32 offs_low; 1464615e5a3SJens Wiklander u16 offs_high; 1474615e5a3SJens Wiklander u16 internal_offs; 1484615e5a3SJens Wiklander u64 size; 1494615e5a3SJens Wiklander u64 global_id; 1504615e5a3SJens Wiklander }; 1514615e5a3SJens Wiklander 1524615e5a3SJens Wiklander /** 1534fb0a5ebSJens Wiklander * struct optee_msg_param_value - opaque value parameter 1544fb0a5ebSJens Wiklander * 1554fb0a5ebSJens Wiklander * Value parameters are passed unchecked between normal and secure world. 1564fb0a5ebSJens Wiklander */ 1574fb0a5ebSJens Wiklander struct optee_msg_param_value { 1584fb0a5ebSJens Wiklander u64 a; 1594fb0a5ebSJens Wiklander u64 b; 1604fb0a5ebSJens Wiklander u64 c; 1614fb0a5ebSJens Wiklander }; 1624fb0a5ebSJens Wiklander 1634fb0a5ebSJens Wiklander /** 1644fb0a5ebSJens Wiklander * struct optee_msg_param - parameter used together with struct optee_msg_arg 1654fb0a5ebSJens Wiklander * @attr: attributes 1664fb0a5ebSJens Wiklander * @tmem: parameter by temporary memory reference 1674fb0a5ebSJens Wiklander * @rmem: parameter by registered memory reference 1684615e5a3SJens Wiklander * @fmem: parameter by ffa registered memory reference 1694fb0a5ebSJens Wiklander * @value: parameter by opaque value 170673c7aa2SJens Wiklander * @octets: parameter by octet string 1714fb0a5ebSJens Wiklander * 1724fb0a5ebSJens Wiklander * @attr & OPTEE_MSG_ATTR_TYPE_MASK indicates if tmem, rmem or value is used in 173673c7aa2SJens Wiklander * the union. OPTEE_MSG_ATTR_TYPE_VALUE_* indicates value or octets, 174de5c6dfcSVolodymyr Babchuk * OPTEE_MSG_ATTR_TYPE_TMEM_* indicates @tmem and 1754615e5a3SJens Wiklander * OPTEE_MSG_ATTR_TYPE_RMEM_* or the alias PTEE_MSG_ATTR_TYPE_FMEM_* indicates 1764615e5a3SJens Wiklander * @rmem or @fmem depending on the conduit. 1774fb0a5ebSJens Wiklander * OPTEE_MSG_ATTR_TYPE_NONE indicates that none of the members are used. 1784fb0a5ebSJens Wiklander */ 1794fb0a5ebSJens Wiklander struct optee_msg_param { 1804fb0a5ebSJens Wiklander u64 attr; 1814fb0a5ebSJens Wiklander union { 1824fb0a5ebSJens Wiklander struct optee_msg_param_tmem tmem; 1834fb0a5ebSJens Wiklander struct optee_msg_param_rmem rmem; 1844615e5a3SJens Wiklander struct optee_msg_param_fmem fmem; 1854fb0a5ebSJens Wiklander struct optee_msg_param_value value; 186673c7aa2SJens Wiklander u8 octets[24]; 1874fb0a5ebSJens Wiklander } u; 1884fb0a5ebSJens Wiklander }; 1894fb0a5ebSJens Wiklander 1904fb0a5ebSJens Wiklander /** 1914fb0a5ebSJens Wiklander * struct optee_msg_arg - call argument 1924fb0a5ebSJens Wiklander * @cmd: Command, one of OPTEE_MSG_CMD_* or OPTEE_MSG_RPC_CMD_* 1934fb0a5ebSJens Wiklander * @func: Trusted Application function, specific to the Trusted Application, 1944fb0a5ebSJens Wiklander * used if cmd == OPTEE_MSG_CMD_INVOKE_COMMAND 1954fb0a5ebSJens Wiklander * @session: In parameter for all OPTEE_MSG_CMD_* except 1964fb0a5ebSJens Wiklander * OPTEE_MSG_CMD_OPEN_SESSION where it's an output parameter instead 1974fb0a5ebSJens Wiklander * @cancel_id: Cancellation id, a unique value to identify this request 1984fb0a5ebSJens Wiklander * @ret: return value 1994fb0a5ebSJens Wiklander * @ret_origin: origin of the return value 2004fb0a5ebSJens Wiklander * @num_params: number of parameters supplied to the OS Command 2014fb0a5ebSJens Wiklander * @params: the parameters supplied to the OS Command 2024fb0a5ebSJens Wiklander * 2034fb0a5ebSJens Wiklander * All normal calls to Trusted OS uses this struct. If cmd requires further 204617d8e8bSJens Wiklander * information than what these fields hold it can be passed as a parameter 2054fb0a5ebSJens Wiklander * tagged as meta (setting the OPTEE_MSG_ATTR_META bit in corresponding 206617d8e8bSJens Wiklander * attrs field). All parameters tagged as meta have to come first. 2074fb0a5ebSJens Wiklander */ 2084fb0a5ebSJens Wiklander struct optee_msg_arg { 2094fb0a5ebSJens Wiklander u32 cmd; 2104fb0a5ebSJens Wiklander u32 func; 2114fb0a5ebSJens Wiklander u32 session; 2124fb0a5ebSJens Wiklander u32 cancel_id; 2134fb0a5ebSJens Wiklander u32 pad; 2144fb0a5ebSJens Wiklander u32 ret; 2154fb0a5ebSJens Wiklander u32 ret_origin; 2164fb0a5ebSJens Wiklander u32 num_params; 2174fb0a5ebSJens Wiklander 2184fb0a5ebSJens Wiklander /* num_params tells the actual number of element in params */ 219fda90b29STian Tao struct optee_msg_param params[]; 2204fb0a5ebSJens Wiklander }; 2214fb0a5ebSJens Wiklander 2224fb0a5ebSJens Wiklander /** 2234fb0a5ebSJens Wiklander * OPTEE_MSG_GET_ARG_SIZE - return size of struct optee_msg_arg 2244fb0a5ebSJens Wiklander * 2254fb0a5ebSJens Wiklander * @num_params: Number of parameters embedded in the struct optee_msg_arg 2264fb0a5ebSJens Wiklander * 2274fb0a5ebSJens Wiklander * Returns the size of the struct optee_msg_arg together with the number 2284fb0a5ebSJens Wiklander * of embedded parameters. 2294fb0a5ebSJens Wiklander */ 2304fb0a5ebSJens Wiklander #define OPTEE_MSG_GET_ARG_SIZE(num_params) \ 2314fb0a5ebSJens Wiklander (sizeof(struct optee_msg_arg) + \ 2324fb0a5ebSJens Wiklander sizeof(struct optee_msg_param) * (num_params)) 2334fb0a5ebSJens Wiklander 2344fb0a5ebSJens Wiklander /***************************************************************************** 2354fb0a5ebSJens Wiklander * Part 2 - requests from normal world 2364fb0a5ebSJens Wiklander *****************************************************************************/ 2374fb0a5ebSJens Wiklander 2384fb0a5ebSJens Wiklander /* 2394fb0a5ebSJens Wiklander * Return the following UID if using API specified in this file without 2404fb0a5ebSJens Wiklander * further extensions: 2414fb0a5ebSJens Wiklander * 384fb3e0-e7f8-11e3-af63-0002a5d5c51b. 2424fb0a5ebSJens Wiklander * Represented in 4 32-bit words in OPTEE_MSG_UID_0, OPTEE_MSG_UID_1, 2434fb0a5ebSJens Wiklander * OPTEE_MSG_UID_2, OPTEE_MSG_UID_3. 244*f3040daaSJeffrey Kardatzke * 245*f3040daaSJeffrey Kardatzke * In the case where the OP-TEE image is loaded by the kernel, this will 246*f3040daaSJeffrey Kardatzke * initially return an alternate UID to reflect that we are communicating with 247*f3040daaSJeffrey Kardatzke * the TF-A image loading service at that time instead of OP-TEE. That UID is: 248*f3040daaSJeffrey Kardatzke * a3fbeab1-1246-315d-c7c4-06b9c03cbea4. 249*f3040daaSJeffrey Kardatzke * Represented in 4 32-bit words in OPTEE_MSG_IMAGE_LOAD_UID_0, 250*f3040daaSJeffrey Kardatzke * OPTEE_MSG_IMAGE_LOAD_UID_1, OPTEE_MSG_IMAGE_LOAD_UID_2, 251*f3040daaSJeffrey Kardatzke * OPTEE_MSG_IMAGE_LOAD_UID_3. 2524fb0a5ebSJens Wiklander */ 2534fb0a5ebSJens Wiklander #define OPTEE_MSG_UID_0 0x384fb3e0 2544fb0a5ebSJens Wiklander #define OPTEE_MSG_UID_1 0xe7f811e3 2554fb0a5ebSJens Wiklander #define OPTEE_MSG_UID_2 0xaf630002 2564fb0a5ebSJens Wiklander #define OPTEE_MSG_UID_3 0xa5d5c51b 257*f3040daaSJeffrey Kardatzke #define OPTEE_MSG_IMAGE_LOAD_UID_0 0xa3fbeab1 258*f3040daaSJeffrey Kardatzke #define OPTEE_MSG_IMAGE_LOAD_UID_1 0x1246315d 259*f3040daaSJeffrey Kardatzke #define OPTEE_MSG_IMAGE_LOAD_UID_2 0xc7c406b9 260*f3040daaSJeffrey Kardatzke #define OPTEE_MSG_IMAGE_LOAD_UID_3 0xc03cbea4 2614fb0a5ebSJens Wiklander #define OPTEE_MSG_FUNCID_CALLS_UID 0xFF01 2624fb0a5ebSJens Wiklander 2634fb0a5ebSJens Wiklander /* 2644fb0a5ebSJens Wiklander * Returns 2.0 if using API specified in this file without further 2654fb0a5ebSJens Wiklander * extensions. Represented in 2 32-bit words in OPTEE_MSG_REVISION_MAJOR 2664fb0a5ebSJens Wiklander * and OPTEE_MSG_REVISION_MINOR 2674fb0a5ebSJens Wiklander */ 2684fb0a5ebSJens Wiklander #define OPTEE_MSG_REVISION_MAJOR 2 2694fb0a5ebSJens Wiklander #define OPTEE_MSG_REVISION_MINOR 0 2704fb0a5ebSJens Wiklander #define OPTEE_MSG_FUNCID_CALLS_REVISION 0xFF03 2714fb0a5ebSJens Wiklander 2724fb0a5ebSJens Wiklander /* 2734fb0a5ebSJens Wiklander * Get UUID of Trusted OS. 2744fb0a5ebSJens Wiklander * 2754fb0a5ebSJens Wiklander * Used by non-secure world to figure out which Trusted OS is installed. 2764fb0a5ebSJens Wiklander * Note that returned UUID is the UUID of the Trusted OS, not of the API. 2774fb0a5ebSJens Wiklander * 2784fb0a5ebSJens Wiklander * Returns UUID in 4 32-bit words in the same way as 2794fb0a5ebSJens Wiklander * OPTEE_MSG_FUNCID_CALLS_UID described above. 2804fb0a5ebSJens Wiklander */ 2814fb0a5ebSJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_0 0x486178e0 2824fb0a5ebSJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_1 0xe7f811e3 2834fb0a5ebSJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_2 0xbc5e0002 2844fb0a5ebSJens Wiklander #define OPTEE_MSG_OS_OPTEE_UUID_3 0xa5d5c51b 2854fb0a5ebSJens Wiklander #define OPTEE_MSG_FUNCID_GET_OS_UUID 0x0000 2864fb0a5ebSJens Wiklander 2874fb0a5ebSJens Wiklander /* 2884fb0a5ebSJens Wiklander * Get revision of Trusted OS. 2894fb0a5ebSJens Wiklander * 2904fb0a5ebSJens Wiklander * Used by non-secure world to figure out which version of the Trusted OS 2914fb0a5ebSJens Wiklander * is installed. Note that the returned revision is the revision of the 2924fb0a5ebSJens Wiklander * Trusted OS, not of the API. 2934fb0a5ebSJens Wiklander * 2944fb0a5ebSJens Wiklander * Returns revision in 2 32-bit words in the same way as 2954fb0a5ebSJens Wiklander * OPTEE_MSG_CALLS_REVISION described above. 2964fb0a5ebSJens Wiklander */ 2974fb0a5ebSJens Wiklander #define OPTEE_MSG_FUNCID_GET_OS_REVISION 0x0001 2984fb0a5ebSJens Wiklander 2994fb0a5ebSJens Wiklander /* 3004fb0a5ebSJens Wiklander * Do a secure call with struct optee_msg_arg as argument 3014fb0a5ebSJens Wiklander * The OPTEE_MSG_CMD_* below defines what goes in struct optee_msg_arg::cmd 3024fb0a5ebSJens Wiklander * 3034fb0a5ebSJens Wiklander * OPTEE_MSG_CMD_OPEN_SESSION opens a session to a Trusted Application. 3044fb0a5ebSJens Wiklander * The first two parameters are tagged as meta, holding two value 3054fb0a5ebSJens Wiklander * parameters to pass the following information: 3064fb0a5ebSJens Wiklander * param[0].u.value.a-b uuid of Trusted Application 3074fb0a5ebSJens Wiklander * param[1].u.value.a-b uuid of Client 3084fb0a5ebSJens Wiklander * param[1].u.value.c Login class of client OPTEE_MSG_LOGIN_* 3094fb0a5ebSJens Wiklander * 3104fb0a5ebSJens Wiklander * OPTEE_MSG_CMD_INVOKE_COMMAND invokes a command a previously opened 3114fb0a5ebSJens Wiklander * session to a Trusted Application. struct optee_msg_arg::func is Trusted 3124fb0a5ebSJens Wiklander * Application function, specific to the Trusted Application. 3134fb0a5ebSJens Wiklander * 3144fb0a5ebSJens Wiklander * OPTEE_MSG_CMD_CLOSE_SESSION closes a previously opened session to 3154fb0a5ebSJens Wiklander * Trusted Application. 3164fb0a5ebSJens Wiklander * 3174fb0a5ebSJens Wiklander * OPTEE_MSG_CMD_CANCEL cancels a currently invoked command. 3184fb0a5ebSJens Wiklander * 3194fb0a5ebSJens Wiklander * OPTEE_MSG_CMD_REGISTER_SHM registers a shared memory reference. The 3204fb0a5ebSJens Wiklander * information is passed as: 3214fb0a5ebSJens Wiklander * [in] param[0].attr OPTEE_MSG_ATTR_TYPE_TMEM_INPUT 322617d8e8bSJens Wiklander * [| OPTEE_MSG_ATTR_NONCONTIG] 3234fb0a5ebSJens Wiklander * [in] param[0].u.tmem.buf_ptr physical address (of first fragment) 3244fb0a5ebSJens Wiklander * [in] param[0].u.tmem.size size (of first fragment) 3254fb0a5ebSJens Wiklander * [in] param[0].u.tmem.shm_ref holds shared memory reference 3264fb0a5ebSJens Wiklander * 327617d8e8bSJens Wiklander * OPTEE_MSG_CMD_UNREGISTER_SHM unregisters a previously registered shared 3284fb0a5ebSJens Wiklander * memory reference. The information is passed as: 3294fb0a5ebSJens Wiklander * [in] param[0].attr OPTEE_MSG_ATTR_TYPE_RMEM_INPUT 3304fb0a5ebSJens Wiklander * [in] param[0].u.rmem.shm_ref holds shared memory reference 3314fb0a5ebSJens Wiklander * [in] param[0].u.rmem.offs 0 3324fb0a5ebSJens Wiklander * [in] param[0].u.rmem.size 0 3336749e69cSJens Wiklander * 3346749e69cSJens Wiklander * OPTEE_MSG_CMD_DO_BOTTOM_HALF does the scheduled bottom half processing 3356749e69cSJens Wiklander * of a driver. 3366749e69cSJens Wiklander * 3376749e69cSJens Wiklander * OPTEE_MSG_CMD_STOP_ASYNC_NOTIF informs secure world that from now is 3386749e69cSJens Wiklander * normal world unable to process asynchronous notifications. Typically 3396749e69cSJens Wiklander * used when the driver is shut down. 3404fb0a5ebSJens Wiklander */ 3414fb0a5ebSJens Wiklander #define OPTEE_MSG_CMD_OPEN_SESSION 0 3424fb0a5ebSJens Wiklander #define OPTEE_MSG_CMD_INVOKE_COMMAND 1 3434fb0a5ebSJens Wiklander #define OPTEE_MSG_CMD_CLOSE_SESSION 2 3444fb0a5ebSJens Wiklander #define OPTEE_MSG_CMD_CANCEL 3 3454fb0a5ebSJens Wiklander #define OPTEE_MSG_CMD_REGISTER_SHM 4 3464fb0a5ebSJens Wiklander #define OPTEE_MSG_CMD_UNREGISTER_SHM 5 3476749e69cSJens Wiklander #define OPTEE_MSG_CMD_DO_BOTTOM_HALF 6 3486749e69cSJens Wiklander #define OPTEE_MSG_CMD_STOP_ASYNC_NOTIF 7 3494fb0a5ebSJens Wiklander #define OPTEE_MSG_FUNCID_CALL_WITH_ARG 0x0004 3504fb0a5ebSJens Wiklander 3514fb0a5ebSJens Wiklander #endif /* _OPTEE_MSG_H */ 352