File Index
Files and directories
Sign in
FILE

optee_ffa.h

File preview with syntax highlighting.

linux-6.19.14/drivers/tee/optee/optee_ffa.h C
  1/* SPDX-License-Identifier: BSD-2-Clause */
  2/*
  3 * Copyright (c) 2019-2021, 2023 Linaro Limited
  4 */
  5
  6/*
  7 * This file is exported by OP-TEE and is kept in sync between secure world
  8 * and normal world drivers. We're using ARM FF-A 1.0 specification.
  9 */
 10
 11#ifndef __OPTEE_FFA_H
 12#define __OPTEE_FFA_H
 13
 14#include <linux/arm_ffa.h>
 15
 16/*
 17 * Normal world sends requests with FFA_MSG_SEND_DIRECT_REQ and
 18 * responses are returned with FFA_MSG_SEND_DIRECT_RESP for normal
 19 * messages.
 20 *
 21 * All requests with FFA_MSG_SEND_DIRECT_REQ and FFA_MSG_SEND_DIRECT_RESP
 22 * are using the AArch32 SMC calling convention with register usage as
 23 * defined in FF-A specification:
 24 * w0:    Function ID (0x8400006F or 0x84000070)
 25 * w1:    Source/Destination IDs
 26 * w2:    Reserved (MBZ)
 27 * w3-w7: Implementation defined, free to be used below
 28 */
 29
 30#define OPTEE_FFA_VERSION_MAJOR	1
 31#define OPTEE_FFA_VERSION_MINOR	0
 32
 33#define OPTEE_FFA_BLOCKING_CALL(id)	(id)
 34#define OPTEE_FFA_YIELDING_CALL_BIT	31
 35#define OPTEE_FFA_YIELDING_CALL(id)	((id) | BIT(OPTEE_FFA_YIELDING_CALL_BIT))
 36
 37/*
 38 * Returns the API version implemented, currently follows the FF-A version.
 39 * Call register usage:
 40 * w3:    Service ID, OPTEE_FFA_GET_API_VERSION
 41 * w4-w7: Not used (MBZ)
 42 *
 43 * Return register usage:
 44 * w3:    OPTEE_FFA_VERSION_MAJOR
 45 * w4:    OPTEE_FFA_VERSION_MINOR
 46 * w5-w7: Not used (MBZ)
 47 */
 48#define OPTEE_FFA_GET_API_VERSION	OPTEE_FFA_BLOCKING_CALL(0)
 49
 50/*
 51 * Returns the revision of OP-TEE.
 52 *
 53 * Used by non-secure world to figure out which version of the Trusted OS
 54 * is installed. Note that the returned revision is the revision of the
 55 * Trusted OS, not of the API.
 56 *
 57 * Call register usage:
 58 * w3:    Service ID, OPTEE_FFA_GET_OS_VERSION
 59 * w4-w7: Unused (MBZ)
 60 *
 61 * Return register usage:
 62 * w3:    CFG_OPTEE_REVISION_MAJOR
 63 * w4:    CFG_OPTEE_REVISION_MINOR
 64 * w5:    TEE_IMPL_GIT_SHA1 (or zero if not supported)
 65 */
 66#define OPTEE_FFA_GET_OS_VERSION	OPTEE_FFA_BLOCKING_CALL(1)
 67
 68/*
 69 * Exchange capabilities between normal world and secure world.
 70 *
 71 * Currently there are no defined capabilities. When features are added new
 72 * capabilities may be added.
 73 *
 74 * Call register usage:
 75 * w3:    Service ID, OPTEE_FFA_EXCHANGE_CAPABILITIES
 76 * w4-w7: Not used (MBZ)
 77 *
 78 * Return register usage:
 79 * w3:    Error code, 0 on success
 80 * w4:    Bit[7:0]:  Number of parameters needed for RPC to be supplied
 81 *                   as the second MSG arg struct for
 82 *                   OPTEE_FFA_YIELDING_CALL_WITH_ARG.
 83 *        Bit[31:8]: Reserved (MBZ)
 84 * w5:	  Bitfield of OP-TEE capabilities OPTEE_FFA_SEC_CAP_*
 85 * w6:	  The maximum secure world notification number
 86 * w7:	  Not used (MBZ)
 87 */
 88/*
 89 * Secure world supports giving an offset into the argument shared memory
 90 * object, see also OPTEE_FFA_YIELDING_CALL_WITH_ARG
 91 */
 92#define OPTEE_FFA_SEC_CAP_ARG_OFFSET	BIT(0)
 93/* OP-TEE supports asynchronous notification via FF-A */
 94#define OPTEE_FFA_SEC_CAP_ASYNC_NOTIF	BIT(1)
 95/* OP-TEE supports probing for RPMB device if needed */
 96#define OPTEE_FFA_SEC_CAP_RPMB_PROBE	BIT(2)
 97/* OP-TEE supports Protected Memory for secure data path */
 98#define OPTEE_FFA_SEC_CAP_PROTMEM	BIT(3)
 99
