107 lines
3.2 KiB
C
107 lines
3.2 KiB
C
|
/* 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
|
||
|
*
|
||
|
* 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)
|
||
|
|
||
|
#endif /*__OPTEE_RPC_CMD_H*/
|