1/*- 2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0 3 * 4 * Copyright (c) 2005 Topspin Communications. All rights reserved. 5 * Copyright (c) 2005 Intel Corporation. All rights reserved. 6 * 7 * This software is available to you under a choice of one of two 8 * licenses. You may choose to be licensed under the terms of the GNU 9 * General Public License (GPL) Version 2, available from the file 10 * COPYING in the main directory of this source tree, or the 11 * OpenIB.org BSD license below: 12 * 13 * Redistribution and use in source and binary forms, with or 14 * without modification, are permitted provided that the following 15 * conditions are met: 16 * 17 * - Redistributions of source code must retain the above 18 * copyright notice, this list of conditions and the following 19 * disclaimer. 20 * 21 * - Redistributions in binary form must reproduce the above 22 * copyright notice, this list of conditions and the following 23 * disclaimer in the documentation and/or other materials 24 * provided with the distribution. 25 * 26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 29 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 30 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 31 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 32 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 33 * SOFTWARE. 34 * 35 * $FreeBSD$ 36 */ 37 38#ifndef IB_USER_CM_H 39#define IB_USER_CM_H 40 41#ifdef _KERNEL 42#include <linux/types.h> 43#else 44#include <infiniband/types.h> 45#endif 46#include <rdma/ib_user_sa.h> 47 48#define IB_USER_CM_ABI_VERSION 5 49 50enum { 51 IB_USER_CM_CMD_CREATE_ID, 52 IB_USER_CM_CMD_DESTROY_ID, 53 IB_USER_CM_CMD_ATTR_ID, 54 55 IB_USER_CM_CMD_LISTEN, 56 IB_USER_CM_CMD_NOTIFY, 57 58 IB_USER_CM_CMD_SEND_REQ, 59 IB_USER_CM_CMD_SEND_REP, 60 IB_USER_CM_CMD_SEND_RTU, 61 IB_USER_CM_CMD_SEND_DREQ, 62 IB_USER_CM_CMD_SEND_DREP, 63 IB_USER_CM_CMD_SEND_REJ, 64 IB_USER_CM_CMD_SEND_MRA, 65 IB_USER_CM_CMD_SEND_LAP, 66 IB_USER_CM_CMD_SEND_APR, 67 IB_USER_CM_CMD_SEND_SIDR_REQ, 68 IB_USER_CM_CMD_SEND_SIDR_REP, 69 70 IB_USER_CM_CMD_EVENT, 71 IB_USER_CM_CMD_INIT_QP_ATTR, 72}; 73/* 74 * command ABI structures. 75 */ 76struct ib_ucm_cmd_hdr { 77 __u32 cmd; 78 __u16 in; 79 __u16 out; 80}; 81 82struct ib_ucm_create_id { 83 __u64 uid; 84 __u64 response; 85}; 86 87struct ib_ucm_create_id_resp { 88 __u32 id; 89}; 90 91struct ib_ucm_destroy_id { 92 __u64 response; 93 __u32 id; 94 __u32 reserved; 95}; 96 97struct ib_ucm_destroy_id_resp { 98 __u32 events_reported; 99}; 100 101struct ib_ucm_attr_id { 102 __u64 response; 103 __u32 id; 104 __u32 reserved; 105}; 106 107struct ib_ucm_attr_id_resp { 108 __be64 service_id; 109 __be64 service_mask; 110 __be32 local_id; 111 __be32 remote_id; 112}; 113 114struct ib_ucm_init_qp_attr { 115 __u64 response; 116 __u32 id; 117 __u32 qp_state; 118}; 119 120struct ib_ucm_listen { 121 __be64 service_id; 122 __be64 service_mask; 123 __u32 id; 124 __u32 reserved; 125}; 126 127struct ib_ucm_notify { 128 __u32 id; 129 __u32 event; 130}; 131 132struct ib_ucm_private_data { 133 __u64 data; 134 __u32 id; 135 __u8 len; 136 __u8 reserved[3]; 137}; 138 139struct ib_ucm_req { 140 __u32 id; 141 __u32 qpn; 142 __u32 qp_type; 143 __u32 psn; 144 __be64 sid; 145 __u64 data; 146 __u64 primary_path; 147 __u64 alternate_path; 148 __u8 len; 149 __u8 peer_to_peer; 150 __u8 responder_resources; 151 __u8 initiator_depth; 152 __u8 remote_cm_response_timeout; 153 __u8 flow_control; 154 __u8 local_cm_response_timeout; 155 __u8 retry_count; 156 __u8 rnr_retry_count; 157 __u8 max_cm_retries; 158 __u8 srq; 159 __u8 reserved[5]; 160}; 161 162struct ib_ucm_rep { 163 __u64 uid; 164 __u64 data; 165 __u32 id; 166 __u32 qpn; 167 __u32 psn; 168 __u8 len; 169 __u8 responder_resources; 170 __u8 initiator_depth; 171 __u8 target_ack_delay; 172 __u8 failover_accepted; 173 __u8 flow_control; 174 __u8 rnr_retry_count; 175 __u8 srq; 176 __u8 reserved[4]; 177}; 178 179struct ib_ucm_info { 180 __u32 id; 181 __u32 status; 182 __u64 info; 183 __u64 data; 184 __u8 info_len; 185 __u8 data_len; 186 __u8 reserved[6]; 187}; 188 189struct ib_ucm_mra { 190 __u64 data; 191 __u32 id; 192 __u8 len; 193 __u8 timeout; 194 __u8 reserved[2]; 195}; 196 197struct ib_ucm_lap { 198 __u64 path; 199 __u64 data; 200 __u32 id; 201 __u8 len; 202 __u8 reserved[3]; 203}; 204 205struct ib_ucm_sidr_req { 206 __u32 id; 207 __u32 timeout; 208 __be64 sid; 209 __u64 data; 210 __u64 path; 211 __u16 reserved_pkey; 212 __u8 len; 213 __u8 max_cm_retries; 214 __u8 reserved[4]; 215}; 216 217struct ib_ucm_sidr_rep { 218 __u32 id; 219 __u32 qpn; 220 __u32 qkey; 221 __u32 status; 222 __u64 info; 223 __u64 data; 224 __u8 info_len; 225 __u8 data_len; 226 __u8 reserved[6]; 227}; 228/* 229 * event notification ABI structures. 230 */ 231struct ib_ucm_event_get { 232 __u64 response; 233 __u64 data; 234 __u64 info; 235 __u8 data_len; 236 __u8 info_len; 237 __u8 reserved[6]; 238}; 239 240struct ib_ucm_req_event_resp { 241 struct ib_user_path_rec primary_path; 242 struct ib_user_path_rec alternate_path; 243 __be64 remote_ca_guid; 244 __u32 remote_qkey; 245 __u32 remote_qpn; 246 __u32 qp_type; 247 __u32 starting_psn; 248 __u8 responder_resources; 249 __u8 initiator_depth; 250 __u8 local_cm_response_timeout; 251 __u8 flow_control; 252 __u8 remote_cm_response_timeout; 253 __u8 retry_count; 254 __u8 rnr_retry_count; 255 __u8 srq; 256 __u8 port; 257 __u8 reserved[7]; 258}; 259 260struct ib_ucm_rep_event_resp { 261 __be64 remote_ca_guid; 262 __u32 remote_qkey; 263 __u32 remote_qpn; 264 __u32 starting_psn; 265 __u8 responder_resources; 266 __u8 initiator_depth; 267 __u8 target_ack_delay; 268 __u8 failover_accepted; 269 __u8 flow_control; 270 __u8 rnr_retry_count; 271 __u8 srq; 272 __u8 reserved[5]; 273}; 274 275struct ib_ucm_rej_event_resp { 276 __u32 reason; 277 /* ari in ib_ucm_event_get info field. */ 278}; 279 280struct ib_ucm_mra_event_resp { 281 __u8 timeout; 282 __u8 reserved[3]; 283}; 284 285struct ib_ucm_lap_event_resp { 286 struct ib_user_path_rec path; 287}; 288 289struct ib_ucm_apr_event_resp { 290 __u32 status; 291 /* apr info in ib_ucm_event_get info field. */ 292}; 293 294struct ib_ucm_sidr_req_event_resp { 295 __u16 pkey; 296 __u8 port; 297 __u8 reserved; 298}; 299 300struct ib_ucm_sidr_rep_event_resp { 301 __u32 status; 302 __u32 qkey; 303 __u32 qpn; 304 /* info in ib_ucm_event_get info field. */ 305}; 306 307#define IB_UCM_PRES_DATA 0x01 308#define IB_UCM_PRES_INFO 0x02 309#define IB_UCM_PRES_PRIMARY 0x04 310#define IB_UCM_PRES_ALTERNATE 0x08 311 312struct ib_ucm_event_resp { 313 __u64 uid; 314 __u32 id; 315 __u32 event; 316 __u32 present; 317 __u32 reserved; 318 union { 319 struct ib_ucm_req_event_resp req_resp; 320 struct ib_ucm_rep_event_resp rep_resp; 321 struct ib_ucm_rej_event_resp rej_resp; 322 struct ib_ucm_mra_event_resp mra_resp; 323 struct ib_ucm_lap_event_resp lap_resp; 324 struct ib_ucm_apr_event_resp apr_resp; 325 326 struct ib_ucm_sidr_req_event_resp sidr_req_resp; 327 struct ib_ucm_sidr_rep_event_resp sidr_rep_resp; 328 329 __u32 send_status; 330 } u; 331}; 332 333#endif /* IB_USER_CM_H */ 334