1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 /*****************************************************************************
5  * @file icp_adf_transport.h
6  *
7  * @description
8  *      File contains Public API Definitions for ADF transport.
9  *
10  *****************************************************************************/
11 #ifndef ICP_ADF_TRANSPORT_H
12 #define ICP_ADF_TRANSPORT_H
13 
14 #include "cpa.h"
15 
16 /*
17  * Enumeration on Transport Types exposed
18  */
19 typedef enum icp_transport_type_e {
20 	ICP_TRANS_TYPE_NONE = 0,
21 	ICP_TRANS_TYPE_ETR,
22 	ICP_TRANS_TYPE_DP_ETR,
23 	ICP_TRANS_TYPE_ADMINREG,
24 	ICP_TRANS_TYPE_DELIMIT
25 } icp_transport_type;
26 
27 /*
28  * Enumeration on response delivery method
29  */
30 typedef enum icp_resp_deliv_method_e {
31 	ICP_RESP_TYPE_NONE = 0,
32 	ICP_RESP_TYPE_IRQ,
33 	ICP_RESP_TYPE_POLL,
34 	ICP_RESP_TYPE_DELIMIT
35 } icp_resp_deliv_method;
36 
37 /*
38  * Unique identifier of a transport handle
39  */
40 typedef Cpa32U icp_trans_identifier;
41 
42 /*
43  * Opaque Transport Handle
44  */
45 typedef void *icp_comms_trans_handle;
46 
47 /*
48  * Function Pointer invoked when a set of messages is received for the given
49  * transport handle
50  */
51 typedef void (*icp_trans_callback)(void *pMsg);
52 
53 /*
54  * icp_adf_getDynInstance
55  *
56  * Description:
57  * Get an available instance from dynamic instance pool
58  *
59  * Returns:
60  *   CPA_STATUS_SUCCESS   on success
61  *   CPA_STATUS_FAIL      on failure
62  *
63  */
64 CpaStatus icp_adf_getDynInstance(icp_accel_dev_t *accel_dev,
65 				 adf_service_type_t stype,
66 				 Cpa32U *pinstance_id);
67 
68 /*
69  * icp_adf_putDynInstance
70  *
71  * Description:
72  * Put back an instance to dynamic instance pool
73  *
74  * Returns:
75  *   CPA_STATUS_SUCCESS   on success
76  *   CPA_STATUS_FAIL      on failure
77  *
78  */
79 CpaStatus icp_adf_putDynInstance(icp_accel_dev_t *accel_dev,
80 				 adf_service_type_t stype,
81 				 Cpa32U instance_id);
82 
83 /*
84  * icp_adf_getNumAvailDynInstance
85  *
86  * Description:
87  * Get the number of the available dynamic instances
88  *
89  * Returns:
90  *   CPA_STATUS_SUCCESS   on success
91  *   CPA_STATUS_FAIL      on failure
92  *
93  */
94 CpaStatus icp_adf_getNumAvailDynInstance(icp_accel_dev_t *accel_dev,
95 					 adf_service_type_t stype,
96 					 Cpa32U *num);
97 
98 /*
99  * icp_adf_transGetFdForHandle
100  *
101  * Description:
102  * Get a file descriptor for a particular transaction handle.
103  * If more than one transaction handler
104  * are ever present, this will need to be refactored to
105  * return the appropriate fd of the appropriate bank.
106  *
107  * Returns:
108  *   CPA_STATUS_SUCCESS   on success
109  *   CPA_STATUS_FAIL      on failure
110  *
111  *
112  */
113 CpaStatus icp_adf_transGetFdForHandle(icp_comms_trans_handle trans_hnd,
114 				      int *fd);
115 
116 /*
117  * icp_adf_transCreateHandle
118  *
119  * Description:
120  * Create a transport handle
121  *
122  * Returns:
123  *   CPA_STATUS_SUCCESS   on success
124  *   CPA_STATUS_FAIL      on failure
125  *
126  *   The message size is variable: requests can be 64 or 128 bytes, responses
127  * can be 16, 32 or 64 bytes.
128  *   Supported num_msgs:
129  *     32, 64, 128, 256, 512, 1024, 2048 number of messages.
130  *
131  */
132 CpaStatus icp_adf_transCreateHandle(icp_accel_dev_t *accel_dev,
133 				    icp_transport_type trans_type,
134 				    const char *section,
135 				    const Cpa32U accel_nr,
136 				    const Cpa32U bank_nr,
137 				    const char *service_name,
138 				    const icp_adf_ringInfoService_t info,
139 				    icp_trans_callback callback,
140 				    icp_resp_deliv_method resp,
141 				    const Cpa32U num_msgs,
142 				    const Cpa32U msg_size,
143 				    icp_comms_trans_handle *trans_handle);
144 
145 /*
146  * icp_adf_transReinitHandle
147  *
148  * Description:
149  * Reinitialize a transport handle
150  *
151  * Returns:
152  *   CPA_STATUS_SUCCESS   on success
153  *   CPA_STATUS_FAIL      on failure
154  *
155  *   The message size is variable: requests can be 64 or 128 bytes, responses
156  *   can be 16, 32 or 64 bytes.
157  *   Supported num_msgs:
158  *     32, 64, 128, 256, 512, 1024, 2048 number of messages.
159  *
160  */
161 CpaStatus icp_adf_transReinitHandle(icp_accel_dev_t *accel_dev,
162 				    icp_transport_type trans_type,
163 				    const char *section,
164 				    const Cpa32U accel_nr,
165 				    const Cpa32U bank_nr,
166 				    const char *service_name,
167 				    const icp_adf_ringInfoService_t info,
168 				    icp_trans_callback callback,
169 				    icp_resp_deliv_method resp,
170 				    const Cpa32U num_msgs,
171 				    const Cpa32U msg_size,
172 				    icp_comms_trans_handle *trans_handle);
173 
174 /*
175  * icp_adf_transGetHandle
176  *
177  * Description:
178  * Gets a pointer to a previously created transport handle
179  *
180  * Returns:
181  *   CPA_STATUS_SUCCESS   on success
182  *   CPA_STATUS_FAIL      on failure
183  *
184  */
185 CpaStatus icp_adf_transGetHandle(icp_accel_dev_t *accel_dev,
186 				 icp_transport_type trans_type,
187 				 const char *section,
188 				 const Cpa32U accel_nr,
189 				 const Cpa32U bank_nr,
190 				 const char *service_name,
191 				 icp_comms_trans_handle *trans_handle);
192 
193 /*
194  * icp_adf_transReleaseHandle
195  *
196  * Description:
197  * Release a transport handle
198  *
199  * Returns:
200  *   CPA_STATUS_SUCCESS   on success
201  *   CPA_STATUS_FAIL      on failure
202  */
203 CpaStatus icp_adf_transReleaseHandle(icp_comms_trans_handle trans_handle);
204 
205 /*
206  * icp_adf_transResetHandle
207  *
208  * Description:
209  * Reset a transport handle
210  *
211  * Returns:
212  *   CPA_STATUS_SUCCESS   on success
213  *   CPA_STATUS_FAIL      on failure
214  */
215 CpaStatus icp_adf_transResetHandle(icp_comms_trans_handle trans_handle);
216 
217 /*
218  * icp_adf_transPutMsg
219  *
220  * Description:
221  * Put Message onto the transport handle
222  *
223  * Returns:
224  *   CPA_STATUS_SUCCESS   on success
225  *   CPA_STATUS_FAIL      on failure
226  */
227 CpaStatus icp_adf_transPutMsg(icp_comms_trans_handle trans_handle,
228 			      Cpa32U *inBufs,
229 			      Cpa32U bufLen);
230 
231 /*
232  * icp_adf_getInflightRequests
233  *
234  * Description:
235  * Retrieve in flight requests from the transport handle.
236  *
237  * Returns:
238  *   CPA_STATUS_SUCCESS   on success
239  *   CPA_STATUS_FAIL      on failure
240  */
241 CpaStatus icp_adf_getInflightRequests(icp_comms_trans_handle trans_handle,
242 				      Cpa32U *maxInflightRequests,
243 				      Cpa32U *numInflightRequests);
244 
245 /*
246  * icp_adf_transPutMsgSync
247  *
248  * Description:
249  * Put Message onto the transport handle and waits for a response.
250  * Note: Not all transports support method.
251  *
252  * Returns:
253  *   CPA_STATUS_SUCCESS   on success
254  *   CPA_STATUS_FAIL      on failure
255  */
256 CpaStatus icp_adf_transPutMsgSync(icp_comms_trans_handle trans_handle,
257 				  Cpa32U *inBuf,
258 				  Cpa32U *outBuf,
259 				  Cpa32U bufsLen);
260 
261 /*
262  * icp_adf_transGetRingNum
263  *
264  * Description:
265  *  Function Returns ring number of the given trans_handle
266  *
267  * Returns:
268  *   CPA_STATUS_SUCCESS   on success
269  *   CPA_STATUS_FAIL      on failure
270  */
271 CpaStatus icp_adf_transGetRingNum(icp_comms_trans_handle trans_handle,
272 				  Cpa32U *ringNum);
273 
274 /*
275  * icp_adf_flush_requests
276  *
277  * Description:
278  *  Function flushes the enqueued requests on the trans_handle
279  *
280  * Returns:
281  *   CPA_STATUS_SUCCESS   on success
282  *   CPA_STATUS_FAIL      on failure
283  */
284 CpaStatus icp_adf_flush_requests(icp_comms_trans_handle trans_handle);
285 
286 #endif /* ICP_ADF_TRANSPORT_H */
287