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