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