xref: /freebsd/sys/ofed/include/uapi/rdma/ib_user_cm.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1*09938b21SHans Petter Selasky /*-
2*09938b21SHans Petter Selasky  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
3*09938b21SHans Petter Selasky  *
49f715dc1SHans Petter Selasky  * Copyright (c) 2005 Topspin Communications.  All rights reserved.
59f715dc1SHans Petter Selasky  * Copyright (c) 2005 Intel Corporation.  All rights reserved.
69f715dc1SHans Petter Selasky  *
79f715dc1SHans Petter Selasky  * This software is available to you under a choice of one of two
89f715dc1SHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
99f715dc1SHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
109f715dc1SHans Petter Selasky  * COPYING in the main directory of this source tree, or the
119f715dc1SHans Petter Selasky  * OpenIB.org BSD license below:
129f715dc1SHans Petter Selasky  *
139f715dc1SHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
149f715dc1SHans Petter Selasky  *     without modification, are permitted provided that the following
159f715dc1SHans Petter Selasky  *     conditions are met:
169f715dc1SHans Petter Selasky  *
179f715dc1SHans Petter Selasky  *      - Redistributions of source code must retain the above
189f715dc1SHans Petter Selasky  *        copyright notice, this list of conditions and the following
199f715dc1SHans Petter Selasky  *        disclaimer.
209f715dc1SHans Petter Selasky  *
219f715dc1SHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
229f715dc1SHans Petter Selasky  *        copyright notice, this list of conditions and the following
239f715dc1SHans Petter Selasky  *        disclaimer in the documentation and/or other materials
249f715dc1SHans Petter Selasky  *        provided with the distribution.
259f715dc1SHans Petter Selasky  *
269f715dc1SHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
279f715dc1SHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
289f715dc1SHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
299f715dc1SHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
309f715dc1SHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
319f715dc1SHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
329f715dc1SHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
339f715dc1SHans Petter Selasky  * SOFTWARE.
349f715dc1SHans Petter Selasky  */
359f715dc1SHans Petter Selasky 
369f715dc1SHans Petter Selasky #ifndef IB_USER_CM_H
379f715dc1SHans Petter Selasky #define IB_USER_CM_H
389f715dc1SHans Petter Selasky 
399f715dc1SHans Petter Selasky #ifdef _KERNEL
409f715dc1SHans Petter Selasky #include <linux/types.h>
419f715dc1SHans Petter Selasky #else
429f715dc1SHans Petter Selasky #include <infiniband/types.h>
439f715dc1SHans Petter Selasky #endif
449f715dc1SHans Petter Selasky #include <rdma/ib_user_sa.h>
459f715dc1SHans Petter Selasky 
469f715dc1SHans Petter Selasky #define IB_USER_CM_ABI_VERSION 5
479f715dc1SHans Petter Selasky 
489f715dc1SHans Petter Selasky enum {
499f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_CREATE_ID,
509f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_DESTROY_ID,
519f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_ATTR_ID,
529f715dc1SHans Petter Selasky 
539f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_LISTEN,
549f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_NOTIFY,
559f715dc1SHans Petter Selasky 
569f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_REQ,
579f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_REP,
589f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_RTU,
599f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_DREQ,
609f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_DREP,
619f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_REJ,
629f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_MRA,
639f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_LAP,
649f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_APR,
659f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_SIDR_REQ,
669f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_SEND_SIDR_REP,
679f715dc1SHans Petter Selasky 
689f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_EVENT,
699f715dc1SHans Petter Selasky 	IB_USER_CM_CMD_INIT_QP_ATTR,
709f715dc1SHans Petter Selasky };
719f715dc1SHans Petter Selasky /*
729f715dc1SHans Petter Selasky  * command ABI structures.
739f715dc1SHans Petter Selasky  */
749f715dc1SHans Petter Selasky struct ib_ucm_cmd_hdr {
759f715dc1SHans Petter Selasky 	__u32 cmd;
769f715dc1SHans Petter Selasky 	__u16 in;
779f715dc1SHans Petter Selasky 	__u16 out;
789f715dc1SHans Petter Selasky };
799f715dc1SHans Petter Selasky 
809f715dc1SHans Petter Selasky struct ib_ucm_create_id {
819f715dc1SHans Petter Selasky 	__u64 uid;
829f715dc1SHans Petter Selasky 	__u64 response;
839f715dc1SHans Petter Selasky };
849f715dc1SHans Petter Selasky 
859f715dc1SHans Petter Selasky struct ib_ucm_create_id_resp {
869f715dc1SHans Petter Selasky 	__u32 id;
879f715dc1SHans Petter Selasky };
889f715dc1SHans Petter Selasky 
899f715dc1SHans Petter Selasky struct ib_ucm_destroy_id {
909f715dc1SHans Petter Selasky 	__u64 response;
919f715dc1SHans Petter Selasky 	__u32 id;
929f715dc1SHans Petter Selasky 	__u32 reserved;
939f715dc1SHans Petter Selasky };
949f715dc1SHans Petter Selasky 
959f715dc1SHans Petter Selasky struct ib_ucm_destroy_id_resp {
969f715dc1SHans Petter Selasky 	__u32 events_reported;
979f715dc1SHans Petter Selasky };
989f715dc1SHans Petter Selasky 
999f715dc1SHans Petter Selasky struct ib_ucm_attr_id {
1009f715dc1SHans Petter Selasky 	__u64 response;
1019f715dc1SHans Petter Selasky 	__u32 id;
1029f715dc1SHans Petter Selasky 	__u32 reserved;
1039f715dc1SHans Petter Selasky };
1049f715dc1SHans Petter Selasky 
1059f715dc1SHans Petter Selasky struct ib_ucm_attr_id_resp {
1069f715dc1SHans Petter Selasky 	__be64 service_id;
1079f715dc1SHans Petter Selasky 	__be64 service_mask;
1089f715dc1SHans Petter Selasky 	__be32 local_id;
1099f715dc1SHans Petter Selasky 	__be32 remote_id;
1109f715dc1SHans Petter Selasky };
1119f715dc1SHans Petter Selasky 
1129f715dc1SHans Petter Selasky struct ib_ucm_init_qp_attr {
1139f715dc1SHans Petter Selasky 	__u64 response;
1149f715dc1SHans Petter Selasky 	__u32 id;
1159f715dc1SHans Petter Selasky 	__u32 qp_state;
1169f715dc1SHans Petter Selasky };
1179f715dc1SHans Petter Selasky 
1189f715dc1SHans Petter Selasky struct ib_ucm_listen {
1199f715dc1SHans Petter Selasky 	__be64 service_id;
1209f715dc1SHans Petter Selasky 	__be64 service_mask;
1219f715dc1SHans Petter Selasky 	__u32 id;
1229f715dc1SHans Petter Selasky 	__u32 reserved;
1239f715dc1SHans Petter Selasky };
1249f715dc1SHans Petter Selasky 
1259f715dc1SHans Petter Selasky struct ib_ucm_notify {
1269f715dc1SHans Petter Selasky 	__u32 id;
1279f715dc1SHans Petter Selasky 	__u32 event;
1289f715dc1SHans Petter Selasky };
1299f715dc1SHans Petter Selasky 
1309f715dc1SHans Petter Selasky struct ib_ucm_private_data {
1319f715dc1SHans Petter Selasky 	__u64 data;
1329f715dc1SHans Petter Selasky 	__u32 id;
1339f715dc1SHans Petter Selasky 	__u8  len;
1349f715dc1SHans Petter Selasky 	__u8  reserved[3];
1359f715dc1SHans Petter Selasky };
1369f715dc1SHans Petter Selasky 
1379f715dc1SHans Petter Selasky struct ib_ucm_req {
1389f715dc1SHans Petter Selasky 	__u32 id;
1399f715dc1SHans Petter Selasky 	__u32 qpn;
1409f715dc1SHans Petter Selasky 	__u32 qp_type;
1419f715dc1SHans Petter Selasky 	__u32 psn;
1429f715dc1SHans Petter Selasky 	__be64 sid;
1439f715dc1SHans Petter Selasky 	__u64 data;
1449f715dc1SHans Petter Selasky 	__u64 primary_path;
1459f715dc1SHans Petter Selasky 	__u64 alternate_path;
1469f715dc1SHans Petter Selasky 	__u8  len;
1479f715dc1SHans Petter Selasky 	__u8  peer_to_peer;
1489f715dc1SHans Petter Selasky 	__u8  responder_resources;
1499f715dc1SHans Petter Selasky 	__u8  initiator_depth;
1509f715dc1SHans Petter Selasky 	__u8  remote_cm_response_timeout;
1519f715dc1SHans Petter Selasky 	__u8  flow_control;
1529f715dc1SHans Petter Selasky 	__u8  local_cm_response_timeout;
1539f715dc1SHans Petter Selasky 	__u8  retry_count;
1549f715dc1SHans Petter Selasky 	__u8  rnr_retry_count;
1559f715dc1SHans Petter Selasky 	__u8  max_cm_retries;
1569f715dc1SHans Petter Selasky 	__u8  srq;
1579f715dc1SHans Petter Selasky 	__u8  reserved[5];
1589f715dc1SHans Petter Selasky };
1599f715dc1SHans Petter Selasky 
1609f715dc1SHans Petter Selasky struct ib_ucm_rep {
1619f715dc1SHans Petter Selasky 	__u64 uid;
1629f715dc1SHans Petter Selasky 	__u64 data;
1639f715dc1SHans Petter Selasky 	__u32 id;
1649f715dc1SHans Petter Selasky 	__u32 qpn;
1659f715dc1SHans Petter Selasky 	__u32 psn;
1669f715dc1SHans Petter Selasky 	__u8  len;
1679f715dc1SHans Petter Selasky 	__u8  responder_resources;
1689f715dc1SHans Petter Selasky 	__u8  initiator_depth;
1699f715dc1SHans Petter Selasky 	__u8  target_ack_delay;
1709f715dc1SHans Petter Selasky 	__u8  failover_accepted;
1719f715dc1SHans Petter Selasky 	__u8  flow_control;
1729f715dc1SHans Petter Selasky 	__u8  rnr_retry_count;
1739f715dc1SHans Petter Selasky 	__u8  srq;
1749f715dc1SHans Petter Selasky 	__u8  reserved[4];
1759f715dc1SHans Petter Selasky };
1769f715dc1SHans Petter Selasky 
1779f715dc1SHans Petter Selasky struct ib_ucm_info {
1789f715dc1SHans Petter Selasky 	__u32 id;
1799f715dc1SHans Petter Selasky 	__u32 status;
1809f715dc1SHans Petter Selasky 	__u64 info;
1819f715dc1SHans Petter Selasky 	__u64 data;
1829f715dc1SHans Petter Selasky 	__u8  info_len;
1839f715dc1SHans Petter Selasky 	__u8  data_len;
1849f715dc1SHans Petter Selasky 	__u8  reserved[6];
1859f715dc1SHans Petter Selasky };
1869f715dc1SHans Petter Selasky 
1879f715dc1SHans Petter Selasky struct ib_ucm_mra {
1889f715dc1SHans Petter Selasky 	__u64 data;
1899f715dc1SHans Petter Selasky 	__u32 id;
1909f715dc1SHans Petter Selasky 	__u8  len;
1919f715dc1SHans Petter Selasky 	__u8  timeout;
1929f715dc1SHans Petter Selasky 	__u8  reserved[2];
1939f715dc1SHans Petter Selasky };
1949f715dc1SHans Petter Selasky 
1959f715dc1SHans Petter Selasky struct ib_ucm_lap {
1969f715dc1SHans Petter Selasky 	__u64 path;
1979f715dc1SHans Petter Selasky 	__u64 data;
1989f715dc1SHans Petter Selasky 	__u32 id;
1999f715dc1SHans Petter Selasky 	__u8  len;
2009f715dc1SHans Petter Selasky 	__u8  reserved[3];
2019f715dc1SHans Petter Selasky };
2029f715dc1SHans Petter Selasky 
2039f715dc1SHans Petter Selasky struct ib_ucm_sidr_req {
2049f715dc1SHans Petter Selasky 	__u32 id;
2059f715dc1SHans Petter Selasky 	__u32 timeout;
2069f715dc1SHans Petter Selasky 	__be64 sid;
2079f715dc1SHans Petter Selasky 	__u64 data;
2089f715dc1SHans Petter Selasky 	__u64 path;
2099f715dc1SHans Petter Selasky 	__u16 reserved_pkey;
2109f715dc1SHans Petter Selasky 	__u8  len;
2119f715dc1SHans Petter Selasky 	__u8  max_cm_retries;
2129f715dc1SHans Petter Selasky 	__u8  reserved[4];
2139f715dc1SHans Petter Selasky };
2149f715dc1SHans Petter Selasky 
2159f715dc1SHans Petter Selasky struct ib_ucm_sidr_rep {
2169f715dc1SHans Petter Selasky 	__u32 id;
2179f715dc1SHans Petter Selasky 	__u32 qpn;
2189f715dc1SHans Petter Selasky 	__u32 qkey;
2199f715dc1SHans Petter Selasky 	__u32 status;
2209f715dc1SHans Petter Selasky 	__u64 info;
2219f715dc1SHans Petter Selasky 	__u64 data;
2229f715dc1SHans Petter Selasky 	__u8  info_len;
2239f715dc1SHans Petter Selasky 	__u8  data_len;
2249f715dc1SHans Petter Selasky 	__u8  reserved[6];
2259f715dc1SHans Petter Selasky };
2269f715dc1SHans Petter Selasky /*
2279f715dc1SHans Petter Selasky  * event notification ABI structures.
2289f715dc1SHans Petter Selasky  */
2299f715dc1SHans Petter Selasky struct ib_ucm_event_get {
2309f715dc1SHans Petter Selasky 	__u64 response;
2319f715dc1SHans Petter Selasky 	__u64 data;
2329f715dc1SHans Petter Selasky 	__u64 info;
2339f715dc1SHans Petter Selasky 	__u8  data_len;
2349f715dc1SHans Petter Selasky 	__u8  info_len;
2359f715dc1SHans Petter Selasky 	__u8  reserved[6];
2369f715dc1SHans Petter Selasky };
2379f715dc1SHans Petter Selasky 
2389f715dc1SHans Petter Selasky struct ib_ucm_req_event_resp {
2399f715dc1SHans Petter Selasky 	struct ib_user_path_rec primary_path;
2409f715dc1SHans Petter Selasky 	struct ib_user_path_rec alternate_path;
2419f715dc1SHans Petter Selasky 	__be64                 remote_ca_guid;
2429f715dc1SHans Petter Selasky 	__u32                  remote_qkey;
2439f715dc1SHans Petter Selasky 	__u32                  remote_qpn;
2449f715dc1SHans Petter Selasky 	__u32                  qp_type;
2459f715dc1SHans Petter Selasky 	__u32                  starting_psn;
2469f715dc1SHans Petter Selasky 	__u8  responder_resources;
2479f715dc1SHans Petter Selasky 	__u8  initiator_depth;
2489f715dc1SHans Petter Selasky 	__u8  local_cm_response_timeout;
2499f715dc1SHans Petter Selasky 	__u8  flow_control;
2509f715dc1SHans Petter Selasky 	__u8  remote_cm_response_timeout;
2519f715dc1SHans Petter Selasky 	__u8  retry_count;
2529f715dc1SHans Petter Selasky 	__u8  rnr_retry_count;
2539f715dc1SHans Petter Selasky 	__u8  srq;
2549f715dc1SHans Petter Selasky 	__u8  port;
2559f715dc1SHans Petter Selasky 	__u8  reserved[7];
2569f715dc1SHans Petter Selasky };
2579f715dc1SHans Petter Selasky 
2589f715dc1SHans Petter Selasky struct ib_ucm_rep_event_resp {
2599f715dc1SHans Petter Selasky 	__be64 remote_ca_guid;
2609f715dc1SHans Petter Selasky 	__u32 remote_qkey;
2619f715dc1SHans Petter Selasky 	__u32 remote_qpn;
2629f715dc1SHans Petter Selasky 	__u32 starting_psn;
2639f715dc1SHans Petter Selasky 	__u8  responder_resources;
2649f715dc1SHans Petter Selasky 	__u8  initiator_depth;
2659f715dc1SHans Petter Selasky 	__u8  target_ack_delay;
2669f715dc1SHans Petter Selasky 	__u8  failover_accepted;
2679f715dc1SHans Petter Selasky 	__u8  flow_control;
2689f715dc1SHans Petter Selasky 	__u8  rnr_retry_count;
2699f715dc1SHans Petter Selasky 	__u8  srq;
2709f715dc1SHans Petter Selasky 	__u8  reserved[5];
2719f715dc1SHans Petter Selasky };
2729f715dc1SHans Petter Selasky 
2739f715dc1SHans Petter Selasky struct ib_ucm_rej_event_resp {
2749f715dc1SHans Petter Selasky 	__u32 reason;
2759f715dc1SHans Petter Selasky 	/* ari in ib_ucm_event_get info field. */
2769f715dc1SHans Petter Selasky };
2779f715dc1SHans Petter Selasky 
2789f715dc1SHans Petter Selasky struct ib_ucm_mra_event_resp {
2799f715dc1SHans Petter Selasky 	__u8  timeout;
2809f715dc1SHans Petter Selasky 	__u8  reserved[3];
2819f715dc1SHans Petter Selasky };
2829f715dc1SHans Petter Selasky 
2839f715dc1SHans Petter Selasky struct ib_ucm_lap_event_resp {
2849f715dc1SHans Petter Selasky 	struct ib_user_path_rec path;
2859f715dc1SHans Petter Selasky };
2869f715dc1SHans Petter Selasky 
2879f715dc1SHans Petter Selasky struct ib_ucm_apr_event_resp {
2889f715dc1SHans Petter Selasky 	__u32 status;
2899f715dc1SHans Petter Selasky 	/* apr info in ib_ucm_event_get info field. */
2909f715dc1SHans Petter Selasky };
2919f715dc1SHans Petter Selasky 
2929f715dc1SHans Petter Selasky struct ib_ucm_sidr_req_event_resp {
2939f715dc1SHans Petter Selasky 	__u16 pkey;
2949f715dc1SHans Petter Selasky 	__u8  port;
2959f715dc1SHans Petter Selasky 	__u8  reserved;
2969f715dc1SHans Petter Selasky };
2979f715dc1SHans Petter Selasky 
2989f715dc1SHans Petter Selasky struct ib_ucm_sidr_rep_event_resp {
2999f715dc1SHans Petter Selasky 	__u32 status;
3009f715dc1SHans Petter Selasky 	__u32 qkey;
3019f715dc1SHans Petter Selasky 	__u32 qpn;
3029f715dc1SHans Petter Selasky 	/* info in ib_ucm_event_get info field. */
3039f715dc1SHans Petter Selasky };
3049f715dc1SHans Petter Selasky 
3059f715dc1SHans Petter Selasky #define IB_UCM_PRES_DATA      0x01
3069f715dc1SHans Petter Selasky #define IB_UCM_PRES_INFO      0x02
3079f715dc1SHans Petter Selasky #define IB_UCM_PRES_PRIMARY   0x04
3089f715dc1SHans Petter Selasky #define IB_UCM_PRES_ALTERNATE 0x08
3099f715dc1SHans Petter Selasky 
3109f715dc1SHans Petter Selasky struct ib_ucm_event_resp {
3119f715dc1SHans Petter Selasky 	__u64 uid;
3129f715dc1SHans Petter Selasky 	__u32 id;
3139f715dc1SHans Petter Selasky 	__u32 event;
3149f715dc1SHans Petter Selasky 	__u32 present;
3159f715dc1SHans Petter Selasky 	__u32 reserved;
3169f715dc1SHans Petter Selasky 	union {
3179f715dc1SHans Petter Selasky 		struct ib_ucm_req_event_resp req_resp;
3189f715dc1SHans Petter Selasky 		struct ib_ucm_rep_event_resp rep_resp;
3199f715dc1SHans Petter Selasky 		struct ib_ucm_rej_event_resp rej_resp;
3209f715dc1SHans Petter Selasky 		struct ib_ucm_mra_event_resp mra_resp;
3219f715dc1SHans Petter Selasky 		struct ib_ucm_lap_event_resp lap_resp;
3229f715dc1SHans Petter Selasky 		struct ib_ucm_apr_event_resp apr_resp;
3239f715dc1SHans Petter Selasky 
3249f715dc1SHans Petter Selasky 		struct ib_ucm_sidr_req_event_resp sidr_req_resp;
3259f715dc1SHans Petter Selasky 		struct ib_ucm_sidr_rep_event_resp sidr_rep_resp;
3269f715dc1SHans Petter Selasky 
3279f715dc1SHans Petter Selasky 		__u32                             send_status;
3289f715dc1SHans Petter Selasky 	} u;
3299f715dc1SHans Petter Selasky };
3309f715dc1SHans Petter Selasky 
3319f715dc1SHans Petter Selasky #endif /* IB_USER_CM_H */
332