1967c9ccaSJens Wiklander /* 2967c9ccaSJens Wiklander * Copyright (c) 2015-2016, Linaro Limited 3967c9ccaSJens Wiklander * All rights reserved. 4967c9ccaSJens Wiklander * 5967c9ccaSJens Wiklander * Redistribution and use in source and binary forms, with or without 6967c9ccaSJens Wiklander * modification, are permitted provided that the following conditions are met: 7967c9ccaSJens Wiklander * 8967c9ccaSJens Wiklander * 1. Redistributions of source code must retain the above copyright notice, 9967c9ccaSJens Wiklander * this list of conditions and the following disclaimer. 10967c9ccaSJens Wiklander * 11967c9ccaSJens Wiklander * 2. Redistributions in binary form must reproduce the above copyright notice, 12967c9ccaSJens Wiklander * this list of conditions and the following disclaimer in the documentation 13967c9ccaSJens Wiklander * and/or other materials provided with the distribution. 14967c9ccaSJens Wiklander * 15967c9ccaSJens Wiklander * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16967c9ccaSJens Wiklander * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17967c9ccaSJens Wiklander * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18967c9ccaSJens Wiklander * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 19967c9ccaSJens Wiklander * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20967c9ccaSJens Wiklander * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21967c9ccaSJens Wiklander * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22967c9ccaSJens Wiklander * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23967c9ccaSJens Wiklander * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24967c9ccaSJens Wiklander * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25967c9ccaSJens Wiklander * POSSIBILITY OF SUCH DAMAGE. 26967c9ccaSJens Wiklander */ 27967c9ccaSJens Wiklander 28967c9ccaSJens Wiklander #ifndef __TEE_H 29967c9ccaSJens Wiklander #define __TEE_H 30967c9ccaSJens Wiklander 31967c9ccaSJens Wiklander #include <linux/ioctl.h> 32967c9ccaSJens Wiklander #include <linux/types.h> 33967c9ccaSJens Wiklander 34967c9ccaSJens Wiklander /* 35967c9ccaSJens Wiklander * This file describes the API provided by a TEE driver to user space. 36967c9ccaSJens Wiklander * 37967c9ccaSJens Wiklander * Each TEE driver defines a TEE specific protocol which is used for the 38967c9ccaSJens Wiklander * data passed back and forth using TEE_IOC_CMD. 39967c9ccaSJens Wiklander */ 40967c9ccaSJens Wiklander 41967c9ccaSJens Wiklander /* Helpers to make the ioctl defines */ 42967c9ccaSJens Wiklander #define TEE_IOC_MAGIC 0xa4 43967c9ccaSJens Wiklander #define TEE_IOC_BASE 0 44967c9ccaSJens Wiklander 45967c9ccaSJens Wiklander #define TEE_MAX_ARG_SIZE 1024 46967c9ccaSJens Wiklander 47967c9ccaSJens Wiklander #define TEE_GEN_CAP_GP (1 << 0)/* GlobalPlatform compliant TEE */ 48059cf566SJens Wiklander #define TEE_GEN_CAP_PRIVILEGED (1 << 1)/* Privileged device (for supplicant) */ 49033ddf12SJens Wiklander #define TEE_GEN_CAP_REG_MEM (1 << 2)/* Supports registering shared memory */ 50ba171d3fSCedric Neveux #define TEE_GEN_CAP_MEMREF_NULL (1 << 3)/* NULL MemRef support */ 51ba171d3fSCedric Neveux 52ba171d3fSCedric Neveux #define TEE_MEMREF_NULL (__u64)(-1) /* NULL MemRef Buffer */ 53967c9ccaSJens Wiklander 54967c9ccaSJens Wiklander /* 55967c9ccaSJens Wiklander * TEE Implementation ID 56967c9ccaSJens Wiklander */ 57967c9ccaSJens Wiklander #define TEE_IMPL_ID_OPTEE 1 58757cc3e9SRijo Thomas #define TEE_IMPL_ID_AMDTEE 2 59967c9ccaSJens Wiklander 60967c9ccaSJens Wiklander /* 61967c9ccaSJens Wiklander * OP-TEE specific capabilities 62967c9ccaSJens Wiklander */ 63967c9ccaSJens Wiklander #define TEE_OPTEE_CAP_TZ (1 << 0) 64967c9ccaSJens Wiklander 65967c9ccaSJens Wiklander /** 66967c9ccaSJens Wiklander * struct tee_ioctl_version_data - TEE version 67967c9ccaSJens Wiklander * @impl_id: [out] TEE implementation id 68967c9ccaSJens Wiklander * @impl_caps: [out] Implementation specific capabilities 69967c9ccaSJens Wiklander * @gen_caps: [out] Generic capabilities, defined by TEE_GEN_CAPS_* above 70967c9ccaSJens Wiklander * 71967c9ccaSJens Wiklander * Identifies the TEE implementation, @impl_id is one of TEE_IMPL_ID_* above. 72967c9ccaSJens Wiklander * @impl_caps is implementation specific, for example TEE_OPTEE_CAP_* 73967c9ccaSJens Wiklander * is valid when @impl_id == TEE_IMPL_ID_OPTEE. 74967c9ccaSJens Wiklander */ 75967c9ccaSJens Wiklander struct tee_ioctl_version_data { 76967c9ccaSJens Wiklander __u32 impl_id; 77967c9ccaSJens Wiklander __u32 impl_caps; 78967c9ccaSJens Wiklander __u32 gen_caps; 79967c9ccaSJens Wiklander }; 80967c9ccaSJens Wiklander 81967c9ccaSJens Wiklander /** 82967c9ccaSJens Wiklander * TEE_IOC_VERSION - query version of TEE 83967c9ccaSJens Wiklander * 84967c9ccaSJens Wiklander * Takes a tee_ioctl_version_data struct and returns with the TEE version 85967c9ccaSJens Wiklander * data filled in. 86967c9ccaSJens Wiklander */ 87967c9ccaSJens Wiklander #define TEE_IOC_VERSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 0, \ 88967c9ccaSJens Wiklander struct tee_ioctl_version_data) 89967c9ccaSJens Wiklander 90967c9ccaSJens Wiklander /** 91967c9ccaSJens Wiklander * struct tee_ioctl_shm_alloc_data - Shared memory allocate argument 92967c9ccaSJens Wiklander * @size: [in/out] Size of shared memory to allocate 93967c9ccaSJens Wiklander * @flags: [in/out] Flags to/from allocation. 94967c9ccaSJens Wiklander * @id: [out] Identifier of the shared memory 95967c9ccaSJens Wiklander * 96967c9ccaSJens Wiklander * The flags field should currently be zero as input. Updated by the call 97967c9ccaSJens Wiklander * with actual flags as defined by TEE_IOCTL_SHM_* above. 98967c9ccaSJens Wiklander * This structure is used as argument for TEE_IOC_SHM_ALLOC below. 99967c9ccaSJens Wiklander */ 100967c9ccaSJens Wiklander struct tee_ioctl_shm_alloc_data { 101967c9ccaSJens Wiklander __u64 size; 102967c9ccaSJens Wiklander __u32 flags; 103967c9ccaSJens Wiklander __s32 id; 104967c9ccaSJens Wiklander }; 105967c9ccaSJens Wiklander 106967c9ccaSJens Wiklander /** 107967c9ccaSJens Wiklander * TEE_IOC_SHM_ALLOC - allocate shared memory 108967c9ccaSJens Wiklander * 109967c9ccaSJens Wiklander * Allocates shared memory between the user space process and secure OS. 110967c9ccaSJens Wiklander * 111967c9ccaSJens Wiklander * Returns a file descriptor on success or < 0 on failure 112967c9ccaSJens Wiklander * 113967c9ccaSJens Wiklander * The returned file descriptor is used to map the shared memory into user 114967c9ccaSJens Wiklander * space. The shared memory is freed when the descriptor is closed and the 115967c9ccaSJens Wiklander * memory is unmapped. 116967c9ccaSJens Wiklander */ 117967c9ccaSJens Wiklander #define TEE_IOC_SHM_ALLOC _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 1, \ 118967c9ccaSJens Wiklander struct tee_ioctl_shm_alloc_data) 119967c9ccaSJens Wiklander 120967c9ccaSJens Wiklander /** 121967c9ccaSJens Wiklander * struct tee_ioctl_buf_data - Variable sized buffer 122967c9ccaSJens Wiklander * @buf_ptr: [in] A __user pointer to a buffer 123967c9ccaSJens Wiklander * @buf_len: [in] Length of the buffer above 124967c9ccaSJens Wiklander * 125967c9ccaSJens Wiklander * Used as argument for TEE_IOC_OPEN_SESSION, TEE_IOC_INVOKE, 126967c9ccaSJens Wiklander * TEE_IOC_SUPPL_RECV, and TEE_IOC_SUPPL_SEND below. 127967c9ccaSJens Wiklander */ 128967c9ccaSJens Wiklander struct tee_ioctl_buf_data { 129967c9ccaSJens Wiklander __u64 buf_ptr; 130967c9ccaSJens Wiklander __u64 buf_len; 131967c9ccaSJens Wiklander }; 132967c9ccaSJens Wiklander 133967c9ccaSJens Wiklander /* 134967c9ccaSJens Wiklander * Attributes for struct tee_ioctl_param, selects field in the union 135967c9ccaSJens Wiklander */ 136967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_NONE 0 /* parameter not used */ 137967c9ccaSJens Wiklander 138967c9ccaSJens Wiklander /* 139967c9ccaSJens Wiklander * These defines value parameters (struct tee_ioctl_param_value) 140967c9ccaSJens Wiklander */ 141967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT 1 142967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT 2 143967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT 3 /* input and output */ 144967c9ccaSJens Wiklander 145967c9ccaSJens Wiklander /* 146967c9ccaSJens Wiklander * These defines shared memory reference parameters (struct 147967c9ccaSJens Wiklander * tee_ioctl_param_memref) 148967c9ccaSJens Wiklander */ 149967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT 5 150967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT 6 151967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT 7 /* input and output */ 152967c9ccaSJens Wiklander 153967c9ccaSJens Wiklander /* 154967c9ccaSJens Wiklander * Mask for the type part of the attribute, leaves room for more types 155967c9ccaSJens Wiklander */ 156967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MASK 0xff 157967c9ccaSJens Wiklander 158f2aa9724SJens Wiklander /* Meta parameter carrying extra information about the message. */ 159f2aa9724SJens Wiklander #define TEE_IOCTL_PARAM_ATTR_META 0x100 160f2aa9724SJens Wiklander 161f2aa9724SJens Wiklander /* Mask of all known attr bits */ 162f2aa9724SJens Wiklander #define TEE_IOCTL_PARAM_ATTR_MASK \ 163f2aa9724SJens Wiklander (TEE_IOCTL_PARAM_ATTR_TYPE_MASK | TEE_IOCTL_PARAM_ATTR_META) 164f2aa9724SJens Wiklander 165967c9ccaSJens Wiklander /* 166967c9ccaSJens Wiklander * Matches TEEC_LOGIN_* in GP TEE Client API 167967c9ccaSJens Wiklander * Are only defined for GP compliant TEEs 168967c9ccaSJens Wiklander */ 169967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_PUBLIC 0 170967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_USER 1 171967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_GROUP 2 172967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_APPLICATION 4 173967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_USER_APPLICATION 5 174967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_GROUP_APPLICATION 6 175104edb94SSumit Garg /* 176104edb94SSumit Garg * Disallow user-space to use GP implementation specific login 177104edb94SSumit Garg * method range (0x80000000 - 0xBFFFFFFF). This range is rather 178104edb94SSumit Garg * being reserved for REE kernel clients or TEE implementation. 179104edb94SSumit Garg */ 180104edb94SSumit Garg #define TEE_IOCTL_LOGIN_REE_KERNEL_MIN 0x80000000 181104edb94SSumit Garg #define TEE_IOCTL_LOGIN_REE_KERNEL_MAX 0xBFFFFFFF 182104edb94SSumit Garg /* Private login method for REE kernel clients */ 183104edb94SSumit Garg #define TEE_IOCTL_LOGIN_REE_KERNEL 0x80000000 184967c9ccaSJens Wiklander 185967c9ccaSJens Wiklander /** 186967c9ccaSJens Wiklander * struct tee_ioctl_param - parameter 187967c9ccaSJens Wiklander * @attr: attributes 188967c9ccaSJens Wiklander * @a: if a memref, offset into the shared memory object, else a value parameter 189967c9ccaSJens Wiklander * @b: if a memref, size of the buffer, else a value parameter 190967c9ccaSJens Wiklander * @c: if a memref, shared memory identifier, else a value parameter 191967c9ccaSJens Wiklander * 192967c9ccaSJens Wiklander * @attr & TEE_PARAM_ATTR_TYPE_MASK indicates if memref or value is used in 193967c9ccaSJens Wiklander * the union. TEE_PARAM_ATTR_TYPE_VALUE_* indicates value and 194967c9ccaSJens Wiklander * TEE_PARAM_ATTR_TYPE_MEMREF_* indicates memref. TEE_PARAM_ATTR_TYPE_NONE 195967c9ccaSJens Wiklander * indicates that none of the members are used. 196967c9ccaSJens Wiklander * 197967c9ccaSJens Wiklander * Shared memory is allocated with TEE_IOC_SHM_ALLOC which returns an 198967c9ccaSJens Wiklander * identifier representing the shared memory object. A memref can reference 199967c9ccaSJens Wiklander * a part of a shared memory by specifying an offset (@a) and size (@b) of 200967c9ccaSJens Wiklander * the object. To supply the entire shared memory object set the offset 201967c9ccaSJens Wiklander * (@a) to 0 and size (@b) to the previously returned size of the object. 202ba171d3fSCedric Neveux * 203ba171d3fSCedric Neveux * A client may need to present a NULL pointer in the argument 204ba171d3fSCedric Neveux * passed to a trusted application in the TEE. 205ba171d3fSCedric Neveux * This is also a requirement in GlobalPlatform Client API v1.0c 206ba171d3fSCedric Neveux * (section 3.2.5 memory references), which can be found at 207ba171d3fSCedric Neveux * http://www.globalplatform.org/specificationsdevice.asp 208ba171d3fSCedric Neveux * 209ba171d3fSCedric Neveux * If a NULL pointer is passed to a TA in the TEE, the (@c) 210ba171d3fSCedric Neveux * IOCTL parameters value must be set to TEE_MEMREF_NULL indicating a NULL 211ba171d3fSCedric Neveux * memory reference. 212967c9ccaSJens Wiklander */ 213967c9ccaSJens Wiklander struct tee_ioctl_param { 214967c9ccaSJens Wiklander __u64 attr; 215967c9ccaSJens Wiklander __u64 a; 216967c9ccaSJens Wiklander __u64 b; 217967c9ccaSJens Wiklander __u64 c; 218967c9ccaSJens Wiklander }; 219967c9ccaSJens Wiklander 220967c9ccaSJens Wiklander #define TEE_IOCTL_UUID_LEN 16 221967c9ccaSJens Wiklander 222967c9ccaSJens Wiklander /** 223967c9ccaSJens Wiklander * struct tee_ioctl_open_session_arg - Open session argument 224967c9ccaSJens Wiklander * @uuid: [in] UUID of the Trusted Application 225967c9ccaSJens Wiklander * @clnt_uuid: [in] UUID of client 226967c9ccaSJens Wiklander * @clnt_login: [in] Login class of client, TEE_IOCTL_LOGIN_* above 227967c9ccaSJens Wiklander * @cancel_id: [in] Cancellation id, a unique value to identify this request 228967c9ccaSJens Wiklander * @session: [out] Session id 229967c9ccaSJens Wiklander * @ret: [out] return value 230967c9ccaSJens Wiklander * @ret_origin [out] origin of the return value 231967c9ccaSJens Wiklander * @num_params [in] number of parameters following this struct 232967c9ccaSJens Wiklander */ 233967c9ccaSJens Wiklander struct tee_ioctl_open_session_arg { 234967c9ccaSJens Wiklander __u8 uuid[TEE_IOCTL_UUID_LEN]; 235967c9ccaSJens Wiklander __u8 clnt_uuid[TEE_IOCTL_UUID_LEN]; 236967c9ccaSJens Wiklander __u32 clnt_login; 237967c9ccaSJens Wiklander __u32 cancel_id; 238967c9ccaSJens Wiklander __u32 session; 239967c9ccaSJens Wiklander __u32 ret; 240967c9ccaSJens Wiklander __u32 ret_origin; 241967c9ccaSJens Wiklander __u32 num_params; 242967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 243967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 244967c9ccaSJens Wiklander }; 245967c9ccaSJens Wiklander 246967c9ccaSJens Wiklander /** 247967c9ccaSJens Wiklander * TEE_IOC_OPEN_SESSION - opens a session to a Trusted Application 248967c9ccaSJens Wiklander * 249967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 250967c9ccaSJens Wiklander * tee_ioctl_open_session_arg followed by any array of struct 251967c9ccaSJens Wiklander * tee_ioctl_param 252967c9ccaSJens Wiklander */ 253967c9ccaSJens Wiklander #define TEE_IOC_OPEN_SESSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 2, \ 254967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 255967c9ccaSJens Wiklander 256967c9ccaSJens Wiklander /** 257967c9ccaSJens Wiklander * struct tee_ioctl_invoke_func_arg - Invokes a function in a Trusted 258967c9ccaSJens Wiklander * Application 259967c9ccaSJens Wiklander * @func: [in] Trusted Application function, specific to the TA 260967c9ccaSJens Wiklander * @session: [in] Session id 261967c9ccaSJens Wiklander * @cancel_id: [in] Cancellation id, a unique value to identify this request 262967c9ccaSJens Wiklander * @ret: [out] return value 263967c9ccaSJens Wiklander * @ret_origin [out] origin of the return value 264967c9ccaSJens Wiklander * @num_params [in] number of parameters following this struct 265967c9ccaSJens Wiklander */ 266967c9ccaSJens Wiklander struct tee_ioctl_invoke_arg { 267967c9ccaSJens Wiklander __u32 func; 268967c9ccaSJens Wiklander __u32 session; 269967c9ccaSJens Wiklander __u32 cancel_id; 270967c9ccaSJens Wiklander __u32 ret; 271967c9ccaSJens Wiklander __u32 ret_origin; 272967c9ccaSJens Wiklander __u32 num_params; 273967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 274967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 275967c9ccaSJens Wiklander }; 276967c9ccaSJens Wiklander 277967c9ccaSJens Wiklander /** 278967c9ccaSJens Wiklander * TEE_IOC_INVOKE - Invokes a function in a Trusted Application 279967c9ccaSJens Wiklander * 280967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 281967c9ccaSJens Wiklander * tee_invoke_func_arg followed by any array of struct tee_param 282967c9ccaSJens Wiklander */ 283967c9ccaSJens Wiklander #define TEE_IOC_INVOKE _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 3, \ 284967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 285967c9ccaSJens Wiklander 286967c9ccaSJens Wiklander /** 287967c9ccaSJens Wiklander * struct tee_ioctl_cancel_arg - Cancels an open session or invoke ioctl 288967c9ccaSJens Wiklander * @cancel_id: [in] Cancellation id, a unique value to identify this request 289967c9ccaSJens Wiklander * @session: [in] Session id, if the session is opened, else set to 0 290967c9ccaSJens Wiklander */ 291967c9ccaSJens Wiklander struct tee_ioctl_cancel_arg { 292967c9ccaSJens Wiklander __u32 cancel_id; 293967c9ccaSJens Wiklander __u32 session; 294967c9ccaSJens Wiklander }; 295967c9ccaSJens Wiklander 296967c9ccaSJens Wiklander /** 297967c9ccaSJens Wiklander * TEE_IOC_CANCEL - Cancels an open session or invoke 298967c9ccaSJens Wiklander */ 299967c9ccaSJens Wiklander #define TEE_IOC_CANCEL _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 4, \ 300967c9ccaSJens Wiklander struct tee_ioctl_cancel_arg) 301967c9ccaSJens Wiklander 302967c9ccaSJens Wiklander /** 303967c9ccaSJens Wiklander * struct tee_ioctl_close_session_arg - Closes an open session 304967c9ccaSJens Wiklander * @session: [in] Session id 305967c9ccaSJens Wiklander */ 306967c9ccaSJens Wiklander struct tee_ioctl_close_session_arg { 307967c9ccaSJens Wiklander __u32 session; 308967c9ccaSJens Wiklander }; 309967c9ccaSJens Wiklander 310967c9ccaSJens Wiklander /** 311967c9ccaSJens Wiklander * TEE_IOC_CLOSE_SESSION - Closes a session 312967c9ccaSJens Wiklander */ 313967c9ccaSJens Wiklander #define TEE_IOC_CLOSE_SESSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 5, \ 314967c9ccaSJens Wiklander struct tee_ioctl_close_session_arg) 315967c9ccaSJens Wiklander 316967c9ccaSJens Wiklander /** 317967c9ccaSJens Wiklander * struct tee_iocl_supp_recv_arg - Receive a request for a supplicant function 318967c9ccaSJens Wiklander * @func: [in] supplicant function 319967c9ccaSJens Wiklander * @num_params [in/out] number of parameters following this struct 320967c9ccaSJens Wiklander * 321967c9ccaSJens Wiklander * @num_params is the number of params that tee-supplicant has room to 322967c9ccaSJens Wiklander * receive when input, @num_params is the number of actual params 323967c9ccaSJens Wiklander * tee-supplicant receives when output. 324967c9ccaSJens Wiklander */ 325967c9ccaSJens Wiklander struct tee_iocl_supp_recv_arg { 326967c9ccaSJens Wiklander __u32 func; 327967c9ccaSJens Wiklander __u32 num_params; 328967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 329967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 330967c9ccaSJens Wiklander }; 331967c9ccaSJens Wiklander 332967c9ccaSJens Wiklander /** 333967c9ccaSJens Wiklander * TEE_IOC_SUPPL_RECV - Receive a request for a supplicant function 334967c9ccaSJens Wiklander * 335967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 336967c9ccaSJens Wiklander * tee_iocl_supp_recv_arg followed by any array of struct tee_param 337967c9ccaSJens Wiklander */ 338967c9ccaSJens Wiklander #define TEE_IOC_SUPPL_RECV _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 6, \ 339967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 340967c9ccaSJens Wiklander 341967c9ccaSJens Wiklander /** 342967c9ccaSJens Wiklander * struct tee_iocl_supp_send_arg - Send a response to a received request 343967c9ccaSJens Wiklander * @ret: [out] return value 344967c9ccaSJens Wiklander * @num_params [in] number of parameters following this struct 345967c9ccaSJens Wiklander */ 346967c9ccaSJens Wiklander struct tee_iocl_supp_send_arg { 347967c9ccaSJens Wiklander __u32 ret; 348967c9ccaSJens Wiklander __u32 num_params; 349967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 350967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 351967c9ccaSJens Wiklander }; 352967c9ccaSJens Wiklander 353967c9ccaSJens Wiklander /** 354*c7020068SElvira Khabirova * TEE_IOC_SUPPL_SEND - Send a response to a received request 355967c9ccaSJens Wiklander * 356967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 357967c9ccaSJens Wiklander * tee_iocl_supp_send_arg followed by any array of struct tee_param 358967c9ccaSJens Wiklander */ 359967c9ccaSJens Wiklander #define TEE_IOC_SUPPL_SEND _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 7, \ 360967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 361967c9ccaSJens Wiklander 362033ddf12SJens Wiklander /** 363033ddf12SJens Wiklander * struct tee_ioctl_shm_register_data - Shared memory register argument 364033ddf12SJens Wiklander * @addr: [in] Start address of shared memory to register 365033ddf12SJens Wiklander * @length: [in/out] Length of shared memory to register 366033ddf12SJens Wiklander * @flags: [in/out] Flags to/from registration. 367033ddf12SJens Wiklander * @id: [out] Identifier of the shared memory 368033ddf12SJens Wiklander * 369033ddf12SJens Wiklander * The flags field should currently be zero as input. Updated by the call 370033ddf12SJens Wiklander * with actual flags as defined by TEE_IOCTL_SHM_* above. 371033ddf12SJens Wiklander * This structure is used as argument for TEE_IOC_SHM_REGISTER below. 372033ddf12SJens Wiklander */ 373033ddf12SJens Wiklander struct tee_ioctl_shm_register_data { 374033ddf12SJens Wiklander __u64 addr; 375033ddf12SJens Wiklander __u64 length; 376033ddf12SJens Wiklander __u32 flags; 377033ddf12SJens Wiklander __s32 id; 378033ddf12SJens Wiklander }; 379033ddf12SJens Wiklander 380033ddf12SJens Wiklander /** 381033ddf12SJens Wiklander * TEE_IOC_SHM_REGISTER - Register shared memory argument 382033ddf12SJens Wiklander * 383033ddf12SJens Wiklander * Registers shared memory between the user space process and secure OS. 384033ddf12SJens Wiklander * 385033ddf12SJens Wiklander * Returns a file descriptor on success or < 0 on failure 386033ddf12SJens Wiklander * 387033ddf12SJens Wiklander * The shared memory is unregisterred when the descriptor is closed. 388033ddf12SJens Wiklander */ 389033ddf12SJens Wiklander #define TEE_IOC_SHM_REGISTER _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 9, \ 390033ddf12SJens Wiklander struct tee_ioctl_shm_register_data) 391967c9ccaSJens Wiklander /* 392967c9ccaSJens Wiklander * Five syscalls are used when communicating with the TEE driver. 393967c9ccaSJens Wiklander * open(): opens the device associated with the driver 394967c9ccaSJens Wiklander * ioctl(): as described above operating on the file descriptor from open() 395967c9ccaSJens Wiklander * close(): two cases 396967c9ccaSJens Wiklander * - closes the device file descriptor 397967c9ccaSJens Wiklander * - closes a file descriptor connected to allocated shared memory 398967c9ccaSJens Wiklander * mmap(): maps shared memory into user space using information from struct 399967c9ccaSJens Wiklander * tee_ioctl_shm_alloc_data 400967c9ccaSJens Wiklander * munmap(): unmaps previously shared memory 401967c9ccaSJens Wiklander */ 402967c9ccaSJens Wiklander 403967c9ccaSJens Wiklander #endif /*__TEE_H*/ 404