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 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _DAPL_TAVOR_IBTI_H 28 #define _DAPL_TAVOR_IBTI_H 29 30 /* 31 * This header file defines various IB types that is used by the 32 * generic reference implementation. These IB types are mapped to 33 * IBTF types. 34 */ 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 #include <sys/ib/ibtl/ibti.h> 41 #include <daplt_if.h> 42 #include <sys/ib/adapters/mlnx_umap.h> 43 44 #define DAPLIB_NEEDS_INIT(ep) ((ep)->qp_state == IBT_STATE_ERROR) 45 #define DAPL_MAX_IOV 8 46 47 /* 48 * The InfiniBand Specification, Section 9.7.7, states that the 49 * upper bound on the maximum message size for an RC connection 50 * is 2^31 bytes. Implementations are free to support a smaller 51 * value. see dapli_ep_default_attrs 52 */ 53 #define DAPL_IB_MAX_MESSAGE_SIZE 0x80000000 54 #define DAPL_MAX_ADDRESS 0xfffffffffffffff0ULL 55 56 57 #define true B_TRUE 58 #define false B_FALSE 59 #define IB_INVALID_HANDLE 0 60 61 #define DAPL_CQE_INVALID_PRMEVENT 0x1015 62 #define DAPL_CQE_VALID_PRMEVENT 0x1215 63 64 #define DAPL_GET_CQE_WRID(cqe_p) \ 65 ((ib_work_completion_t *)(cqe_p))->wc_id 66 #define DAPL_GET_CQE_OPTYPE(cqe_p) \ 67 ((ib_work_completion_t *)(cqe_p))->wc_type 68 #define DAPL_GET_CQE_BYTESNUM(cqe_p) \ 69 ((ib_work_completion_t *)(cqe_p))->wc_bytes_xfer 70 #define DAPL_GET_CQE_STATUS(cqe_p) \ 71 ((ib_work_completion_t *)(cqe_p))->wc_status 72 #define DAPL_GET_CQE_QPN(cqe_p) \ 73 ((ib_work_completion_t *)(cqe_p))->wc_qpn 74 #define DAPL_CQE_IS_VALID(cqe_p) \ 75 (((ib_work_completion_t *)(cqe_p))->wc_res_hash == \ 76 DAPL_CQE_VALID_PRMEVENT) 77 #define DAPL_SET_CQE_INVALID(cqe_p) \ 78 (((ib_work_completion_t *)(cqe_p))->wc_res_hash = \ 79 DAPL_CQE_INVALID_PRMEVENT) 80 #define DAPL_SET_CQE_VALID(cqe_p) \ 81 (((ib_work_completion_t *)(cqe_p))->wc_res_hash = \ 82 DAPL_CQE_VALID_PRMEVENT) 83 84 /* 85 * Map private data constants to IBTF constants 86 */ 87 #define IB_MAX_REQ_PDATA_SIZE IBT_REQ_PRIV_DATA_SZ 88 #define IB_MAX_REP_PDATA_SIZE IBT_REP_PRIV_DATA_SZ 89 #define IB_MAX_REJ_PDATA_SIZE IBT_REJ_PRIV_DATA_SZ 90 #define IB_MAX_DREQ_PDATA_SIZE IBT_DREQ_PRIV_DATA_SZ 91 #define IB_MAX_DREP_PDATA_SIZE IBT_DREP_PRIV_DATA_SZ 92 93 /* 94 * Definitions to map DTO OPs to IBTF definitions 95 */ 96 #define OP_RDMA_READ IBT_WRC_RDMAR 97 #define OP_RDMA_WRITE IBT_WRC_RDMAW 98 #define OP_SEND IBT_WRC_SEND 99 #define OP_RECEIVE IBT_WRC_RECV 100 #define OP_COMP_AND_SWAP IBT_WRC_CSWAP 101 #define OP_FETCH_AND_ADD IBT_WRC_FADD 102 #define OP_BIND_MW IBT_WRC_BIND 103 104 /* 105 * Definitions to map Memory OPs 106 */ 107 #define IB_ACCESS_LOCAL_WRITE IBT_MR_ENABLE_LOCAL_WRITE 108 #define IB_ACCESS_REMOTE_READ IBT_MR_ENABLE_REMOTE_READ 109 #define IB_ACCESS_REMOTE_WRITE IBT_MR_ENABLE_REMOTE_WRITE 110 111 /* 112 * Definitions to map WR_BIND request flags - 113 * IBTF uses diff set of flags for the ibt_bind_flags_t 114 */ 115 #define IB_BIND_ACCESS_REMOTE_READ IBT_WR_BIND_READ 116 #define IB_BIND_ACCESS_REMOTE_WRITE IBT_WR_BIND_WRITE 117 118 /* 119 * MAP CQE status to IBT_WC_* 120 */ 121 #define IB_COMP_ST_SUCCESS IBT_WC_SUCCESS 122 #define IB_COMP_ST_LOCAL_LEN_ERR IBT_WC_LOCAL_LEN_ERR 123 #define IB_COMP_ST_LOCAL_OP_ERR IBT_WC_LOCAL_CHAN_OP_ERR 124 #define IB_COMP_ST_LOCAL_PROTECT_ERR IBT_WC_LOCAL_PROTECT_ERR 125 #define IB_COMP_ST_WR_FLUSHED_ERR IBT_WC_WR_FLUSHED_ERR 126 #define IB_COMP_ST_MW_BIND_ERR IBT_WC_MEM_WIN_BIND_ERR 127 #define IB_COMP_ST_REM_REQ_ERR IBT_WC_REMOTE_INVALID_REQ_ERR 128 #define IB_COMP_ST_REM_ACC_ERR IBT_WC_REMOTE_ACCESS_ERR 129 #define IB_COMP_ST_REM_OP_ERR IBT_WC_REMOTE_OP_ERR 130 #define IB_COMP_ST_TRANSP_COUNTER IBT_WC_TRANS_TIMEOUT_ERR 131 #define IB_COMP_ST_RNR_COUNTER IBT_WC_RNR_NAK_TIMEOUT_ERR 132 #define IB_COMP_ST_BAD_RESPONSE_ERR IBT_WC_BAD_RESPONSE_ERR 133 134 /* 135 * CQ NOTIFICATION TYPE 136 */ 137 #define IB_NOTIFY_ON_NEXT_COMP 1 138 #define IB_NOTIFY_ON_NEXT_SOLICITED 2 139 #define IB_NOTIFY_ON_NEXT_NCOMP 3 140 141 /* 142 * Connection Manager Defs 143 */ 144 #define IB_CME_CONNECTED DAPL_IB_CME_CONNECTED 145 #define IB_CME_DISCONNECTED DAPL_IB_CME_DISCONNECTED 146 #define IB_CME_CONNECTION_REQUEST_PENDING \ 147 DAPL_IB_CME_CONNECTION_REQUEST_PENDING 148 #define IB_CME_CONNECTION_REQUEST_PENDING_PRIVATE_DATA \ 149 DAPL_IB_CME_CONNECTION_REQUEST_PENDING_PRIVATE_DATA 150 #define IB_CME_DESTINATION_REJECT DAPL_IB_CME_DESTINATION_REJECT 151 #define IB_CME_DESTINATION_REJECT_PRIVATE_DATA \ 152 DAPL_IB_CME_DESTINATION_REJECT_PRIVATE_DATA 153 #define IB_CME_DESTINATION_UNREACHABLE \ 154 DAPL_IB_CME_DESTINATION_UNREACHABLE 155 #define IB_CME_TOO_MANY_CONNECTION_REQUESTS \ 156 DAPL_IB_CME_TOO_MANY_CONNECTION_REQUESTS 157 #define IB_CME_LOCAL_FAILURE DAPL_IB_CME_LOCAL_FAILURE 158 #define IB_CME_TIMED_OUT DAPL_IB_CME_TIMED_OUT 159 #define IB_CME_DISCONNECTED_ON_LINK_DOWN \ 160 DAPL_IB_CME_DISCONNECTED_ON_LINK_DOWN 161 #define IB_CM_REJ_REASON_CONSUMER_REJ \ 162 DAPL_IB_CM_REJ_REASON_CONSUMER_REJ 163 164 /* 165 * Typedefs to map generic 'ib' types to service provider implementation 166 */ 167 typedef dapl_ib_cm_event_type_t ib_cm_events_t; 168 typedef uint64_t ib_cm_handle_t; 169 typedef uint32_t ib_cqd_handle_t; 170 typedef uint64_t ib_cno_handle_t; 171 172 typedef struct dapls_ib_cm_srvc_handle *ib_cm_srvc_handle_t; 173 typedef struct dapls_ib_hca_handle *ib_hca_handle_t; 174 typedef struct dapls_ib_cq_handle *ib_cq_handle_t; 175 typedef struct dapls_ib_qp_handle *ib_qp_handle_t; 176 typedef struct dapls_ib_pd_handle *ib_pd_handle_t; 177 typedef struct dapls_ib_mr_handle *ib_mr_handle_t; 178 typedef struct dapls_ib_mw_handle *ib_mw_handle_t; 179 typedef struct dapls_ib_srq_handle *ib_srq_handle_t; 180 typedef dapl_ib_async_event_t ib_error_record_t; 181 182 typedef char *IB_HCA_NAME; 183 typedef char ib_hca_name_t[256]; 184 typedef uint8_t ib_hca_port_t; 185 typedef uint32_t ib_uint32_t; 186 typedef boolean_t ib_bool_t; 187 188 typedef ibt_cep_state_t ib_qp_state_t; 189 typedef ibt_wrc_opcode_t ib_send_op_type_t; 190 typedef ibt_cq_notify_flags_t ib_notification_type_t; 191 typedef ibt_async_handler_t ib_async_handler_t; 192 typedef ibt_cq_hdl_t ib_comp_handle_t; 193 typedef ibt_wr_ds_t ib_data_segment_t; 194 typedef ibt_wc_t ib_work_completion_t; 195 196 struct tavor_hw_uar_s; 197 typedef struct tavor_hw_uar_s *dapls_hw_uar_t; 198 199 struct tavor_hw_cqe_s; 200 typedef struct tavor_hw_cqe_s *dapls_hw_cqe_t; 201 202 /* Function prototypes */ 203 extern DAT_RETURN dapls_convert_error(int errnum, int retval); 204 205 #ifdef __cplusplus 206 } 207 #endif 208 209 #endif /* _DAPL_TAVOR_IBTI_H */ 210