| /* SPDX-License-Identifier: BSD-2-Clause */ | |
| /* | |
| * Copyright (c) 2016-2021, Linaro Limited | |
| */ | |
| #ifndef __OPTEE_RPC_CMD_H | |
| #define __OPTEE_RPC_CMD_H | |
| /* | |
| * All RPC is done with a struct optee_msg_arg as bearer of information, | |
| * struct optee_msg_arg::arg holds values defined by OPTEE_RPC_CMD_* below. | |
| * Only the commands handled by the kernel driver are defined here. | |
| * | |
| * RPC communication with tee-supplicant is reversed compared to normal | |
| * client communication described above. The supplicant receives requests | |
| * and sends responses. | |
| */ | |
| /* | |
| * Get time | |
| * | |
| * Returns number of seconds and nano seconds since the Epoch, | |
| * 1970-01-01 00:00:00 +0000 (UTC). | |
| * | |
| * [out] value[0].a Number of seconds | |
| * [out] value[0].b Number of nano seconds. | |
| */ | |
| #define OPTEE_RPC_CMD_GET_TIME 3 | |
| /* | |
| * Notification from/to secure world. | |
| * | |
| * If secure world needs to wait for something, for instance a mutex, it | |
| * does a notification wait request instead of spinning in secure world. | |
| * Conversely can a synchronous notification can be sent when a secure | |
| * world mutex with a thread waiting thread is unlocked. | |
| * | |
| * This interface can also be used to wait for a asynchronous notification | |
| * which instead is sent via a non-secure interrupt. | |
| * | |
| * Waiting on notification | |
| * [in] value[0].a OPTEE_RPC_NOTIFICATION_WAIT | |
| * [in] value[0].b notification value | |
| * [in] value[0].c timeout in milliseconds or 0 if no timeout | |
| * | |
| * Sending a synchronous notification | |
| * [in] value[0].a OPTEE_RPC_NOTIFICATION_SEND | |
| * [in] value[0].b notification value | |
| */ | |
| #define OPTEE_RPC_CMD_NOTIFICATION 4 | |
| #define OPTEE_RPC_NOTIFICATION_WAIT 0 | |
| #define OPTEE_RPC_NOTIFICATION_SEND 1 | |
| /* | |
| * Suspend execution | |
| * | |
| * [in] value[0].a Number of milliseconds to suspend | |
| */ | |
| #define OPTEE_RPC_CMD_SUSPEND 5 | |
| /* | |
| * Allocate a piece of shared memory | |
| * | |
| * [in] value[0].a Type of memory one of | |
| * OPTEE_RPC_SHM_TYPE_* below | |
| * [in] value[0].b Requested size | |
| * [in] value[0].c Required alignment | |
| * [out] memref[0] Buffer | |
| */ | |
| #define OPTEE_RPC_CMD_SHM_ALLOC 6 | |
| /* Memory that can be shared with a non-secure user space application */ | |
| #define OPTEE_RPC_SHM_TYPE_APPL 0 | |
| /* Memory only shared with non-secure kernel */ | |
| #define OPTEE_RPC_SHM_TYPE_KERNEL 1 | |
| /* | |
| * Free shared memory previously allocated with OPTEE_RPC_CMD_SHM_ALLOC | |
| * | |
| * [in] value[0].a Type of memory one of | |
| * OPTEE_RPC_SHM_TYPE_* above | |
| * [in] value[0].b Value of shared memory reference or cookie | |
| */ | |
| #define OPTEE_RPC_CMD_SHM_FREE 7 | |
| /* | |
| * Issue master requests (read and write operations) to an I2C chip. | |
| * | |
| * [in] value[0].a Transfer mode (OPTEE_RPC_I2C_TRANSFER_*) | |
| * [in] value[0].b The I2C bus (a.k.a adapter). | |
| * 16 bit field. | |
| * [in] value[0].c The I2C chip (a.k.a address). | |
| * 16 bit field (either 7 or 10 bit effective). | |
| * [in] value[1].a The I2C master control flags (ie, 10 bit address). | |
| * 16 bit field. | |
| * [in/out] memref[2] Buffer used for data transfers. | |
| * [out] value[3].a Number of bytes transferred by the REE. | |
| */ | |
| #define OPTEE_RPC_CMD_I2C_TRANSFER 21 | |
| /* I2C master transfer modes */ | |
| #define OPTEE_RPC_I2C_TRANSFER_RD 0 | |
| #define OPTEE_RPC_I2C_TRANSFER_WR 1 | |
| /* I2C master control flags */ | |
| #define OPTEE_RPC_I2C_FLAGS_TEN_BIT BIT(0) | |
| /* | |
| * Reset RPMB probing | |
| * | |
| * Releases an eventually already used RPMB devices and starts over searching | |
| * for RPMB devices. Returns the kind of shared memory to use in subsequent | |
| * OPTEE_RPC_CMD_RPMB_PROBE_NEXT and OPTEE_RPC_CMD_RPMB calls. | |
| * | |
| * [out] value[0].a OPTEE_RPC_SHM_TYPE_*, the parameter for | |
| * OPTEE_RPC_CMD_SHM_ALLOC | |
| */ | |
| #define OPTEE_RPC_CMD_RPMB_PROBE_RESET 22 | |
| /* | |
| * Probe next RPMB device | |
| * | |
| * [out] value[0].a Type of RPMB device, OPTEE_RPC_RPMB_* | |
| * [out] value[0].b EXT CSD-slice 168 "RPMB Size" | |
| * [out] value[0].c EXT CSD-slice 222 "Reliable Write Sector Count" | |
| * [out] memref[1] Buffer with the raw CID | |
| */ | |
| #define OPTEE_RPC_CMD_RPMB_PROBE_NEXT 23 | |
| /* Type of RPMB device */ | |
| #define OPTEE_RPC_RPMB_EMMC 0 | |
| #define OPTEE_RPC_RPMB_UFS 1 | |
| #define OPTEE_RPC_RPMB_NVME 2 | |
| /* | |
| * Replay Protected Memory Block access | |
| * | |
| * [in] memref[0] Frames to device | |
| * [out] memref[1] Frames from device | |
| */ | |
| #define OPTEE_RPC_CMD_RPMB_FRAMES 24 | |
| #endif /*__OPTEE_RPC_CMD_H*/ |