mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	optee: sync OP-TEE headers
Pulls in updates in the internal headers from OP-TEE OS [1]. A few defines has been shortened, hence the changes in rpc.c. Defines not used by the driver in tee_rpc_cmd.h has been filtered out. Note that this does not change the ABI. Link: [1] https://github.com/OP-TEE/optee_os Reviewed-by: Sumit Garg <sumit.garg@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
This commit is contained in:
		
							parent
							
								
									bed13b5fc4
								
							
						
					
					
						commit
						617d8e8b34
					
				
					 4 changed files with 179 additions and 189 deletions
				
			
		| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */
 | 
					/* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2015-2019, Linaro Limited
 | 
					 * Copyright (c) 2015-2021, Linaro Limited
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#ifndef _OPTEE_MSG_H
 | 
					#ifndef _OPTEE_MSG_H
 | 
				
			||||||
#define _OPTEE_MSG_H
 | 
					#define _OPTEE_MSG_H
 | 
				
			||||||
| 
						 | 
					@ -12,11 +12,9 @@
 | 
				
			||||||
 * This file defines the OP-TEE message protocol used to communicate
 | 
					 * This file defines the OP-TEE message protocol used to communicate
 | 
				
			||||||
 * with an instance of OP-TEE running in secure world.
 | 
					 * with an instance of OP-TEE running in secure world.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This file is divided into three sections.
 | 
					 * This file is divided into two sections.
 | 
				
			||||||
 * 1. Formatting of messages.
 | 
					 * 1. Formatting of messages.
 | 
				
			||||||
 * 2. Requests from normal world
 | 
					 * 2. Requests from normal world
 | 
				
			||||||
 * 3. Requests from secure world, Remote Procedure Call (RPC), handled by
 | 
					 | 
				
			||||||
 *    tee-supplicant.
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*****************************************************************************
 | 
					/*****************************************************************************
 | 
				
			||||||
| 
						 | 
					@ -54,8 +52,8 @@
 | 
				
			||||||
 * Every entry in buffer should point to a 4k page beginning (12 least
 | 
					 * Every entry in buffer should point to a 4k page beginning (12 least
 | 
				
			||||||
 * significant bits must be equal to zero).
 | 
					 * significant bits must be equal to zero).
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * 12 least significant bints of optee_msg_param.u.tmem.buf_ptr should hold page
 | 
					 * 12 least significant bits of optee_msg_param.u.tmem.buf_ptr should hold
 | 
				
			||||||
 * offset of the user buffer.
 | 
					 * page offset of user buffer.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * So, entries should be placed like members of this structure:
 | 
					 * So, entries should be placed like members of this structure:
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -176,17 +174,9 @@ struct optee_msg_param {
 | 
				
			||||||
 * @params: the parameters supplied to the OS Command
 | 
					 * @params: the parameters supplied to the OS Command
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * All normal calls to Trusted OS uses this struct. If cmd requires further
 | 
					 * All normal calls to Trusted OS uses this struct. If cmd requires further
 | 
				
			||||||
 * information than what these field holds it can be passed as a parameter
 | 
					 * information than what these fields hold it can be passed as a parameter
 | 
				
			||||||
 * tagged as meta (setting the OPTEE_MSG_ATTR_META bit in corresponding
 | 
					 * tagged as meta (setting the OPTEE_MSG_ATTR_META bit in corresponding
 | 
				
			||||||
 * attrs field). All parameters tagged as meta has to come first.
 | 
					 * attrs field). All parameters tagged as meta have to come first.
 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Temp memref parameters can be fragmented if supported by the Trusted OS
 | 
					 | 
				
			||||||
 * (when optee_smc.h is bearer of this protocol this is indicated with
 | 
					 | 
				
			||||||
 * OPTEE_SMC_SEC_CAP_UNREGISTERED_SHM). If a logical memref parameter is
 | 
					 | 
				
			||||||
 * fragmented then has all but the last fragment the
 | 
					 | 
				
			||||||
 * OPTEE_MSG_ATTR_FRAGMENT bit set in attrs. Even if a memref is fragmented
 | 
					 | 
				
			||||||
 * it will still be presented as a single logical memref to the Trusted
 | 
					 | 
				
			||||||
 * Application.
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
struct optee_msg_arg {
 | 
					struct optee_msg_arg {
 | 
				
			||||||
	u32 cmd;
 | 
						u32 cmd;
 | 
				
			||||||
| 
						 | 
					@ -290,15 +280,12 @@ struct optee_msg_arg {
 | 
				
			||||||
 * OPTEE_MSG_CMD_REGISTER_SHM registers a shared memory reference. The
 | 
					 * OPTEE_MSG_CMD_REGISTER_SHM registers a shared memory reference. The
 | 
				
			||||||
 * information is passed as:
 | 
					 * information is passed as:
 | 
				
			||||||
 * [in] param[0].attr			OPTEE_MSG_ATTR_TYPE_TMEM_INPUT
 | 
					 * [in] param[0].attr			OPTEE_MSG_ATTR_TYPE_TMEM_INPUT
 | 
				
			||||||
 *					[| OPTEE_MSG_ATTR_FRAGMENT]
 | 
					 *					[| OPTEE_MSG_ATTR_NONCONTIG]
 | 
				
			||||||
 * [in] param[0].u.tmem.buf_ptr		physical address (of first fragment)
 | 
					 * [in] param[0].u.tmem.buf_ptr		physical address (of first fragment)
 | 
				
			||||||
 * [in] param[0].u.tmem.size		size (of first fragment)
 | 
					 * [in] param[0].u.tmem.size		size (of first fragment)
 | 
				
			||||||
 * [in] param[0].u.tmem.shm_ref		holds shared memory reference
 | 
					 * [in] param[0].u.tmem.shm_ref		holds shared memory reference
 | 
				
			||||||
 * ...
 | 
					 | 
				
			||||||
 * The shared memory can optionally be fragmented, temp memrefs can follow
 | 
					 | 
				
			||||||
 * each other with all but the last with the OPTEE_MSG_ATTR_FRAGMENT bit set.
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * OPTEE_MSG_CMD_UNREGISTER_SHM unregisteres a previously registered shared
 | 
					 * OPTEE_MSG_CMD_UNREGISTER_SHM unregisters a previously registered shared
 | 
				
			||||||
 * memory reference. The information is passed as:
 | 
					 * memory reference. The information is passed as:
 | 
				
			||||||
 * [in] param[0].attr			OPTEE_MSG_ATTR_TYPE_RMEM_INPUT
 | 
					 * [in] param[0].attr			OPTEE_MSG_ATTR_TYPE_RMEM_INPUT
 | 
				
			||||||
 * [in] param[0].u.rmem.shm_ref		holds shared memory reference
 | 
					 * [in] param[0].u.rmem.shm_ref		holds shared memory reference
 | 
				
			||||||
| 
						 | 
					@ -313,131 +300,4 @@ struct optee_msg_arg {
 | 
				
			||||||
#define OPTEE_MSG_CMD_UNREGISTER_SHM	5
 | 
					#define OPTEE_MSG_CMD_UNREGISTER_SHM	5
 | 
				
			||||||
#define OPTEE_MSG_FUNCID_CALL_WITH_ARG	0x0004
 | 
					#define OPTEE_MSG_FUNCID_CALL_WITH_ARG	0x0004
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
 * Part 3 - Requests from secure world, RPC
 | 
					 | 
				
			||||||
 *****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * All RPC is done with a struct optee_msg_arg as bearer of information,
 | 
					 | 
				
			||||||
 * struct optee_msg_arg::arg holds values defined by OPTEE_MSG_RPC_CMD_* below
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * RPC communication with tee-supplicant is reversed compared to normal
 | 
					 | 
				
			||||||
 * client communication desribed above. The supplicant receives requests
 | 
					 | 
				
			||||||
 * and sends responses.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Load a TA into memory, defined in tee-supplicant
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_LOAD_TA	0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Reserved
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_RPMB		1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * File system access, defined in tee-supplicant
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_FS		2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Get time
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Returns number of seconds and nano seconds since the Epoch,
 | 
					 | 
				
			||||||
 * 1970-01-01 00:00:00 +0000 (UTC).
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [out] param[0].u.value.a	Number of seconds
 | 
					 | 
				
			||||||
 * [out] param[0].u.value.b	Number of nano seconds.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_GET_TIME	3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Wait queue primitive, helper for secure world to implement a wait queue.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * If secure world need to wait for a secure world mutex it issues a sleep
 | 
					 | 
				
			||||||
 * request instead of spinning in secure world. Conversely is a wakeup
 | 
					 | 
				
			||||||
 * request issued when a secure world mutex with a thread waiting thread is
 | 
					 | 
				
			||||||
 * unlocked.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Waiting on a key
 | 
					 | 
				
			||||||
 * [in] param[0].u.value.a OPTEE_MSG_RPC_WAIT_QUEUE_SLEEP
 | 
					 | 
				
			||||||
 * [in] param[0].u.value.b wait key
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Waking up a key
 | 
					 | 
				
			||||||
 * [in] param[0].u.value.a OPTEE_MSG_RPC_WAIT_QUEUE_WAKEUP
 | 
					 | 
				
			||||||
 * [in] param[0].u.value.b wakeup key
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_WAIT_QUEUE	4
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_WAIT_QUEUE_SLEEP	0
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_WAIT_QUEUE_WAKEUP	1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Suspend execution
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [in] param[0].value	.a number of milliseconds to suspend
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_SUSPEND	5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Allocate a piece of shared memory
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Shared memory can optionally be fragmented, to support that additional
 | 
					 | 
				
			||||||
 * spare param entries are allocated to make room for eventual fragments.
 | 
					 | 
				
			||||||
 * The spare param entries has .attr = OPTEE_MSG_ATTR_TYPE_NONE when
 | 
					 | 
				
			||||||
 * unused. All returned temp memrefs except the last should have the
 | 
					 | 
				
			||||||
 * OPTEE_MSG_ATTR_FRAGMENT bit set in the attr field.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.a		type of memory one of
 | 
					 | 
				
			||||||
 *					OPTEE_MSG_RPC_SHM_TYPE_* below
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.b		requested size
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.c		required alignment
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [out] param[0].u.tmem.buf_ptr	physical address (of first fragment)
 | 
					 | 
				
			||||||
 * [out] param[0].u.tmem.size		size (of first fragment)
 | 
					 | 
				
			||||||
 * [out] param[0].u.tmem.shm_ref	shared memory reference
 | 
					 | 
				
			||||||
 * ...
 | 
					 | 
				
			||||||
 * [out] param[n].u.tmem.buf_ptr	physical address
 | 
					 | 
				
			||||||
 * [out] param[n].u.tmem.size		size
 | 
					 | 
				
			||||||
 * [out] param[n].u.tmem.shm_ref	shared memory reference (same value
 | 
					 | 
				
			||||||
 *					as in param[n-1].u.tmem.shm_ref)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_SHM_ALLOC	6
 | 
					 | 
				
			||||||
/* Memory that can be shared with a non-secure user space application */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_SHM_TYPE_APPL	0
 | 
					 | 
				
			||||||