100#define OPTEE_FFA_EXCHANGE_CAPABILITIES OPTEE_FFA_BLOCKING_CALL(2)
101
102/*
103 * Unregister shared memory
104 *
105 * Call register usage:
106 * w3:    Service ID, OPTEE_FFA_YIELDING_CALL_UNREGISTER_SHM
107 * w4:    Shared memory handle, lower bits
108 * w5:    Shared memory handle, higher bits
109 * w6-w7: Not used (MBZ)
110 *
111 * Return register usage:
112 * w3:    Error code, 0 on success
113 * w4-w7: Not used (MBZ)
114 */
115#define OPTEE_FFA_UNREGISTER_SHM	OPTEE_FFA_BLOCKING_CALL(3)
116
117/*
118 * Inform OP-TEE that the normal world is able to receive asynchronous
119 * notifications.
120 *
121 * Call register usage:
122 * w3:    Service ID, OPTEE_FFA_ENABLE_ASYNC_NOTIF
123 * w4:	  Notification value to request bottom half processing, should be
124 *	  less than OPTEE_FFA_MAX_ASYNC_NOTIF_VALUE
125 * w5-w7: Not used (MBZ)
126 *
127 * Return register usage:
128 * w3:    Error code, 0 on success
129 * w4-w7: Not used (MBZ)
130 */
131#define OPTEE_FFA_ENABLE_ASYNC_NOTIF	OPTEE_FFA_BLOCKING_CALL(5)
132
133#define OPTEE_FFA_MAX_ASYNC_NOTIF_VALUE	64
134
135/*
136 * Release Protected memory
137 *
138 * Call register usage:
139 * w3:    Service ID, OPTEE_FFA_RECLAIM_PROTMEM
140 * w4:    Shared memory handle, lower bits
141 * w5:    Shared memory handle, higher bits
142 * w6-w7: Not used (MBZ)
143 *
144 * Return register usage:
145 * w3:    Error code, 0 on success
146 * w4-w7: Note used (MBZ)
147 */
148#define OPTEE_FFA_RELEASE_PROTMEM	OPTEE_FFA_BLOCKING_CALL(8)
149
150/*
151 * Call with struct optee_msg_arg as argument in the supplied shared memory
152 * with a zero internal offset and normal cached memory attributes.
153 * Register usage:
154 * w3:    Service ID, OPTEE_FFA_YIELDING_CALL_WITH_ARG
155 * w4:    Lower 32 bits of a 64-bit Shared memory handle
156 * w5:    Upper 32 bits of a 64-bit Shared memory handle
157 * w6:    Offset into shared memory pointing to a struct optee_msg_arg
158 *	  right after the parameters of this struct (at offset
159 *	  OPTEE_MSG_GET_ARG_SIZE(num_params) follows a struct optee_msg_arg
160 *	  for RPC, this struct has reserved space for the number of RPC
161 *	  parameters as returned by OPTEE_FFA_EXCHANGE_CAPABILITIES.
162 *	  MBZ unless the bit OPTEE_FFA_SEC_CAP_ARG_OFFSET is received with
163 *	  OPTEE_FFA_EXCHANGE_CAPABILITIES.
164 * w7:    Not used (MBZ)
165 * Resume from RPC. Register usage:
166 * w3:    Service ID, OPTEE_FFA_YIELDING_CALL_RESUME
167 * w4-w6: Not used (MBZ)
168 * w7:    Resume info
169 *
170 * Normal return (yielding call is completed). Register usage:
171 * w3:    Error code, 0 on success
172 * w4:    OPTEE_FFA_YIELDING_CALL_RETURN_DONE
173 * w5-w7: Not used (MBZ)
174 *
175 * RPC interrupt return (RPC from secure world). Register usage:
176 * w3:    Error code == 0
177 * w4:    Any defined RPC code but OPTEE_FFA_YIELDING_CALL_RETURN_DONE
178 * w5-w6: Not used (MBZ)
179 * w7:    Resume info
180 *
181 * Possible error codes in register w3:
182 * 0:                       Success
183 * FFA_DENIED:              w4 isn't one of OPTEE_FFA_YIELDING_CALL_START
184 *                          OPTEE_FFA_YIELDING_CALL_RESUME
185 *
186 * Possible error codes for OPTEE_FFA_YIELDING_CALL_START,
187 * FFA_BUSY:               Number of OP-TEE OS threads exceeded,
188 *                         try again later
189 * FFA_DENIED:             RPC shared memory object not found
190 * FFA_INVALID_PARAMETER:  Bad shared memory handle or offset into the memory
191 *
192 * Possible error codes for OPTEE_FFA_YIELDING_CALL_RESUME
193 * FFA_INVALID_PARAMETER:  Bad resume info
194 */
195#define OPTEE_FFA_YIELDING_CALL_WITH_ARG	OPTEE_FFA_YIELDING_CALL(0)
196#define OPTEE_FFA_YIELDING_CALL_RESUME		OPTEE_FFA_YIELDING_CALL(1)
197
198#define OPTEE_FFA_YIELDING_CALL_RETURN_DONE		0
199#define OPTEE_FFA_YIELDING_CALL_RETURN_RPC_CMD		1
200#define OPTEE_FFA_YIELDING_CALL_RETURN_INTERRUPT	2
201
202#endif /*__OPTEE_FFA_H*/
~/ Read-only file preview.