xref: /openbmc/linux/drivers/tee/optee/optee_msg.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
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