1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright (c) 2002-2004, Network Appliance, Inc. All rights reserved.
23  */
24 
25 /*
26  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
27  * Use is subject to license terms.
28  */
29 
30 
31 #ifndef _DAT_REDIRECTION_H_
32 #define	_DAT_REDIRECTION_H_
33 
34 /*
35  *
36  * HEADER: dat_redirection.h
37  *
38  * PURPOSE: Defines the common redirection macros
39  *
40  * Description: Macros to invoke DAPL functions from the dat_registry
41  *
42  * Mapping rules:
43  *      All global symbols are prepended with "DAT_" or "dat_"
44  *      All DAT objects have an 'api' tag which, such as 'ep' or 'lmr'
45  *      The method table is in the provider definition structure.
46  *
47  *
48  *
49  */
50 
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54 
55 typedef struct dat_provider DAT_PROVIDER;
56 
57 #ifndef DAT_HANDLE_TO_PROVIDER
58 
59 /*
60  * A utility macro to fetch the Provider Library for any object
61  *
62  * An alternate version could be defined for single library systems.
63  * it would look something like:
64  *	extern const struct dat_ia my_single_ia_provider;
65  *	#define DAT_HANDLE_TO_PROVIDER(ignore) &my_single_ia_provider
66  *
67  * This would allow a good compiler to avoid indirection overhead when
68  * making function calls.
69  */
70 
71 #define	DAT_HANDLE_TO_PROVIDER(handle) (*(DAT_PROVIDER **)(handle))
72 #endif
73 
74 #define	DAT_IA_QUERY(ia, evd, ia_msk, ia_ptr, p_msk, p_ptr) \
75 	(*DAT_HANDLE_TO_PROVIDER(ia)->ia_query_func)(\
76 		(ia),\
77 		(evd),\
78 		(ia_msk),\
79 		(ia_ptr),\
80 		(p_msk),\
81 		(p_ptr))
82 
83 #define	DAT_SET_CONSUMER_CONTEXT(handle, context) \
84 	(*DAT_HANDLE_TO_PROVIDER(handle)->set_consumer_context_func)(\
85 		(handle),\
86 		(context))
87 
88 #define	DAT_GET_CONSUMER_CONTEXT(handle, context) \
89 	(*DAT_HANDLE_TO_PROVIDER(handle)->get_consumer_context_func)(\
90 		(handle),\
91 		(context))
92 
93 #define	DAT_GET_HANDLE_TYPE(handle, handle_type) \
94 	(*DAT_HANDLE_TO_PROVIDER(handle)->get_handle_type_func)(\
95 		(handle),\
96 		(handle_type))
97 
98 #define	DAT_CR_QUERY(cr, mask, param) \
99 	(*DAT_HANDLE_TO_PROVIDER(cr)->cr_query_func)(\
100 		(cr),\
101 		(mask),\
102 		(param))
103 
104 #define	DAT_CR_ACCEPT(cr, ep, size, pdata) \
105 	(*DAT_HANDLE_TO_PROVIDER(cr)->cr_accept_func)(\
106 		(cr),\
107 		(ep),\
108 		(size),\
109 		(pdata))
110 
111 #define	DAT_CR_REJECT(cr) \
112 	(*DAT_HANDLE_TO_PROVIDER(cr)->cr_reject_func)(\
113 		(cr))
114 
115 #define	DAT_CR_HANDOFF(cr, qual) \
116 	(*DAT_HANDLE_TO_PROVIDER(cr)->cr_handoff_func)(\
117 		(cr),\
118 		(qual))
119 
120 #define	DAT_EVD_QUERY(evd, mask, param) \
121 	(*DAT_HANDLE_TO_PROVIDER(evd)->evd_query_func)(\
122 		(evd),\
123 		(mask),\
124 		(param))
125 
126 #define	DAT_EVD_RESIZE(evd, qsize) \
127 	(*DAT_HANDLE_TO_PROVIDER(evd)->evd_resize_func)(\
128 		(evd),\
129 		(qsize))
130 
131 #define	DAT_EVD_POST_SE(evd, event) \
132 	(*DAT_HANDLE_TO_PROVIDER(evd)->evd_post_se_func)(\
133 		(evd),\
134 		(event))
135 
136 #define	DAT_EVD_DEQUEUE(evd, event) \
137 	(*DAT_HANDLE_TO_PROVIDER(evd)->evd_dequeue_func)(\
138 		(evd),\
139 		(event))
140 
141 #define	DAT_EVD_FREE(evd)\
142 	(*DAT_HANDLE_TO_PROVIDER(evd)->evd_free_func)(\
143 		(evd))
144 
145 #define	DAT_EP_CREATE(ia, pz, in_evd, out_evd, connect_evd, attr, ep) \
146 	(*DAT_HANDLE_TO_PROVIDER(ia)->ep_create_func)(\
147 		(ia),\
148 		(pz),\
149 		(in_evd),\
150 		(out_evd),\
151 		(connect_evd),\
152 		(attr),\
153 		(ep))
154 
155 #define	DAT_EP_CREATE_WITH_SRQ(ia, pz, in_evd, out_evd, connect_evd, srq,\
156 	attr, ep) \
157 	(*DAT_HANDLE_TO_PROVIDER(ia)->ep_create_with_srq_func)(\
158 		(ia),\
159 		(pz),\
160 		(in_evd),\
161 		(out_evd),\
162 		(connect_evd),\
163 		(srq),\
164 		(attr),\
165 		(ep))
166 
167 #define	DAT_EP_QUERY(ep, mask, param) \
168 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_query_func)(\
169 		(ep),\
170 		(mask),\
171 		(param))
172 
173 #define	DAT_EP_MODIFY(ep, mask, param) \
174 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_modify_func)(\
175 		(ep),\
176 		(mask),\
177 		(param))
178 
179 #define	DAT_EP_CONNECT(ep, ia_addr, conn_qual, timeout, psize, pdata,	\
180 		qos, flags)						\
181 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_connect_func)(\
182 		(ep),\
183 		(ia_addr),\
184 		(conn_qual),\
185 		(timeout),\
186 		(psize),\
187 		(pdata),\
188 		(qos),\
189 		(flags))
190 
191 #define	DAT_EP_DUP_CONNECT(ep, dup, timeout, psize, pdata, qos) \
192 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_dup_connect_func)(\
193 		(ep),\
194 		(dup),\
195 		(timeout),\
196 		(psize),\
197 		(pdata),\
198 		(qos))
199 
200 #define	DAT_EP_DISCONNECT(ep, flags) \
201 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_disconnect_func)(\
202 		(ep),\
203 		(flags))
204 
205 #define	DAT_EP_POST_SEND(ep, size, lbuf, cookie, flags) \
206 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_send_func)(\
207 		(ep),\
208 		(size),\
209 		(lbuf),\
210 		(cookie),\
211 		(flags))
212 
213 #define	DAT_EP_POST_RECV(ep, size, lbuf, cookie, flags) \
214 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_recv_func)(\
215 		(ep),\
216 		(size),\
217 		(lbuf),\
218 		(cookie),\
219 		(flags))
220 
221 #define	DAT_EP_POST_RDMA_READ(ep, size, lbuf, cookie, rbuf, flags) \
222 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_rdma_read_func)(\
223 		(ep),\
224 		(size),\
225 		(lbuf),\
226 		(cookie),\
227 		(rbuf),\
228 		(flags))
229 
230 #define	DAT_EP_POST_RDMA_WRITE(ep, size, lbuf, cookie, rbuf, flags) \
231 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_rdma_write_func)(\
232 		(ep),\
233 		(size),\
234 		(lbuf),\
235 		(cookie),\
236 		(rbuf),\
237 		(flags))
238 
239 #define	DAT_EP_GET_STATUS(ep, ep_state, recv_idle, request_idle) \
240 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_get_status_func)(\
241 		(ep), \
242 		(ep_state),\
243 		(recv_idle),\
244 		(request_idle))
245 
246 #define	DAT_EP_FREE(ep)\
247 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_free_func)(\
248 		(ep))
249 
250 #define	DAT_EP_RESET(ep)\
251 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_reset_func)(\
252 		(ep))
253 
254 #define	DAT_EP_RECV_QUERY(ep, nbuf_alloc, buf_span) \
255 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_recv_query_func)(\
256 		(ep),\
257 		(nbuf_alloc),\
258 		(buf_span))
259 
260 #define	DAT_EP_SET_WATERMARK(ep, soft_wm, hard_wm) \
261 	(*DAT_HANDLE_TO_PROVIDER(ep)->ep_set_watermark_func)(\
262 		(ep),\
263 		(soft_wm),\
264 		(hard_wm))
265 
266 #define	DAT_LMR_QUERY(lmr, mask, param)\
267 	(*DAT_HANDLE_TO_PROVIDER(lmr)->lmr_query_func)(\
268 		(lmr),\
269 		(mask),\
270 		(param))
271 
272 #define	DAT_LMR_FREE(lmr)\
273 	(*DAT_HANDLE_TO_PROVIDER(lmr)->lmr_free_func)(\
274 		(lmr))
275 
276 #define	DAT_LMR_SYNC_RDMA_READ(ia, lbuf, size) \
277 	(*DAT_HANDLE_TO_PROVIDER(ia)->lmr_sync_rdma_read_func)(\
278 		(ia), \
279 		(lbuf), \
280 		(size))
281 
282 #define	DAT_LMR_SYNC_RDMA_WRITE(ia, lbuf, size) \
283 	(*DAT_HANDLE_TO_PROVIDER(ia)->lmr_sync_rdma_write_func)(\
284 		(ia), \
285 		(lbuf), \
286 		(size))
287 
288 #define	DAT_RMR_CREATE(pz, rmr) \
289 	(*DAT_HANDLE_TO_PROVIDER(pz)->rmr_create_func)(\
290 		(pz),\
291 		(rmr))
292 
293 #define	DAT_RMR_QUERY(rmr, mask, param) \
294 	(*DAT_HANDLE_TO_PROVIDER(rmr)->rmr_query_func)(\
295 		(rmr),\
296 		(mask),\
297 		(param))
298 
299 #define	DAT_RMR_BIND(rmr, lmr, mem_priv, ep, cookie, flags, context) \
300 	(*DAT_HANDLE_TO_PROVIDER(rmr)->rmr_bind_func)(\
301 		(rmr),\
302 		(lmr),\
303 		(mem_priv),\
304 		(ep),\
305 		(cookie),\
306 		(flags),\
307 		(context))
308 
309 #define	DAT_RMR_FREE(rmr)\
310 	(*DAT_HANDLE_TO_PROVIDER(rmr)->rmr_free_func)(\
311 		(rmr))
312 
313 #define	DAT_PSP_CREATE(ia, conn_qual, evd, flags, handle) \
314 	(*DAT_HANDLE_TO_PROVIDER(ia)->psp_create_func)(\
315 		(ia),\
316 		(conn_qual),\
317 		(evd),\
318 		(flags),\
319 		(handle))
320 
321 #define	DAT_PSP_CREATE_ANY(ia, conn_qual, evd, flags, handle) \
322 	(*DAT_HANDLE_TO_PROVIDER(ia)->psp_create_any_func)(\
323 		(ia), \
324 		(conn_qual), \
325 		(evd), \
326 		(flags), \
327 		(handle))
328 
329 #define	DAT_PSP_QUERY(psp, mask, param) \
330 	(*DAT_HANDLE_TO_PROVIDER(psp)->psp_query_func)(\
331 		(psp),\
332 		(mask),\
333 		(param))
334 
335 #define	DAT_PSP_FREE(psp)\
336 	(*DAT_HANDLE_TO_PROVIDER(psp)->psp_free_func)(\
337 		(psp))
338 
339 #define	DAT_RSP_CREATE(ia, conn_qual, ep, evd, handle) \
340 	(*DAT_HANDLE_TO_PROVIDER(ia)->rsp_create_func)(\
341 		(ia),\
342 		(conn_qual),\
343 		(ep),\
344 		(evd),\
345 		(handle))
346 
347 #define	DAT_RSP_QUERY(rsp, mask, param) \
348 	(*DAT_HANDLE_TO_PROVIDER(rsp)->rsp_query_func)(\
349 		(rsp),\
350 		(mask),\
351 		(param))
352 
353 #define	DAT_RSP_FREE(rsp)\
354 	(*DAT_HANDLE_TO_PROVIDER(rsp)->rsp_free_func)(\
355 		(rsp))
356 
357 #define	DAT_PZ_CREATE(ia, pz) \
358 	(*DAT_HANDLE_TO_PROVIDER(ia)->pz_create_func)(\
359 		(ia),\
360 		(pz))
361 
362 #define	DAT_PZ_QUERY(pz, mask, param) \
363 	(*DAT_HANDLE_TO_PROVIDER(pz)->pz_query_func)(\
364 		(pz),\
365 		(mask),\
366 		(param))
367 
368 #define	DAT_PZ_FREE(pz) \
369 	(*DAT_HANDLE_TO_PROVIDER(pz)->pz_free_func)(\
370 		(pz))
371 
372 #define	DAT_SRQ_CREATE(ia, pz, attr, srq) \
373 	(*DAT_HANDLE_TO_PROVIDER(ia)->srq_create_func)(\
374 		(ia),\
375 		(pz),\
376 		(attr),\
377 		(srq))
378 
379 #define	DAT_SRQ_SET_LW(srq, lw) \
380 	(*DAT_HANDLE_TO_PROVIDER(srq)->srq_set_lw_func)(\
381 		(srq),\
382 		(lw))
383 
384 #define	DAT_SRQ_FREE(srq) \
385 	(*DAT_HANDLE_TO_PROVIDER(srq)->srq_free_func)(\
386 		(srq))
387 
388 #define	DAT_SRQ_QUERY(srq, mask, param) \
389 	(*DAT_HANDLE_TO_PROVIDER(srq)->srq_query_func)(\
390 		(srq),\
391 		(mask),\
392 		(param))
393 
394 #define	DAT_SRQ_RESIZE(srq, qsize) \
395 	(*DAT_HANDLE_TO_PROVIDER(srq)->srq_resize_func)(\
396 		(srq),\
397 		(qsize))
398 
399 #define	DAT_SRQ_POST_RECV(srq, size, lbuf, cookie) \
400 	(*DAT_HANDLE_TO_PROVIDER(srq)->srq_post_recv_func)(\
401 		(srq),\
402 		(size),\
403 		(lbuf),\
404 		(cookie))
405 
406 /*
407  * FUNCTION PROTOTYPES
408  */
409 
410 typedef DAT_RETURN (*DAT_IA_OPEN_FUNC)(
411 	IN	const DAT_NAME_PTR,	/* provider		*/
412 	IN	DAT_COUNT,		/* asynch_evd_min_qlen  */
413 	INOUT	DAT_EVD_HANDLE *,	/* asynch_evd_handle    */
414 	OUT	DAT_IA_HANDLE *,	/* ia_handle		*/
415 	IN	boolean_t);		/* relaxed ordering aware */
416 
417 typedef DAT_RETURN (*DAT_IA_OPENV_FUNC)(
418 	IN	const DAT_NAME_PTR,	/* provider		*/
419 	IN	DAT_COUNT,		/* asynch_evd_min_qlen  */
420 	INOUT	DAT_EVD_HANDLE *,	/* asynch_evd_handle    */
421 	OUT	DAT_IA_HANDLE *,	/* ia_handle		*/
422 	IN	DAT_UINT32,		/* dat major version number */
423 	IN	DAT_UINT32,		/* dat minor version number */
424 	IN	DAT_BOOLEAN);		/* dat thread safety */
425 
426 typedef DAT_RETURN (*DAT_IA_CLOSE_FUNC)(
427 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
428 	IN	DAT_CLOSE_FLAGS);	/* close_flags		*/
429 
430 typedef DAT_RETURN (*DAT_IA_QUERY_FUNC)(
431 	IN	DAT_IA_HANDLE,		/* ia handle		*/
432 	OUT	DAT_EVD_HANDLE *,	/* async_evd_handle	*/
433 	IN	DAT_IA_ATTR_MASK,	/* ia_attr_mask		*/
434 	OUT	DAT_IA_ATTR *,		/* ia_attr		*/
435 	IN	DAT_PROVIDER_ATTR_MASK,	/* provider_attr_mask	*/
436 	OUT	DAT_PROVIDER_ATTR *);	/* provider_attr	*/
437 
438 /* helper functions */
439 
440 typedef DAT_RETURN (*DAT_SET_CONSUMER_CONTEXT_FUNC)(
441 	IN	DAT_HANDLE,		/* dat handle		*/
442 	IN	DAT_CONTEXT);		/* context		*/
443 
444 typedef DAT_RETURN (*DAT_GET_CONSUMER_CONTEXT_FUNC)(
445 	IN	DAT_HANDLE,		/* dat handle		*/
446 	OUT	DAT_CONTEXT *);		/* context		*/
447 
448 typedef DAT_RETURN (*DAT_GET_HANDLE_TYPE_FUNC)(
449 	IN	DAT_HANDLE,
450 	OUT	DAT_HANDLE_TYPE *);
451 
452 /* CR Functions */
453 
454 typedef DAT_RETURN (*DAT_CR_QUERY_FUNC)(
455 	IN	DAT_CR_HANDLE,		/* cr_handle		*/
456 	IN	DAT_CR_PARAM_MASK,	/* cr_param_mask	*/
457 	OUT	DAT_CR_PARAM *);	/* cr_param		*/
458 
459 typedef DAT_RETURN (*DAT_CR_ACCEPT_FUNC)(
460 	IN	DAT_CR_HANDLE,		/* cr_handle		*/
461 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
462 	IN	DAT_COUNT,		/* private_data_size	*/
463 	IN	const DAT_PVOID);	/* private_data		*/
464 
465 typedef DAT_RETURN (*DAT_CR_REJECT_FUNC)(
466 	IN	DAT_CR_HANDLE);
467 
468 /*
469  * For DAT-1.1 this function is defined for both uDAPL and kDAPL.
470  * For DAT-1.0 it was only defined for uDAPL.
471  */
472 typedef DAT_RETURN (*DAT_CR_HANDOFF_FUNC)(
473 	IN	DAT_CR_HANDLE,		/* cr_handle		*/
474 	IN	DAT_CONN_QUAL);		/* handoff		*/
475 
476 /* EVD Functions */
477 
478 typedef DAT_RETURN (*DAT_EVD_RESIZE_FUNC)(
479 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
480 	IN	DAT_COUNT);		/* evd_min_qlen		*/
481 
482 typedef DAT_RETURN (*DAT_EVD_POST_SE_FUNC)(
483 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
484 	IN	const DAT_EVENT *);	/* event		*/
485 
486 typedef DAT_RETURN (*DAT_EVD_DEQUEUE_FUNC)(
487 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
488 	OUT	DAT_EVENT *);		/* event		*/
489 
490 typedef DAT_RETURN (*DAT_EVD_FREE_FUNC)(
491 	IN	DAT_EVD_HANDLE);	/* evd_handle		*/
492 
493 typedef DAT_RETURN (*DAT_EVD_QUERY_FUNC)(
494 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
495 	IN	DAT_EVD_PARAM_MASK,	/* evd_param_mask	*/
496 	OUT	DAT_EVD_PARAM *);	/* evd_param		*/
497 
498 /* EP functions */
499 
500 typedef DAT_RETURN (*DAT_EP_CREATE_FUNC)(
501 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
502 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
503 	IN	DAT_EVD_HANDLE,		/* recv_completion_evd_handle */
504 	IN	DAT_EVD_HANDLE,		/* request_completion_evd_handle */
505 	IN	DAT_EVD_HANDLE,		/* connect_evd_handle   */
506 	IN	const DAT_EP_ATTR *,	/* ep_attributes	*/
507 	OUT	DAT_EP_HANDLE *);	/* ep_handle		*/
508 
509 typedef DAT_RETURN (*DAT_EP_CREATE_WITH_SRQ_FUNC)(
510 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
511 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
512 	IN	DAT_EVD_HANDLE,		/* recv_evd_handle	*/
513 	IN	DAT_EVD_HANDLE,		/* request_evd_handle	*/
514 	IN	DAT_EVD_HANDLE,		/* connect_evd_handle	*/
515 	IN	DAT_SRQ_HANDLE,		/* srq_handle 		*/
516 	IN	const DAT_EP_ATTR *,	/* ep_attributes	*/
517 	OUT	DAT_EP_HANDLE *);	/* ep_handle		*/
518 
519 typedef DAT_RETURN (*DAT_EP_QUERY_FUNC)(
520 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
521 	IN	DAT_EP_PARAM_MASK,	/* ep_param_mask	*/
522 	OUT	DAT_EP_PARAM *);	/* ep_param		*/
523 
524 typedef DAT_RETURN (*DAT_EP_MODIFY_FUNC)(
525 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
526 	IN	DAT_EP_PARAM_MASK,	/* ep_param_mask	*/
527 	IN	const DAT_EP_PARAM *);	/* ep_param		*/
528 
529 typedef DAT_RETURN (*DAT_EP_CONNECT_FUNC)(
530 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
531 	IN	DAT_IA_ADDRESS_PTR,	/* remote_ia_address	*/
532 	IN	DAT_CONN_QUAL,		/* remote_conn_qual	*/
533 	IN	DAT_TIMEOUT,		/* timeout		*/
534 	IN	DAT_COUNT,		/* private_data_size	*/
535 	IN	const DAT_PVOID,	/* private_data		*/
536 	IN	DAT_QOS,		/* quality_of_service	*/
537 	IN	DAT_CONNECT_FLAGS);	/* connect_flags	*/
538 
539 typedef DAT_RETURN (*DAT_EP_DUP_CONNECT_FUNC)(
540 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
541 	IN	DAT_EP_HANDLE,		/* ep_dup_handle	*/
542 	IN	DAT_TIMEOUT,		/* timeout		*/
543 	IN	DAT_COUNT,		/* private_data_size	*/
544 	IN	const DAT_PVOID,	/* private_data		*/
545 	IN	DAT_QOS);		/* quality_of_service	*/
546 
547 typedef DAT_RETURN (*DAT_EP_DISCONNECT_FUNC)(
548 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
549 	IN	DAT_CLOSE_FLAGS);	/* close_flags		*/
550 
551 typedef DAT_RETURN (*DAT_EP_POST_SEND_FUNC)(
552 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
553 	IN	DAT_COUNT,		/* num_segments		*/
554 	IN	DAT_LMR_TRIPLET *,	/* local_iov		*/
555 	IN	DAT_DTO_COOKIE,		/* user_cookie		*/
556 	IN	DAT_COMPLETION_FLAGS);	/* completion_flags	*/
557 
558 typedef DAT_RETURN (*DAT_EP_POST_RECV_FUNC)(
559 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
560 	IN	DAT_COUNT,		/* num_segments		*/
561 	IN	DAT_LMR_TRIPLET *,	/* local_iov		*/
562 	IN	DAT_DTO_COOKIE,		/* user_cookie		*/
563 	IN	DAT_COMPLETION_FLAGS);	/* completion_flags	*/
564 
565 typedef DAT_RETURN (*DAT_EP_POST_RDMA_READ_FUNC)(
566 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
567 	IN	DAT_COUNT,		/* num_segments		*/
568 	IN	DAT_LMR_TRIPLET *,	/* local_iov		*/
569 	IN	DAT_DTO_COOKIE,		/* user_cookie		*/
570 	IN	const DAT_RMR_TRIPLET *,	/* remote_iov		*/
571 	IN	DAT_COMPLETION_FLAGS);	/* completion_flags	*/
572 
573 typedef DAT_RETURN (*DAT_EP_POST_RDMA_WRITE_FUNC)(
574 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
575 	IN	DAT_COUNT,		/* num_segments		*/
576 	IN	DAT_LMR_TRIPLET *,	/* local_iov		*/
577 	IN	DAT_DTO_COOKIE,		/* user_cookie		*/
578 	IN	const DAT_RMR_TRIPLET *,	/* remote_iov		*/
579 	IN	DAT_COMPLETION_FLAGS);	/* completion_flags	*/
580 
581 typedef DAT_RETURN (*DAT_EP_GET_STATUS_FUNC)(
582 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
583 	OUT	DAT_EP_STATE *,		/* ep_state		*/
584 	OUT	DAT_BOOLEAN *,		/* recv_idle		*/
585 	OUT	DAT_BOOLEAN *);		/* request_idle		*/
586 
587 typedef DAT_RETURN (*DAT_EP_FREE_FUNC)(
588 	IN	DAT_EP_HANDLE);		/* ep_handle		*/
589 
590 typedef DAT_RETURN (*DAT_EP_RESET_FUNC)(
591 	IN	DAT_EP_HANDLE);		/* ep_handle		*/
592 
593 typedef DAT_RETURN (*DAT_EP_RECV_QUERY_FUNC)(
594 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
595 	OUT	DAT_COUNT *,		/* nbufs_allocated	*/
596 	OUT	DAT_COUNT *);		/* bufs_alloc_span	*/
597 
598 typedef DAT_RETURN (*DAT_EP_SET_WATERMARK_FUNC)(
599 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
600 	IN	DAT_COUNT,		/* soft_high_watermark	*/
601 	IN	DAT_COUNT);		/* hard_high_watermark	*/
602 
603 /* LMR functions */
604 
605 typedef DAT_RETURN (*DAT_LMR_FREE_FUNC)(
606 	IN	DAT_LMR_HANDLE);
607 
608 typedef DAT_RETURN (*DAT_LMR_QUERY_FUNC)(
609 	IN	DAT_LMR_HANDLE,		/* lmr_handle		*/
610 	IN	DAT_LMR_PARAM_MASK,	/* lmr_param_mask	*/
611 	OUT	DAT_LMR_PARAM *);	/* lmr_param		*/
612 
613 typedef DAT_RETURN (*DAT_LMR_SYNC_RDMA_READ_FUNC)(
614 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
615 	IN 	const DAT_LMR_TRIPLET *, /* local_segments	*/
616 	IN	DAT_VLEN);		/* num_segments		*/
617 
618 typedef DAT_RETURN (*DAT_LMR_SYNC_RDMA_WRITE_FUNC)(
619 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
620 	IN 	const DAT_LMR_TRIPLET *, /* local_segments	*/
621 	IN	DAT_VLEN);		/* num_segments		*/
622 
623 /* RMR Functions */
624 
625 typedef DAT_RETURN (*DAT_RMR_CREATE_FUNC)(
626 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
627 	OUT	DAT_RMR_HANDLE *);	/* rmr_handle		*/
628 
629 typedef DAT_RETURN (*DAT_RMR_QUERY_FUNC)(
630 	IN	DAT_RMR_HANDLE,		/* rmr_handle		*/
631 	IN	DAT_RMR_PARAM_MASK,	/* rmr_param_mask	*/
632 	OUT	DAT_RMR_PARAM *);	/* rmr_param		*/
633 
634 typedef DAT_RETURN (*DAT_RMR_BIND_FUNC)(
635 	IN	DAT_RMR_HANDLE,		/* rmr_handle		*/
636 	IN	const DAT_LMR_TRIPLET *,	/* lmr_triplet		*/
637 	IN	DAT_MEM_PRIV_FLAGS,	/* mem_priv		*/
638 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
639 	IN	DAT_RMR_COOKIE,		/* user_cookie		*/
640 	IN	DAT_COMPLETION_FLAGS,	/* completion_flags	*/
641 	OUT	DAT_RMR_CONTEXT *);	/* context		*/
642 
643 typedef DAT_RETURN (*DAT_RMR_FREE_FUNC)(
644 	IN	DAT_RMR_HANDLE);
645 
646 /* PSP Functions */
647 
648 typedef DAT_RETURN (*DAT_PSP_CREATE_FUNC)(
649 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
650 	IN	DAT_CONN_QUAL,		/* conn_qual		*/
651 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
652 	IN	DAT_PSP_FLAGS,		/* psp_flags		*/
653 	OUT	DAT_PSP_HANDLE *);	/* psp_handle		*/
654 
655 typedef DAT_RETURN (*DAT_PSP_CREATE_ANY_FUNC)(
656 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
657 	OUT	DAT_CONN_QUAL *,	/* conn_qual		*/
658 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
659 	IN	DAT_PSP_FLAGS,		/* psp_flags		*/
660 	OUT	DAT_PSP_HANDLE *);	/* psp_handle		*/
661 
662 typedef DAT_RETURN (*DAT_PSP_QUERY_FUNC)(
663 	IN	DAT_PSP_HANDLE,		/* psp_handle		*/
664 	IN	DAT_PSP_PARAM_MASK,	/* psp_param_mask	*/
665 	OUT	DAT_PSP_PARAM *);	/* *psp_param		*/
666 
667 typedef DAT_RETURN (*DAT_PSP_FREE_FUNC)(
668 	IN	DAT_PSP_HANDLE);	/* psp_handle		*/
669 
670 /* RSP Functions */
671 
672 typedef DAT_RETURN (*DAT_RSP_CREATE_FUNC)(
673 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
674 	IN	DAT_CONN_QUAL,		/* conn_qual		*/
675 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
676 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
677 	OUT	DAT_RSP_HANDLE *);	/* rsp_handle		*/
678 
679 typedef DAT_RETURN (*DAT_RSP_QUERY_FUNC) (
680 	IN	DAT_RSP_HANDLE,		/* rsp_handle		*/
681 	IN	DAT_RSP_PARAM_MASK,	/* rsp_param_mask	*/
682 	OUT	DAT_RSP_PARAM *);	/* *rsp_param		*/
683 
684 typedef DAT_RETURN (*DAT_RSP_FREE_FUNC)(
685 	IN	DAT_RSP_HANDLE);	/* rsp_handle		*/
686 
687 /* PZ Functions */
688 
689 typedef DAT_RETURN (*DAT_PZ_CREATE_FUNC)(
690 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
691 	OUT	DAT_PZ_HANDLE *);	/* pz_handle		*/
692 
693 typedef DAT_RETURN (*DAT_PZ_QUERY_FUNC)(
694 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
695 	IN	DAT_PZ_PARAM_MASK,	/* pz_param_mask	*/
696 	OUT	DAT_PZ_PARAM *);	/* pz_param		*/
697 
698 typedef DAT_RETURN (*DAT_PZ_FREE_FUNC)(
699 	IN	DAT_PZ_HANDLE);		/* pz_handle		*/
700 
701 /* SRQ Functions */
702 
703 typedef DAT_RETURN (*DAT_SRQ_CREATE_FUNC)(
704 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
705 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
706 	IN	DAT_SRQ_ATTR *,		/* srq_attr		*/
707 	OUT	DAT_SRQ_HANDLE *);	/* srq_handle		*/
708 
709 typedef DAT_RETURN (*DAT_SRQ_SET_LW_FUNC)(
710 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
711 	IN	DAT_COUNT);		/* low_watermark	*/
712 
713 typedef DAT_RETURN (*DAT_SRQ_FREE_FUNC)(
714 	IN	DAT_SRQ_HANDLE);	/* srq_handle		*/
715 
716 typedef DAT_RETURN (*DAT_SRQ_QUERY_FUNC)(
717 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
718 	IN	DAT_SRQ_PARAM_MASK,	/* srq_param_mask	*/
719 	OUT	DAT_SRQ_PARAM *);		/* srq_param		*/
720 
721 typedef DAT_RETURN (*DAT_SRQ_RESIZE_FUNC)(
722 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
723 	IN	DAT_COUNT);		/* srq_max_recv_dto	*/
724 
725 typedef DAT_RETURN (*DAT_SRQ_POST_RECV_FUNC)(
726 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
727 	IN	DAT_COUNT,		/* num_segments		*/
728 	IN	DAT_LMR_TRIPLET *,	/* local_iov		*/
729 	IN	DAT_DTO_COOKIE);	/* user_cookie		*/
730 
731 #ifdef __cplusplus
732 }
733 #endif
734 
735 #endif /* _DAT_REDIRECTION_H_ */
736