mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	Adds a OP-TEE driver. * Targets ARM and ARM64 * Supports using any U-Boot memory as shared memory * Probes OP-TEE version using SMCs * Uses OPTEE message protocol version 2 to communicate with secure world Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Igor Opaniuk <igor.opaniuk@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
		
			
				
	
	
		
			241 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: BSD-2-Clause */
 | |
| /*
 | |
|  * Copyright (c) 2016-2018, Linaro Limited
 | |
|  */
 | |
| 
 | |
| #ifndef __OPTEE_MSG_SUPPLICANT_H
 | |
| #define __OPTEE_MSG_SUPPLICANT_H
 | |
| 
 | |
| /*
 | |
|  * This file is based on
 | |
|  * https://github.com/OP-TEE/optee_os/blob/master/core/include/optee_msg_supplicant.h
 | |
|  * and may need to be updated when introducing new features.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Load a TA into memory
 | |
|  */
 | |
| #define OPTEE_MSG_RPC_CMD_LOAD_TA	0
 | |
| 
 | |
| /*
 | |
|  * Replay Protected Memory Block access
 | |
|  */
 | |
| #define OPTEE_MSG_RPC_CMD_RPMB		1
 | |
| 
 | |
| /*
 | |
|  * File system access
 | |
|  */
 | |
| #define OPTEE_MSG_RPC_CMD_FS		2
 | |
| 
 | |
| /*
 | |
|  * Define protocol for messages with .cmd == OPTEE_MSG_RPC_CMD_FS and first
 | |
|  * parameter has the attribute OPTEE_MSG_ATTR_TYPE_VALUE_INPUT.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Open a file
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRF_OPEN
 | |
|  * [in]     param[1].u.tmem	a string holding the file name
 | |
|  * [out]    param[2].u.value.a	file descriptor of open file
 | |
|  */
 | |
| #define OPTEE_MRF_OPEN			0
 | |
| 
 | |
| /*
 | |
|  * Create a file
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRF_CREATE
 | |
|  * [in]     param[1].u.tmem	a string holding the file name
 | |
|  * [out]    param[2].u.value.a	file descriptor of open file
 | |
|  */
 | |
| #define OPTEE_MRF_CREATE		1
 | |
| 
 | |
| /*
 | |
|  * Close a file
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRF_CLOSE
 | |
|  * [in]     param[0].u.value.b	file descriptor of open file.
 | |
|  */
 | |
| #define OPTEE_MRF_CLOSE			2
 | |
| 
 | |
| /*
 | |
|  * Read from a file
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRF_READ
 | |
|  * [in]     param[0].u.value.b	file descriptor of open file
 | |
|  * [in]     param[0].u.value.c	offset into file
 | |
|  * [out]    param[1].u.tmem	buffer to hold returned data
 | |
|  */
 | |
| #define OPTEE_MRF_READ			3
 | |
| 
 | |
| /*
 | |
|  * Write to a file
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRF_WRITE
 | |
|  * [in]     param[0].u.value.b	file descriptor of open file
 | |
|  * [in]     param[0].u.value.c	offset into file
 | |
|  * [in]     param[1].u.tmem	buffer holding data to be written
 | |
|  */
 | |
| #define OPTEE_MRF_WRITE			4
 | |
| 
 | |
| /*
 | |
|  * Truncate a file
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRF_TRUNCATE
 | |
|  * [in]     param[0].u.value.b	file descriptor of open file
 | |
|  * [in]     param[0].u.value.c	length of file.
 | |
|  */
 | |
| #define OPTEE_MRF_TRUNCATE		5
 | |
| 
 | |
| /*
 | |
|  * Remove a file
 | |
|  *
 | |
|  * [in]  param[0].u.value.a	OPTEE_MRF_REMOVE
 | |
|  * [in]  param[1].u.tmem	a string holding the file name
 | |
|  */
 | |
| #define OPTEE_MRF_REMOVE		6
 | |
| 
 | |
| /*
 | |
|  * Rename a file
 | |
|  *
 | |
|  * [in]  param[0].u.value.a	OPTEE_MRF_RENAME
 | |
|  * [in]  param[0].u.value.b	true if existing target should be removed
 | |
|  * [in]  param[1].u.tmem	a string holding the old file name
 | |
|  * [in]  param[2].u.tmem	a string holding the new file name
 | |
|  */
 | |
| #define OPTEE_MRF_RENAME		7
 | |
| 
 | |
| /*
 | |
|  * Opens a directory for file listing
 | |
|  *
 | |
|  * [in]  param[0].u.value.a	OPTEE_MRF_OPENDIR
 | |
|  * [in]  param[1].u.tmem	a string holding the name of the directory
 | |
|  * [out] param[2].u.value.a	handle to open directory
 | |
|  */
 | |
| #define OPTEE_MRF_OPENDIR		8
 | |
| 
 | |
| /*
 | |
|  * Closes a directory handle
 | |
|  *
 | |
|  * [in]  param[0].u.value.a	OPTEE_MRF_CLOSEDIR
 | |
|  * [in]  param[0].u.value.b	handle to open directory
 | |
|  */
 | |
| #define OPTEE_MRF_CLOSEDIR		9
 | |
