summaryrefslogtreecommitdiffstats
path: root/drivers/tee/tstee/tstee_private.h
blob: 8e58725b57eb71b5e7bd88cde822149a0106789f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2023, Arm Limited
 */

#ifndef TSTEE_PRIVATE_H
#define TSTEE_PRIVATE_H

#include <linux/arm_ffa.h>
#include <linux/bitops.h>
#include <linux/tee_core.h>
#include <linux/types.h>
#include <linux/uuid.h>
#include <linux/xarray.h>

/*
 * The description of the ABI implemented in this file is available at
 * https://trusted-services.readthedocs.io/en/v1.0.0/developer/service-access-protocols.html#abi
 */

/* UUID of this protocol */
#define TS_RPC_UUID UUID_INIT(0xbdcd76d7, 0x825e, 0x4751, \
			      0x96, 0x3b, 0x86, 0xd4, 0xf8, 0x49, 0x43, 0xac)

/* Protocol version*/
#define TS_RPC_PROTOCOL_VERSION		(1)

/* Status codes */
#define TS_RPC_OK			(0)

/* RPC control register */
#define TS_RPC_CTRL_REG			(0)
#define OPCODE_MASK			GENMASK(15, 0)
#define IFACE_ID_MASK			GENMASK(23, 16)
#define TS_RPC_CTRL_OPCODE(x)		((u16)(FIELD_GET(OPCODE_MASK, (x))))
#define TS_RPC_CTRL_IFACE_ID(x)		((u8)(FIELD_GET(IFACE_ID_MASK, (x))))
#define TS_RPC_CTRL_PACK_IFACE_OPCODE(i, o)	\
	(FIELD_PREP(IFACE_ID_MASK, (i)) | FIELD_PREP(OPCODE_MASK, (o)))
#define TS_RPC_CTRL_SAP_RC		BIT(30)
#define TS_RPC_CTRL_SAP_ERR		BIT(31)

/* Interface ID for RPC management operations */
#define TS_RPC_MGMT_IFACE_ID		(0xff)

/* Management calls */
#define TS_RPC_OP_GET_VERSION		(0x0000)
#define TS_RPC_GET_VERSION_RESP		(1)

#define TS_RPC_OP_RETRIEVE_MEM		(0x0001)
#define TS_RPC_RETRIEVE_MEM_HANDLE_LSW	(1)
#define TS_RPC_RETRIEVE_MEM_HANDLE_MSW	(2)
#define TS_RPC_RETRIEVE_MEM_TAG_LSW	(3)
#define TS_RPC_RETRIEVE_MEM_TAG_MSW	(4)
#define TS_RPC_RETRIEVE_MEM_RPC_STATUS	(1)

#define TS_RPC_OP_RELINQ_MEM		(0x0002)
#define TS_RPC_RELINQ_MEM_HANDLE_LSW	(1)
#define TS_RPC_RELINQ_MEM_HANDLE_MSW	(2)
#define TS_RPC_RELINQ_MEM_RPC_STATUS	(1)

#define TS_RPC_OP_SERVICE_INFO		(0x0003)
#define TS_RPC_SERVICE_INFO_UUID0	(1)
#define TS_RPC_SERVICE_INFO_UUID1	(2)
#define TS_RPC_SERVICE_INFO_UUID2	(3)
#define TS_RPC_SERVICE_INFO_UUID3	(4)
#define TS_RPC_SERVICE_INFO_RPC_STATUS	(1)
#define TS_RPC_SERVICE_INFO_IFACE	(2)

/* Service call */
#define TS_RPC_SERVICE_MEM_HANDLE_LSW	(1)
#define TS_RPC_SERVICE_MEM_HANDLE_MSW	(2)
#define TS_RPC_SERVICE_REQ_LEN		(3)
#define TS_RPC_SERVICE_CLIENT_ID	(4)
#define TS_RPC_SERVICE_RPC_STATUS	(1)
#define TS_RPC_SERVICE_STATUS		(2)
#define TS_RPC_SERVICE_RESP_LEN		(3)

struct tstee {
	struct ffa_device *ffa_dev;
	struct tee_device *teedev;
	struct tee_shm_pool *pool;
};

struct ts_session {
	u8 iface_id;
};

struct ts_context_data {
	struct xarray sess_list;
};

#endif /* TSTEE_PRIVATE_H */