/* Memory only shared with non-secure kernel */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_SHM_TYPE_KERNEL	1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Free shared memory previously allocated with OPTEE_MSG_RPC_CMD_SHM_ALLOC
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.a		type of memory one of
 | 
					 | 
				
			||||||
 *					OPTEE_MSG_RPC_SHM_TYPE_* above
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.b		value of shared memory reference
 | 
					 | 
				
			||||||
 *					returned in param[0].u.tmem.shm_ref
 | 
					 | 
				
			||||||
 *					above
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_SHM_FREE	7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Access a device on an i2c bus
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.a		mode: RD(0), WR(1)
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.b		i2c adapter
 | 
					 | 
				
			||||||
 * [in]  param[0].u.value.c		i2c chip
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [in]  param[1].u.value.a		i2c control flags
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [in/out] memref[2]			buffer to exchange the transfer data
 | 
					 | 
				
			||||||
 *					with the secure world
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * [out]  param[3].u.value.a		bytes transferred by the driver
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_I2C_TRANSFER 21
 | 
					 | 
				
			||||||
/* I2C master transfer modes */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_I2C_TRANSFER_RD 0
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_I2C_TRANSFER_WR 1
 | 
					 | 
				
			||||||
/* I2C master control flags */
 | 
					 | 
				
			||||||
