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 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 /* 26 * Copyright (c) 2005 SilverStorm Technologies, Inc. All rights reserved. 27 * 28 * This software is available to you under a choice of one of two 29 * licenses. You may choose to be licensed under the terms of the GNU 30 * General Public License (GPL) Version 2, available from the file 31 * COPYING in the main directory of this source tree, or the 32 * OpenIB.org BSD license below: 33 * 34 * Redistribution and use in source and binary forms, with or 35 * without modification, are permitted provided that the following 36 * conditions are met: 37 * 38 * - Redistributions of source code must retain the above 39 * copyright notice, this list of conditions and the following 40 * disclaimer. 41 * 42 * - Redistributions in binary form must reproduce the above 43 * copyright notice, this list of conditions and the following 44 * disclaimer in the documentation and/or other materials 45 * provided with the distribution. 46 * 47 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 48 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 49 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 50 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 51 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 52 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 53 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 54 * SOFTWARE. 55 * 56 */ 57 /* 58 * Sun elects to include this software in Sun product 59 * under the OpenIB BSD license. 60 * 61 * 62 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 63 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 64 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 65 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 66 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 67 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 68 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 69 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 70 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 71 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 72 * POSSIBILITY OF SUCH DAMAGE. 73 */ 74 75 #ifndef _RDSIB_IB_H 76 #define _RDSIB_IB_H 77 78 #ifdef __cplusplus 79 extern "C" { 80 #endif 81 82 #include <sys/types.h> 83 #include <sys/ib/ibtl/ibti.h> 84 #include "rdsib_debug.h" 85 #include "rdsib_protocol.h" 86 87 /* 88 * Global Configuration Variables 89 * As defined in RDS proposal 90 */ 91 extern uint_t MaxNodes; 92 extern uint_t UserBufferSize; 93 extern uint_t RdsPktSize; 94 extern uint_t NDataRX; 95 extern uint_t MaxDataSendBuffers; 96 extern uint_t MaxDataRecvBuffers; 97 extern uint_t MaxCtrlSendBuffers; 98 extern uint_t MaxCtrlRecvBuffers; 99 extern uint_t DataRecvBufferLWM; 100 extern uint_t CtrlRecvBufferLWM; 101 extern uint_t PendingRxPktsHWM; 102 extern uint_t MinRnrRetry; 103 extern uint8_t IBPathRetryCount; 104 extern uint8_t IBPktLifeTime; 105 106 #ifdef DEBUG 107 extern uint32_t rdsdbglvl; 108 #else 109 extern uint32_t rdsdbglvl; 110 #endif 111 112 /* performance tunables */ 113 extern uint_t rds_no_interrupts; 114 extern uint_t rds_poll_percent_full; 115 extern uint_t rds_wc_signal; 116 extern uint_t rds_waittime_ms; 117 118 /* loopback port map */ 119 #define RDS_PORT_MAP_SIZE 8192 120 extern krwlock_t rds_loopback_portmap_lock; 121 extern uint8_t rds_loopback_portmap[RDS_PORT_MAP_SIZE]; 122 123 extern ddi_taskq_t *rds_taskq; 124 extern uint_t rds_rx_pkts_pending_hwm; /* readonly */ 125 126 /* Number of WCs to poll in a single call */ 127 #define RDS_NUM_DATA_SEND_WCS 10 128 #define RDS_RDMAW_WRID 0xdabadaba 129 #define RDS_NUM_ACKS 4 /* only 1 is used */ 130 131 typedef enum rds_hca_state_s { 132 RDS_HCA_STATE_ADDED = 0, 133 RDS_HCA_STATE_OPEN = 1, 134 RDS_HCA_STATE_MEM_REGISTERED = 2, 135 RDS_HCA_STATE_STOPPING = 3, 136 RDS_HCA_STATE_REMOVED = 4 137 } rds_hca_state_t; 138 139 /* 140 * There is one of this structure for each HCA in the system. 141 * This holds all the information about the HCA. 142 * 143 * hca_nextp - Points to the next hca in the system. 144 * hca_state - State of the hca (only modified on HCA attach/detach) 145 * hca_guid - HCA Guid 146 * hca_nports - Number of ports on the HCA 147 * hca_hdl - HCA hdl obtained after opening the HCA 148 * hca_pdhdl - PD hdl 149 * hca_lkey - LKey for the registered global receive buffer pool memory 150 * hca_rkey - Rkey for the registered global receive buffer pool memory 151 * hca_attrp - HCA attributes 152 * hca_pinfop - ptr to portinfo data, allocated by ibtf 153 * hca_pinfo_sz - Sizeof of portinfo data 154 */ 155 typedef struct rds_hca_s { 156 struct rds_hca_s *hca_nextp; 157 rds_hca_state_t hca_state; 158 ib_guid_t hca_guid; 159 uint_t hca_nports; 160 ibt_hca_hdl_t hca_hdl; 161 ibt_pd_hdl_t hca_pdhdl; 162 ibt_mr_hdl_t hca_mrhdl; 163 ibt_lkey_t hca_lkey; 164 ibt_rkey_t hca_rkey; 165 ibt_sbind_hdl_t hca_bindhdl[4]; 166 ibt_hca_attr_t hca_attr; 167 ibt_hca_portinfo_t *hca_pinfop; 168 uint_t hca_pinfo_sz; 169 } rds_hca_t; 170 171 /* 172 * RDS Soft State 173 * NOTE: Only one soft state per driver and NOT per instance. 174 * 175 * sessionlock - protects the rds_session_t:session_nextp, this lock has 176 * to be taken for read/write acess of the sessions list. 177 * nsessions - Number of sessions in sessionlist 178 * sessionlistp - Pointer to the first session. 179 * ibhdl - Clnt handle acquired after registering with IBTF 180 * nhcas - Number of HCAs initialized. This is also the number of rds_hca_t 181 * structures in the rds_hcalistp. 182 * hcalistp - list of rds_hca_t. 183 * srvhdl - RDS service handle 184 */ 185 typedef struct rds_state_s { 186 krwlock_t rds_sessionlock; 187 uint_t rds_nsessions; 188 struct rds_session_s *rds_sessionlistp; 189 ibt_clnt_hdl_t rds_ibhdl; 190 krwlock_t rds_hca_lock; 191 uint_t rds_nhcas; 192 rds_hca_t *rds_hcalistp; 193 ibt_srv_hdl_t rds_srvhdl; 194 ib_svc_id_t rds_service_id; 195 } rds_state_t; 196 197 extern rds_state_t *rdsib_statep; /* global */ 198 199 /* defined in rds_cm.c */ 200 ibt_srv_hdl_t rds_register_service(ibt_clnt_hdl_t rds_ibhdl); 201 int rds_bind_service(struct rds_state_s *statep); 202 203 /* defined in rds_ib.c */ 204 void rds_recvcq_handler(ibt_cq_hdl_t cq, void *); 205 rds_hca_t *rds_gid_to_hcap(rds_state_t *statep, ib_gid_t gid); 206 rds_hca_t *rds_get_hcap(rds_state_t *statep, ib_guid_t guid); 207 int rdsib_initialize_ib(); 208 void rdsib_deinitialize_ib(); 209 210 /* defined in rds_debug.c */ 211 void rds_logging_initialization(); 212 void rds_logging_destroy(); 213 214 #ifdef __cplusplus 215 } 216 #endif 217 218 #endif /* _RDSIB_IB_H */ 219