1*c0dd49bdSEiji Ota /*
2*c0dd49bdSEiji Ota  * CDDL HEADER START
3*c0dd49bdSEiji Ota  *
4*c0dd49bdSEiji Ota  * The contents of this file are subject to the terms of the
5*c0dd49bdSEiji Ota  * Common Development and Distribution License (the "License").
6*c0dd49bdSEiji Ota  * You may not use this file except in compliance with the License.
7*c0dd49bdSEiji Ota  *
8*c0dd49bdSEiji Ota  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*c0dd49bdSEiji Ota  * or http://www.opensolaris.org/os/licensing.
10*c0dd49bdSEiji Ota  * See the License for the specific language governing permissions
11*c0dd49bdSEiji Ota  * and limitations under the License.
12*c0dd49bdSEiji Ota  *
13*c0dd49bdSEiji Ota  * When distributing Covered Code, include this CDDL HEADER in each
14*c0dd49bdSEiji Ota  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*c0dd49bdSEiji Ota  * If applicable, add the following below this CDDL HEADER, with the
16*c0dd49bdSEiji Ota  * fields enclosed by brackets "[]" replaced with your own identifying
17*c0dd49bdSEiji Ota  * information: Portions Copyright [yyyy] [name of copyright owner]
18*c0dd49bdSEiji Ota  *
19*c0dd49bdSEiji Ota  * CDDL HEADER END
20*c0dd49bdSEiji Ota  */
21*c0dd49bdSEiji Ota 
22*c0dd49bdSEiji Ota /*
23*c0dd49bdSEiji Ota  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24*c0dd49bdSEiji Ota  */
25*c0dd49bdSEiji Ota 
26*c0dd49bdSEiji Ota #ifndef _SYS_IB_CLIENTS_OF_SOL_OFS_SOL_KVERB_IMPL_H
27*c0dd49bdSEiji Ota #define	_SYS_IB_CLIENTS_OF_SOL_OFS_SOL_KVERB_IMPL_H
28*c0dd49bdSEiji Ota 
29*c0dd49bdSEiji Ota #ifdef __cplusplus
30*c0dd49bdSEiji Ota extern "C" {
31*c0dd49bdSEiji Ota #endif
32*c0dd49bdSEiji Ota 
33*c0dd49bdSEiji Ota #include <sys/ib/ibtl/ibvti.h>
34*c0dd49bdSEiji Ota 
35*c0dd49bdSEiji Ota /*
36*c0dd49bdSEiji Ota  * If there is yet an active async event, hdl is not freed. However,
37*c0dd49bdSEiji Ota  * if the device state is IB_DEV_CLOSE, the device is about to be closed
38*c0dd49bdSEiji Ota  * so that the event should be discarded.
39*c0dd49bdSEiji Ota  */
40*c0dd49bdSEiji Ota #define	FIRE_QP_EVENT(clnt, hdl, ib_event, qpp, type)			\
41*c0dd49bdSEiji Ota 		rw_enter(&clnt->lock, RW_READER);			\
42*c0dd49bdSEiji Ota 		if (qpp && qpp->event_handler &&			\
43*c0dd49bdSEiji Ota 		    qpp->device->reg_state == IB_DEV_OPEN) {		\
44*c0dd49bdSEiji Ota 			ib_event.device = qpp->device;			\
45*c0dd49bdSEiji Ota 			ib_event.event = type;				\
46*c0dd49bdSEiji Ota 			ib_event.element.qp = qpp;			\
47*c0dd49bdSEiji Ota 			qpp->event_handler(&ib_event, qpp->qp_context);	\
48*c0dd49bdSEiji Ota 		}							\
49*c0dd49bdSEiji Ota 		rw_exit(&clnt->lock)
50*c0dd49bdSEiji Ota 
51*c0dd49bdSEiji Ota #define	FIRE_CQ_EVENT(clnt, hdl, ib_event, cqp, type)			\
52*c0dd49bdSEiji Ota 		rw_enter(&clnt->lock, RW_READER);			\
53*c0dd49bdSEiji Ota 		if (cqp && cqp->event_handler &&			\
54*c0dd49bdSEiji Ota 		    cqp->device->reg_state == IB_DEV_OPEN) {		\
55*c0dd49bdSEiji Ota 			ib_event.device = cqp->device;			\
56*c0dd49bdSEiji Ota 			ib_event.event = type;				\
57*c0dd49bdSEiji Ota 			ib_event.element.cq = cqp;			\
58*c0dd49bdSEiji Ota 			cqp->event_handler(&ib_event, cqp->cq_context);	\
59*c0dd49bdSEiji Ota 		}							\
60*c0dd49bdSEiji Ota 		rw_exit(&clnt->lock)
61*c0dd49bdSEiji Ota 
62*c0dd49bdSEiji Ota #define	IBTF2OF_PGSZ(hca_page_sz)	((hca_page_sz) << 10)
63*c0dd49bdSEiji Ota #define	OF2IBTF_STATE(s)		((enum ibt_cep_state_e)(s))
64*c0dd49bdSEiji Ota #define	OF2IBTF_SRATE(r)		((enum ibt_srate_e)(r))
65*c0dd49bdSEiji Ota #define	OF2IBTF_PATH_MIG_STATE(s)	((ibt_cep_cmstate_t)((s)+1))
66*c0dd49bdSEiji Ota #define	OF2IBTF_PATH_MTU(m)		((ib_mtu_t)(m))
67*c0dd49bdSEiji Ota 
68*c0dd49bdSEiji Ota typedef unsigned int gfp_t;
69*c0dd49bdSEiji Ota 
70*c0dd49bdSEiji Ota typedef struct sol_ofs_client_s {
71*c0dd49bdSEiji Ota 	ib_client_t		*ib_client;
72*c0dd49bdSEiji Ota 	ibt_clnt_modinfo_t	ibt_client;
73*c0dd49bdSEiji Ota 	ibt_clnt_hdl_t		ibt_hdl;
74*c0dd49bdSEiji Ota 	uint_t			hca_num;
75*c0dd49bdSEiji Ota 	uint_t			hca_open_num;
76*c0dd49bdSEiji Ota 	llist_head_t		device_list;
77*c0dd49bdSEiji Ota 	llist_head_t		client_list;
78*c0dd49bdSEiji Ota 	krwlock_t		lock;
79*c0dd49bdSEiji Ota 	enum {
80*c0dd49bdSEiji Ota 				IB_OFS_CLNT_UNINITIALIZED,
81*c0dd49bdSEiji Ota 				IB_OFS_CLNT_INITIALIZED
82*c0dd49bdSEiji Ota 	} state;
83*c0dd49bdSEiji Ota } ofs_client_t;
84*c0dd49bdSEiji Ota 
85*c0dd49bdSEiji Ota #ifdef	__cplusplus
86*c0dd49bdSEiji Ota }
87*c0dd49bdSEiji Ota #endif
88*c0dd49bdSEiji Ota 
89*c0dd49bdSEiji Ota #endif	/* _SYS_IB_CLIENTS_OF_SOL_OFS_SOL_KVERB_IMPL_H */
90