1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2016-2021, Linaro Limited 4 */ 5 6 #ifndef __OPTEE_RPC_CMD_H 7 #define __OPTEE_RPC_CMD_H 8 9 /* 10 * All RPC is done with a struct optee_msg_arg as bearer of information, 11 * struct optee_msg_arg::arg holds values defined by OPTEE_RPC_CMD_* below. 12 * Only the commands handled by the kernel driver are defined here. 13 * 14 * RPC communication with tee-supplicant is reversed compared to normal 15 * client communication described above. The supplicant receives requests 16 * and sends responses. 17 */ 18 19 /* 20 * Get time 21 * 22 * Returns number of seconds and nano seconds since the Epoch, 23 * 1970-01-01 00:00:00 +0000 (UTC). 24 * 25 * [out] value[0].a Number of seconds 26 * [out] value[0].b Number of nano seconds. 27 */ 28 #define OPTEE_RPC_CMD_GET_TIME 3 29 30 /* 31 * Notification from/to secure world. 32 * 33 * If secure world needs to wait for something, for instance a mutex, it 34 * does a notification wait request instead of spinning in secure world. 35 * Conversely can a synchronous notification can be sent when a secure 36 * world mutex with a thread waiting thread is unlocked. 37 * 38 * This interface can also be used to wait for a asynchronous notification 39 * which instead is sent via a non-secure interrupt. 40 * 41 * Waiting on notification 42 * [in] value[0].a OPTEE_RPC_NOTIFICATION_WAIT 43 * [in] value[0].b notification value 44 * 45 * Sending a synchronous notification 46 * [in] value[0].a OPTEE_RPC_NOTIFICATION_SEND 47 * [in] value[0].b notification value 48 */ 49 #define OPTEE_RPC_CMD_NOTIFICATION 4 50 #define OPTEE_RPC_NOTIFICATION_WAIT 0 51 #define OPTEE_RPC_NOTIFICATION_SEND 1 52 53 /* 54 * Suspend execution 55 * 56 * [in] value[0].a Number of milliseconds to suspend 57 */ 58 #define OPTEE_RPC_CMD_SUSPEND 5 59 60 /* 61 * Allocate a piece of shared memory 62 * 63 * [in] value[0].a Type of memory one of 64 * OPTEE_RPC_SHM_TYPE_* below 65 * [in] value[0].b Requested size 66 * [in] value[0].c Required alignment 67 * [out] memref[0] Buffer 68 */ 69 #define OPTEE_RPC_CMD_SHM_ALLOC 6 70 /* Memory that can be shared with a non-secure user space application */ 71 #define OPTEE_RPC_SHM_TYPE_APPL 0 72 /* Memory only shared with non-secure kernel */ 73 #define OPTEE_RPC_SHM_TYPE_KERNEL 1 74 75 /* 76 * Free shared memory previously allocated with OPTEE_RPC_CMD_SHM_ALLOC 77 * 78 * [in] value[0].a Type of memory one of 79 * OPTEE_RPC_SHM_TYPE_* above 80 * [in] value[0].b Value of shared memory reference or cookie 81 */ 82 #define OPTEE_RPC_CMD_SHM_FREE 7 83 84 /* 85 * Issue master requests (read and write operations) to an I2C chip. 86 * 87 * [in] value[0].a Transfer mode (OPTEE_RPC_I2C_TRANSFER_*) 88 * [in] value[0].b The I2C bus (a.k.a adapter). 89 * 16 bit field. 90 * [in] value[0].c The I2C chip (a.k.a address). 91 * 16 bit field (either 7 or 10 bit effective). 92 * [in] value[1].a The I2C master control flags (ie, 10 bit address). 93 * 16 bit field. 94 * [in/out] memref[2] Buffer used for data transfers. 95 * [out] value[3].a Number of bytes transferred by the REE. 96 */ 97 #define OPTEE_RPC_CMD_I2C_TRANSFER 21 98 99 /* I2C master transfer modes */ 100 #define OPTEE_RPC_I2C_TRANSFER_RD 0 101 #define OPTEE_RPC_I2C_TRANSFER_WR 1 102 103 /* I2C master control flags */ 104 #define OPTEE_RPC_I2C_FLAGS_TEN_BIT BIT(0) 105 106 #endif /*__OPTEE_RPC_CMD_H*/ 107