xref: /openbmc/u-boot/include/tee.h (revision 0dc526d98eb216003ea884739abc17f6eb05c0df)
19ff4a311SJens Wiklander /* SPDX-License-Identifier: GPL-2.0+ */
29ff4a311SJens Wiklander /*
39ff4a311SJens Wiklander  * Copyright (c) 2018 Linaro Limited
49ff4a311SJens Wiklander  */
59ff4a311SJens Wiklander 
69ff4a311SJens Wiklander #ifndef __TEE_H
79ff4a311SJens Wiklander #define __TEE_H
89ff4a311SJens Wiklander 
99ff4a311SJens Wiklander #define TEE_UUID_LEN		16
109ff4a311SJens Wiklander 
119ff4a311SJens Wiklander #define TEE_GEN_CAP_GP          BIT(0)	/* GlobalPlatform compliant TEE */
129ff4a311SJens Wiklander #define TEE_GEN_CAP_REG_MEM     BIT(1)	/* Supports registering shared memory */
139ff4a311SJens Wiklander 
149ff4a311SJens Wiklander #define TEE_SHM_REGISTER	BIT(0)	/* In list of shared memory */
159ff4a311SJens Wiklander #define TEE_SHM_SEC_REGISTER	BIT(1)	/* TEE notified of this memory */
169ff4a311SJens Wiklander #define TEE_SHM_ALLOC		BIT(2)	/* The memory is malloced() and must */
179ff4a311SJens Wiklander 					/* be freed() */
189ff4a311SJens Wiklander 
199ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_NONE		0	/* parameter not used */
209ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_VALUE_INPUT		1
219ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_VALUE_OUTPUT	2
229ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_VALUE_INOUT		3	/* input and output */
239ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_MEMREF_INPUT	5
249ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_MEMREF_OUTPUT	6
259ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_MEMREF_INOUT	7	/* input and output */
269ff4a311SJens Wiklander #define TEE_PARAM_ATTR_TYPE_MASK		0xff
279ff4a311SJens Wiklander #define TEE_PARAM_ATTR_META			0x100
289ff4a311SJens Wiklander #define TEE_PARAM_ATTR_MASK			(TEE_PARAM_ATTR_TYPE_MASK | \
299ff4a311SJens Wiklander 						 TEE_PARAM_ATTR_META)
309ff4a311SJens Wiklander 
319ff4a311SJens Wiklander /*
329ff4a311SJens Wiklander  * Some Global Platform error codes which has a meaning if the
339ff4a311SJens Wiklander  * TEE_GEN_CAP_GP bit is returned by the driver in
349ff4a311SJens Wiklander  * struct tee_version_data::gen_caps
359ff4a311SJens Wiklander  */
369ff4a311SJens Wiklander #define TEE_SUCCESS			0x00000000
37*8b131266SIgor Opaniuk #define TEE_ERROR_STORAGE_NOT_AVAILABLE	0xf0100003
389ff4a311SJens Wiklander #define TEE_ERROR_GENERIC		0xffff0000
399ff4a311SJens Wiklander #define TEE_ERROR_BAD_PARAMETERS	0xffff0006
409ff4a311SJens Wiklander #define TEE_ERROR_ITEM_NOT_FOUND	0xffff0008
419ff4a311SJens Wiklander #define TEE_ERROR_NOT_IMPLEMENTED	0xffff0009
429ff4a311SJens Wiklander #define TEE_ERROR_NOT_SUPPORTED		0xffff000a
439ff4a311SJens Wiklander #define TEE_ERROR_COMMUNICATION		0xffff000e
449ff4a311SJens Wiklander #define TEE_ERROR_SECURITY		0xffff000f
459ff4a311SJens Wiklander #define TEE_ERROR_OUT_OF_MEMORY		0xffff000c
469ff4a311SJens Wiklander #define TEE_ERROR_TARGET_DEAD		0xffff3024
479ff4a311SJens Wiklander 
489ff4a311SJens Wiklander #define TEE_ORIGIN_COMMS		0x00000002
499ff4a311SJens Wiklander #define TEE_ORIGIN_TEE			0x00000003
509ff4a311SJens Wiklander #define TEE_ORIGIN_TRUSTED_APP		0x00000004
519ff4a311SJens Wiklander 
529ff4a311SJens Wiklander struct udevice;
531cc8cc4eSJens Wiklander 
541cc8cc4eSJens Wiklander /**
551cc8cc4eSJens Wiklander  * struct tee_optee_ta_uuid - OP-TEE Trusted Application (TA) UUID format
561cc8cc4eSJens Wiklander  *
571cc8cc4eSJens Wiklander  * Used to identify an OP-TEE TA and define suitable to initialize structs
581cc8cc4eSJens Wiklander  * of this format is distributed with the interface of the TA. The
591cc8cc4eSJens Wiklander  * individual fields of this struct doesn't have any special meaning in
601cc8cc4eSJens Wiklander  * OP-TEE. See RFC4122 for details on the format.
611cc8cc4eSJens Wiklander  */
621cc8cc4eSJens Wiklander struct tee_optee_ta_uuid {
631cc8cc4eSJens Wiklander 	u32 time_low;
641cc8cc4eSJens Wiklander 	u16 time_mid;
651cc8cc4eSJens Wiklander 	u16 time_hi_and_version;
661cc8cc4eSJens Wiklander 	u8 clock_seq_and_node[8];
671cc8cc4eSJens Wiklander };
681cc8cc4eSJens Wiklander 
699ff4a311SJens Wiklander /**
709ff4a311SJens Wiklander  * struct tee_shm - memory shared with the TEE
719ff4a311SJens Wiklander  * @dev:	The TEE device
729ff4a311SJens Wiklander  * @link:	List node in the list in struct struct tee_uclass_priv
739ff4a311SJens Wiklander  * @addr:	Pointer to the shared memory
749ff4a311SJens Wiklander  * @size:	Size of the the shared memory
759ff4a311SJens Wiklander  * @flags:	TEE_SHM_* above
769ff4a311SJens Wiklander  */
779ff4a311SJens Wiklander struct tee_shm {
789ff4a311SJens Wiklander 	struct udevice *dev;
799ff4a311SJens Wiklander 	struct list_head link;
809ff4a311SJens Wiklander 	void *addr;
819ff4a311SJens Wiklander 	ulong size;
829ff4a311SJens Wiklander 	u32 flags;
839ff4a311SJens Wiklander };
849ff4a311SJens Wiklander 
859ff4a311SJens Wiklander /**
869ff4a311SJens Wiklander  * struct tee_param_memref - memory reference for a Trusted Application
879ff4a311SJens Wiklander  * @shm_offs:	Offset in bytes into the shared memory object @shm
889ff4a311SJens Wiklander  * @size:	Size in bytes of the memory reference
899ff4a311SJens Wiklander  * @shm:	Pointer to a shared memory object for the buffer
909ff4a311SJens Wiklander  *
919ff4a311SJens Wiklander  * Used as a part of struct tee_param, see that for more information.
929ff4a311SJens Wiklander  */
939ff4a311SJens Wiklander struct tee_param_memref {
949ff4a311SJens Wiklander 	ulong shm_offs;
959ff4a311SJens Wiklander 	ulong size;
969ff4a311SJens Wiklander 	struct tee_shm *shm;
979ff4a311SJens Wiklander };
989ff4a311SJens Wiklander 
999ff4a311SJens Wiklander /**
1009ff4a311SJens Wiklander  * struct tee_param_value - value parameter for a Trusted Application
1019ff4a311SJens Wiklander  * @a, @b, @c:	Parameters passed by value
1029ff4a311SJens Wiklander  *
1039ff4a311SJens Wiklander  * Used as a part of struct tee_param, see that for more information.
1049ff4a311SJens Wiklander  */
1059ff4a311SJens Wiklander struct tee_param_value {
1069ff4a311SJens Wiklander 	u64 a;
1079ff4a311SJens Wiklander 	u64 b;
1089ff4a311SJens Wiklander 	u64 c;
1099ff4a311SJens Wiklander };
1109ff4a311SJens Wiklander 
1119ff4a311SJens Wiklander /**
1129ff4a311SJens Wiklander  * struct tee_param - invoke parameter for a Trusted Application
1139ff4a311SJens Wiklander  * @attr:	Attributes
1149ff4a311SJens Wiklander  * @u.memref:	Memref parameter if (@attr & TEE_PARAM_ATTR_MASK) is one of
1159ff4a311SJens Wiklander  *		TEE_PARAM_ATTR_TYPE_MEMREF_* above
1169ff4a311SJens Wiklander  * @u.value:	Value parameter if (@attr & TEE_PARAM_ATTR_MASK) is one of
1179ff4a311SJens Wiklander  *		TEE_PARAM_ATTR_TYPE_VALUE_* above
1189ff4a311SJens Wiklander  *
1199ff4a311SJens Wiklander  * Parameters to TA are passed using an array of this struct, for
1209ff4a311SJens Wiklander  * flexibility both value parameters and memory refereces can be used.
1219ff4a311SJens Wiklander  */
1229ff4a311SJens Wiklander struct tee_param {
1239ff4a311SJens Wiklander 	u64 attr;
1249ff4a311SJens Wiklander 	union {
1259ff4a311SJens Wiklander 		struct tee_param_memref memref;
1269ff4a311SJens Wiklander 		struct tee_param_value value;
1279ff4a311SJens Wiklander 	} u;
1289ff4a311SJens Wiklander };
1299ff4a311SJens Wiklander 
1309ff4a311SJens Wiklander /**
1319ff4a311SJens Wiklander  * struct tee_open_session_arg - extra arguments for tee_open_session()
1329ff4a311SJens Wiklander  * @uuid:	[in] UUID of the Trusted Application
1339ff4a311SJens Wiklander  * @clnt_uuid:	[in] Normally zeroes
1349ff4a311SJens Wiklander  * @clnt_login:	[in] Normally 0
1359ff4a311SJens Wiklander  * @session:	[out] Session id
1369ff4a311SJens Wiklander  * @ret:	[out] return value
1379ff4a311SJens Wiklander  * @ret_origin:	[out] origin of the return value
1389ff4a311SJens Wiklander  */
1399ff4a311SJens Wiklander struct tee_open_session_arg {
1409ff4a311SJens Wiklander 	u8 uuid[TEE_UUID_LEN];
1419ff4a311SJens Wiklander 	u8 clnt_uuid[TEE_UUID_LEN];
1429ff4a311SJens Wiklander 	u32 clnt_login;
1439ff4a311SJens Wiklander 	u32 session;
1449ff4a311SJens Wiklander 	u32 ret;
1459ff4a311SJens Wiklander 	u32 ret_origin;
1469ff4a311SJens Wiklander };
1479ff4a311SJens Wiklander 
1489ff4a311SJens Wiklander /**
1499ff4a311SJens Wiklander  * struct tee_invoke_arg - extra arguments for tee_invoke_func()
1509ff4a311SJens Wiklander  * @func:	[in] Trusted Application function, specific to the TA
1519ff4a311SJens Wiklander  * @session:	[in] Session id, from open session
1529ff4a311SJens Wiklander  * @ret:	[out] return value
1539ff4a311SJens Wiklander  * @ret_origin:	[out] origin of the return value
1549ff4a311SJens Wiklander  */
1559ff4a311SJens Wiklander struct tee_invoke_arg {
1569ff4a311SJens Wiklander 	u32 func;
1579ff4a311SJens Wiklander 	u32 session;
1589ff4a311SJens Wiklander 	u32 ret;
1599ff4a311SJens Wiklander 	u32 ret_origin;
1609ff4a311SJens Wiklander };
1619ff4a311SJens Wiklander 
1629ff4a311SJens Wiklander /**
1639ff4a311SJens Wiklander  * struct tee_version_data - description of TEE
1649ff4a311SJens Wiklander  * @gen_caps:	Generic capabilities, TEE_GEN_CAP_* above
1659ff4a311SJens Wiklander  */
1669ff4a311SJens Wiklander struct tee_version_data {
1679ff4a311SJens Wiklander 	u32 gen_caps;
1689ff4a311SJens Wiklander };
1699ff4a311SJens Wiklander 
1709ff4a311SJens Wiklander /**
1719ff4a311SJens Wiklander  * struct tee_driver_ops - TEE driver operations
1729ff4a311SJens Wiklander  * @get_version:	Query capabilities of TEE device,
1739ff4a311SJens Wiklander  * @open_session:	Opens a session to a Trusted Application in the TEE,
1749ff4a311SJens Wiklander  * @close_session:	Closes a session to Trusted Application,
1759ff4a311SJens Wiklander  * @invoke_func:	Invokes a function in a Trusted Application,
1769ff4a311SJens Wiklander  * @shm_register:	Registers memory shared with the TEE
1779ff4a311SJens Wiklander  * @shm_unregister:	Unregisters memory shared with the TEE
1789ff4a311SJens Wiklander  */
1799ff4a311SJens Wiklander struct tee_driver_ops {
1809ff4a311SJens Wiklander 	/**
1819ff4a311SJens Wiklander 	 * get_version() - Query capabilities of TEE device
1829ff4a311SJens Wiklander 	 * @dev:	The TEE device
1839ff4a311SJens Wiklander 	 * @vers:	Pointer to version data
1849ff4a311SJens Wiklander 	 */
1859ff4a311SJens Wiklander 	void (*get_version)(struct udevice *dev, struct tee_version_data *vers);
1869ff4a311SJens Wiklander 	/**
1879ff4a311SJens Wiklander 	 * open_session() - Open a session to a Trusted Application
1889ff4a311SJens Wiklander 	 * @dev:	The TEE device
1899ff4a311SJens Wiklander 	 * @arg:	Open session arguments
1909ff4a311SJens Wiklander 	 * @num_param:	Number of elements in @param
1919ff4a311SJens Wiklander 	 * @param:	Parameters for Trusted Application
1929ff4a311SJens Wiklander 	 *
1939ff4a311SJens Wiklander 	 * Returns < 0 on error else see @arg->ret for result. If @arg->ret is
1949ff4a311SJens Wiklander 	 * TEE_SUCCESS the session identifier is available in @arg->session.
1959ff4a311SJens Wiklander 	 */
1969ff4a311SJens Wiklander 	int (*open_session)(struct udevice *dev,
1979ff4a311SJens Wiklander 			    struct tee_open_session_arg *arg, uint num_param,
1989ff4a311SJens Wiklander 			    struct tee_param *param);
1999ff4a311SJens Wiklander 	/**
2009ff4a311SJens Wiklander 	 * close_session() - Close a session to a Trusted Application
2019ff4a311SJens Wiklander 	 * @dev:	The TEE device
2029ff4a311SJens Wiklander 	 * @session:	Session id
2039ff4a311SJens Wiklander 	 *
2049ff4a311SJens Wiklander 	 * Return < 0 on error else 0, regardless the session will not be valid
2059ff4a311SJens Wiklander 	 * after this function has returned.
2069ff4a311SJens Wiklander 	 */
2079ff4a311SJens Wiklander 	int (*close_session)(struct udevice *dev, u32 session);
2089ff4a311SJens Wiklander 	/**
2099ff4a311SJens Wiklander 	 * tee_invoke_func() - Invoke a function in a Trusted Application
2109ff4a311SJens Wiklander 	 * @dev:	The TEE device
2119ff4a311SJens Wiklander 	 * @arg:	Invoke arguments
2129ff4a311SJens Wiklander 	 * @num_param:	Number of elements in @param
2139ff4a311SJens Wiklander 	 * @param:	Parameters for Trusted Application
2149ff4a311SJens Wiklander 	 *
2159ff4a311SJens Wiklander 	 * Returns < 0 on error else see @arg->ret for result.
2169ff4a311SJens Wiklander 	 */
2179ff4a311SJens Wiklander 	int (*invoke_func)(struct udevice *dev, struct tee_invoke_arg *arg,
2189ff4a311SJens Wiklander 			   uint num_param, struct tee_param *param);
2199ff4a311SJens Wiklander 	/**
2209ff4a311SJens Wiklander 	 * shm_register() - Registers memory shared with the TEE
2219ff4a311SJens Wiklander 	 * @dev:	The TEE device
2229ff4a311SJens Wiklander 	 * @shm:	Pointer to a shared memory object
2239ff4a311SJens Wiklander 	 * Returns 0 on success or < 0 on failure.
2249ff4a311SJens Wiklander 	 */
2259ff4a311SJens Wiklander 	int (*shm_register)(struct udevice *dev, struct tee_shm *shm);
2269ff4a311SJens Wiklander 	/**
2279ff4a311SJens Wiklander 	 * shm_unregister() - Unregisters memory shared with the TEE
2289ff4a311SJens Wiklander 	 * @dev:	The TEE device
2299ff4a311SJens Wiklander 	 * @shm:	Pointer to a shared memory object
2309ff4a311SJens Wiklander 	 * Returns 0 on success or < 0 on failure.
2319ff4a311SJens Wiklander 	 */
2329ff4a311SJens Wiklander 	int (*shm_unregister)(struct udevice *dev, struct tee_shm *shm);
2339ff4a311SJens Wiklander };
2349ff4a311SJens Wiklander 
2359ff4a311SJens Wiklander /**
2369ff4a311SJens Wiklander  * __tee_shm_add() - Internal helper function to register shared memory
2379ff4a311SJens Wiklander  * @dev:	The TEE device
2389ff4a311SJens Wiklander  * @align:	Required alignment of allocated memory block if
2399ff4a311SJens Wiklander  *		(@flags & TEE_SHM_ALLOC)
2409ff4a311SJens Wiklander  * @addr:	Address of memory block, ignored if (@flags & TEE_SHM_ALLOC)
2419ff4a311SJens Wiklander  * @size:	Size of memory block
2429ff4a311SJens Wiklander  * @flags:	TEE_SHM_* above
2439ff4a311SJens Wiklander  * @shmp:	If the function return 0, this holds the allocated
2449ff4a311SJens Wiklander  *		struct tee_shm
2459ff4a311SJens Wiklander  *
2469ff4a311SJens Wiklander  * returns 0 on success or < 0 on failure.
2479ff4a311SJens Wiklander  */
2489ff4a311SJens Wiklander int __tee_shm_add(struct udevice *dev, ulong align, void *addr, ulong size,
2499ff4a311SJens Wiklander 		  u32 flags, struct tee_shm **shmp);
2509ff4a311SJens Wiklander 
2519ff4a311SJens Wiklander /**
2529ff4a311SJens Wiklander  * tee_shm_alloc() - Allocate shared memory
2539ff4a311SJens Wiklander  * @dev:	The TEE device
2549ff4a311SJens Wiklander  * @size:	Size of memory block
2559ff4a311SJens Wiklander  * @flags:	TEE_SHM_* above
2569ff4a311SJens Wiklander  * @shmp:	If the function return 0, this holds the allocated
2579ff4a311SJens Wiklander  *		struct tee_shm
2589ff4a311SJens Wiklander  *
2599ff4a311SJens Wiklander  * returns 0 on success or < 0 on failure.
2609ff4a311SJens Wiklander  */
2619ff4a311SJens Wiklander int tee_shm_alloc(struct udevice *dev, ulong size, u32 flags,
2629ff4a311SJens Wiklander 		  struct tee_shm **shmp);
2639ff4a311SJens Wiklander 
2649ff4a311SJens Wiklander /**
2659ff4a311SJens Wiklander  * tee_shm_register() - Registers shared memory
2669ff4a311SJens Wiklander  * @dev:	The TEE device
2679ff4a311SJens Wiklander  * @addr:	Address of memory block
2689ff4a311SJens Wiklander  * @size:	Size of memory block
2699ff4a311SJens Wiklander  * @flags:	TEE_SHM_* above
2709ff4a311SJens Wiklander  * @shmp:	If the function return 0, this holds the allocated
2719ff4a311SJens Wiklander  *		struct tee_shm
2729ff4a311SJens Wiklander  *
2739ff4a311SJens Wiklander  * returns 0 on success or < 0 on failure.
2749ff4a311SJens Wiklander  */
2759ff4a311SJens Wiklander int tee_shm_register(struct udevice *dev, void *addr, ulong size, u32 flags,
2769ff4a311SJens Wiklander 		     struct tee_shm **shmp);
2779ff4a311SJens Wiklander 
2789ff4a311SJens Wiklander /**
2799ff4a311SJens Wiklander  * tee_shm_free() - Frees shared memory
2809ff4a311SJens Wiklander  * @shm:	Shared memory object
2819ff4a311SJens Wiklander  */
2829ff4a311SJens Wiklander void tee_shm_free(struct tee_shm *shm);
2839ff4a311SJens Wiklander 
2849ff4a311SJens Wiklander /**
2859ff4a311SJens Wiklander  * tee_shm_is_registered() - Check register status of shared memory object
2869ff4a311SJens Wiklander  * @shm:	Pointer to shared memory object
2879ff4a311SJens Wiklander  * @dev:	The TEE device
2889ff4a311SJens Wiklander  *
2899ff4a311SJens Wiklander  * Returns true if the shared memory object is registered for the supplied
2909ff4a311SJens Wiklander  * TEE device
2919ff4a311SJens Wiklander  */
2929ff4a311SJens Wiklander bool tee_shm_is_registered(struct tee_shm *shm, struct udevice *dev);
2939ff4a311SJens Wiklander 
2949ff4a311SJens Wiklander /**
2959ff4a311SJens Wiklander  * tee_find_device() - Look up a TEE device
2969ff4a311SJens Wiklander  * @start:	if not NULL, continue search after this device
2979ff4a311SJens Wiklander  * @match:	function to check TEE device, returns != 0 if the device
2989ff4a311SJens Wiklander  *		matches
2999ff4a311SJens Wiklander  * @data:	data for match function
3009ff4a311SJens Wiklander  * @vers:	if not NULL, version data of TEE device of the device returned
3019ff4a311SJens Wiklander  *
3029ff4a311SJens Wiklander  * Returns a probed TEE device of the first TEE device matched by the
3039ff4a311SJens Wiklander  * match() callback or NULL.
3049ff4a311SJens Wiklander  */
3059ff4a311SJens Wiklander struct udevice *tee_find_device(struct udevice *start,
3069ff4a311SJens Wiklander 				int (*match)(struct tee_version_data *vers,
3079ff4a311SJens Wiklander 					     const void *data),
3089ff4a311SJens Wiklander 				const void *data,
3099ff4a311SJens Wiklander 				struct tee_version_data *vers);
3109ff4a311SJens Wiklander 
3119ff4a311SJens Wiklander /**
3129ff4a311SJens Wiklander  * tee_get_version() - Query capabilities of TEE device
3139ff4a311SJens Wiklander  * @dev:	The TEE device
3149ff4a311SJens Wiklander  * @vers:	Pointer to version data
3159ff4a311SJens Wiklander  */
3169ff4a311SJens Wiklander void tee_get_version(struct udevice *dev, struct tee_version_data *vers);
3179ff4a311SJens Wiklander 
3189ff4a311SJens Wiklander /**
3199ff4a311SJens Wiklander  * tee_open_session() - Open a session to a Trusted Application
3209ff4a311SJens Wiklander  * @dev:	The TEE device
3219ff4a311SJens Wiklander  * @arg:	Open session arguments
3229ff4a311SJens Wiklander  * @num_param:	Number of elements in @param
3239ff4a311SJens Wiklander  * @param:	Parameters for Trusted Application
3249ff4a311SJens Wiklander  *
3259ff4a311SJens Wiklander  * Returns < 0 on error else see @arg->ret for result. If @arg->ret is
3269ff4a311SJens Wiklander  * TEE_SUCCESS the session identifier is available in @arg->session.
3279ff4a311SJens Wiklander  */
3289ff4a311SJens Wiklander int tee_open_session(struct udevice *dev, struct tee_open_session_arg *arg,
3299ff4a311SJens Wiklander 		     uint num_param, struct tee_param *param);
3309ff4a311SJens Wiklander 
3319ff4a311SJens Wiklander /**
3329ff4a311SJens Wiklander  * tee_close_session() - Close a session to a Trusted Application
3339ff4a311SJens Wiklander  * @dev:	The TEE device
3349ff4a311SJens Wiklander  * @session:	Session id
3359ff4a311SJens Wiklander  *
3369ff4a311SJens Wiklander  * Return < 0 on error else 0, regardless the session will not be valid
3379ff4a311SJens Wiklander  * after this function has returned.
3389ff4a311SJens Wiklander  */
3399ff4a311SJens Wiklander int tee_close_session(struct udevice *dev, u32 session);
3409ff4a311SJens Wiklander 
3419ff4a311SJens Wiklander /**
3429ff4a311SJens Wiklander  * tee_invoke_func() - Invoke a function in a Trusted Application
3439ff4a311SJens Wiklander  * @dev:	The TEE device
3449ff4a311SJens Wiklander  * @arg:	Invoke arguments
3459ff4a311SJens Wiklander  * @num_param:	Number of elements in @param
3469ff4a311SJens Wiklander  * @param:	Parameters for Trusted Application
3479ff4a311SJens Wiklander  *
3489ff4a311SJens Wiklander  * Returns < 0 on error else see @arg->ret for result.
3499ff4a311SJens Wiklander  */
3509ff4a311SJens Wiklander int tee_invoke_func(struct udevice *dev, struct tee_invoke_arg *arg,
3519ff4a311SJens Wiklander 		    uint num_param, struct tee_param *param);
3529ff4a311SJens Wiklander 
3531cc8cc4eSJens Wiklander /**
3541cc8cc4eSJens Wiklander  * tee_optee_ta_uuid_from_octets() - Converts to struct tee_optee_ta_uuid
3551cc8cc4eSJens Wiklander  * @d:	Destination struct
3561cc8cc4eSJens Wiklander  * @s:	Source UUID octets
3571cc8cc4eSJens Wiklander  *
3581cc8cc4eSJens Wiklander  * Conversion to a struct tee_optee_ta_uuid represantion from binary octet
3591cc8cc4eSJens Wiklander  * representation.
3601cc8cc4eSJens Wiklander  */
3611cc8cc4eSJens Wiklander void tee_optee_ta_uuid_from_octets(struct tee_optee_ta_uuid *d,
3621cc8cc4eSJens Wiklander 				   const u8 s[TEE_UUID_LEN]);
3631cc8cc4eSJens Wiklander 
3641cc8cc4eSJens Wiklander /**
3651cc8cc4eSJens Wiklander  * tee_optee_ta_uuid_to_octets() - Converts from struct tee_optee_ta_uuid
3661cc8cc4eSJens Wiklander  * @d:	Destination UUID octets
3671cc8cc4eSJens Wiklander  * @s:	Source struct
3681cc8cc4eSJens Wiklander  *
3691cc8cc4eSJens Wiklander  * Conversion from a struct tee_optee_ta_uuid represantion to binary octet
3701cc8cc4eSJens Wiklander  * representation.
3711cc8cc4eSJens Wiklander  */
3721cc8cc4eSJens Wiklander void tee_optee_ta_uuid_to_octets(u8 d[TEE_UUID_LEN],
3731cc8cc4eSJens Wiklander 				 const struct tee_optee_ta_uuid *s);
3741cc8cc4eSJens Wiklander 
3759ff4a311SJens Wiklander #endif /* __TEE_H */
376