xref: /arm-trusted-firmware/plat/ti/k3/common/drivers/sec_proxy/sec_proxy.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Texas Instruments K3 Secure Proxy Driver
3*91f16700Schasinglulu  *   Based on Linux and U-Boot implementation
4*91f16700Schasinglulu  *
5*91f16700Schasinglulu  * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
6*91f16700Schasinglulu  *
7*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
8*91f16700Schasinglulu  */
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #ifndef SEC_PROXY_H
11*91f16700Schasinglulu #define SEC_PROXY_H
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #include <stdint.h>
14*91f16700Schasinglulu 
15*91f16700Schasinglulu /**
16*91f16700Schasinglulu  * enum k3_sec_proxy_chan_id - Secure Proxy thread IDs
17*91f16700Schasinglulu  *
18*91f16700Schasinglulu  * These the available IDs used in k3_sec_proxy_{send,recv}()
19*91f16700Schasinglulu  * There are two schemes we use:
20*91f16700Schasinglulu  * * if K3_SEC_PROXY_LITE = 1, we just have two threads to talk
21*91f16700Schasinglulu  * * if K3_SEC_PROXY_LITE = 0, we have the full fledged
22*91f16700Schasinglulu  *   communication scheme available.
23*91f16700Schasinglulu  */
24*91f16700Schasinglulu enum k3_sec_proxy_chan_id {
25*91f16700Schasinglulu #if !K3_SEC_PROXY_LITE
26*91f16700Schasinglulu 	SP_NOTIFY = 0,
27*91f16700Schasinglulu 	SP_RESPONSE,
28*91f16700Schasinglulu 	SP_HIGH_PRIORITY,
29*91f16700Schasinglulu 	SP_LOW_PRIORITY,
30*91f16700Schasinglulu 	SP_NOTIFY_RESP,
31*91f16700Schasinglulu #else
32*91f16700Schasinglulu 	SP_RESPONSE = 8,
33*91f16700Schasinglulu 	/*
34*91f16700Schasinglulu 	 * Note: TISCI documentation indicates "low priority", but in reality
35*91f16700Schasinglulu 	 * with a single thread, there is no low or high priority.. This usage
36*91f16700Schasinglulu 	 * is more appropriate for TF-A since we can reduce the churn as a
37*91f16700Schasinglulu 	 * result.
38*91f16700Schasinglulu 	 */
39*91f16700Schasinglulu 	SP_HIGH_PRIORITY,
40*91f16700Schasinglulu #endif /* K3_SEC_PROXY_LITE */
41*91f16700Schasinglulu };
42*91f16700Schasinglulu 
43*91f16700Schasinglulu /**
44*91f16700Schasinglulu  * struct k3_sec_proxy_msg - Secure proxy message structure
45*91f16700Schasinglulu  * @len: Length of data in the Buffer
46*91f16700Schasinglulu  * @buf: Buffer pointer
47*91f16700Schasinglulu  *
48*91f16700Schasinglulu  * This is the structure for data used in k3_sec_proxy_{send,recv}()
49*91f16700Schasinglulu  */
50*91f16700Schasinglulu struct k3_sec_proxy_msg {
51*91f16700Schasinglulu 	size_t len;
52*91f16700Schasinglulu 	uint8_t *buf;
53*91f16700Schasinglulu };
54*91f16700Schasinglulu 
55*91f16700Schasinglulu /**
56*91f16700Schasinglulu  * k3_sec_proxy_clear_rx_thread() - Clear a receive Secure Proxy thread
57*91f16700Schasinglulu  * @id: Channel Identifier
58*91f16700Schasinglulu  * @msg: Pointer to k3_sec_proxy_msg
59*91f16700Schasinglulu  *
60*91f16700Schasinglulu  * Return: 0 if all goes well, else appropriate error message
61*91f16700Schasinglulu  */
62*91f16700Schasinglulu int k3_sec_proxy_clear_rx_thread(enum k3_sec_proxy_chan_id id);
63*91f16700Schasinglulu 
64*91f16700Schasinglulu /**
65*91f16700Schasinglulu  * k3_sec_proxy_send() - Send data over a Secure Proxy thread
66*91f16700Schasinglulu  * @id: Channel Identifier
67*91f16700Schasinglulu  * @msg: Pointer to k3_sec_proxy_msg
68*91f16700Schasinglulu  *
69*91f16700Schasinglulu  * Return: 0 if all goes well, else appropriate error message
70*91f16700Schasinglulu  */
71*91f16700Schasinglulu int k3_sec_proxy_send(enum k3_sec_proxy_chan_id id, const struct k3_sec_proxy_msg *msg);
72*91f16700Schasinglulu 
73*91f16700Schasinglulu /**
74*91f16700Schasinglulu  * k3_sec_proxy_recv() - Receive data from a Secure Proxy thread
75*91f16700Schasinglulu  * @id: Channel Identifier
76*91f16700Schasinglulu  * @msg: Pointer to k3_sec_proxy_msg
77*91f16700Schasinglulu  *
78*91f16700Schasinglulu  * Return: 0 if all goes well, else appropriate error message
79*91f16700Schasinglulu  */
80*91f16700Schasinglulu int k3_sec_proxy_recv(enum k3_sec_proxy_chan_id id, struct k3_sec_proxy_msg *msg);
81*91f16700Schasinglulu 
82*91f16700Schasinglulu #endif /* SEC_PROXY_H */
83