1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019-2020 Broadcom
3  * All rights reserved.
4  */
5 
6 #ifndef TF_IF_TBL_TYPE_H_
7 #define TF_IF_TBL_TYPE_H_
8 
9 #include "tf_core.h"
10 #include "stack.h"
11 
12 /*
13  * This is the constant used to define invalid CFA
14  * types across all devices.
15  */
16 #define CFA_IF_TBL_TYPE_INVALID 65535
17 
18 struct tf;
19 
20 /**
21  * The IF Table module provides processing of Internal TF interface table types.
22  */
23 
24 /**
25  * IF table configuration enumeration.
26  */
27 enum tf_if_tbl_cfg_type {
28 	/**
29 	 * No configuration
30 	 */
31 	TF_IF_TBL_CFG_NULL,
32 	/**
33 	 * HCAPI 'controlled'
34 	 */
35 	TF_IF_TBL_CFG,
36 };
37 
38 /**
39  * IF table configuration structure, used by the Device to configure
40  * how an individual TF type is configured in regard to the HCAPI type.
41  */
42 struct tf_if_tbl_cfg {
43 	/**
44 	 * IF table config controls how the DB for that element is
45 	 * processed.
46 	 */
47 	enum tf_if_tbl_cfg_type cfg_type;
48 
49 	/**
50 	 * HCAPI Type for the element. Used for TF to HCAPI type
51 	 * conversion.
52 	 */
53 	uint16_t hcapi_type;
54 };
55 
56 /**
57  * Get HCAPI type parameters for a single element
58  */
59 struct tf_if_tbl_get_hcapi_parms {
60 	/**
61 	 * [in] IF Tbl DB Handle
62 	 */
63 	void *tbl_db;
64 	/**
65 	 * [in] DB Index, indicates which DB entry to perform the
66 	 * action on.
67 	 */
68 	uint16_t db_index;
69 	/**
70 	 * [out] Pointer to the hcapi type for the specified db_index
71 	 */
72 	uint16_t *hcapi_type;
73 };
74 
75 /**
76  * Table configuration parameters
77  */
78 struct tf_if_tbl_cfg_parms {
79 	/**
80 	 * Number of table types in each of the configuration arrays
81 	 */
82 	uint16_t num_elements;
83 	/**
84 	 * Table Type element configuration array
85 	 */
86 	struct tf_if_tbl_cfg *cfg;
87 	/**
88 	 * Shadow table type configuration array
89 	 */
90 	struct tf_shadow_if_tbl_cfg *shadow_cfg;
91 	/**
92 	 * Boolean controlling the request shadow copy.
93 	 */
94 	bool shadow_copy;
95 };
96 
97 /**
98  * IF Table set parameters
99  */
100 struct tf_if_tbl_set_parms {
101 	/**
102 	 * [in] Receive or transmit direction
103 	 */
104 	enum tf_dir dir;
105 	/**
106 	 * [in] Type of object to set
107 	 */
108 	enum tf_if_tbl_type type;
109 	/**
110 	 * [in] Type of HCAPI
111 	 */
112 	uint16_t hcapi_type;
113 	/**
114 	 * [in] Entry data
115 	 */
116 	uint8_t *data;
117 	/**
118 	 * [in] Entry size
119 	 */
120 	uint16_t data_sz_in_bytes;
121 	/**
122 	 * [in] Entry index to write to
123 	 */
124 	uint32_t idx;
125 };
126 
127 /**
128  * IF Table get parameters
129  */
130 struct tf_if_tbl_get_parms {
131 	/**
132 	 * [in] Receive or transmit direction
133 	 */
134 	enum tf_dir dir;
135 	/**
136 	 * [in] Type of object to get
137 	 */
138 	enum tf_if_tbl_type type;
139 	/**
140 	 * [in] Type of HCAPI
141 	 */
142 	uint16_t hcapi_type;
143 	/**
144 	 * [out] Entry data
145 	 */
146 	uint8_t *data;
147 	/**
148 	 * [out] Entry size
149 	 */
150 	uint16_t data_sz_in_bytes;
151 	/**
152 	 * [in] Entry index to read
153 	 */
154 	uint32_t idx;
155 };
156 
157 /**
158  * @page if tbl Table
159  *
160  * @ref tf_if_tbl_bind
161  *
162  * @ref tf_if_tbl_unbind
163  *
164  * @ref tf_tbl_set
165  *
166  * @ref tf_tbl_get
167  *
168  * @ref tf_tbl_restore
169  */
170 /**
171  * Initializes the Table module with the requested DBs. Must be
172  * invoked as the first thing before any of the access functions.
173  *
174  * [in] tfp
175  *   Pointer to TF handle, used for HCAPI communication
176  *
177  * [in] parms
178  *   Pointer to Table configuration parameters
179  *
180  * Returns
181  *   - (0) if successful.
182  *   - (-EINVAL) on failure.
183  */
184 int tf_if_tbl_bind(struct tf *tfp,
185 		   struct tf_if_tbl_cfg_parms *parms);
186 
187 /**
188  * Cleans up the private DBs and releases all the data.
189  *
190  * [in] tfp
191  *   Pointer to TF handle, used for HCAPI communication
192  *
193  * [in] parms
194  *   Pointer to parameters
195  *
196  * Returns
197  *   - (0) if successful.
198  *   - (-EINVAL) on failure.
199  */
200 int tf_if_tbl_unbind(struct tf *tfp);
201 
202 /**
203  * Configures the requested element by sending a firmware request which
204  * then installs it into the device internal structures.
205  *
206  * [in] tfp
207  *   Pointer to TF handle, used for HCAPI communication
208  *
209  * [in] parms
210  *   Pointer to Interface Table set parameters
211  *
212  * Returns
213  *   - (0) if successful.
214  *   - (-EINVAL) on failure.
215  */
216 int tf_if_tbl_set(struct tf *tfp,
217 		  struct tf_if_tbl_set_parms *parms);
218 
219 /**
220  * Retrieves the requested element by sending a firmware request to get
221  * the element.
222  *
223  * [in] tfp
224  *   Pointer to TF handle, used for HCAPI communication
225  *
226  * [in] parms
227  *   Pointer to Table get parameters
228  *
229  * Returns
230  *   - (0) if successful.
231  *   - (-EINVAL) on failure.
232  */
233 int tf_if_tbl_get(struct tf *tfp,
234 		  struct tf_if_tbl_get_parms *parms);
235 
236 #endif /* TF_IF_TBL_TYPE_H */
237