xref: /onnv-gate/usr/src/uts/common/rpc/ib.h (revision 12163:f0cf0084e756)
10Sstevel@tonic-gate /*
20Sstevel@tonic-gate  * CDDL HEADER START
30Sstevel@tonic-gate  *
40Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57387SRobert.Gordon@Sun.COM  * Common Development and Distribution License (the "License").
67387SRobert.Gordon@Sun.COM  * You may not use this file except in compliance with the License.
70Sstevel@tonic-gate  *
80Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
90Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
100Sstevel@tonic-gate  * See the License for the specific language governing permissions
110Sstevel@tonic-gate  * and limitations under the License.
120Sstevel@tonic-gate  *
130Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
140Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
150Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
160Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
170Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
180Sstevel@tonic-gate  *
190Sstevel@tonic-gate  * CDDL HEADER END
200Sstevel@tonic-gate  */
210Sstevel@tonic-gate /*
22*12163SRamaswamy.Tummala@Sun.COM  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
230Sstevel@tonic-gate  */
247387SRobert.Gordon@Sun.COM /*
257387SRobert.Gordon@Sun.COM  * Copyright (c) 2007, The Ohio State University. All rights reserved.
267387SRobert.Gordon@Sun.COM  *
277387SRobert.Gordon@Sun.COM  * Portions of this source code is developed by the team members of
287387SRobert.Gordon@Sun.COM  * The Ohio State University's Network-Based Computing Laboratory (NBCL),
297387SRobert.Gordon@Sun.COM  * headed by Professor Dhabaleswar K. (DK) Panda.
307387SRobert.Gordon@Sun.COM  *
317387SRobert.Gordon@Sun.COM  * Acknowledgements to contributions from developors:
327387SRobert.Gordon@Sun.COM  *   Ranjit Noronha: noronha@cse.ohio-state.edu
337387SRobert.Gordon@Sun.COM  *   Lei Chai      : chail@cse.ohio-state.edu
347387SRobert.Gordon@Sun.COM  *   Weikuan Yu    : yuw@cse.ohio-state.edu
357387SRobert.Gordon@Sun.COM  *
367387SRobert.Gordon@Sun.COM  */
377387SRobert.Gordon@Sun.COM 
380Sstevel@tonic-gate 
390Sstevel@tonic-gate #ifndef _IB_H
400Sstevel@tonic-gate #define	_IB_H
410Sstevel@tonic-gate 
420Sstevel@tonic-gate /*
430Sstevel@tonic-gate  * ib.h, rpcib plugin interface.
440Sstevel@tonic-gate  */
450Sstevel@tonic-gate 
460Sstevel@tonic-gate #include <sys/types.h>
470Sstevel@tonic-gate #include <sys/ddi.h>
480Sstevel@tonic-gate #include <sys/sunddi.h>
490Sstevel@tonic-gate #include <sys/conf.h>
500Sstevel@tonic-gate #include <sys/stat.h>
510Sstevel@tonic-gate #include <rpc/rpc.h>
520Sstevel@tonic-gate #include <rpc/rpc_rdma.h>
530Sstevel@tonic-gate #include <sys/ib/ibtl/ibti.h>
547387SRobert.Gordon@Sun.COM #include <sys/avl.h>
550Sstevel@tonic-gate 
560Sstevel@tonic-gate #ifdef __cplusplus
570Sstevel@tonic-gate extern "C" {
580Sstevel@tonic-gate #endif
590Sstevel@tonic-gate 
607387SRobert.Gordon@Sun.COM #define	MAX_BUFS	1024	/* max no. of buffers per pool */
617387SRobert.Gordon@Sun.COM 
620Sstevel@tonic-gate #define	DEF_CQ_SIZE	4096 - 1	/* default CQ size */
630Sstevel@tonic-gate 				/*
640Sstevel@tonic-gate 				 * Tavor returns the next higher power of 2
650Sstevel@tonic-gate 				 * CQ entries than the requested size.
660Sstevel@tonic-gate 				 * For instance, if you request (2^12 - 1)
670Sstevel@tonic-gate 				 * CQ entries, Tavor returns 2^12 entries.
680Sstevel@tonic-gate 				 * 4K CQ entries suffice.  Hence, 4096 - 1.
690Sstevel@tonic-gate 				 */
700Sstevel@tonic-gate #define	DEF_SQ_SIZE	128	/* default SendQ size */
710Sstevel@tonic-gate #define	DEF_RQ_SIZE	256	/* default RecvQ size */
720Sstevel@tonic-gate #define	DSEG_MAX	2
730Sstevel@tonic-gate #define	RQ_DSEG_MAX	1	/* default RQ data seg */
740Sstevel@tonic-gate #define	IBSRM_HB	0x8000	/* high order bit of pkey */
750Sstevel@tonic-gate 
760Sstevel@tonic-gate /* max no. of refresh attempts on IBT_CM_CONN_STALE error */
770Sstevel@tonic-gate #define	REFRESH_ATTEMPTS	3
780Sstevel@tonic-gate 
790Sstevel@tonic-gate typedef struct rib_hca_s rib_hca_t;
800Sstevel@tonic-gate typedef struct rib_qp_s rib_qp_t;
810Sstevel@tonic-gate typedef struct rib_cq_s rib_cq_t;
820Sstevel@tonic-gate 
830Sstevel@tonic-gate /*
840Sstevel@tonic-gate  * Notification for RDMA_DONE is based on xid
850Sstevel@tonic-gate  */
860Sstevel@tonic-gate struct rdma_done_list {
870Sstevel@tonic-gate 	uint32_t	xid;		/* XID waiting for RDMA_DONE */
880Sstevel@tonic-gate 	kcondvar_t	rdma_done_cv;	/* cv for RDMA_DONE */
890Sstevel@tonic-gate 	struct rdma_done_list	*next;
900Sstevel@tonic-gate 	struct rdma_done_list	*prev;
910Sstevel@tonic-gate };
920Sstevel@tonic-gate 
930Sstevel@tonic-gate /*
940Sstevel@tonic-gate  * State of the plugin.
950Sstevel@tonic-gate  * ACCEPT = accepting new connections and requests
960Sstevel@tonic-gate  * NO_ACCEPT = not accepting new connection and requests
970Sstevel@tonic-gate  */
980Sstevel@tonic-gate #define	ACCEPT		1
990Sstevel@tonic-gate #define	NO_ACCEPT	2
1000Sstevel@tonic-gate 
1010Sstevel@tonic-gate /*
1020Sstevel@tonic-gate  * Send Wait states
1030Sstevel@tonic-gate  */
1040Sstevel@tonic-gate #define	SEND_WAIT	-1
1050Sstevel@tonic-gate 
1060Sstevel@tonic-gate /*
1070Sstevel@tonic-gate  * Reply states
1080Sstevel@tonic-gate  */
1090Sstevel@tonic-gate #define	REPLY_WAIT	-1
1100Sstevel@tonic-gate 
1110Sstevel@tonic-gate typedef void * rib_pvoid;
1120Sstevel@tonic-gate typedef rib_pvoid RIB_SYNCMEM_HANDLE;
1130Sstevel@tonic-gate 
1140Sstevel@tonic-gate /*
1150Sstevel@tonic-gate  * IB buffer pool management structure
1160Sstevel@tonic-gate  */
1170Sstevel@tonic-gate 
1180Sstevel@tonic-gate /*
1190Sstevel@tonic-gate  * Buffer pool info
1200Sstevel@tonic-gate  */
1210Sstevel@tonic-gate typedef struct {
1220Sstevel@tonic-gate 	kmutex_t	buflock;	/* lock for this structure */
1230Sstevel@tonic-gate 	caddr_t		buf;		/* pool address */
1240Sstevel@tonic-gate 	uint32_t	bufhandle;	/* rkey for this pool */
1250Sstevel@tonic-gate 	ulong_t		bufsize;	/* size of pool */
1260Sstevel@tonic-gate 	int		rsize;		/* size of each element */
1270Sstevel@tonic-gate 	int		numelems;	/* no. of elements allocated */
1280Sstevel@tonic-gate 	int		buffree;	/* no. of free elements */
1290Sstevel@tonic-gate 	void		*buflist[1];	/* free elements in pool */
1300Sstevel@tonic-gate } bufpool_t;
1310Sstevel@tonic-gate 
1320Sstevel@tonic-gate typedef struct {
1330Sstevel@tonic-gate 	bufpool_t	*bpool;
1340Sstevel@tonic-gate 	ibt_mr_hdl_t	*mr_hdl;
1350Sstevel@tonic-gate 	ibt_mr_desc_t	*mr_desc;	/* vaddr, lkey, rkey */
1360Sstevel@tonic-gate } rib_bufpool_t;
1370Sstevel@tonic-gate 
1380Sstevel@tonic-gate /*
1390Sstevel@tonic-gate  * ATS relsted defines and structures.
1400Sstevel@tonic-gate  */
1410Sstevel@tonic-gate #define	ATS_AR_DATA_LEN	16
1420Sstevel@tonic-gate 
1430Sstevel@tonic-gate 
1440Sstevel@tonic-gate /*
1450Sstevel@tonic-gate  * Service types supported by RPCIB
1460Sstevel@tonic-gate  * For now only NFS is supported.
1470Sstevel@tonic-gate  */
1480Sstevel@tonic-gate #define	NFS		1
1490Sstevel@tonic-gate #define	NLM		2
1500Sstevel@tonic-gate 
1510Sstevel@tonic-gate /*
1520Sstevel@tonic-gate  * Tracks consumer state (client or server).
1530Sstevel@tonic-gate  */
1540Sstevel@tonic-gate typedef enum {
1550Sstevel@tonic-gate 	RIB_SERVER,
1560Sstevel@tonic-gate 	RIB_CLIENT
1570Sstevel@tonic-gate } rib_mode_t;
1580Sstevel@tonic-gate 
1590Sstevel@tonic-gate /*
1600Sstevel@tonic-gate  * CQ structure
1610Sstevel@tonic-gate  */
1620Sstevel@tonic-gate struct rib_cq_s {
1630Sstevel@tonic-gate 	rib_hca_t		*rib_hca;
1640Sstevel@tonic-gate 	ibt_cq_hdl_t		rib_cq_hdl;
1650Sstevel@tonic-gate };
1660Sstevel@tonic-gate 
1670Sstevel@tonic-gate /*
1689733SFaramarz.Jalalian@Sun.COM  * Each registered service's data structure.
1699733SFaramarz.Jalalian@Sun.COM  */
1709733SFaramarz.Jalalian@Sun.COM typedef struct rib_service_s rib_service_t;
1719733SFaramarz.Jalalian@Sun.COM struct rib_service_s {
1729733SFaramarz.Jalalian@Sun.COM 	uint32_t		srv_type;	/* i.e, NFS, NLM, v4CBD */
1739733SFaramarz.Jalalian@Sun.COM 	ibt_srv_hdl_t		srv_hdl;	/* from ibt_register call */
1749733SFaramarz.Jalalian@Sun.COM 	ib_svc_id_t		srv_id;
1759733SFaramarz.Jalalian@Sun.COM 	rib_service_t		*next;
1769733SFaramarz.Jalalian@Sun.COM };
1779733SFaramarz.Jalalian@Sun.COM 
1789733SFaramarz.Jalalian@Sun.COM /*
1790Sstevel@tonic-gate  * RPCIB plugin state
1800Sstevel@tonic-gate  */
1810Sstevel@tonic-gate typedef struct rpcib_state {
1820Sstevel@tonic-gate 	ibt_clnt_hdl_t		ibt_clnt_hdl;
1830Sstevel@tonic-gate 	uint32_t		hca_count;
1840Sstevel@tonic-gate 	uint32_t		nhca_inited;
1859733SFaramarz.Jalalian@Sun.COM 	rib_hca_t		*hcas_list;
1869733SFaramarz.Jalalian@Sun.COM 	krwlock_t		hcas_list_lock;	/* protects hcas_list */
1870Sstevel@tonic-gate 	int			refcount;
1880Sstevel@tonic-gate 	kmutex_t		open_hca_lock;
1890Sstevel@tonic-gate 	queue_t			*q;		/* up queue for a serv_type */
1900Sstevel@tonic-gate 	void			*private;
1919733SFaramarz.Jalalian@Sun.COM 	rib_service_t		*service_list;
1929733SFaramarz.Jalalian@Sun.COM 	krwlock_t		service_list_lock;
1939733SFaramarz.Jalalian@Sun.COM 	kmutex_t		listen_lock;
1940Sstevel@tonic-gate } rpcib_state_t;
1950Sstevel@tonic-gate 
1960Sstevel@tonic-gate /*
1970Sstevel@tonic-gate  * Connection lists
1980Sstevel@tonic-gate  */
1990Sstevel@tonic-gate typedef struct {
2000Sstevel@tonic-gate 	krwlock_t	conn_lock;	/* list lock */
2010Sstevel@tonic-gate 	CONN		*conn_hd;	/* list head */
2020Sstevel@tonic-gate } rib_conn_list_t;
2030Sstevel@tonic-gate 
2040Sstevel@tonic-gate enum hca_state {
2058695SRajkumar.Sivaprakasam@Sun.COM 	HCA_DETACHED,		/* hca in detached state */
2060Sstevel@tonic-gate 	HCA_INITED,		/* hca in up and running state */
2070Sstevel@tonic-gate };
2080Sstevel@tonic-gate 
2099733SFaramarz.Jalalian@Sun.COM typedef struct rib_hca_service_s rib_hca_service_t;
2109733SFaramarz.Jalalian@Sun.COM struct rib_hca_service_s {
2119733SFaramarz.Jalalian@Sun.COM 	ib_svc_id_t	srv_id;
2129733SFaramarz.Jalalian@Sun.COM 	ib_gid_t	gid;
2139733SFaramarz.Jalalian@Sun.COM 	ibt_sbind_hdl_t	sbind_hdl;
2149733SFaramarz.Jalalian@Sun.COM 	rib_hca_service_t *next;
2159733SFaramarz.Jalalian@Sun.COM };
2169733SFaramarz.Jalalian@Sun.COM 
2170Sstevel@tonic-gate /*
2180Sstevel@tonic-gate  * RPCIB per HCA structure
2190Sstevel@tonic-gate  */
2200Sstevel@tonic-gate struct rib_hca_s {
2210Sstevel@tonic-gate 	ibt_clnt_hdl_t		ibt_clnt_hdl;
2220Sstevel@tonic-gate 
2230Sstevel@tonic-gate 	/*
2240Sstevel@tonic-gate 	 * per HCA.
2250Sstevel@tonic-gate 	 */
2260Sstevel@tonic-gate 	ibt_hca_hdl_t		hca_hdl;	/* HCA handle */
2270Sstevel@tonic-gate 	ibt_hca_attr_t		hca_attrs;	/* HCA attributes */
2280Sstevel@tonic-gate 	ibt_pd_hdl_t		pd_hdl;
2299733SFaramarz.Jalalian@Sun.COM 	rib_hca_service_t	*bound_services;
2309733SFaramarz.Jalalian@Sun.COM 	krwlock_t		bound_services_lock;
2310Sstevel@tonic-gate 	ib_guid_t		hca_guid;
2320Sstevel@tonic-gate 	uint32_t		hca_nports;
2330Sstevel@tonic-gate 	ibt_hca_portinfo_t	*hca_ports;
2340Sstevel@tonic-gate 	size_t			hca_pinfosz;
2350Sstevel@tonic-gate 	enum hca_state		state;		/* state of HCA */
2360Sstevel@tonic-gate 	krwlock_t		state_lock;	/* protects state field */
2370Sstevel@tonic-gate 	bool_t			inuse;		/* indicates HCA usage */
2380Sstevel@tonic-gate 	kmutex_t		inuse_lock;	/* protects inuse field */
2390Sstevel@tonic-gate 
2400Sstevel@tonic-gate 	rib_conn_list_t		cl_conn_list;	/* client conn list */
2410Sstevel@tonic-gate 	rib_conn_list_t		srv_conn_list;	/* server conn list */
2420Sstevel@tonic-gate 
2430Sstevel@tonic-gate 	rib_cq_t		*clnt_scq;
2440Sstevel@tonic-gate 	rib_cq_t		*clnt_rcq;
2450Sstevel@tonic-gate 	rib_cq_t		*svc_scq;
2460Sstevel@tonic-gate 	rib_cq_t		*svc_rcq;
2470Sstevel@tonic-gate 	kmutex_t		cb_lock;
2480Sstevel@tonic-gate 	kcondvar_t		cb_cv;
2490Sstevel@tonic-gate 
2500Sstevel@tonic-gate 	rib_bufpool_t		*recv_pool;	/* recv buf pool */
2510Sstevel@tonic-gate 	rib_bufpool_t		*send_pool;	/* send buf pool */
2520Sstevel@tonic-gate 
2530Sstevel@tonic-gate 	void			*iblock;	/* interrupt cookie */
2547387SRobert.Gordon@Sun.COM 
2557387SRobert.Gordon@Sun.COM 	kmem_cache_t	*server_side_cache;	/* long reply pool */
2567387SRobert.Gordon@Sun.COM 	avl_tree_t	avl_tree;
2577387SRobert.Gordon@Sun.COM 	kmutex_t	avl_lock;
2587387SRobert.Gordon@Sun.COM 	krwlock_t	avl_rw_lock;
2597387SRobert.Gordon@Sun.COM 	volatile bool_t avl_init;
2609733SFaramarz.Jalalian@Sun.COM 	kmutex_t	cache_allocation_lock;
2619723SSiddheshwar.Mahesh@Sun.COM 	ddi_taskq_t	*cleanup_helper;
2627387SRobert.Gordon@Sun.COM 	ib_svc_id_t	srv_id;
2637387SRobert.Gordon@Sun.COM 	ibt_srv_hdl_t 	srv_hdl;
2647387SRobert.Gordon@Sun.COM 	uint_t		reg_state;
2659733SFaramarz.Jalalian@Sun.COM 
2669733SFaramarz.Jalalian@Sun.COM 	volatile uint64_t	cache_allocation;
2679733SFaramarz.Jalalian@Sun.COM 	uint64_t	cache_hits;
2689733SFaramarz.Jalalian@Sun.COM 	uint64_t	cache_misses;
2699733SFaramarz.Jalalian@Sun.COM 	uint64_t	cache_cold_misses;
2709733SFaramarz.Jalalian@Sun.COM 	uint64_t	cache_hot_misses;
2719733SFaramarz.Jalalian@Sun.COM 	uint64_t	cache_misses_above_the_limit;
2729733SFaramarz.Jalalian@Sun.COM 
2739733SFaramarz.Jalalian@Sun.COM 	struct rib_hca_s *next;
2740Sstevel@tonic-gate };
2750Sstevel@tonic-gate 
2760Sstevel@tonic-gate 
2770Sstevel@tonic-gate /*
2780Sstevel@tonic-gate  * Structure on wait state of a post send
2790Sstevel@tonic-gate  */
2800Sstevel@tonic-gate struct send_wid {
2810Sstevel@tonic-gate 	uint32_t 	xid;
2820Sstevel@tonic-gate 	int		cv_sig;
2830Sstevel@tonic-gate 	kmutex_t	sendwait_lock;
2840Sstevel@tonic-gate 	kcondvar_t	wait_cv;
2850Sstevel@tonic-gate 	uint_t		status;
2860Sstevel@tonic-gate 	rib_qp_t	*qp;
2870Sstevel@tonic-gate 	int		nsbufs;			/* # of send buffers posted */
2880Sstevel@tonic-gate 	uint64_t	sbufaddr[DSEG_MAX];	/* posted send buffers */
2897387SRobert.Gordon@Sun.COM 	caddr_t		c;
2907387SRobert.Gordon@Sun.COM 	caddr_t		c1;
2917387SRobert.Gordon@Sun.COM 	int		l1;
2927387SRobert.Gordon@Sun.COM 	caddr_t		c2;
2937387SRobert.Gordon@Sun.COM 	int		l2;
2947387SRobert.Gordon@Sun.COM 	int		wl, rl;
2950Sstevel@tonic-gate };
2960Sstevel@tonic-gate 
2970Sstevel@tonic-gate /*
2980Sstevel@tonic-gate  * Structure on reply descriptor for recv queue.
2990Sstevel@tonic-gate  * Different from the above posting of a descriptor.
3000Sstevel@tonic-gate  */
3010Sstevel@tonic-gate struct reply {
3020Sstevel@tonic-gate 	uint32_t 	xid;
3030Sstevel@tonic-gate 	uint_t		status;
3040Sstevel@tonic-gate 	uint64_t	vaddr_cq;	/* buf addr from CQ */
3050Sstevel@tonic-gate 	uint_t		bytes_xfer;
3060Sstevel@tonic-gate 	kcondvar_t	wait_cv;
3070Sstevel@tonic-gate 	struct reply	*next;
3080Sstevel@tonic-gate 	struct reply 	*prev;
3090Sstevel@tonic-gate };
3100Sstevel@tonic-gate 
3110Sstevel@tonic-gate struct svc_recv {
3120Sstevel@tonic-gate 	rib_qp_t	*qp;
3130Sstevel@tonic-gate 	uint64_t	vaddr;
3140Sstevel@tonic-gate 	uint_t		bytes_xfer;
3150Sstevel@tonic-gate };
3160Sstevel@tonic-gate 
3170Sstevel@tonic-gate struct recv_wid {
3180Sstevel@tonic-gate 	uint32_t 	xid;
3190Sstevel@tonic-gate 	rib_qp_t	*qp;
3200Sstevel@tonic-gate 	uint64_t	addr;	/* posted buf addr */
3210Sstevel@tonic-gate };
3220Sstevel@tonic-gate 
3230Sstevel@tonic-gate /*
3240Sstevel@tonic-gate  * Per QP data structure
3250Sstevel@tonic-gate  */
3260Sstevel@tonic-gate struct rib_qp_s {
3270Sstevel@tonic-gate 	rib_hca_t		*hca;
3280Sstevel@tonic-gate 	rib_mode_t		mode;	/* RIB_SERVER or RIB_CLIENT */
3290Sstevel@tonic-gate 	CONN			rdmaconn;
3300Sstevel@tonic-gate 	ibt_channel_hdl_t	qp_hdl;
3310Sstevel@tonic-gate 	uint_t			port_num;
3320Sstevel@tonic-gate 	ib_qpn_t		qpn;
3330Sstevel@tonic-gate 	int			chan_flags;
3340Sstevel@tonic-gate 	clock_t			timeout;
3350Sstevel@tonic-gate 	ibt_rc_chan_query_attr_t	qp_q_attrs;
3360Sstevel@tonic-gate 	rib_cq_t		*send_cq;	/* send CQ */
3370Sstevel@tonic-gate 	rib_cq_t		*recv_cq;	/* recv CQ */
3380Sstevel@tonic-gate 
3390Sstevel@tonic-gate 	/*
3400Sstevel@tonic-gate 	 * Number of pre-posted rbufs
3410Sstevel@tonic-gate 	 */
3420Sstevel@tonic-gate 	uint_t			n_posted_rbufs;
3430Sstevel@tonic-gate 	kcondvar_t 		posted_rbufs_cv;
3440Sstevel@tonic-gate 	kmutex_t		posted_rbufs_lock;
3450Sstevel@tonic-gate 
3460Sstevel@tonic-gate 	/*
3479723SSiddheshwar.Mahesh@Sun.COM 	 * Number of SENDs pending completion
3489723SSiddheshwar.Mahesh@Sun.COM 	 */
3499723SSiddheshwar.Mahesh@Sun.COM 
3509723SSiddheshwar.Mahesh@Sun.COM 	uint_t			n_send_rbufs;
3519723SSiddheshwar.Mahesh@Sun.COM 	kcondvar_t 		send_rbufs_cv;
3529723SSiddheshwar.Mahesh@Sun.COM 	kmutex_t		send_rbufs_lock;
3539723SSiddheshwar.Mahesh@Sun.COM 
3549723SSiddheshwar.Mahesh@Sun.COM 	/*
3550Sstevel@tonic-gate 	 * RPC reply
3560Sstevel@tonic-gate 	 */
3570Sstevel@tonic-gate 	uint_t			rep_list_size;
3580Sstevel@tonic-gate 	struct reply		*replylist;
3590Sstevel@tonic-gate 	kmutex_t		replylist_lock;
3600Sstevel@tonic-gate 
3610Sstevel@tonic-gate 	/*
3620Sstevel@tonic-gate 	 * server only, RDMA_DONE
3630Sstevel@tonic-gate 	 */
3640Sstevel@tonic-gate 	struct rdma_done_list	*rdlist;
3650Sstevel@tonic-gate 	kmutex_t		rdlist_lock;
3660Sstevel@tonic-gate 
3670Sstevel@tonic-gate 	kmutex_t		cb_lock;
3680Sstevel@tonic-gate 	kcondvar_t 		cb_conn_cv;
3690Sstevel@tonic-gate 
3700Sstevel@tonic-gate 	caddr_t			q;	/* upstream queue */
3717387SRobert.Gordon@Sun.COM 	struct send_wid		wd;
3720Sstevel@tonic-gate };
3730Sstevel@tonic-gate 
3740Sstevel@tonic-gate #define	ctoqp(conn)	((rib_qp_t *)((conn)->c_private))
3750Sstevel@tonic-gate #define	qptoc(rqp)	((CONN *)&((rqp)->rdmaconn))
3760Sstevel@tonic-gate 
3770Sstevel@tonic-gate /*
3780Sstevel@tonic-gate  * Timeout for various calls
3790Sstevel@tonic-gate  */
3800Sstevel@tonic-gate #define	CONN_WAIT_TIME	40
3810Sstevel@tonic-gate #define	SEND_WAIT_TIME	40	/* time for send completion */
3820Sstevel@tonic-gate 
3830Sstevel@tonic-gate #define	REPLY_WAIT_TIME	40	/* time to get reply from remote QP */
3840Sstevel@tonic-gate 
3850Sstevel@tonic-gate #ifdef __cplusplus
3860Sstevel@tonic-gate }
3870Sstevel@tonic-gate #endif
3880Sstevel@tonic-gate 
3890Sstevel@tonic-gate #endif	/* !_IB_H */
390