| 
 | |
| /*
 | |
|  * Read next file name of directory
 | |
|  *
 | |
|  *
 | |
|  * [in]  param[0].u.value.a	OPTEE_MRF_READDIR
 | |
|  * [in]  param[0].u.value.b	handle to open directory
 | |
|  * [out] param[1].u.tmem	a string holding the file name
 | |
|  */
 | |
| #define OPTEE_MRF_READDIR		10
 | |
| 
 | |
| /*
 | |
|  * End of definitions for messages with .cmd == OPTEE_MSG_RPC_CMD_FS
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Command Ids 3, 4 and 5 of OPTEE_MSG_RPC_CMD_xxx macros are reserved for use
 | |
|  * by the kernel driver.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Shared memory allocation
 | |
|  */
 | |
| #define OPTEE_MSG_RPC_CMD_SHM_ALLOC	6
 | |
| #define OPTEE_MSG_RPC_CMD_SHM_FREE	7
 | |
| 
 | |
| /*
 | |
|  * Was OPTEE_MSG_RPC_CMD_SQL_FS, which isn't supported any longer
 | |
|  */
 | |
| #define OPTEE_MSG_RPC_CMD_SQL_FS_RESERVED	8
 | |
| 
 | |
| /*
 | |
|  * GPROF support management commands
 | |
|  */
 | |
| #define OPTEE_MSG_RPC_CMD_GPROF		9
 | |
| 
 | |
| /*
 | |
|  * Socket commands
 | |
|  */
 | |
| #define OPTEE_MSG_RPC_CMD_SOCKET	10
 | |
| 
 | |
| /*
 | |
|  * Define protocol for messages with .cmd == OPTEE_MSG_RPC_CMD_SOCKET
 | |
|  */
 | |
| 
 | |
| #define OPTEE_MRC_SOCKET_TIMEOUT_NONBLOCKING	0
 | |
| #define OPTEE_MRC_SOCKET_TIMEOUT_BLOCKING	0xffffffff
 | |
| 
 | |
| /*
 | |
|  * Open socket
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_OPEN
 | |
|  * [in]     param[0].u.value.b	TA instance id
 | |
|  * [in]     param[1].u.value.a	server port number
 | |
|  * [in]     param[1].u.value.b	protocol, TEE_ISOCKET_PROTOCOLID_*
 | |
|  * [in]     param[1].u.value.c	ip version TEE_IP_VERSION_* from tee_ipsocket.h
 | |
|  * [in]     param[2].u.tmem	server address
 | |
|  * [out]    param[3].u.value.a	socket handle (32-bit)
 | |
|  */
 | |
| #define OPTEE_MRC_SOCKET_OPEN	0
 | |
| 
 | |
| /*
 | |
|  * Close socket
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_CLOSE
 | |
|  * [in]     param[0].u.value.b	TA instance id
 | |
|  * [in]     param[0].u.value.c	socket handle
 | |
|  */
 | |
| #define OPTEE_MRC_SOCKET_CLOSE	1
 | |
| 
 | |
| /*
 | |
|  * Close all sockets
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_CLOSE_ALL
 | |
|  * [in]     param[0].u.value.b	TA instance id
 | |
|  */
 | |
| #define OPTEE_MRC_SOCKET_CLOSE_ALL 2
 | |
| 
 | |
| /*
 | |
|  * Send data on socket
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_SEND
 | |
|  * [in]     param[0].u.value.b	TA instance id
 | |
|  * [in]     param[0].u.value.c	socket handle
 | |
|  * [in]     param[1].u.tmem	buffer to transmit
 | |
|  * [in]     param[2].u.value.a	timeout ms or OPTEE_MRC_SOCKET_TIMEOUT_*
 | |
|  * [out]    param[2].u.value.b	number of transmitted bytes
 | |
|  */
 | |
| #define OPTEE_MRC_SOCKET_SEND	3
 | |
| 
 | |
| /*
 | |
|  * Receive data on socket
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_RECV
 | |
|  * [in]     param[0].u.value.b	TA instance id
 | |
|  * [in]     param[0].u.value.c	socket handle
 | |
|  * [out]    param[1].u.tmem	buffer to receive
 | |
|  * [in]     param[2].u.value.a	timeout ms or OPTEE_MRC_SOCKET_TIMEOUT_*
 | |
|  */
 | |
| #define OPTEE_MRC_SOCKET_RECV	4
 | |
| 
 | |
| /*
 | |
|  * Perform IOCTL on socket
 | |
|  *
 | |
|  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_IOCTL
 | |
|  * [in]     param[0].u.value.b	TA instance id
 | |
|  * [in]     param[0].u.value.c	socket handle
 | |
|  * [in/out] param[1].u.tmem	buffer
 | |
|  * [in]     param[2].u.value.a	ioctl command
 | |
|  */
 | |
| #define OPTEE_MRC_SOCKET_IOCTL	5
 | |
| 
 | |
| /*
 | |
|  * End of definitions for messages with .cmd == OPTEE_MSG_RPC_CMD_SOCKET
 | |
|  */
 | |
| 
 | |
| #endif /* __OPTEE_MSG_SUPPLICANT_H */
 |