130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (c) 2005 Topspin Communications.  All rights reserved.
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This software is available to you under a choice of one of two
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * licenses.  You may choose to be licensed under the terms of the GNU
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * General Public License (GPL) Version 2, available from the file
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * COPYING in the main directory of this source tree, or the
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * OpenIB.org BSD license below:
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *     Redistribution and use in source and binary forms, with or
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *     without modification, are permitted provided that the following
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *     conditions are met:
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *      - Redistributions of source code must retain the above
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *        copyright notice, this list of conditions and the following
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *        disclaimer.
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *      - Redistributions in binary form must reproduce the above
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *        copyright notice, this list of conditions and the following
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *        disclaimer in the documentation and/or other materials
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *        provided with the distribution.
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * SOFTWARE.
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef IB_USER_VERBS_H
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IB_USER_VERBS_H
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Increment this value if any changes that break userspace ABI
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * compatibility are made.
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IB_USER_VERBS_ABI_VERSION	6
46e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define IB_USER_VERBS_CMD_THRESHOLD    50
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum {
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_GET_CONTEXT,
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_QUERY_DEVICE,
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_QUERY_PORT,
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_ALLOC_PD,
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DEALLOC_PD,
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_CREATE_AH,
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_MODIFY_AH,
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_QUERY_AH,
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DESTROY_AH,
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_REG_MR,
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_REG_SMR,
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_REREG_MR,
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_QUERY_MR,
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DEREG_MR,
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_ALLOC_MW,
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_BIND_MW,
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DEALLOC_MW,
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_CREATE_CQ,
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_RESIZE_CQ,
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DESTROY_CQ,
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_POLL_CQ,
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_PEEK_CQ,
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_CREATE_QP,
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_QUERY_QP,
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_MODIFY_QP,
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DESTROY_QP,
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_POST_SEND,
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_POST_RECV,
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_ATTACH_MCAST,
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DETACH_MCAST,
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_CREATE_SRQ,
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_MODIFY_SRQ,
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_QUERY_SRQ,
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_DESTROY_SRQ,
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_POST_SRQ_RECV,
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_OPEN_XRCD,
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_CLOSE_XRCD,
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IB_USER_VERBS_CMD_CREATE_XSRQ,
89e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	IB_USER_VERBS_CMD_OPEN_QP,
90e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
91e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
92e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum {
93e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
94e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	IB_USER_VERBS_EX_CMD_DESTROY_FLOW
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Make sure that all structs defined in this file remain laid out so
9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * that they pack the same way on 32-bit and 64-bit architectures (to
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * avoid incompatibility between 32-bit userspace and 64-bit kernels).
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Specifically:
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *  - Do not use pointer types -- pass pointers in __u64 instead.
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *  - Make sure that any structure larger than 4 bytes is padded to a
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *    multiple of 8 bytes.  Otherwise the structure size will be
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *    different between 32-bit and 64-bit architectures.
10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_async_event_desc {
10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 element;
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 event_type;	/* enum ib_event_type */
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_comp_event_desc {
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 cq_handle;
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * All commands from userspace should start with a __u32 command field
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * followed by __u16 in_words and out_words fields (which give the
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * length of the command block and response buffer if any in 32-bit
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * words).  The kernel driver will read these fields first and read
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the rest of the command struct based on these value.
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
126e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
127e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define IB_USER_VERBS_CMD_FLAGS_MASK 0xff000000u
128e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define IB_USER_VERBS_CMD_FLAGS_SHIFT 24
129e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
130e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80
131e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
13230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_cmd_hdr {
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 command;
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 in_words;
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 out_words;
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
138e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_ex_cmd_hdr {
139e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u64 response;
140e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u16 provider_in_words;
141e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u16 provider_out_words;
142e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 cmd_hdr_reserved;
143e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
144e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
14530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_get_context {
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_get_context_resp {
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 async_fd;
15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 num_comp_vectors;
15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_device {
15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_device_resp {
16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 fw_ver;
16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be64 node_guid;
16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be64 sys_image_guid;
16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 max_mr_size;
16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 page_size_cap;
16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 vendor_id;
16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 vendor_part_id;
16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 hw_ver;
16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_qp;
17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_qp_wr;
17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 device_cap_flags;
17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_sge;
17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_sge_rd;
17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_cq;
17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_cqe;
17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_mr;
17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_pd;
17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_qp_rd_atom;
17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_ee_rd_atom;
18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_res_rd_atom;
18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_qp_init_rd_atom;
18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_ee_init_rd_atom;
18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 atomic_cap;
18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_ee;
18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_rdd;
18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_mw;
18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_raw_ipv6_qp;
18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_raw_ethy_qp;
18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_mcast_grp;
19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_mcast_qp_attach;
19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_total_mcast_qp_attach;
19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_ah;
19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_fmr;
19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_map_per_fmr;
19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_srq;
19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_srq_wr;
19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_srq_sge;
19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 max_pkeys;
19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  local_ca_ack_delay;
20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  phys_port_cnt;
20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved[4];
20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_port {
20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  port_num;
20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved[7];
20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_port_resp {
21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 port_cap_flags;
21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_msg_sz;
21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 bad_pkey_cntr;
21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qkey_viol_cntr;
21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 gid_tbl_len;
21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 pkey_tbl_len;
21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 lid;
21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 sm_lid;
22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  state;
22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  max_mtu;
22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  active_mtu;
22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  lmc;
22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  max_vl_num;
22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sm_sl;
22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  subnet_timeout;
22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  init_type_reply;
22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  active_width;
22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  active_speed;
23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  phys_state;
23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  link_layer;
23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved[2];
23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_alloc_pd {
23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_alloc_pd_resp {
24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_dealloc_pd {
24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_open_xrcd {
24930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 fd;
25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 oflags;
25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
25430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
25530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_open_xrcd_resp {
25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 xrcd_handle;
25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
25930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_close_xrcd {
26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 xrcd_handle;
26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_reg_mr {
26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 start;
26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 length;
26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 hca_va;
26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 access_flags;
27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_reg_mr_resp {
27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 mr_handle;
27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 lkey;
27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 rkey;
27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_dereg_mr {
28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 mr_handle;
28130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
28330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_alloc_mw {
28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  mw_type;
28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved[3];
28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
29030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_alloc_mw_resp {
29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 mw_handle;
29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 rkey;
29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
29530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_dealloc_mw {
29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 mw_handle;
29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
29930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_comp_channel {
30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_comp_channel_resp {
30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 fd;
30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_cq {
30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 user_handle;
31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cqe;
31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 comp_vector;
31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__s32 comp_channel;
31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
31730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_cq_resp {
31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cq_handle;
31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cqe;
32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_resize_cq {
32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cq_handle;
32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cqe;
32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_resize_cq_resp {
33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cqe;
33130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
33430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_poll_cq {
33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
33730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cq_handle;
33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 ne;
33930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_wc {
34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 wr_id;
34330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 status;
34430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 opcode;
34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 vendor_err;
34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 byte_len;
34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
34830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__u32 imm_data;
34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__u32 invalidate_rkey;
35030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} ex;
35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_num;
35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 src_qp;
35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 wc_flags;
35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 pkey_index;
35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 slid;
35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 sl;
35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 dlid_path_bits;
35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 port_num;
35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 reserved;
36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_poll_cq_resp {
36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 count;
36430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_wc wc[0];
36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_req_notify_cq {
36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cq_handle;
37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 solicited_only;
37130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
37230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_destroy_cq {
37430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
37530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cq_handle;
37630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
37730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
37830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_destroy_cq_resp {
38030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 comp_events_reported;
38130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 async_events_reported;
38230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
38330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
38430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_global_route {
38530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  dgid[16];
38630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 flow_label;
38730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sgid_index;
38830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  hop_limit;
38930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  traffic_class;
39030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved;
39130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
39230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
39330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_ah_attr {
39430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_global_route grh;
39530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 dlid;
39630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sl;
39730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  src_path_bits;
39830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  static_rate;
39930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  is_global;
40030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  port_num;
40130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved;
40230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
40330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
40430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_qp_attr {
40530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	qp_attr_mask;
40630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	qp_state;
40730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	cur_qp_state;
40830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	path_mtu;
40930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	path_mig_state;
41030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	qkey;
41130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	rq_psn;
41230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sq_psn;
41330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	dest_qp_num;
41430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	qp_access_flags;
41530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_ah_attr ah_attr;
41730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_ah_attr alt_ah_attr;
41830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* ib_qp_cap */
42030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	max_send_wr;
42130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	max_recv_wr;
42230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	max_send_sge;
42330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	max_recv_sge;
42430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	max_inline_data;
42530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
42630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	pkey_index;
42730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	alt_pkey_index;
42830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	en_sqd_async_notify;
42930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	sq_draining;
43030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	max_rd_atomic;
43130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	max_dest_rd_atomic;
43230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	min_rnr_timer;
43330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	port_num;
43430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	timeout;
43530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	retry_cnt;
43630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	rnr_retry;
43730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	alt_port_num;
43830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	alt_timeout;
43930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	reserved[5];
44030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
44130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
44230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_qp {
44330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
44430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 user_handle;
44530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
44630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 send_cq_handle;
44730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 recv_cq_handle;
44830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_handle;
44930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_send_wr;
45030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_recv_wr;
45130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_send_sge;
45230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_recv_sge;
45330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_inline_data;
45430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sq_sig_all;
45530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  qp_type;
45630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  is_srq;
45730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved;
45830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
45930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
46030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
46130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_open_qp {
46230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
46330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 user_handle;
46430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
46530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qpn;
46630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  qp_type;
46730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved[7];
46830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
46930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
47030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
47130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* also used for open response */
47230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_qp_resp {
47330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
47430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qpn;
47530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_send_wr;
47630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_recv_wr;
47730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_send_sge;
47830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_recv_sge;
47930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_inline_data;
48030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
48130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
48230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
48330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
48430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This struct needs to remain a multiple of 8 bytes to keep the
48530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * alignment of the modify QP parameters.
48630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
48730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_qp_dest {
48830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  dgid[16];
48930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 flow_label;
49030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 dlid;
49130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 reserved;
49230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sgid_index;
49330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  hop_limit;
49430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  traffic_class;
49530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sl;
49630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  src_path_bits;
49730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  static_rate;
49830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  is_global;
49930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  port_num;
50030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
50130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
50230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_qp {
50330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
50430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
50530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 attr_mask;
50630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
50730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
50830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
50930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_qp_resp {
51030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_qp_dest dest;
51130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_qp_dest alt_dest;
51230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_send_wr;
51330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_recv_wr;
51430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_send_sge;
51530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_recv_sge;
51630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_inline_data;
51730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qkey;
51830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 rq_psn;
51930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 sq_psn;
52030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 dest_qp_num;
52130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_access_flags;
52230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 pkey_index;
52330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 alt_pkey_index;
52430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  qp_state;
52530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  cur_qp_state;
52630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  path_mtu;
52730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  path_mig_state;
52830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sq_draining;
52930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  max_rd_atomic;
53030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  max_dest_rd_atomic;
53130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  min_rnr_timer;
53230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  port_num;
53330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  timeout;
53430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  retry_cnt;
53530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  rnr_retry;
53630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  alt_port_num;
53730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  alt_timeout;
53830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  sq_sig_all;
53930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved[5];
54030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
54130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
54230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
54330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_modify_qp {
54430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_qp_dest dest;
54530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_qp_dest alt_dest;
54630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
54730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 attr_mask;
54830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qkey;
54930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 rq_psn;
55030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 sq_psn;
55130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 dest_qp_num;
55230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_access_flags;
55330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 pkey_index;
55430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 alt_pkey_index;
55530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  qp_state;
55630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  cur_qp_state;
55730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  path_mtu;
55830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  path_mig_state;
55930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  en_sqd_async_notify;
56030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  max_rd_atomic;
56130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  max_dest_rd_atomic;
56230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  min_rnr_timer;
56330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  port_num;
56430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  timeout;
56530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  retry_cnt;
56630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  rnr_retry;
56730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  alt_port_num;
56830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  alt_timeout;
56930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  reserved[2];
57030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
57130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
57230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
57330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_modify_qp_resp {
57430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
57530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
57630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_destroy_qp {
57730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
57830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
57930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
58030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
58130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
58230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_destroy_qp_resp {
58330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 events_reported;
58430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
58530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
58630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
58730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The ib_uverbs_sge structure isn't used anywhere, since we assume
58830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the ib_sge structure is packed the same way on 32-bit and 64-bit
58930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * architectures in both kernel and user space.  It's just here to
59030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * document the ABI.
59130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
59230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_sge {
59330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 addr;
59430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 length;
59530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 lkey;
59630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
59730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
59830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_send_wr {
59930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 wr_id;
60030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 num_sge;
60130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 opcode;
60230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 send_flags;
60330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
60430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__u32 imm_data;
60530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__u32 invalidate_rkey;
60630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} ex;
60730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
60830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
60930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u64 remote_addr;
61030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 rkey;
61130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 reserved;
61230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} rdma;
61330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
61430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u64 remote_addr;
61530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u64 compare_add;
61630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u64 swap;
61730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 rkey;
61830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 reserved;
61930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} atomic;
62030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
62130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 ah;
62230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 remote_qpn;
62330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 remote_qkey;
62430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 reserved;
62530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} ud;
62630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} wr;
62730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
62830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
62930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_post_send {
63030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
63130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
63230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 wr_count;
63330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 sge_count;
63430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 wqe_size;
63530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_send_wr send_wr[0];
63630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
63730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
63830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_post_send_resp {
63930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 bad_wr;
64030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
64130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
64230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_recv_wr {
64330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 wr_id;
64430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 num_sge;
64530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
64630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
64730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
64830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_post_recv {
64930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
65030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
65130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 wr_count;
65230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 sge_count;
65330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 wqe_size;
65430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_recv_wr recv_wr[0];
65530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
65630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
65730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_post_recv_resp {
65830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 bad_wr;
65930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
66030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
66130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_post_srq_recv {
66230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
66330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_handle;
66430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 wr_count;
66530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 sge_count;
66630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 wqe_size;
66730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_recv_wr recv[0];
66830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
66930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
67030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_post_srq_recv_resp {
67130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 bad_wr;
67230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
67330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
67430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_ah {
67530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
67630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 user_handle;
67730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
67830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
67930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct ib_uverbs_ah_attr attr;
68030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
68130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
68230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_ah_resp {
68330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 ah_handle;
68430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
68530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
68630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_destroy_ah {
68730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 ah_handle;
68830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
68930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
69030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_attach_mcast {
69130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  gid[16];
69230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
69330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 mlid;
69430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 reserved;
69530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
69630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
69730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
69830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_detach_mcast {
69930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8  gid[16];
70030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 qp_handle;
70130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 mlid;
70230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16 reserved;
70330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
704e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
705e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
706e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_spec_hdr {
707e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 type;
708e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u16 size;
709e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u16 reserved;
710e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	/* followed by flow_spec */
711e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u64 flow_spec_data[0];
712e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
713e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
714e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_eth_filter {
715e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u8  dst_mac[6];
716e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u8  src_mac[6];
717e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__be16 ether_type;
718e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__be16 vlan_tag;
719e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
720e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
721e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_spec_eth {
722e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	union {
723e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		struct ib_uverbs_flow_spec_hdr hdr;
724e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		struct {
725e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u32 type;
726e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u16 size;
727e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u16 reserved;
728e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		};
729e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	};
730e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_eth_filter val;
731e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_eth_filter mask;
732e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
733e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
734e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_ipv4_filter {
735e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__be32 src_ip;
736e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__be32 dst_ip;
737e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
738e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
739e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_spec_ipv4 {
740e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	union {
741e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		struct ib_uverbs_flow_spec_hdr hdr;
742e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		struct {
743e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u32 type;
744e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u16 size;
745e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u16 reserved;
746e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		};
747e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	};
748e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_ipv4_filter val;
749e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_ipv4_filter mask;
750e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
751e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
752e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_tcp_udp_filter {
753e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__be16 dst_port;
754e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__be16 src_port;
755e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
756e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
757e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_spec_tcp_udp {
758e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	union {
759e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		struct ib_uverbs_flow_spec_hdr hdr;
760e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		struct {
761e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u32 type;
762e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u16 size;
763e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl			__u16 reserved;
764e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl		};
765e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	};
766e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_tcp_udp_filter val;
767e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_tcp_udp_filter mask;
768e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
769e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
770e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_flow_attr {
771e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 type;
772e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u16 size;
773e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u16 priority;
774e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u8  num_of_specs;
775e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u8  reserved[2];
776e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u8  port;
777e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 flags;
778e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	/* Following are the optional layers according to user request
779e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	 * struct ib_flow_spec_xxx
780e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	 * struct ib_flow_spec_yyy
781e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	 */
782e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_spec_hdr flow_specs[0];
783e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
784e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
785e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_create_flow  {
786e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 comp_mask;
787e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 qp_handle;
788e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	struct ib_uverbs_flow_attr flow_attr;
789e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
790e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
791e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_create_flow_resp {
792e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 comp_mask;
793e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 flow_handle;
794e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
795e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
796e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylstruct ib_uverbs_destroy_flow  {
797e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 comp_mask;
798e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__u32 flow_handle;
79930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
80030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
80130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_srq {
80230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
80330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 user_handle;
80430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
80530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_wr;
80630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_sge;
80730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_limit;
80830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
80930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
81030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
81130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_xsrq {
81230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
81330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 user_handle;
81430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_type;
81530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 pd_handle;
81630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_wr;
81730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_sge;
81830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_limit;
81930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
82030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 xrcd_handle;
82130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cq_handle;
82230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
82330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
82430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
82530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_create_srq_resp {
82630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_handle;
82730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_wr;
82830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_sge;
82930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srqn;
83030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
83130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
83230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_modify_srq {
83330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_handle;
83430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 attr_mask;
83530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_wr;
83630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_limit;
83730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
83830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
83930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
84030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_srq {
84130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
84230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_handle;
84330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
84430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 driver_data[0];
84530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
84630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
84730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_query_srq_resp {
84830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_wr;
84930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 max_sge;
85030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_limit;
85130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
85230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
85330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
85430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_destroy_srq {
85530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64 response;
85630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 srq_handle;
85730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved;
85830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
85930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
86030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ib_uverbs_destroy_srq_resp {
86130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 events_reported;
86230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
86330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
86430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* IB_USER_VERBS_H */
865