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