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