#define OPTEE_MSG_RPC_CMD_I2C_FLAGS_TEN_BIT  BIT(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _OPTEE_MSG_H */
 | 
					#endif /* _OPTEE_MSG_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										103
									
								
								drivers/tee/optee/optee_rpc_cmd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								drivers/tee/optee/optee_rpc_cmd.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,103 @@
 | 
				
			||||||
 | 
					/* SPDX-License-Identifier: BSD-2-Clause */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2016-2021, Linaro Limited
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __OPTEE_RPC_CMD_H
 | 
				
			||||||
 | 
					#define __OPTEE_RPC_CMD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * All RPC is done with a struct optee_msg_arg as bearer of information,
 | 
				
			||||||
 | 
					 * struct optee_msg_arg::arg holds values defined by OPTEE_RPC_CMD_* below.
 | 
				
			||||||
 | 
					 * Only the commands handled by the kernel driver are defined here.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * RPC communication with tee-supplicant is reversed compared to normal
 | 
				
			||||||
 | 
					 * client communication described above. The supplicant receives requests
 | 
				
			||||||
 | 
					 * and sends responses.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Get time
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Returns number of seconds and nano seconds since the Epoch,
 | 
				
			||||||
 | 
					 * 1970-01-01 00:00:00 +0000 (UTC).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * [out]    value[0].a	    Number of seconds
 | 
				
			||||||
 | 
					 * [out]    value[0].b	    Number of nano seconds.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_CMD_GET_TIME		3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Wait queue primitive, helper for secure world to implement a wait queue.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * If secure world needs to wait for a secure world mutex it issues a sleep
 | 
				
			||||||
 | 
					 * request instead of spinning in secure world. Conversely is a wakeup
 | 
				
			||||||
 | 
					 * request issued when a secure world mutex with a thread waiting thread is
 | 
				
			||||||
 | 
					 * unlocked.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Waiting on a key
 | 
				
			||||||
 | 
					 * [in]    value[0].a	    OPTEE_RPC_WAIT_QUEUE_SLEEP
 | 
				
			||||||
 | 
					 * [in]    value[0].b	    Wait key
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Waking up a key
 | 
				
			||||||
 | 
					 * [in]    value[0].a	    OPTEE_RPC_WAIT_QUEUE_WAKEUP
 | 
				
			||||||
 | 
					 * [in]    value[0].b	    Wakeup key
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_CMD_WAIT_QUEUE	4
 | 
				
			||||||
 | 
					#define OPTEE_RPC_WAIT_QUEUE_SLEEP	0
 | 
				
			||||||
 | 
					#define OPTEE_RPC_WAIT_QUEUE_WAKEUP	1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Suspend execution
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * [in]    value[0].a	Number of milliseconds to suspend
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_CMD_SUSPEND		5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Allocate a piece of shared memory
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * [in]    value[0].a	    Type of memory one of
 | 
				
			||||||
 | 
					 *			    OPTEE_RPC_SHM_TYPE_* below
 | 
				
			||||||
 | 
					 * [in]    value[0].b	    Requested size
 | 
				
			||||||
 | 
					 * [in]    value[0].c	    Required alignment
 | 
				
			||||||
 | 
					 * [out]   memref[0]	    Buffer
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_CMD_SHM_ALLOC		6
 | 
				
			||||||
 | 
					/* Memory that can be shared with a non-secure user space application */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_SHM_TYPE_APPL		0
 | 
				
			||||||
 | 
					/* Memory only shared with non-secure kernel */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_SHM_TYPE_KERNEL	1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Free shared memory previously allocated with OPTEE_RPC_CMD_SHM_ALLOC
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * [in]     value[0].a	    Type of memory one of
 | 
				
			||||||
 | 
					 *			    OPTEE_RPC_SHM_TYPE_* above
 | 
				
			||||||
 | 
					 * [in]     value[0].b	    Value of shared memory reference or cookie
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_CMD_SHM_FREE		7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Issue master requests (read and write operations) to an I2C chip.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * [in]     value[0].a	    Transfer mode (OPTEE_RPC_I2C_TRANSFER_*)
 | 
				
			||||||
 | 
					 * [in]     value[0].b	    The I2C bus (a.k.a adapter).
 | 
				
			||||||
 | 
					 *				16 bit field.
 | 
				
			||||||
 | 
					 * [in]     value[0].c	    The I2C chip (a.k.a address).
 | 
				
			||||||
 | 
					 *				16 bit field (either 7 or 10 bit effective).
 | 
				
			||||||
 | 
					 * [in]     value[1].a	    The I2C master control flags (ie, 10 bit address).
 | 
				
			||||||
 | 
					 *				16 bit field.
 | 
				
			||||||
 | 
					 * [in/out] memref[2]	    Buffer used for data transfers.
 | 
				
			||||||
 | 
					 * [out]    value[3].a	    Number of bytes transferred by the REE.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_CMD_I2C_TRANSFER	21
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* I2C master transfer modes */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_I2C_TRANSFER_RD	0
 | 
				
			||||||
 | 
					#define OPTEE_RPC_I2C_TRANSFER_WR	1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* I2C master control flags */
 | 
				
			||||||
 | 
					#define OPTEE_RPC_I2C_FLAGS_TEN_BIT	BIT(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /*__OPTEE_RPC_CMD_H*/
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */
 | 
					/* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 2015-2019, Linaro Limited
 | 
					 * Copyright (c) 2015-2021, Linaro Limited
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#ifndef OPTEE_SMC_H
 | 
					#ifndef OPTEE_SMC_H
 | 
				
			||||||
#define OPTEE_SMC_H
 | 
					#define OPTEE_SMC_H
 | 
				
			||||||
| 
						 | 
					@ -39,10 +39,10 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Function specified by SMC Calling convention
 | 
					 * Function specified by SMC Calling convention
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Return one of the following UIDs if using API specified in this file
 | 
					 * Return the following UID if using API specified in this file
 | 
				
			||||||
 * without further extentions:
 | 
					 * without further extensions:
 | 
				
			||||||
 * 65cb6b93-af0c-4617-8ed6-644a8d1140f8
 | 
					 * 384fb3e0-e7f8-11e3-af63-0002a5d5c51b.
 | 
				
			||||||
 * see also OPTEE_SMC_UID_* in optee_msg.h
 | 
					 * see also OPTEE_MSG_UID_* in optee_msg.h
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define OPTEE_SMC_FUNCID_CALLS_UID OPTEE_MSG_FUNCID_CALLS_UID
 | 
					#define OPTEE_SMC_FUNCID_CALLS_UID OPTEE_MSG_FUNCID_CALLS_UID
 | 
				
			||||||
#define OPTEE_SMC_CALLS_UID \
 | 
					#define OPTEE_SMC_CALLS_UID \
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,7 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Function specified by SMC Calling convention
 | 
					 * Function specified by SMC Calling convention
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Returns 2.0 if using API specified in this file without further extentions.
 | 
					 * Returns 2.0 if using API specified in this file without further extensions.
 | 
				
			||||||
 * see also OPTEE_MSG_REVISION_* in optee_msg.h
 | 
					 * see also OPTEE_MSG_REVISION_* in optee_msg.h
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define OPTEE_SMC_FUNCID_CALLS_REVISION OPTEE_MSG_FUNCID_CALLS_REVISION
 | 
					#define OPTEE_SMC_FUNCID_CALLS_REVISION OPTEE_MSG_FUNCID_CALLS_REVISION
 | 
				
			||||||
| 
						 | 
					@ -109,8 +109,8 @@ struct optee_smc_call_get_os_revision_result {
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Call register usage:
 | 
					 * Call register usage:
 | 
				
			||||||
 * a0	SMC Function ID, OPTEE_SMC*CALL_WITH_ARG
 | 
					 * a0	SMC Function ID, OPTEE_SMC*CALL_WITH_ARG
 | 
				
			||||||
 * a1	Upper 32bit of a 64bit physical pointer to a struct optee_msg_arg
 | 
					 * a1	Upper 32 bits of a 64-bit physical pointer to a struct optee_msg_arg
 | 
				
			||||||
 * a2	Lower 32bit of a 64bit physical pointer to a struct optee_msg_arg
 | 
					 * a2	Lower 32 bits of a 64-bit physical pointer to a struct optee_msg_arg
 | 
				
			||||||
 * a3	Cache settings, not used if physical pointer is in a predefined shared
 | 
					 * a3	Cache settings, not used if physical pointer is in a predefined shared
 | 
				
			||||||
 *	memory area else per OPTEE_SMC_SHM_*
 | 
					 *	memory area else per OPTEE_SMC_SHM_*
 | 
				
			||||||
 * a4-6	Not used
 | 
					 * a4-6	Not used
 | 
				
			||||||
| 
						 | 
					@ -214,8 +214,9 @@ struct optee_smc_get_shm_config_result {
 | 
				
			||||||
 * secure world accepts command buffers located in any parts of non-secure RAM
 | 
					 * secure world accepts command buffers located in any parts of non-secure RAM
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define OPTEE_SMC_SEC_CAP_DYNAMIC_SHM		BIT(2)
 | 
					#define OPTEE_SMC_SEC_CAP_DYNAMIC_SHM		BIT(2)
 | 
				
			||||||
 | 
					/* Secure world is built with virtualization support */
 | 
				
			||||||
