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 59*c835e5a3SBalint Dobszay #define TEE_IMPL_ID_TSTEE 3 60967c9ccaSJens Wiklander 61967c9ccaSJens Wiklander /* 62967c9ccaSJens Wiklander * OP-TEE specific capabilities 63967c9ccaSJens Wiklander */ 64967c9ccaSJens Wiklander #define TEE_OPTEE_CAP_TZ (1 << 0) 65967c9ccaSJens Wiklander 66967c9ccaSJens Wiklander /** 67967c9ccaSJens Wiklander * struct tee_ioctl_version_data - TEE version 68967c9ccaSJens Wiklander * @impl_id: [out] TEE implementation id 69967c9ccaSJens Wiklander * @impl_caps: [out] Implementation specific capabilities 70967c9ccaSJens Wiklander * @gen_caps: [out] Generic capabilities, defined by TEE_GEN_CAPS_* above 71967c9ccaSJens Wiklander * 72967c9ccaSJens Wiklander * Identifies the TEE implementation, @impl_id is one of TEE_IMPL_ID_* above. 73967c9ccaSJens Wiklander * @impl_caps is implementation specific, for example TEE_OPTEE_CAP_* 74967c9ccaSJens Wiklander * is valid when @impl_id == TEE_IMPL_ID_OPTEE. 75967c9ccaSJens Wiklander */ 76967c9ccaSJens Wiklander struct tee_ioctl_version_data { 77967c9ccaSJens Wiklander __u32 impl_id; 78967c9ccaSJens Wiklander __u32 impl_caps; 79967c9ccaSJens Wiklander __u32 gen_caps; 80967c9ccaSJens Wiklander }; 81967c9ccaSJens Wiklander 82967c9ccaSJens Wiklander /** 83967c9ccaSJens Wiklander * TEE_IOC_VERSION - query version of TEE 84967c9ccaSJens Wiklander * 85967c9ccaSJens Wiklander * Takes a tee_ioctl_version_data struct and returns with the TEE version 86967c9ccaSJens Wiklander * data filled in. 87967c9ccaSJens Wiklander */ 88967c9ccaSJens Wiklander #define TEE_IOC_VERSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 0, \ 89967c9ccaSJens Wiklander struct tee_ioctl_version_data) 90967c9ccaSJens Wiklander 91967c9ccaSJens Wiklander /** 92967c9ccaSJens Wiklander * struct tee_ioctl_shm_alloc_data - Shared memory allocate argument 93967c9ccaSJens Wiklander * @size: [in/out] Size of shared memory to allocate 94967c9ccaSJens Wiklander * @flags: [in/out] Flags to/from allocation. 95967c9ccaSJens Wiklander * @id: [out] Identifier of the shared memory 96967c9ccaSJens Wiklander * 97967c9ccaSJens Wiklander * The flags field should currently be zero as input. Updated by the call 98967c9ccaSJens Wiklander * with actual flags as defined by TEE_IOCTL_SHM_* above. 99967c9ccaSJens Wiklander * This structure is used as argument for TEE_IOC_SHM_ALLOC below. 100967c9ccaSJens Wiklander */ 101967c9ccaSJens Wiklander struct tee_ioctl_shm_alloc_data { 102967c9ccaSJens Wiklander __u64 size; 103967c9ccaSJens Wiklander __u32 flags; 104967c9ccaSJens Wiklander __s32 id; 105967c9ccaSJens Wiklander }; 106967c9ccaSJens Wiklander 107967c9ccaSJens Wiklander /** 108967c9ccaSJens Wiklander * TEE_IOC_SHM_ALLOC - allocate shared memory 109967c9ccaSJens Wiklander * 110967c9ccaSJens Wiklander * Allocates shared memory between the user space process and secure OS. 111967c9ccaSJens Wiklander * 112967c9ccaSJens Wiklander * Returns a file descriptor on success or < 0 on failure 113967c9ccaSJens Wiklander * 114967c9ccaSJens Wiklander * The returned file descriptor is used to map the shared memory into user 115967c9ccaSJens Wiklander * space. The shared memory is freed when the descriptor is closed and the 116967c9ccaSJens Wiklander * memory is unmapped. 117967c9ccaSJens Wiklander */ 118967c9ccaSJens Wiklander #define TEE_IOC_SHM_ALLOC _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 1, \ 119967c9ccaSJens Wiklander struct tee_ioctl_shm_alloc_data) 120967c9ccaSJens Wiklander 121967c9ccaSJens Wiklander /** 122967c9ccaSJens Wiklander * struct tee_ioctl_buf_data - Variable sized buffer 123967c9ccaSJens Wiklander * @buf_ptr: [in] A __user pointer to a buffer 124967c9ccaSJens Wiklander * @buf_len: [in] Length of the buffer above 125967c9ccaSJens Wiklander * 126967c9ccaSJens Wiklander * Used as argument for TEE_IOC_OPEN_SESSION, TEE_IOC_INVOKE, 127967c9ccaSJens Wiklander * TEE_IOC_SUPPL_RECV, and TEE_IOC_SUPPL_SEND below. 128967c9ccaSJens Wiklander */ 129967c9ccaSJens Wiklander struct tee_ioctl_buf_data { 130967c9ccaSJens Wiklander __u64 buf_ptr; 131967c9ccaSJens Wiklander __u64 buf_len; 132967c9ccaSJens Wiklander }; 133967c9ccaSJens Wiklander 134967c9ccaSJens Wiklander /* 135967c9ccaSJens Wiklander * Attributes for struct tee_ioctl_param, selects field in the union 136967c9ccaSJens Wiklander */ 137967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_NONE 0 /* parameter not used */ 138967c9ccaSJens Wiklander 139967c9ccaSJens Wiklander /* 140967c9ccaSJens Wiklander * These defines value parameters (struct tee_ioctl_param_value) 141967c9ccaSJens Wiklander */ 142967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INPUT 1 143967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_OUTPUT 2 144967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_VALUE_INOUT 3 /* input and output */ 145967c9ccaSJens Wiklander 146967c9ccaSJens Wiklander /* 147967c9ccaSJens Wiklander * These defines shared memory reference parameters (struct 148967c9ccaSJens Wiklander * tee_ioctl_param_memref) 149967c9ccaSJens Wiklander */ 150967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT 5 151967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT 6 152967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INOUT 7 /* input and output */ 153967c9ccaSJens Wiklander 154967c9ccaSJens Wiklander /* 155967c9ccaSJens Wiklander * Mask for the type part of the attribute, leaves room for more types 156967c9ccaSJens Wiklander */ 157967c9ccaSJens Wiklander #define TEE_IOCTL_PARAM_ATTR_TYPE_MASK 0xff 158967c9ccaSJens Wiklander 159f2aa9724SJens Wiklander /* Meta parameter carrying extra information about the message. */ 160f2aa9724SJens Wiklander #define TEE_IOCTL_PARAM_ATTR_META 0x100 161f2aa9724SJens Wiklander 162f2aa9724SJens Wiklander /* Mask of all known attr bits */ 163f2aa9724SJens Wiklander #define TEE_IOCTL_PARAM_ATTR_MASK \ 164f2aa9724SJens Wiklander (TEE_IOCTL_PARAM_ATTR_TYPE_MASK | TEE_IOCTL_PARAM_ATTR_META) 165f2aa9724SJens Wiklander 166967c9ccaSJens Wiklander /* 167967c9ccaSJens Wiklander * Matches TEEC_LOGIN_* in GP TEE Client API 168967c9ccaSJens Wiklander * Are only defined for GP compliant TEEs 169967c9ccaSJens Wiklander */ 170967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_PUBLIC 0 171967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_USER 1 172967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_GROUP 2 173967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_APPLICATION 4 174967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_USER_APPLICATION 5 175967c9ccaSJens Wiklander #define TEE_IOCTL_LOGIN_GROUP_APPLICATION 6 176104edb94SSumit Garg /* 177104edb94SSumit Garg * Disallow user-space to use GP implementation specific login 178104edb94SSumit Garg * method range (0x80000000 - 0xBFFFFFFF). This range is rather 179104edb94SSumit Garg * being reserved for REE kernel clients or TEE implementation. 180104edb94SSumit Garg */ 181104edb94SSumit Garg #define TEE_IOCTL_LOGIN_REE_KERNEL_MIN 0x80000000 182104edb94SSumit Garg #define TEE_IOCTL_LOGIN_REE_KERNEL_MAX 0xBFFFFFFF 183104edb94SSumit Garg /* Private login method for REE kernel clients */ 184104edb94SSumit Garg #define TEE_IOCTL_LOGIN_REE_KERNEL 0x80000000 185967c9ccaSJens Wiklander 186967c9ccaSJens Wiklander /** 187967c9ccaSJens Wiklander * struct tee_ioctl_param - parameter 188967c9ccaSJens Wiklander * @attr: attributes 189967c9ccaSJens Wiklander * @a: if a memref, offset into the shared memory object, else a value parameter 190967c9ccaSJens Wiklander * @b: if a memref, size of the buffer, else a value parameter 191967c9ccaSJens Wiklander * @c: if a memref, shared memory identifier, else a value parameter 192967c9ccaSJens Wiklander * 193967c9ccaSJens Wiklander * @attr & TEE_PARAM_ATTR_TYPE_MASK indicates if memref or value is used in 194967c9ccaSJens Wiklander * the union. TEE_PARAM_ATTR_TYPE_VALUE_* indicates value and 195967c9ccaSJens Wiklander * TEE_PARAM_ATTR_TYPE_MEMREF_* indicates memref. TEE_PARAM_ATTR_TYPE_NONE 196967c9ccaSJens Wiklander * indicates that none of the members are used. 197967c9ccaSJens Wiklander * 198967c9ccaSJens Wiklander * Shared memory is allocated with TEE_IOC_SHM_ALLOC which returns an 199967c9ccaSJens Wiklander * identifier representing the shared memory object. A memref can reference 200967c9ccaSJens Wiklander * a part of a shared memory by specifying an offset (@a) and size (@b) of 201967c9ccaSJens Wiklander * the object. To supply the entire shared memory object set the offset 202967c9ccaSJens Wiklander * (@a) to 0 and size (@b) to the previously returned size of the object. 203ba171d3fSCedric Neveux * 204ba171d3fSCedric Neveux * A client may need to present a NULL pointer in the argument 205ba171d3fSCedric Neveux * passed to a trusted application in the TEE. 206ba171d3fSCedric Neveux * This is also a requirement in GlobalPlatform Client API v1.0c 207ba171d3fSCedric Neveux * (section 3.2.5 memory references), which can be found at 208ba171d3fSCedric Neveux * http://www.globalplatform.org/specificationsdevice.asp 209ba171d3fSCedric Neveux * 210ba171d3fSCedric Neveux * If a NULL pointer is passed to a TA in the TEE, the (@c) 211ba171d3fSCedric Neveux * IOCTL parameters value must be set to TEE_MEMREF_NULL indicating a NULL 212ba171d3fSCedric Neveux * memory reference. 213967c9ccaSJens Wiklander */ 214967c9ccaSJens Wiklander struct tee_ioctl_param { 215967c9ccaSJens Wiklander __u64 attr; 216967c9ccaSJens Wiklander __u64 a; 217967c9ccaSJens Wiklander __u64 b; 218967c9ccaSJens Wiklander __u64 c; 219967c9ccaSJens Wiklander }; 220967c9ccaSJens Wiklander 221967c9ccaSJens Wiklander #define TEE_IOCTL_UUID_LEN 16 222967c9ccaSJens Wiklander 223967c9ccaSJens Wiklander /** 224967c9ccaSJens Wiklander * struct tee_ioctl_open_session_arg - Open session argument 225967c9ccaSJens Wiklander * @uuid: [in] UUID of the Trusted Application 226967c9ccaSJens Wiklander * @clnt_uuid: [in] UUID of client 227967c9ccaSJens Wiklander * @clnt_login: [in] Login class of client, TEE_IOCTL_LOGIN_* above 228967c9ccaSJens Wiklander * @cancel_id: [in] Cancellation id, a unique value to identify this request 229967c9ccaSJens Wiklander * @session: [out] Session id 230967c9ccaSJens Wiklander * @ret: [out] return value 231967c9ccaSJens Wiklander * @ret_origin [out] origin of the return value 232967c9ccaSJens Wiklander * @num_params [in] number of parameters following this struct 233967c9ccaSJens Wiklander */ 234967c9ccaSJens Wiklander struct tee_ioctl_open_session_arg { 235967c9ccaSJens Wiklander __u8 uuid[TEE_IOCTL_UUID_LEN]; 236967c9ccaSJens Wiklander __u8 clnt_uuid[TEE_IOCTL_UUID_LEN]; 237967c9ccaSJens Wiklander __u32 clnt_login; 238967c9ccaSJens Wiklander __u32 cancel_id; 239967c9ccaSJens Wiklander __u32 session; 240967c9ccaSJens Wiklander __u32 ret; 241967c9ccaSJens Wiklander __u32 ret_origin; 242967c9ccaSJens Wiklander __u32 num_params; 243967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 244967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 245967c9ccaSJens Wiklander }; 246967c9ccaSJens Wiklander 247967c9ccaSJens Wiklander /** 248967c9ccaSJens Wiklander * TEE_IOC_OPEN_SESSION - opens a session to a Trusted Application 249967c9ccaSJens Wiklander * 250967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 251967c9ccaSJens Wiklander * tee_ioctl_open_session_arg followed by any array of struct 252967c9ccaSJens Wiklander * tee_ioctl_param 253967c9ccaSJens Wiklander */ 254967c9ccaSJens Wiklander #define TEE_IOC_OPEN_SESSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 2, \ 255967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 256967c9ccaSJens Wiklander 257967c9ccaSJens Wiklander /** 258967c9ccaSJens Wiklander * struct tee_ioctl_invoke_func_arg - Invokes a function in a Trusted 259967c9ccaSJens Wiklander * Application 260967c9ccaSJens Wiklander * @func: [in] Trusted Application function, specific to the TA 261967c9ccaSJens Wiklander * @session: [in] Session id 262967c9ccaSJens Wiklander * @cancel_id: [in] Cancellation id, a unique value to identify this request 263967c9ccaSJens Wiklander * @ret: [out] return value 264967c9ccaSJens Wiklander * @ret_origin [out] origin of the return value 265967c9ccaSJens Wiklander * @num_params [in] number of parameters following this struct 266967c9ccaSJens Wiklander */ 267967c9ccaSJens Wiklander struct tee_ioctl_invoke_arg { 268967c9ccaSJens Wiklander __u32 func; 269967c9ccaSJens Wiklander __u32 session; 270967c9ccaSJens Wiklander __u32 cancel_id; 271967c9ccaSJens Wiklander __u32 ret; 272967c9ccaSJens Wiklander __u32 ret_origin; 273967c9ccaSJens Wiklander __u32 num_params; 274967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 275967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 276967c9ccaSJens Wiklander }; 277967c9ccaSJens Wiklander 278967c9ccaSJens Wiklander /** 279967c9ccaSJens Wiklander * TEE_IOC_INVOKE - Invokes a function in a Trusted Application 280967c9ccaSJens Wiklander * 281967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 282967c9ccaSJens Wiklander * tee_invoke_func_arg followed by any array of struct tee_param 283967c9ccaSJens Wiklander */ 284967c9ccaSJens Wiklander #define TEE_IOC_INVOKE _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 3, \ 285967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 286967c9ccaSJens Wiklander 287967c9ccaSJens Wiklander /** 288967c9ccaSJens Wiklander * struct tee_ioctl_cancel_arg - Cancels an open session or invoke ioctl 289967c9ccaSJens Wiklander * @cancel_id: [in] Cancellation id, a unique value to identify this request 290967c9ccaSJens Wiklander * @session: [in] Session id, if the session is opened, else set to 0 291967c9ccaSJens Wiklander */ 292967c9ccaSJens Wiklander struct tee_ioctl_cancel_arg { 293967c9ccaSJens Wiklander __u32 cancel_id; 294967c9ccaSJens Wiklander __u32 session; 295967c9ccaSJens Wiklander }; 296967c9ccaSJens Wiklander 297967c9ccaSJens Wiklander /** 298967c9ccaSJens Wiklander * TEE_IOC_CANCEL - Cancels an open session or invoke 299967c9ccaSJens Wiklander */ 300967c9ccaSJens Wiklander #define TEE_IOC_CANCEL _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 4, \ 301967c9ccaSJens Wiklander struct tee_ioctl_cancel_arg) 302967c9ccaSJens Wiklander 303967c9ccaSJens Wiklander /** 304967c9ccaSJens Wiklander * struct tee_ioctl_close_session_arg - Closes an open session 305967c9ccaSJens Wiklander * @session: [in] Session id 306967c9ccaSJens Wiklander */ 307967c9ccaSJens Wiklander struct tee_ioctl_close_session_arg { 308967c9ccaSJens Wiklander __u32 session; 309967c9ccaSJens Wiklander }; 310967c9ccaSJens Wiklander 311967c9ccaSJens Wiklander /** 312967c9ccaSJens Wiklander * TEE_IOC_CLOSE_SESSION - Closes a session 313967c9ccaSJens Wiklander */ 314967c9ccaSJens Wiklander #define TEE_IOC_CLOSE_SESSION _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 5, \ 315967c9ccaSJens Wiklander struct tee_ioctl_close_session_arg) 316967c9ccaSJens Wiklander 317967c9ccaSJens Wiklander /** 318967c9ccaSJens Wiklander * struct tee_iocl_supp_recv_arg - Receive a request for a supplicant function 319967c9ccaSJens Wiklander * @func: [in] supplicant function 320967c9ccaSJens Wiklander * @num_params [in/out] number of parameters following this struct 321967c9ccaSJens Wiklander * 322967c9ccaSJens Wiklander * @num_params is the number of params that tee-supplicant has room to 323967c9ccaSJens Wiklander * receive when input, @num_params is the number of actual params 324967c9ccaSJens Wiklander * tee-supplicant receives when output. 325967c9ccaSJens Wiklander */ 326967c9ccaSJens Wiklander struct tee_iocl_supp_recv_arg { 327967c9ccaSJens Wiklander __u32 func; 328967c9ccaSJens Wiklander __u32 num_params; 329967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 330967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 331967c9ccaSJens Wiklander }; 332967c9ccaSJens Wiklander 333967c9ccaSJens Wiklander /** 334967c9ccaSJens Wiklander * TEE_IOC_SUPPL_RECV - Receive a request for a supplicant function 335967c9ccaSJens Wiklander * 336967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 337967c9ccaSJens Wiklander * tee_iocl_supp_recv_arg followed by any array of struct tee_param 338967c9ccaSJens Wiklander */ 339967c9ccaSJens Wiklander #define TEE_IOC_SUPPL_RECV _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 6, \ 340967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 341967c9ccaSJens Wiklander 342967c9ccaSJens Wiklander /** 343967c9ccaSJens Wiklander * struct tee_iocl_supp_send_arg - Send a response to a received request 344967c9ccaSJens Wiklander * @ret: [out] return value 345967c9ccaSJens Wiklander * @num_params [in] number of parameters following this struct 346967c9ccaSJens Wiklander */ 347967c9ccaSJens Wiklander struct tee_iocl_supp_send_arg { 348967c9ccaSJens Wiklander __u32 ret; 349967c9ccaSJens Wiklander __u32 num_params; 350967c9ccaSJens Wiklander /* num_params tells the actual number of element in params */ 351967c9ccaSJens Wiklander struct tee_ioctl_param params[]; 352967c9ccaSJens Wiklander }; 353967c9ccaSJens Wiklander 354967c9ccaSJens Wiklander /** 355c7020068SElvira Khabirova * TEE_IOC_SUPPL_SEND - Send a response to a received request 356967c9ccaSJens Wiklander * 357967c9ccaSJens Wiklander * Takes a struct tee_ioctl_buf_data which contains a struct 358967c9ccaSJens Wiklander * tee_iocl_supp_send_arg followed by any array of struct tee_param 359967c9ccaSJens Wiklander */ 360967c9ccaSJens Wiklander #define TEE_IOC_SUPPL_SEND _IOR(TEE_IOC_MAGIC, TEE_IOC_BASE + 7, \ 361967c9ccaSJens Wiklander struct tee_ioctl_buf_data) 362967c9ccaSJens Wiklander 363033ddf12SJens Wiklander /** 364033ddf12SJens Wiklander * struct tee_ioctl_shm_register_data - Shared memory register argument 365033ddf12SJens Wiklander * @addr: [in] Start address of shared memory to register 366033ddf12SJens Wiklander * @length: [in/out] Length of shared memory to register 367033ddf12SJens Wiklander * @flags: [in/out] Flags to/from registration. 368033ddf12SJens Wiklander * @id: [out] Identifier of the shared memory 369033ddf12SJens Wiklander * 370033ddf12SJens Wiklander * The flags field should currently be zero as input. Updated by the call 371033ddf12SJens Wiklander * with actual flags as defined by TEE_IOCTL_SHM_* above. 372033ddf12SJens Wiklander * This structure is used as argument for TEE_IOC_SHM_REGISTER below. 373033ddf12SJens Wiklander */ 374033ddf12SJens Wiklander struct tee_ioctl_shm_register_data { 375033ddf12SJens Wiklander __u64 addr; 376033ddf12SJens Wiklander __u64 length; 377033ddf12SJens Wiklander __u32 flags; 378033ddf12SJens Wiklander __s32 id; 379033ddf12SJens Wiklander }; 380033ddf12SJens Wiklander 381033ddf12SJens Wiklander /** 382033ddf12SJens Wiklander * TEE_IOC_SHM_REGISTER - Register shared memory argument 383033ddf12SJens Wiklander * 384033ddf12SJens Wiklander * Registers shared memory between the user space process and secure OS. 385033ddf12SJens Wiklander * 386033ddf12SJens Wiklander * Returns a file descriptor on success or < 0 on failure 387033ddf12SJens Wiklander * 388033ddf12SJens Wiklander * The shared memory is unregisterred when the descriptor is closed. 389033ddf12SJens Wiklander */ 390033ddf12SJens Wiklander #define TEE_IOC_SHM_REGISTER _IOWR(TEE_IOC_MAGIC, TEE_IOC_BASE + 9, \ 391033ddf12SJens Wiklander struct tee_ioctl_shm_register_data) 392967c9ccaSJens Wiklander /* 393967c9ccaSJens Wiklander * Five syscalls are used when communicating with the TEE driver. 394967c9ccaSJens Wiklander * open(): opens the device associated with the driver 395967c9ccaSJens Wiklander * ioctl(): as described above operating on the file descriptor from open() 396967c9ccaSJens Wiklander * close(): two cases 397967c9ccaSJens Wiklander * - closes the device file descriptor 398967c9ccaSJens Wiklander * - closes a file descriptor connected to allocated shared memory 399967c9ccaSJens Wiklander * mmap(): maps shared memory into user space using information from struct 400967c9ccaSJens Wiklander * tee_ioctl_shm_alloc_data 401967c9ccaSJens Wiklander * munmap(): unmaps previously shared memory 402967c9ccaSJens Wiklander */ 403967c9ccaSJens Wiklander 404967c9ccaSJens Wiklander #endif /*__TEE_H*/ 405