/* Secure world supports Shared Memory with a NULL buffer reference */
 | 
					#define OPTEE_SMC_SEC_CAP_VIRTUALIZATION	BIT(3)
 | 
				
			||||||
 | 
					/* Secure world supports Shared Memory with a NULL reference */
 | 
				
			||||||
#define OPTEE_SMC_SEC_CAP_MEMREF_NULL		BIT(4)
 | 
					#define OPTEE_SMC_SEC_CAP_MEMREF_NULL		BIT(4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES	9
 | 
					#define OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES	9
 | 
				
			||||||
| 
						 | 
					@ -245,8 +246,8 @@ struct optee_smc_exchange_capabilities_result {
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Normal return register usage:
 | 
					 * Normal return register usage:
 | 
				
			||||||
 * a0	OPTEE_SMC_RETURN_OK
 | 
					 * a0	OPTEE_SMC_RETURN_OK
 | 
				
			||||||
 * a1	Upper 32bit of a 64bit Shared memory cookie
 | 
					 * a1	Upper 32 bits of a 64-bit Shared memory cookie
 | 
				
			||||||
 * a2	Lower 32bit of a 64bit Shared memory cookie
 | 
					 * a2	Lower 32 bits of a 64-bit Shared memory cookie
 | 
				
			||||||
 * a3-7	Preserved
 | 
					 * a3-7	Preserved
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Cache empty return register usage:
 | 
					 * Cache empty return register usage:
 | 
				
			||||||
| 
						 | 
					@ -293,6 +294,31 @@ struct optee_smc_disable_shm_cache_result {
 | 
				
			||||||
#define OPTEE_SMC_ENABLE_SHM_CACHE \
 | 
					#define OPTEE_SMC_ENABLE_SHM_CACHE \
 | 
				
			||||||
	OPTEE_SMC_FAST_CALL_VAL(OPTEE_SMC_FUNCID_ENABLE_SHM_CACHE)
 | 
						OPTEE_SMC_FAST_CALL_VAL(OPTEE_SMC_FUNCID_ENABLE_SHM_CACHE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Query OP-TEE about number of supported threads
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Normal World OS or Hypervisor issues this call to find out how many
 | 
				
			||||||
 | 
					 * threads OP-TEE supports. That is how many standard calls can be issued
 | 
				
			||||||
 | 
					 * in parallel before OP-TEE will return OPTEE_SMC_RETURN_ETHREAD_LIMIT.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Call requests usage:
 | 
				
			||||||
 | 
					 * a0	SMC Function ID, OPTEE_SMC_GET_THREAD_COUNT
 | 
				
			||||||
 | 
					 * a1-6 Not used
 | 
				
			||||||
 | 
					 * a7	Hypervisor Client ID register
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Normal return register usage:
 | 
				
			||||||
 | 
					 * a0	OPTEE_SMC_RETURN_OK
 | 
				
			||||||
 | 
					 * a1	Number of threads
 | 
				
			||||||
 | 
					 * a2-7 Preserved
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Error return:
 | 
				
			||||||
 | 
					 * a0	OPTEE_SMC_RETURN_UNKNOWN_FUNCTION   Requested call is not implemented
 | 
				
			||||||
 | 
					 * a1-7	Preserved
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define OPTEE_SMC_FUNCID_GET_THREAD_COUNT	15
 | 
				
			||||||
 | 
					#define OPTEE_SMC_GET_THREAD_COUNT \
 | 
				
			||||||
 | 
						OPTEE_SMC_FAST_CALL_VAL(OPTEE_SMC_FUNCID_GET_THREAD_COUNT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Resume from RPC (for example after processing a foreign interrupt)
 | 
					 * Resume from RPC (for example after processing a foreign interrupt)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -341,16 +367,16 @@ struct optee_smc_disable_shm_cache_result {
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * "Return" register usage:
 | 
					 * "Return" register usage:
 | 
				
			||||||
 * a0	SMC Function ID, OPTEE_SMC_CALL_RETURN_FROM_RPC.
 | 
					 * a0	SMC Function ID, OPTEE_SMC_CALL_RETURN_FROM_RPC.
 | 
				
			||||||
 * a1	Upper 32bits of 64bit physical pointer to allocated
 | 
					 * a1	Upper 32 bits of 64-bit physical pointer to allocated
 | 
				
			||||||
 *	memory, (a1 == 0 && a2 == 0) if size was 0 or if memory can't
 | 
					 *	memory, (a1 == 0 && a2 == 0) if size was 0 or if memory can't
 | 
				
			||||||
 *	be allocated.
 | 
					 *	be allocated.
 | 
				
			||||||
 * a2	Lower 32bits of 64bit physical pointer to allocated
 | 
					 * a2	Lower 32 bits of 64-bit physical pointer to allocated
 | 
				
			||||||
 *	memory, (a1 == 0 && a2 == 0) if size was 0 or if memory can't
 | 
					 *	memory, (a1 == 0 && a2 == 0) if size was 0 or if memory can't
 | 
				
			||||||
 *	be allocated
 | 
					 *	be allocated
 | 
				
			||||||
 * a3	Preserved
 | 
					 * a3	Preserved
 | 
				
			||||||
 * a4	Upper 32bits of 64bit Shared memory cookie used when freeing
 | 
					 * a4	Upper 32 bits of 64-bit Shared memory cookie used when freeing
 | 
				
			||||||
 *	the memory or doing an RPC
 | 
					 *	the memory or doing an RPC
 | 
				
			||||||
 * a5	Lower 32bits of 64bit Shared memory cookie used when freeing
 | 
					 * a5	Lower 32 bits of 64-bit Shared memory cookie used when freeing
 | 
				
			||||||
 *	the memory or doing an RPC
 | 
					 *	the memory or doing an RPC
 | 
				
			||||||
 * a6-7	Preserved
 | 
					 * a6-7	Preserved
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -363,9 +389,9 @@ struct optee_smc_disable_shm_cache_result {
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * "Call" register usage:
 | 
					 * "Call" register usage:
 | 
				
			||||||
 * a0	This value, OPTEE_SMC_RETURN_RPC_FREE
 | 
					 * a0	This value, OPTEE_SMC_RETURN_RPC_FREE
 | 
				
			||||||
 * a1	Upper 32bits of 64bit shared memory cookie belonging to this
 | 
					 * a1	Upper 32 bits of 64-bit shared memory cookie belonging to this
 | 
				
			||||||
 *	argument memory
 | 
					 *	argument memory
 | 
				
			||||||
 * a2	Lower 32bits of 64bit shared memory cookie belonging to this
 | 
					 * a2	Lower 32 bits of 64-bit shared memory cookie belonging to this
 | 
				
			||||||
 *	argument memory
 | 
					 *	argument memory
 | 
				
			||||||
 * a3-7	Resume information, must be preserved
 | 
					 * a3-7	Resume information, must be preserved
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -379,7 +405,7 @@ struct optee_smc_disable_shm_cache_result {
 | 
				
			||||||
	OPTEE_SMC_RPC_VAL(OPTEE_SMC_RPC_FUNC_FREE)
 | 
						OPTEE_SMC_RPC_VAL(OPTEE_SMC_RPC_FUNC_FREE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Deliver foreign interrupt to normal world.
 | 
					 * Deliver a foreign interrupt in normal world.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * "Call" register usage:
 | 
					 * "Call" register usage:
 | 
				
			||||||
 * a0	OPTEE_SMC_RETURN_RPC_FOREIGN_INTR
 | 
					 * a0	OPTEE_SMC_RETURN_RPC_FOREIGN_INTR
 | 
				
			||||||
| 
						 | 
					@ -405,10 +431,10 @@ struct optee_smc_disable_shm_cache_result {
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * "Call" register usage:
 | 
					 * "Call" register usage:
 | 
				
			||||||
 * a0	OPTEE_SMC_RETURN_RPC_CMD
 | 
					 * a0	OPTEE_SMC_RETURN_RPC_CMD
 | 
				
			||||||
 * a1	Upper 32bit of a 64bit Shared memory cookie holding a
 | 
					 * a1	Upper 32 bits of a 64-bit Shared memory cookie holding a
 | 
				
			||||||
 *	struct optee_msg_arg, must be preserved, only the data should
 | 
					 *	struct optee_msg_arg, must be preserved, only the data should
 | 
				
			||||||
 *	be updated
 | 
					 *	be updated
 | 
				
			||||||
 * a2	Lower 32bit of a 64bit Shared memory cookie holding a
 | 
					 * a2	Lower 32 bits of a 64-bit Shared memory cookie holding a
 | 
				
			||||||
 *	struct optee_msg_arg, must be preserved, only the data should
 | 
					 *	struct optee_msg_arg, must be preserved, only the data should
 | 
				
			||||||
 *	be updated
 | 
					 *	be updated
 | 
				
			||||||
 * a3-7	Resume information, must be preserved
 | 
					 * a3-7	Resume information, must be preserved
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,7 @@
 | 
				
			||||||
#include <linux/tee_drv.h>
 | 
					#include <linux/tee_drv.h>
 | 
				
			||||||
#include "optee_private.h"
 | 
					#include "optee_private.h"
 | 
				
			||||||
#include "optee_smc.h"
 | 
					#include "optee_smc.h"
 | 
				
			||||||
 | 
					#include "optee_rpc_cmd.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct wq_entry {
 | 
					struct wq_entry {
 | 
				
			||||||
	struct list_head link;
 | 
						struct list_head link;
 | 
				
			||||||
| 
						 | 
					@ -89,7 +90,7 @@ static void handle_rpc_func_cmd_i2c_transfer(struct tee_context *ctx,
 | 
				
			||||||
	if (!client.adapter)
 | 
						if (!client.adapter)
 | 
				
			||||||
		goto bad;
 | 
							goto bad;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (params[1].u.value.a & OPTEE_MSG_RPC_CMD_I2C_FLAGS_TEN_BIT) {
 | 
						if (params[1].u.value.a & OPTEE_RPC_I2C_FLAGS_TEN_BIT) {
 | 
				
			||||||
		if (!i2c_check_functionality(client.adapter,
 | 
							if (!i2c_check_functionality(client.adapter,
 | 
				
			||||||
					     I2C_FUNC_10BIT_ADDR)) {
 | 
										     I2C_FUNC_10BIT_ADDR)) {
 | 
				
			||||||
			i2c_put_adapter(client.adapter);
 | 
								i2c_put_adapter(client.adapter);
 | 
				
			||||||
| 
						 | 
					@ -103,11 +104,11 @@ static void handle_rpc_func_cmd_i2c_transfer(struct tee_context *ctx,
 | 
				
			||||||
	snprintf(client.name, I2C_NAME_SIZE, "i2c%d", client.adapter->nr);
 | 
						snprintf(client.name, I2C_NAME_SIZE, "i2c%d", client.adapter->nr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (params[0].u.value.a) {
 | 
						switch (params[0].u.value.a) {
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_I2C_TRANSFER_RD:
 | 
						case OPTEE_RPC_I2C_TRANSFER_RD:
 | 
				
			||||||
		ret = i2c_master_recv(&client, params[2].u.memref.shm->kaddr,
 | 
							ret = i2c_master_recv(&client, params[2].u.memref.shm->kaddr,
 | 
				
			||||||
				      params[2].u.memref.size);
 | 
									      params[2].u.memref.size);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_I2C_TRANSFER_WR:
 | 
						case OPTEE_RPC_I2C_TRANSFER_WR:
 | 
				
			||||||
		ret = i2c_master_send(&client, params[2].u.memref.shm->kaddr,
 | 
							ret = i2c_master_send(&client, params[2].u.memref.shm->kaddr,
 | 
				
			||||||
				      params[2].u.memref.size);
 | 
									      params[2].u.memref.size);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
| 
						 | 
					@ -194,10 +195,10 @@ static void handle_rpc_func_cmd_wq(struct optee *optee,
 | 
				
			||||||
		goto bad;
 | 
							goto bad;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (arg->params[0].u.value.a) {
 | 
						switch (arg->params[0].u.value.a) {
 | 
				
			||||||
	case OPTEE_MSG_RPC_WAIT_QUEUE_SLEEP:
 | 
						case OPTEE_RPC_WAIT_QUEUE_SLEEP:
 | 
				
			||||||
		wq_sleep(&optee->wait_queue, arg->params[0].u.value.b);
 | 
							wq_sleep(&optee->wait_queue, arg->params[0].u.value.b);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_WAIT_QUEUE_WAKEUP:
 | 
						case OPTEE_RPC_WAIT_QUEUE_WAKEUP:
 | 
				
			||||||
		wq_wakeup(&optee->wait_queue, arg->params[0].u.value.b);
 | 
							wq_wakeup(&optee->wait_queue, arg->params[0].u.value.b);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
| 
						 | 
					@ -267,11 +268,11 @@ static struct tee_shm *cmd_alloc_suppl(struct tee_context *ctx, size_t sz)
 | 
				
			||||||
	struct tee_shm *shm;
 | 
						struct tee_shm *shm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	param.attr = TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT;
 | 
						param.attr = TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT;
 | 
				
			||||||
	param.u.value.a = OPTEE_MSG_RPC_SHM_TYPE_APPL;
 | 
						param.u.value.a = OPTEE_RPC_SHM_TYPE_APPL;
 | 
				
			||||||
	param.u.value.b = sz;
 | 
						param.u.value.b = sz;
 | 
				
			||||||
	param.u.value.c = 0;
 | 
						param.u.value.c = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = optee_supp_thrd_req(ctx, OPTEE_MSG_RPC_CMD_SHM_ALLOC, 1, ¶m);
 | 
						ret = optee_supp_thrd_req(ctx, OPTEE_RPC_CMD_SHM_ALLOC, 1, ¶m);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		return ERR_PTR(-ENOMEM);
 | 
							return ERR_PTR(-ENOMEM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -308,10 +309,10 @@ static void handle_rpc_func_cmd_shm_alloc(struct tee_context *ctx,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sz = arg->params[0].u.value.b;
 | 
						sz = arg->params[0].u.value.b;
 | 
				
			||||||
	switch (arg->params[0].u.value.a) {
 | 
						switch (arg->params[0].u.value.a) {
 | 
				
			||||||
	case OPTEE_MSG_RPC_SHM_TYPE_APPL:
 | 
						case OPTEE_RPC_SHM_TYPE_APPL:
 | 
				
			||||||
		shm = cmd_alloc_suppl(ctx, sz);
 | 
							shm = cmd_alloc_suppl(ctx, sz);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_SHM_TYPE_KERNEL:
 | 
						case OPTEE_RPC_SHM_TYPE_KERNEL:
 | 
				
			||||||
		shm = tee_shm_alloc(ctx, sz, TEE_SHM_MAPPED);
 | 
							shm = tee_shm_alloc(ctx, sz, TEE_SHM_MAPPED);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
| 
						 | 
					@ -383,7 +384,7 @@ static void cmd_free_suppl(struct tee_context *ctx, struct tee_shm *shm)
 | 
				
			||||||
	struct tee_param param;
 | 
						struct tee_param param;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	param.attr = TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT;
 | 
						param.attr = TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT;
 | 
				
			||||||
	param.u.value.a = OPTEE_MSG_RPC_SHM_TYPE_APPL;
 | 
						param.u.value.a = OPTEE_RPC_SHM_TYPE_APPL;
 | 
				
			||||||
	param.u.value.b = tee_shm_get_id(shm);
 | 
						param.u.value.b = tee_shm_get_id(shm);
 | 
				
			||||||
	param.u.value.c = 0;
 | 
						param.u.value.c = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -400,7 +401,7 @@ static void cmd_free_suppl(struct tee_context *ctx, struct tee_shm *shm)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	tee_shm_put(shm);
 | 
						tee_shm_put(shm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	optee_supp_thrd_req(ctx, OPTEE_MSG_RPC_CMD_SHM_FREE, 1, ¶m);
 | 
						optee_supp_thrd_req(ctx, OPTEE_RPC_CMD_SHM_FREE, 1, ¶m);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void handle_rpc_func_cmd_shm_free(struct tee_context *ctx,
 | 
					static void handle_rpc_func_cmd_shm_free(struct tee_context *ctx,
 | 
				
			||||||
| 
						 | 
					@ -418,10 +419,10 @@ static void handle_rpc_func_cmd_shm_free(struct tee_context *ctx,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	shm = (struct tee_shm *)(unsigned long)arg->params[0].u.value.b;
 | 
						shm = (struct tee_shm *)(unsigned long)arg->params[0].u.value.b;
 | 
				
			||||||
	switch (arg->params[0].u.value.a) {
 | 
						switch (arg->params[0].u.value.a) {
 | 
				
			||||||
	case OPTEE_MSG_RPC_SHM_TYPE_APPL:
 | 
						case OPTEE_RPC_SHM_TYPE_APPL:
 | 
				
			||||||
		cmd_free_suppl(ctx, shm);
 | 
							cmd_free_suppl(ctx, shm);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_SHM_TYPE_KERNEL:
 | 
						case OPTEE_RPC_SHM_TYPE_KERNEL:
 | 
				
			||||||
		tee_shm_free(shm);
 | 
							tee_shm_free(shm);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
| 
						 | 
					@ -458,23 +459,23 @@ static void handle_rpc_func_cmd(struct tee_context *ctx, struct optee *optee,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (arg->cmd) {
 | 
						switch (arg->cmd) {
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_GET_TIME:
 | 
						case OPTEE_RPC_CMD_GET_TIME:
 | 
				
			||||||
		handle_rpc_func_cmd_get_time(arg);
 | 
							handle_rpc_func_cmd_get_time(arg);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_WAIT_QUEUE:
 | 
						case OPTEE_RPC_CMD_WAIT_QUEUE:
 | 
				
			||||||
		handle_rpc_func_cmd_wq(optee, arg);
 | 
							handle_rpc_func_cmd_wq(optee, arg);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_SUSPEND:
 | 
						case OPTEE_RPC_CMD_SUSPEND:
 | 
				
			||||||
		handle_rpc_func_cmd_wait(arg);
 | 
							handle_rpc_func_cmd_wait(arg);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_SHM_ALLOC:
 | 
						case OPTEE_RPC_CMD_SHM_ALLOC:
 | 
				
			||||||
		free_pages_list(call_ctx);
 | 
							free_pages_list(call_ctx);
 | 
				
			||||||
		handle_rpc_func_cmd_shm_alloc(ctx, arg, call_ctx);
 | 
							handle_rpc_func_cmd_shm_alloc(ctx, arg, call_ctx);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_SHM_FREE:
 | 
						case OPTEE_RPC_CMD_SHM_FREE:
 | 
				
			||||||
		handle_rpc_func_cmd_shm_free(ctx, arg);
 | 
							handle_rpc_func_cmd_shm_free(ctx, arg);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case OPTEE_MSG_RPC_CMD_I2C_TRANSFER:
 | 
						case OPTEE_RPC_CMD_I2C_TRANSFER:
 | 
				
			||||||
		handle_rpc_func_cmd_i2c_transfer(ctx, arg);
 | 
							handle_rpc_func_cmd_i2c_transfer(ctx, arg);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue