18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (c) 2005 Topspin Communications.  All rights reserved.
48c2ecf20Sopenharmony_ci * Copyright (c) 2005, 2006 Cisco Systems.  All rights reserved.
58c2ecf20Sopenharmony_ci * Copyright (c) 2005 PathScale, Inc.  All rights reserved.
68c2ecf20Sopenharmony_ci * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * This software is available to you under a choice of one of two
98c2ecf20Sopenharmony_ci * licenses.  You may choose to be licensed under the terms of the GNU
108c2ecf20Sopenharmony_ci * General Public License (GPL) Version 2, available from the file
118c2ecf20Sopenharmony_ci * COPYING in the main directory of this source tree, or the
128c2ecf20Sopenharmony_ci * OpenIB.org BSD license below:
138c2ecf20Sopenharmony_ci *
148c2ecf20Sopenharmony_ci *     Redistribution and use in source and binary forms, with or
158c2ecf20Sopenharmony_ci *     without modification, are permitted provided that the following
168c2ecf20Sopenharmony_ci *     conditions are met:
178c2ecf20Sopenharmony_ci *
188c2ecf20Sopenharmony_ci *      - Redistributions of source code must retain the above
198c2ecf20Sopenharmony_ci *        copyright notice, this list of conditions and the following
208c2ecf20Sopenharmony_ci *        disclaimer.
218c2ecf20Sopenharmony_ci *
228c2ecf20Sopenharmony_ci *      - Redistributions in binary form must reproduce the above
238c2ecf20Sopenharmony_ci *        copyright notice, this list of conditions and the following
248c2ecf20Sopenharmony_ci *        disclaimer in the documentation and/or other materials
258c2ecf20Sopenharmony_ci *        provided with the distribution.
268c2ecf20Sopenharmony_ci *
278c2ecf20Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
288c2ecf20Sopenharmony_ci * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
298c2ecf20Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
308c2ecf20Sopenharmony_ci * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
318c2ecf20Sopenharmony_ci * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
328c2ecf20Sopenharmony_ci * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
338c2ecf20Sopenharmony_ci * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
348c2ecf20Sopenharmony_ci * SOFTWARE.
358c2ecf20Sopenharmony_ci */
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#ifndef IB_USER_VERBS_H
388c2ecf20Sopenharmony_ci#define IB_USER_VERBS_H
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci#include <linux/types.h>
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci/*
438c2ecf20Sopenharmony_ci * Increment this value if any changes that break userspace ABI
448c2ecf20Sopenharmony_ci * compatibility are made.
458c2ecf20Sopenharmony_ci */
468c2ecf20Sopenharmony_ci#define IB_USER_VERBS_ABI_VERSION	6
478c2ecf20Sopenharmony_ci#define IB_USER_VERBS_CMD_THRESHOLD    50
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_cienum ib_uverbs_write_cmds {
508c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_GET_CONTEXT,
518c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_QUERY_DEVICE,
528c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_QUERY_PORT,
538c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_ALLOC_PD,
548c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DEALLOC_PD,
558c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_CREATE_AH,
568c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_MODIFY_AH,
578c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_QUERY_AH,
588c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DESTROY_AH,
598c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_REG_MR,
608c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_REG_SMR,
618c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_REREG_MR,
628c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_QUERY_MR,
638c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DEREG_MR,
648c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_ALLOC_MW,
658c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_BIND_MW,
668c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DEALLOC_MW,
678c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
688c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_CREATE_CQ,
698c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_RESIZE_CQ,
708c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DESTROY_CQ,
718c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_POLL_CQ,
728c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_PEEK_CQ,
738c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
748c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_CREATE_QP,
758c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_QUERY_QP,
768c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_MODIFY_QP,
778c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DESTROY_QP,
788c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_POST_SEND,
798c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_POST_RECV,
808c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_ATTACH_MCAST,
818c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DETACH_MCAST,
828c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_CREATE_SRQ,
838c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_MODIFY_SRQ,
848c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_QUERY_SRQ,
858c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_DESTROY_SRQ,
868c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_POST_SRQ_RECV,
878c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_OPEN_XRCD,
888c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_CLOSE_XRCD,
898c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_CREATE_XSRQ,
908c2ecf20Sopenharmony_ci	IB_USER_VERBS_CMD_OPEN_QP,
918c2ecf20Sopenharmony_ci};
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_cienum {
948c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_QUERY_DEVICE = IB_USER_VERBS_CMD_QUERY_DEVICE,
958c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_CREATE_CQ = IB_USER_VERBS_CMD_CREATE_CQ,
968c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_CREATE_QP = IB_USER_VERBS_CMD_CREATE_QP,
978c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_MODIFY_QP = IB_USER_VERBS_CMD_MODIFY_QP,
988c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
998c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_DESTROY_FLOW,
1008c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_CREATE_WQ,
1018c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_MODIFY_WQ,
1028c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_DESTROY_WQ,
1038c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_CREATE_RWQ_IND_TBL,
1048c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_DESTROY_RWQ_IND_TBL,
1058c2ecf20Sopenharmony_ci	IB_USER_VERBS_EX_CMD_MODIFY_CQ
1068c2ecf20Sopenharmony_ci};
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ci/*
1098c2ecf20Sopenharmony_ci * Make sure that all structs defined in this file remain laid out so
1108c2ecf20Sopenharmony_ci * that they pack the same way on 32-bit and 64-bit architectures (to
1118c2ecf20Sopenharmony_ci * avoid incompatibility between 32-bit userspace and 64-bit kernels).
1128c2ecf20Sopenharmony_ci * Specifically:
1138c2ecf20Sopenharmony_ci *  - Do not use pointer types -- pass pointers in __u64 instead.
1148c2ecf20Sopenharmony_ci *  - Make sure that any structure larger than 4 bytes is padded to a
1158c2ecf20Sopenharmony_ci *    multiple of 8 bytes.  Otherwise the structure size will be
1168c2ecf20Sopenharmony_ci *    different between 32-bit and 64-bit architectures.
1178c2ecf20Sopenharmony_ci */
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_cistruct ib_uverbs_async_event_desc {
1208c2ecf20Sopenharmony_ci	__aligned_u64 element;
1218c2ecf20Sopenharmony_ci	__u32 event_type;	/* enum ib_event_type */
1228c2ecf20Sopenharmony_ci	__u32 reserved;
1238c2ecf20Sopenharmony_ci};
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_cistruct ib_uverbs_comp_event_desc {
1268c2ecf20Sopenharmony_ci	__aligned_u64 cq_handle;
1278c2ecf20Sopenharmony_ci};
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_cistruct ib_uverbs_cq_moderation_caps {
1308c2ecf20Sopenharmony_ci	__u16     max_cq_moderation_count;
1318c2ecf20Sopenharmony_ci	__u16     max_cq_moderation_period;
1328c2ecf20Sopenharmony_ci	__u32     reserved;
1338c2ecf20Sopenharmony_ci};
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci/*
1368c2ecf20Sopenharmony_ci * All commands from userspace should start with a __u32 command field
1378c2ecf20Sopenharmony_ci * followed by __u16 in_words and out_words fields (which give the
1388c2ecf20Sopenharmony_ci * length of the command block and response buffer if any in 32-bit
1398c2ecf20Sopenharmony_ci * words).  The kernel driver will read these fields first and read
1408c2ecf20Sopenharmony_ci * the rest of the command struct based on these value.
1418c2ecf20Sopenharmony_ci */
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ci#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
1448c2ecf20Sopenharmony_ci#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80000000u
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_cistruct ib_uverbs_cmd_hdr {
1478c2ecf20Sopenharmony_ci	__u32 command;
1488c2ecf20Sopenharmony_ci	__u16 in_words;
1498c2ecf20Sopenharmony_ci	__u16 out_words;
1508c2ecf20Sopenharmony_ci};
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_cistruct ib_uverbs_ex_cmd_hdr {
1538c2ecf20Sopenharmony_ci	__aligned_u64 response;
1548c2ecf20Sopenharmony_ci	__u16 provider_in_words;
1558c2ecf20Sopenharmony_ci	__u16 provider_out_words;
1568c2ecf20Sopenharmony_ci	__u32 cmd_hdr_reserved;
1578c2ecf20Sopenharmony_ci};
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_cistruct ib_uverbs_get_context {
1608c2ecf20Sopenharmony_ci	__aligned_u64 response;
1618c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
1628c2ecf20Sopenharmony_ci};
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_cistruct ib_uverbs_get_context_resp {
1658c2ecf20Sopenharmony_ci	__u32 async_fd;
1668c2ecf20Sopenharmony_ci	__u32 num_comp_vectors;
1678c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
1688c2ecf20Sopenharmony_ci};
1698c2ecf20Sopenharmony_ci
1708c2ecf20Sopenharmony_cistruct ib_uverbs_query_device {
1718c2ecf20Sopenharmony_ci	__aligned_u64 response;
1728c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
1738c2ecf20Sopenharmony_ci};
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_cistruct ib_uverbs_query_device_resp {
1768c2ecf20Sopenharmony_ci	__aligned_u64 fw_ver;
1778c2ecf20Sopenharmony_ci	__be64 node_guid;
1788c2ecf20Sopenharmony_ci	__be64 sys_image_guid;
1798c2ecf20Sopenharmony_ci	__aligned_u64 max_mr_size;
1808c2ecf20Sopenharmony_ci	__aligned_u64 page_size_cap;
1818c2ecf20Sopenharmony_ci	__u32 vendor_id;
1828c2ecf20Sopenharmony_ci	__u32 vendor_part_id;
1838c2ecf20Sopenharmony_ci	__u32 hw_ver;
1848c2ecf20Sopenharmony_ci	__u32 max_qp;
1858c2ecf20Sopenharmony_ci	__u32 max_qp_wr;
1868c2ecf20Sopenharmony_ci	__u32 device_cap_flags;
1878c2ecf20Sopenharmony_ci	__u32 max_sge;
1888c2ecf20Sopenharmony_ci	__u32 max_sge_rd;
1898c2ecf20Sopenharmony_ci	__u32 max_cq;
1908c2ecf20Sopenharmony_ci	__u32 max_cqe;
1918c2ecf20Sopenharmony_ci	__u32 max_mr;
1928c2ecf20Sopenharmony_ci	__u32 max_pd;
1938c2ecf20Sopenharmony_ci	__u32 max_qp_rd_atom;
1948c2ecf20Sopenharmony_ci	__u32 max_ee_rd_atom;
1958c2ecf20Sopenharmony_ci	__u32 max_res_rd_atom;
1968c2ecf20Sopenharmony_ci	__u32 max_qp_init_rd_atom;
1978c2ecf20Sopenharmony_ci	__u32 max_ee_init_rd_atom;
1988c2ecf20Sopenharmony_ci	__u32 atomic_cap;
1998c2ecf20Sopenharmony_ci	__u32 max_ee;
2008c2ecf20Sopenharmony_ci	__u32 max_rdd;
2018c2ecf20Sopenharmony_ci	__u32 max_mw;
2028c2ecf20Sopenharmony_ci	__u32 max_raw_ipv6_qp;
2038c2ecf20Sopenharmony_ci	__u32 max_raw_ethy_qp;
2048c2ecf20Sopenharmony_ci	__u32 max_mcast_grp;
2058c2ecf20Sopenharmony_ci	__u32 max_mcast_qp_attach;
2068c2ecf20Sopenharmony_ci	__u32 max_total_mcast_qp_attach;
2078c2ecf20Sopenharmony_ci	__u32 max_ah;
2088c2ecf20Sopenharmony_ci	__u32 max_fmr;
2098c2ecf20Sopenharmony_ci	__u32 max_map_per_fmr;
2108c2ecf20Sopenharmony_ci	__u32 max_srq;
2118c2ecf20Sopenharmony_ci	__u32 max_srq_wr;
2128c2ecf20Sopenharmony_ci	__u32 max_srq_sge;
2138c2ecf20Sopenharmony_ci	__u16 max_pkeys;
2148c2ecf20Sopenharmony_ci	__u8  local_ca_ack_delay;
2158c2ecf20Sopenharmony_ci	__u8  phys_port_cnt;
2168c2ecf20Sopenharmony_ci	__u8  reserved[4];
2178c2ecf20Sopenharmony_ci};
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_cistruct ib_uverbs_ex_query_device {
2208c2ecf20Sopenharmony_ci	__u32 comp_mask;
2218c2ecf20Sopenharmony_ci	__u32 reserved;
2228c2ecf20Sopenharmony_ci};
2238c2ecf20Sopenharmony_ci
2248c2ecf20Sopenharmony_cistruct ib_uverbs_odp_caps {
2258c2ecf20Sopenharmony_ci	__aligned_u64 general_caps;
2268c2ecf20Sopenharmony_ci	struct {
2278c2ecf20Sopenharmony_ci		__u32 rc_odp_caps;
2288c2ecf20Sopenharmony_ci		__u32 uc_odp_caps;
2298c2ecf20Sopenharmony_ci		__u32 ud_odp_caps;
2308c2ecf20Sopenharmony_ci	} per_transport_caps;
2318c2ecf20Sopenharmony_ci	__u32 reserved;
2328c2ecf20Sopenharmony_ci};
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_cistruct ib_uverbs_rss_caps {
2358c2ecf20Sopenharmony_ci	/* Corresponding bit will be set if qp type from
2368c2ecf20Sopenharmony_ci	 * 'enum ib_qp_type' is supported, e.g.
2378c2ecf20Sopenharmony_ci	 * supported_qpts |= 1 << IB_QPT_UD
2388c2ecf20Sopenharmony_ci	 */
2398c2ecf20Sopenharmony_ci	__u32 supported_qpts;
2408c2ecf20Sopenharmony_ci	__u32 max_rwq_indirection_tables;
2418c2ecf20Sopenharmony_ci	__u32 max_rwq_indirection_table_size;
2428c2ecf20Sopenharmony_ci	__u32 reserved;
2438c2ecf20Sopenharmony_ci};
2448c2ecf20Sopenharmony_ci
2458c2ecf20Sopenharmony_cistruct ib_uverbs_tm_caps {
2468c2ecf20Sopenharmony_ci	/* Max size of rendezvous request message */
2478c2ecf20Sopenharmony_ci	__u32 max_rndv_hdr_size;
2488c2ecf20Sopenharmony_ci	/* Max number of entries in tag matching list */
2498c2ecf20Sopenharmony_ci	__u32 max_num_tags;
2508c2ecf20Sopenharmony_ci	/* TM flags */
2518c2ecf20Sopenharmony_ci	__u32 flags;
2528c2ecf20Sopenharmony_ci	/* Max number of outstanding list operations */
2538c2ecf20Sopenharmony_ci	__u32 max_ops;
2548c2ecf20Sopenharmony_ci	/* Max number of SGE in tag matching entry */
2558c2ecf20Sopenharmony_ci	__u32 max_sge;
2568c2ecf20Sopenharmony_ci	__u32 reserved;
2578c2ecf20Sopenharmony_ci};
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_cistruct ib_uverbs_ex_query_device_resp {
2608c2ecf20Sopenharmony_ci	struct ib_uverbs_query_device_resp base;
2618c2ecf20Sopenharmony_ci	__u32 comp_mask;
2628c2ecf20Sopenharmony_ci	__u32 response_length;
2638c2ecf20Sopenharmony_ci	struct ib_uverbs_odp_caps odp_caps;
2648c2ecf20Sopenharmony_ci	__aligned_u64 timestamp_mask;
2658c2ecf20Sopenharmony_ci	__aligned_u64 hca_core_clock; /* in KHZ */
2668c2ecf20Sopenharmony_ci	__aligned_u64 device_cap_flags_ex;
2678c2ecf20Sopenharmony_ci	struct ib_uverbs_rss_caps rss_caps;
2688c2ecf20Sopenharmony_ci	__u32  max_wq_type_rq;
2698c2ecf20Sopenharmony_ci	__u32 raw_packet_caps;
2708c2ecf20Sopenharmony_ci	struct ib_uverbs_tm_caps tm_caps;
2718c2ecf20Sopenharmony_ci	struct ib_uverbs_cq_moderation_caps cq_moderation_caps;
2728c2ecf20Sopenharmony_ci	__aligned_u64 max_dm_size;
2738c2ecf20Sopenharmony_ci	__u32 xrc_odp_caps;
2748c2ecf20Sopenharmony_ci	__u32 reserved;
2758c2ecf20Sopenharmony_ci};
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_cistruct ib_uverbs_query_port {
2788c2ecf20Sopenharmony_ci	__aligned_u64 response;
2798c2ecf20Sopenharmony_ci	__u8  port_num;
2808c2ecf20Sopenharmony_ci	__u8  reserved[7];
2818c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
2828c2ecf20Sopenharmony_ci};
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_cistruct ib_uverbs_query_port_resp {
2858c2ecf20Sopenharmony_ci	__u32 port_cap_flags;		/* see ib_uverbs_query_port_cap_flags */
2868c2ecf20Sopenharmony_ci	__u32 max_msg_sz;
2878c2ecf20Sopenharmony_ci	__u32 bad_pkey_cntr;
2888c2ecf20Sopenharmony_ci	__u32 qkey_viol_cntr;
2898c2ecf20Sopenharmony_ci	__u32 gid_tbl_len;
2908c2ecf20Sopenharmony_ci	__u16 pkey_tbl_len;
2918c2ecf20Sopenharmony_ci	__u16 lid;
2928c2ecf20Sopenharmony_ci	__u16 sm_lid;
2938c2ecf20Sopenharmony_ci	__u8  state;
2948c2ecf20Sopenharmony_ci	__u8  max_mtu;
2958c2ecf20Sopenharmony_ci	__u8  active_mtu;
2968c2ecf20Sopenharmony_ci	__u8  lmc;
2978c2ecf20Sopenharmony_ci	__u8  max_vl_num;
2988c2ecf20Sopenharmony_ci	__u8  sm_sl;
2998c2ecf20Sopenharmony_ci	__u8  subnet_timeout;
3008c2ecf20Sopenharmony_ci	__u8  init_type_reply;
3018c2ecf20Sopenharmony_ci	__u8  active_width;
3028c2ecf20Sopenharmony_ci	__u8  active_speed;
3038c2ecf20Sopenharmony_ci	__u8  phys_state;
3048c2ecf20Sopenharmony_ci	__u8  link_layer;
3058c2ecf20Sopenharmony_ci	__u8  flags;			/* see ib_uverbs_query_port_flags */
3068c2ecf20Sopenharmony_ci	__u8  reserved;
3078c2ecf20Sopenharmony_ci};
3088c2ecf20Sopenharmony_ci
3098c2ecf20Sopenharmony_cistruct ib_uverbs_alloc_pd {
3108c2ecf20Sopenharmony_ci	__aligned_u64 response;
3118c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
3128c2ecf20Sopenharmony_ci};
3138c2ecf20Sopenharmony_ci
3148c2ecf20Sopenharmony_cistruct ib_uverbs_alloc_pd_resp {
3158c2ecf20Sopenharmony_ci	__u32 pd_handle;
3168c2ecf20Sopenharmony_ci	__u32 driver_data[0];
3178c2ecf20Sopenharmony_ci};
3188c2ecf20Sopenharmony_ci
3198c2ecf20Sopenharmony_cistruct ib_uverbs_dealloc_pd {
3208c2ecf20Sopenharmony_ci	__u32 pd_handle;
3218c2ecf20Sopenharmony_ci};
3228c2ecf20Sopenharmony_ci
3238c2ecf20Sopenharmony_cistruct ib_uverbs_open_xrcd {
3248c2ecf20Sopenharmony_ci	__aligned_u64 response;
3258c2ecf20Sopenharmony_ci	__u32 fd;
3268c2ecf20Sopenharmony_ci	__u32 oflags;
3278c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
3288c2ecf20Sopenharmony_ci};
3298c2ecf20Sopenharmony_ci
3308c2ecf20Sopenharmony_cistruct ib_uverbs_open_xrcd_resp {
3318c2ecf20Sopenharmony_ci	__u32 xrcd_handle;
3328c2ecf20Sopenharmony_ci	__u32 driver_data[0];
3338c2ecf20Sopenharmony_ci};
3348c2ecf20Sopenharmony_ci
3358c2ecf20Sopenharmony_cistruct ib_uverbs_close_xrcd {
3368c2ecf20Sopenharmony_ci	__u32 xrcd_handle;
3378c2ecf20Sopenharmony_ci};
3388c2ecf20Sopenharmony_ci
3398c2ecf20Sopenharmony_cistruct ib_uverbs_reg_mr {
3408c2ecf20Sopenharmony_ci	__aligned_u64 response;
3418c2ecf20Sopenharmony_ci	__aligned_u64 start;
3428c2ecf20Sopenharmony_ci	__aligned_u64 length;
3438c2ecf20Sopenharmony_ci	__aligned_u64 hca_va;
3448c2ecf20Sopenharmony_ci	__u32 pd_handle;
3458c2ecf20Sopenharmony_ci	__u32 access_flags;
3468c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
3478c2ecf20Sopenharmony_ci};
3488c2ecf20Sopenharmony_ci
3498c2ecf20Sopenharmony_cistruct ib_uverbs_reg_mr_resp {
3508c2ecf20Sopenharmony_ci	__u32 mr_handle;
3518c2ecf20Sopenharmony_ci	__u32 lkey;
3528c2ecf20Sopenharmony_ci	__u32 rkey;
3538c2ecf20Sopenharmony_ci	__u32 driver_data[0];
3548c2ecf20Sopenharmony_ci};
3558c2ecf20Sopenharmony_ci
3568c2ecf20Sopenharmony_cistruct ib_uverbs_rereg_mr {
3578c2ecf20Sopenharmony_ci	__aligned_u64 response;
3588c2ecf20Sopenharmony_ci	__u32 mr_handle;
3598c2ecf20Sopenharmony_ci	__u32 flags;
3608c2ecf20Sopenharmony_ci	__aligned_u64 start;
3618c2ecf20Sopenharmony_ci	__aligned_u64 length;
3628c2ecf20Sopenharmony_ci	__aligned_u64 hca_va;
3638c2ecf20Sopenharmony_ci	__u32 pd_handle;
3648c2ecf20Sopenharmony_ci	__u32 access_flags;
3658c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
3668c2ecf20Sopenharmony_ci};
3678c2ecf20Sopenharmony_ci
3688c2ecf20Sopenharmony_cistruct ib_uverbs_rereg_mr_resp {
3698c2ecf20Sopenharmony_ci	__u32 lkey;
3708c2ecf20Sopenharmony_ci	__u32 rkey;
3718c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
3728c2ecf20Sopenharmony_ci};
3738c2ecf20Sopenharmony_ci
3748c2ecf20Sopenharmony_cistruct ib_uverbs_dereg_mr {
3758c2ecf20Sopenharmony_ci	__u32 mr_handle;
3768c2ecf20Sopenharmony_ci};
3778c2ecf20Sopenharmony_ci
3788c2ecf20Sopenharmony_cistruct ib_uverbs_alloc_mw {
3798c2ecf20Sopenharmony_ci	__aligned_u64 response;
3808c2ecf20Sopenharmony_ci	__u32 pd_handle;
3818c2ecf20Sopenharmony_ci	__u8  mw_type;
3828c2ecf20Sopenharmony_ci	__u8  reserved[3];
3838c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
3848c2ecf20Sopenharmony_ci};
3858c2ecf20Sopenharmony_ci
3868c2ecf20Sopenharmony_cistruct ib_uverbs_alloc_mw_resp {
3878c2ecf20Sopenharmony_ci	__u32 mw_handle;
3888c2ecf20Sopenharmony_ci	__u32 rkey;
3898c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
3908c2ecf20Sopenharmony_ci};
3918c2ecf20Sopenharmony_ci
3928c2ecf20Sopenharmony_cistruct ib_uverbs_dealloc_mw {
3938c2ecf20Sopenharmony_ci	__u32 mw_handle;
3948c2ecf20Sopenharmony_ci};
3958c2ecf20Sopenharmony_ci
3968c2ecf20Sopenharmony_cistruct ib_uverbs_create_comp_channel {
3978c2ecf20Sopenharmony_ci	__aligned_u64 response;
3988c2ecf20Sopenharmony_ci};
3998c2ecf20Sopenharmony_ci
4008c2ecf20Sopenharmony_cistruct ib_uverbs_create_comp_channel_resp {
4018c2ecf20Sopenharmony_ci	__u32 fd;
4028c2ecf20Sopenharmony_ci};
4038c2ecf20Sopenharmony_ci
4048c2ecf20Sopenharmony_cistruct ib_uverbs_create_cq {
4058c2ecf20Sopenharmony_ci	__aligned_u64 response;
4068c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
4078c2ecf20Sopenharmony_ci	__u32 cqe;
4088c2ecf20Sopenharmony_ci	__u32 comp_vector;
4098c2ecf20Sopenharmony_ci	__s32 comp_channel;
4108c2ecf20Sopenharmony_ci	__u32 reserved;
4118c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
4128c2ecf20Sopenharmony_ci};
4138c2ecf20Sopenharmony_ci
4148c2ecf20Sopenharmony_cienum ib_uverbs_ex_create_cq_flags {
4158c2ecf20Sopenharmony_ci	IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION = 1 << 0,
4168c2ecf20Sopenharmony_ci	IB_UVERBS_CQ_FLAGS_IGNORE_OVERRUN = 1 << 1,
4178c2ecf20Sopenharmony_ci};
4188c2ecf20Sopenharmony_ci
4198c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_cq {
4208c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
4218c2ecf20Sopenharmony_ci	__u32 cqe;
4228c2ecf20Sopenharmony_ci	__u32 comp_vector;
4238c2ecf20Sopenharmony_ci	__s32 comp_channel;
4248c2ecf20Sopenharmony_ci	__u32 comp_mask;
4258c2ecf20Sopenharmony_ci	__u32 flags;  /* bitmask of ib_uverbs_ex_create_cq_flags */
4268c2ecf20Sopenharmony_ci	__u32 reserved;
4278c2ecf20Sopenharmony_ci};
4288c2ecf20Sopenharmony_ci
4298c2ecf20Sopenharmony_cistruct ib_uverbs_create_cq_resp {
4308c2ecf20Sopenharmony_ci	__u32 cq_handle;
4318c2ecf20Sopenharmony_ci	__u32 cqe;
4328c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
4338c2ecf20Sopenharmony_ci};
4348c2ecf20Sopenharmony_ci
4358c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_cq_resp {
4368c2ecf20Sopenharmony_ci	struct ib_uverbs_create_cq_resp base;
4378c2ecf20Sopenharmony_ci	__u32 comp_mask;
4388c2ecf20Sopenharmony_ci	__u32 response_length;
4398c2ecf20Sopenharmony_ci};
4408c2ecf20Sopenharmony_ci
4418c2ecf20Sopenharmony_cistruct ib_uverbs_resize_cq {
4428c2ecf20Sopenharmony_ci	__aligned_u64 response;
4438c2ecf20Sopenharmony_ci	__u32 cq_handle;
4448c2ecf20Sopenharmony_ci	__u32 cqe;
4458c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
4468c2ecf20Sopenharmony_ci};
4478c2ecf20Sopenharmony_ci
4488c2ecf20Sopenharmony_cistruct ib_uverbs_resize_cq_resp {
4498c2ecf20Sopenharmony_ci	__u32 cqe;
4508c2ecf20Sopenharmony_ci	__u32 reserved;
4518c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
4528c2ecf20Sopenharmony_ci};
4538c2ecf20Sopenharmony_ci
4548c2ecf20Sopenharmony_cistruct ib_uverbs_poll_cq {
4558c2ecf20Sopenharmony_ci	__aligned_u64 response;
4568c2ecf20Sopenharmony_ci	__u32 cq_handle;
4578c2ecf20Sopenharmony_ci	__u32 ne;
4588c2ecf20Sopenharmony_ci};
4598c2ecf20Sopenharmony_ci
4608c2ecf20Sopenharmony_cienum ib_uverbs_wc_opcode {
4618c2ecf20Sopenharmony_ci	IB_UVERBS_WC_SEND = 0,
4628c2ecf20Sopenharmony_ci	IB_UVERBS_WC_RDMA_WRITE = 1,
4638c2ecf20Sopenharmony_ci	IB_UVERBS_WC_RDMA_READ = 2,
4648c2ecf20Sopenharmony_ci	IB_UVERBS_WC_COMP_SWAP = 3,
4658c2ecf20Sopenharmony_ci	IB_UVERBS_WC_FETCH_ADD = 4,
4668c2ecf20Sopenharmony_ci	IB_UVERBS_WC_BIND_MW = 5,
4678c2ecf20Sopenharmony_ci	IB_UVERBS_WC_LOCAL_INV = 6,
4688c2ecf20Sopenharmony_ci	IB_UVERBS_WC_TSO = 7,
4698c2ecf20Sopenharmony_ci};
4708c2ecf20Sopenharmony_ci
4718c2ecf20Sopenharmony_cistruct ib_uverbs_wc {
4728c2ecf20Sopenharmony_ci	__aligned_u64 wr_id;
4738c2ecf20Sopenharmony_ci	__u32 status;
4748c2ecf20Sopenharmony_ci	__u32 opcode;
4758c2ecf20Sopenharmony_ci	__u32 vendor_err;
4768c2ecf20Sopenharmony_ci	__u32 byte_len;
4778c2ecf20Sopenharmony_ci	union {
4788c2ecf20Sopenharmony_ci		__be32 imm_data;
4798c2ecf20Sopenharmony_ci		__u32 invalidate_rkey;
4808c2ecf20Sopenharmony_ci	} ex;
4818c2ecf20Sopenharmony_ci	__u32 qp_num;
4828c2ecf20Sopenharmony_ci	__u32 src_qp;
4838c2ecf20Sopenharmony_ci	__u32 wc_flags;
4848c2ecf20Sopenharmony_ci	__u16 pkey_index;
4858c2ecf20Sopenharmony_ci	__u16 slid;
4868c2ecf20Sopenharmony_ci	__u8 sl;
4878c2ecf20Sopenharmony_ci	__u8 dlid_path_bits;
4888c2ecf20Sopenharmony_ci	__u8 port_num;
4898c2ecf20Sopenharmony_ci	__u8 reserved;
4908c2ecf20Sopenharmony_ci};
4918c2ecf20Sopenharmony_ci
4928c2ecf20Sopenharmony_cistruct ib_uverbs_poll_cq_resp {
4938c2ecf20Sopenharmony_ci	__u32 count;
4948c2ecf20Sopenharmony_ci	__u32 reserved;
4958c2ecf20Sopenharmony_ci	struct ib_uverbs_wc wc[0];
4968c2ecf20Sopenharmony_ci};
4978c2ecf20Sopenharmony_ci
4988c2ecf20Sopenharmony_cistruct ib_uverbs_req_notify_cq {
4998c2ecf20Sopenharmony_ci	__u32 cq_handle;
5008c2ecf20Sopenharmony_ci	__u32 solicited_only;
5018c2ecf20Sopenharmony_ci};
5028c2ecf20Sopenharmony_ci
5038c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_cq {
5048c2ecf20Sopenharmony_ci	__aligned_u64 response;
5058c2ecf20Sopenharmony_ci	__u32 cq_handle;
5068c2ecf20Sopenharmony_ci	__u32 reserved;
5078c2ecf20Sopenharmony_ci};
5088c2ecf20Sopenharmony_ci
5098c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_cq_resp {
5108c2ecf20Sopenharmony_ci	__u32 comp_events_reported;
5118c2ecf20Sopenharmony_ci	__u32 async_events_reported;
5128c2ecf20Sopenharmony_ci};
5138c2ecf20Sopenharmony_ci
5148c2ecf20Sopenharmony_cistruct ib_uverbs_global_route {
5158c2ecf20Sopenharmony_ci	__u8  dgid[16];
5168c2ecf20Sopenharmony_ci	__u32 flow_label;
5178c2ecf20Sopenharmony_ci	__u8  sgid_index;
5188c2ecf20Sopenharmony_ci	__u8  hop_limit;
5198c2ecf20Sopenharmony_ci	__u8  traffic_class;
5208c2ecf20Sopenharmony_ci	__u8  reserved;
5218c2ecf20Sopenharmony_ci};
5228c2ecf20Sopenharmony_ci
5238c2ecf20Sopenharmony_cistruct ib_uverbs_ah_attr {
5248c2ecf20Sopenharmony_ci	struct ib_uverbs_global_route grh;
5258c2ecf20Sopenharmony_ci	__u16 dlid;
5268c2ecf20Sopenharmony_ci	__u8  sl;
5278c2ecf20Sopenharmony_ci	__u8  src_path_bits;
5288c2ecf20Sopenharmony_ci	__u8  static_rate;
5298c2ecf20Sopenharmony_ci	__u8  is_global;
5308c2ecf20Sopenharmony_ci	__u8  port_num;
5318c2ecf20Sopenharmony_ci	__u8  reserved;
5328c2ecf20Sopenharmony_ci};
5338c2ecf20Sopenharmony_ci
5348c2ecf20Sopenharmony_cistruct ib_uverbs_qp_attr {
5358c2ecf20Sopenharmony_ci	__u32	qp_attr_mask;
5368c2ecf20Sopenharmony_ci	__u32	qp_state;
5378c2ecf20Sopenharmony_ci	__u32	cur_qp_state;
5388c2ecf20Sopenharmony_ci	__u32	path_mtu;
5398c2ecf20Sopenharmony_ci	__u32	path_mig_state;
5408c2ecf20Sopenharmony_ci	__u32	qkey;
5418c2ecf20Sopenharmony_ci	__u32	rq_psn;
5428c2ecf20Sopenharmony_ci	__u32	sq_psn;
5438c2ecf20Sopenharmony_ci	__u32	dest_qp_num;
5448c2ecf20Sopenharmony_ci	__u32	qp_access_flags;
5458c2ecf20Sopenharmony_ci
5468c2ecf20Sopenharmony_ci	struct ib_uverbs_ah_attr ah_attr;
5478c2ecf20Sopenharmony_ci	struct ib_uverbs_ah_attr alt_ah_attr;
5488c2ecf20Sopenharmony_ci
5498c2ecf20Sopenharmony_ci	/* ib_qp_cap */
5508c2ecf20Sopenharmony_ci	__u32	max_send_wr;
5518c2ecf20Sopenharmony_ci	__u32	max_recv_wr;
5528c2ecf20Sopenharmony_ci	__u32	max_send_sge;
5538c2ecf20Sopenharmony_ci	__u32	max_recv_sge;
5548c2ecf20Sopenharmony_ci	__u32	max_inline_data;
5558c2ecf20Sopenharmony_ci
5568c2ecf20Sopenharmony_ci	__u16	pkey_index;
5578c2ecf20Sopenharmony_ci	__u16	alt_pkey_index;
5588c2ecf20Sopenharmony_ci	__u8	en_sqd_async_notify;
5598c2ecf20Sopenharmony_ci	__u8	sq_draining;
5608c2ecf20Sopenharmony_ci	__u8	max_rd_atomic;
5618c2ecf20Sopenharmony_ci	__u8	max_dest_rd_atomic;
5628c2ecf20Sopenharmony_ci	__u8	min_rnr_timer;
5638c2ecf20Sopenharmony_ci	__u8	port_num;
5648c2ecf20Sopenharmony_ci	__u8	timeout;
5658c2ecf20Sopenharmony_ci	__u8	retry_cnt;
5668c2ecf20Sopenharmony_ci	__u8	rnr_retry;
5678c2ecf20Sopenharmony_ci	__u8	alt_port_num;
5688c2ecf20Sopenharmony_ci	__u8	alt_timeout;
5698c2ecf20Sopenharmony_ci	__u8	reserved[5];
5708c2ecf20Sopenharmony_ci};
5718c2ecf20Sopenharmony_ci
5728c2ecf20Sopenharmony_cistruct ib_uverbs_create_qp {
5738c2ecf20Sopenharmony_ci	__aligned_u64 response;
5748c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
5758c2ecf20Sopenharmony_ci	__u32 pd_handle;
5768c2ecf20Sopenharmony_ci	__u32 send_cq_handle;
5778c2ecf20Sopenharmony_ci	__u32 recv_cq_handle;
5788c2ecf20Sopenharmony_ci	__u32 srq_handle;
5798c2ecf20Sopenharmony_ci	__u32 max_send_wr;
5808c2ecf20Sopenharmony_ci	__u32 max_recv_wr;
5818c2ecf20Sopenharmony_ci	__u32 max_send_sge;
5828c2ecf20Sopenharmony_ci	__u32 max_recv_sge;
5838c2ecf20Sopenharmony_ci	__u32 max_inline_data;
5848c2ecf20Sopenharmony_ci	__u8  sq_sig_all;
5858c2ecf20Sopenharmony_ci	__u8  qp_type;
5868c2ecf20Sopenharmony_ci	__u8  is_srq;
5878c2ecf20Sopenharmony_ci	__u8  reserved;
5888c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
5898c2ecf20Sopenharmony_ci};
5908c2ecf20Sopenharmony_ci
5918c2ecf20Sopenharmony_cienum ib_uverbs_create_qp_mask {
5928c2ecf20Sopenharmony_ci	IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1UL << 0,
5938c2ecf20Sopenharmony_ci};
5948c2ecf20Sopenharmony_ci
5958c2ecf20Sopenharmony_cienum {
5968c2ecf20Sopenharmony_ci	IB_UVERBS_CREATE_QP_SUP_COMP_MASK = IB_UVERBS_CREATE_QP_MASK_IND_TABLE,
5978c2ecf20Sopenharmony_ci};
5988c2ecf20Sopenharmony_ci
5998c2ecf20Sopenharmony_cienum {
6008c2ecf20Sopenharmony_ci	/*
6018c2ecf20Sopenharmony_ci	 * This value is equal to IB_QP_DEST_QPN.
6028c2ecf20Sopenharmony_ci	 */
6038c2ecf20Sopenharmony_ci	IB_USER_LEGACY_LAST_QP_ATTR_MASK = 1ULL << 20,
6048c2ecf20Sopenharmony_ci};
6058c2ecf20Sopenharmony_ci
6068c2ecf20Sopenharmony_cienum {
6078c2ecf20Sopenharmony_ci	/*
6088c2ecf20Sopenharmony_ci	 * This value is equal to IB_QP_RATE_LIMIT.
6098c2ecf20Sopenharmony_ci	 */
6108c2ecf20Sopenharmony_ci	IB_USER_LAST_QP_ATTR_MASK = 1ULL << 25,
6118c2ecf20Sopenharmony_ci};
6128c2ecf20Sopenharmony_ci
6138c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_qp {
6148c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
6158c2ecf20Sopenharmony_ci	__u32 pd_handle;
6168c2ecf20Sopenharmony_ci	__u32 send_cq_handle;
6178c2ecf20Sopenharmony_ci	__u32 recv_cq_handle;
6188c2ecf20Sopenharmony_ci	__u32 srq_handle;
6198c2ecf20Sopenharmony_ci	__u32 max_send_wr;
6208c2ecf20Sopenharmony_ci	__u32 max_recv_wr;
6218c2ecf20Sopenharmony_ci	__u32 max_send_sge;
6228c2ecf20Sopenharmony_ci	__u32 max_recv_sge;
6238c2ecf20Sopenharmony_ci	__u32 max_inline_data;
6248c2ecf20Sopenharmony_ci	__u8  sq_sig_all;
6258c2ecf20Sopenharmony_ci	__u8  qp_type;
6268c2ecf20Sopenharmony_ci	__u8  is_srq;
6278c2ecf20Sopenharmony_ci	__u8 reserved;
6288c2ecf20Sopenharmony_ci	__u32 comp_mask;
6298c2ecf20Sopenharmony_ci	__u32 create_flags;
6308c2ecf20Sopenharmony_ci	__u32 rwq_ind_tbl_handle;
6318c2ecf20Sopenharmony_ci	__u32  source_qpn;
6328c2ecf20Sopenharmony_ci};
6338c2ecf20Sopenharmony_ci
6348c2ecf20Sopenharmony_cistruct ib_uverbs_open_qp {
6358c2ecf20Sopenharmony_ci	__aligned_u64 response;
6368c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
6378c2ecf20Sopenharmony_ci	__u32 pd_handle;
6388c2ecf20Sopenharmony_ci	__u32 qpn;
6398c2ecf20Sopenharmony_ci	__u8  qp_type;
6408c2ecf20Sopenharmony_ci	__u8  reserved[7];
6418c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
6428c2ecf20Sopenharmony_ci};
6438c2ecf20Sopenharmony_ci
6448c2ecf20Sopenharmony_ci/* also used for open response */
6458c2ecf20Sopenharmony_cistruct ib_uverbs_create_qp_resp {
6468c2ecf20Sopenharmony_ci	__u32 qp_handle;
6478c2ecf20Sopenharmony_ci	__u32 qpn;
6488c2ecf20Sopenharmony_ci	__u32 max_send_wr;
6498c2ecf20Sopenharmony_ci	__u32 max_recv_wr;
6508c2ecf20Sopenharmony_ci	__u32 max_send_sge;
6518c2ecf20Sopenharmony_ci	__u32 max_recv_sge;
6528c2ecf20Sopenharmony_ci	__u32 max_inline_data;
6538c2ecf20Sopenharmony_ci	__u32 reserved;
6548c2ecf20Sopenharmony_ci	__u32 driver_data[0];
6558c2ecf20Sopenharmony_ci};
6568c2ecf20Sopenharmony_ci
6578c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_qp_resp {
6588c2ecf20Sopenharmony_ci	struct ib_uverbs_create_qp_resp base;
6598c2ecf20Sopenharmony_ci	__u32 comp_mask;
6608c2ecf20Sopenharmony_ci	__u32 response_length;
6618c2ecf20Sopenharmony_ci};
6628c2ecf20Sopenharmony_ci
6638c2ecf20Sopenharmony_ci/*
6648c2ecf20Sopenharmony_ci * This struct needs to remain a multiple of 8 bytes to keep the
6658c2ecf20Sopenharmony_ci * alignment of the modify QP parameters.
6668c2ecf20Sopenharmony_ci */
6678c2ecf20Sopenharmony_cistruct ib_uverbs_qp_dest {
6688c2ecf20Sopenharmony_ci	__u8  dgid[16];
6698c2ecf20Sopenharmony_ci	__u32 flow_label;
6708c2ecf20Sopenharmony_ci	__u16 dlid;
6718c2ecf20Sopenharmony_ci	__u16 reserved;
6728c2ecf20Sopenharmony_ci	__u8  sgid_index;
6738c2ecf20Sopenharmony_ci	__u8  hop_limit;
6748c2ecf20Sopenharmony_ci	__u8  traffic_class;
6758c2ecf20Sopenharmony_ci	__u8  sl;
6768c2ecf20Sopenharmony_ci	__u8  src_path_bits;
6778c2ecf20Sopenharmony_ci	__u8  static_rate;
6788c2ecf20Sopenharmony_ci	__u8  is_global;
6798c2ecf20Sopenharmony_ci	__u8  port_num;
6808c2ecf20Sopenharmony_ci};
6818c2ecf20Sopenharmony_ci
6828c2ecf20Sopenharmony_cistruct ib_uverbs_query_qp {
6838c2ecf20Sopenharmony_ci	__aligned_u64 response;
6848c2ecf20Sopenharmony_ci	__u32 qp_handle;
6858c2ecf20Sopenharmony_ci	__u32 attr_mask;
6868c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
6878c2ecf20Sopenharmony_ci};
6888c2ecf20Sopenharmony_ci
6898c2ecf20Sopenharmony_cistruct ib_uverbs_query_qp_resp {
6908c2ecf20Sopenharmony_ci	struct ib_uverbs_qp_dest dest;
6918c2ecf20Sopenharmony_ci	struct ib_uverbs_qp_dest alt_dest;
6928c2ecf20Sopenharmony_ci	__u32 max_send_wr;
6938c2ecf20Sopenharmony_ci	__u32 max_recv_wr;
6948c2ecf20Sopenharmony_ci	__u32 max_send_sge;
6958c2ecf20Sopenharmony_ci	__u32 max_recv_sge;
6968c2ecf20Sopenharmony_ci	__u32 max_inline_data;
6978c2ecf20Sopenharmony_ci	__u32 qkey;
6988c2ecf20Sopenharmony_ci	__u32 rq_psn;
6998c2ecf20Sopenharmony_ci	__u32 sq_psn;
7008c2ecf20Sopenharmony_ci	__u32 dest_qp_num;
7018c2ecf20Sopenharmony_ci	__u32 qp_access_flags;
7028c2ecf20Sopenharmony_ci	__u16 pkey_index;
7038c2ecf20Sopenharmony_ci	__u16 alt_pkey_index;
7048c2ecf20Sopenharmony_ci	__u8  qp_state;
7058c2ecf20Sopenharmony_ci	__u8  cur_qp_state;
7068c2ecf20Sopenharmony_ci	__u8  path_mtu;
7078c2ecf20Sopenharmony_ci	__u8  path_mig_state;
7088c2ecf20Sopenharmony_ci	__u8  sq_draining;
7098c2ecf20Sopenharmony_ci	__u8  max_rd_atomic;
7108c2ecf20Sopenharmony_ci	__u8  max_dest_rd_atomic;
7118c2ecf20Sopenharmony_ci	__u8  min_rnr_timer;
7128c2ecf20Sopenharmony_ci	__u8  port_num;
7138c2ecf20Sopenharmony_ci	__u8  timeout;
7148c2ecf20Sopenharmony_ci	__u8  retry_cnt;
7158c2ecf20Sopenharmony_ci	__u8  rnr_retry;
7168c2ecf20Sopenharmony_ci	__u8  alt_port_num;
7178c2ecf20Sopenharmony_ci	__u8  alt_timeout;
7188c2ecf20Sopenharmony_ci	__u8  sq_sig_all;
7198c2ecf20Sopenharmony_ci	__u8  reserved[5];
7208c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
7218c2ecf20Sopenharmony_ci};
7228c2ecf20Sopenharmony_ci
7238c2ecf20Sopenharmony_cistruct ib_uverbs_modify_qp {
7248c2ecf20Sopenharmony_ci	struct ib_uverbs_qp_dest dest;
7258c2ecf20Sopenharmony_ci	struct ib_uverbs_qp_dest alt_dest;
7268c2ecf20Sopenharmony_ci	__u32 qp_handle;
7278c2ecf20Sopenharmony_ci	__u32 attr_mask;
7288c2ecf20Sopenharmony_ci	__u32 qkey;
7298c2ecf20Sopenharmony_ci	__u32 rq_psn;
7308c2ecf20Sopenharmony_ci	__u32 sq_psn;
7318c2ecf20Sopenharmony_ci	__u32 dest_qp_num;
7328c2ecf20Sopenharmony_ci	__u32 qp_access_flags;
7338c2ecf20Sopenharmony_ci	__u16 pkey_index;
7348c2ecf20Sopenharmony_ci	__u16 alt_pkey_index;
7358c2ecf20Sopenharmony_ci	__u8  qp_state;
7368c2ecf20Sopenharmony_ci	__u8  cur_qp_state;
7378c2ecf20Sopenharmony_ci	__u8  path_mtu;
7388c2ecf20Sopenharmony_ci	__u8  path_mig_state;
7398c2ecf20Sopenharmony_ci	__u8  en_sqd_async_notify;
7408c2ecf20Sopenharmony_ci	__u8  max_rd_atomic;
7418c2ecf20Sopenharmony_ci	__u8  max_dest_rd_atomic;
7428c2ecf20Sopenharmony_ci	__u8  min_rnr_timer;
7438c2ecf20Sopenharmony_ci	__u8  port_num;
7448c2ecf20Sopenharmony_ci	__u8  timeout;
7458c2ecf20Sopenharmony_ci	__u8  retry_cnt;
7468c2ecf20Sopenharmony_ci	__u8  rnr_retry;
7478c2ecf20Sopenharmony_ci	__u8  alt_port_num;
7488c2ecf20Sopenharmony_ci	__u8  alt_timeout;
7498c2ecf20Sopenharmony_ci	__u8  reserved[2];
7508c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
7518c2ecf20Sopenharmony_ci};
7528c2ecf20Sopenharmony_ci
7538c2ecf20Sopenharmony_cistruct ib_uverbs_ex_modify_qp {
7548c2ecf20Sopenharmony_ci	struct ib_uverbs_modify_qp base;
7558c2ecf20Sopenharmony_ci	__u32	rate_limit;
7568c2ecf20Sopenharmony_ci	__u32	reserved;
7578c2ecf20Sopenharmony_ci};
7588c2ecf20Sopenharmony_ci
7598c2ecf20Sopenharmony_cistruct ib_uverbs_ex_modify_qp_resp {
7608c2ecf20Sopenharmony_ci	__u32  comp_mask;
7618c2ecf20Sopenharmony_ci	__u32  response_length;
7628c2ecf20Sopenharmony_ci};
7638c2ecf20Sopenharmony_ci
7648c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_qp {
7658c2ecf20Sopenharmony_ci	__aligned_u64 response;
7668c2ecf20Sopenharmony_ci	__u32 qp_handle;
7678c2ecf20Sopenharmony_ci	__u32 reserved;
7688c2ecf20Sopenharmony_ci};
7698c2ecf20Sopenharmony_ci
7708c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_qp_resp {
7718c2ecf20Sopenharmony_ci	__u32 events_reported;
7728c2ecf20Sopenharmony_ci};
7738c2ecf20Sopenharmony_ci
7748c2ecf20Sopenharmony_ci/*
7758c2ecf20Sopenharmony_ci * The ib_uverbs_sge structure isn't used anywhere, since we assume
7768c2ecf20Sopenharmony_ci * the ib_sge structure is packed the same way on 32-bit and 64-bit
7778c2ecf20Sopenharmony_ci * architectures in both kernel and user space.  It's just here to
7788c2ecf20Sopenharmony_ci * document the ABI.
7798c2ecf20Sopenharmony_ci */
7808c2ecf20Sopenharmony_cistruct ib_uverbs_sge {
7818c2ecf20Sopenharmony_ci	__aligned_u64 addr;
7828c2ecf20Sopenharmony_ci	__u32 length;
7838c2ecf20Sopenharmony_ci	__u32 lkey;
7848c2ecf20Sopenharmony_ci};
7858c2ecf20Sopenharmony_ci
7868c2ecf20Sopenharmony_cienum ib_uverbs_wr_opcode {
7878c2ecf20Sopenharmony_ci	IB_UVERBS_WR_RDMA_WRITE = 0,
7888c2ecf20Sopenharmony_ci	IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
7898c2ecf20Sopenharmony_ci	IB_UVERBS_WR_SEND = 2,
7908c2ecf20Sopenharmony_ci	IB_UVERBS_WR_SEND_WITH_IMM = 3,
7918c2ecf20Sopenharmony_ci	IB_UVERBS_WR_RDMA_READ = 4,
7928c2ecf20Sopenharmony_ci	IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
7938c2ecf20Sopenharmony_ci	IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
7948c2ecf20Sopenharmony_ci	IB_UVERBS_WR_LOCAL_INV = 7,
7958c2ecf20Sopenharmony_ci	IB_UVERBS_WR_BIND_MW = 8,
7968c2ecf20Sopenharmony_ci	IB_UVERBS_WR_SEND_WITH_INV = 9,
7978c2ecf20Sopenharmony_ci	IB_UVERBS_WR_TSO = 10,
7988c2ecf20Sopenharmony_ci	IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
7998c2ecf20Sopenharmony_ci	IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
8008c2ecf20Sopenharmony_ci	IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
8018c2ecf20Sopenharmony_ci	/* Review enum ib_wr_opcode before modifying this */
8028c2ecf20Sopenharmony_ci};
8038c2ecf20Sopenharmony_ci
8048c2ecf20Sopenharmony_cistruct ib_uverbs_send_wr {
8058c2ecf20Sopenharmony_ci	__aligned_u64 wr_id;
8068c2ecf20Sopenharmony_ci	__u32 num_sge;
8078c2ecf20Sopenharmony_ci	__u32 opcode;		/* see enum ib_uverbs_wr_opcode */
8088c2ecf20Sopenharmony_ci	__u32 send_flags;
8098c2ecf20Sopenharmony_ci	union {
8108c2ecf20Sopenharmony_ci		__be32 imm_data;
8118c2ecf20Sopenharmony_ci		__u32 invalidate_rkey;
8128c2ecf20Sopenharmony_ci	} ex;
8138c2ecf20Sopenharmony_ci	union {
8148c2ecf20Sopenharmony_ci		struct {
8158c2ecf20Sopenharmony_ci			__aligned_u64 remote_addr;
8168c2ecf20Sopenharmony_ci			__u32 rkey;
8178c2ecf20Sopenharmony_ci			__u32 reserved;
8188c2ecf20Sopenharmony_ci		} rdma;
8198c2ecf20Sopenharmony_ci		struct {
8208c2ecf20Sopenharmony_ci			__aligned_u64 remote_addr;
8218c2ecf20Sopenharmony_ci			__aligned_u64 compare_add;
8228c2ecf20Sopenharmony_ci			__aligned_u64 swap;
8238c2ecf20Sopenharmony_ci			__u32 rkey;
8248c2ecf20Sopenharmony_ci			__u32 reserved;
8258c2ecf20Sopenharmony_ci		} atomic;
8268c2ecf20Sopenharmony_ci		struct {
8278c2ecf20Sopenharmony_ci			__u32 ah;
8288c2ecf20Sopenharmony_ci			__u32 remote_qpn;
8298c2ecf20Sopenharmony_ci			__u32 remote_qkey;
8308c2ecf20Sopenharmony_ci			__u32 reserved;
8318c2ecf20Sopenharmony_ci		} ud;
8328c2ecf20Sopenharmony_ci	} wr;
8338c2ecf20Sopenharmony_ci};
8348c2ecf20Sopenharmony_ci
8358c2ecf20Sopenharmony_cistruct ib_uverbs_post_send {
8368c2ecf20Sopenharmony_ci	__aligned_u64 response;
8378c2ecf20Sopenharmony_ci	__u32 qp_handle;
8388c2ecf20Sopenharmony_ci	__u32 wr_count;
8398c2ecf20Sopenharmony_ci	__u32 sge_count;
8408c2ecf20Sopenharmony_ci	__u32 wqe_size;
8418c2ecf20Sopenharmony_ci	struct ib_uverbs_send_wr send_wr[0];
8428c2ecf20Sopenharmony_ci};
8438c2ecf20Sopenharmony_ci
8448c2ecf20Sopenharmony_cistruct ib_uverbs_post_send_resp {
8458c2ecf20Sopenharmony_ci	__u32 bad_wr;
8468c2ecf20Sopenharmony_ci};
8478c2ecf20Sopenharmony_ci
8488c2ecf20Sopenharmony_cistruct ib_uverbs_recv_wr {
8498c2ecf20Sopenharmony_ci	__aligned_u64 wr_id;
8508c2ecf20Sopenharmony_ci	__u32 num_sge;
8518c2ecf20Sopenharmony_ci	__u32 reserved;
8528c2ecf20Sopenharmony_ci};
8538c2ecf20Sopenharmony_ci
8548c2ecf20Sopenharmony_cistruct ib_uverbs_post_recv {
8558c2ecf20Sopenharmony_ci	__aligned_u64 response;
8568c2ecf20Sopenharmony_ci	__u32 qp_handle;
8578c2ecf20Sopenharmony_ci	__u32 wr_count;
8588c2ecf20Sopenharmony_ci	__u32 sge_count;
8598c2ecf20Sopenharmony_ci	__u32 wqe_size;
8608c2ecf20Sopenharmony_ci	struct ib_uverbs_recv_wr recv_wr[0];
8618c2ecf20Sopenharmony_ci};
8628c2ecf20Sopenharmony_ci
8638c2ecf20Sopenharmony_cistruct ib_uverbs_post_recv_resp {
8648c2ecf20Sopenharmony_ci	__u32 bad_wr;
8658c2ecf20Sopenharmony_ci};
8668c2ecf20Sopenharmony_ci
8678c2ecf20Sopenharmony_cistruct ib_uverbs_post_srq_recv {
8688c2ecf20Sopenharmony_ci	__aligned_u64 response;
8698c2ecf20Sopenharmony_ci	__u32 srq_handle;
8708c2ecf20Sopenharmony_ci	__u32 wr_count;
8718c2ecf20Sopenharmony_ci	__u32 sge_count;
8728c2ecf20Sopenharmony_ci	__u32 wqe_size;
8738c2ecf20Sopenharmony_ci	struct ib_uverbs_recv_wr recv[0];
8748c2ecf20Sopenharmony_ci};
8758c2ecf20Sopenharmony_ci
8768c2ecf20Sopenharmony_cistruct ib_uverbs_post_srq_recv_resp {
8778c2ecf20Sopenharmony_ci	__u32 bad_wr;
8788c2ecf20Sopenharmony_ci};
8798c2ecf20Sopenharmony_ci
8808c2ecf20Sopenharmony_cistruct ib_uverbs_create_ah {
8818c2ecf20Sopenharmony_ci	__aligned_u64 response;
8828c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
8838c2ecf20Sopenharmony_ci	__u32 pd_handle;
8848c2ecf20Sopenharmony_ci	__u32 reserved;
8858c2ecf20Sopenharmony_ci	struct ib_uverbs_ah_attr attr;
8868c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
8878c2ecf20Sopenharmony_ci};
8888c2ecf20Sopenharmony_ci
8898c2ecf20Sopenharmony_cistruct ib_uverbs_create_ah_resp {
8908c2ecf20Sopenharmony_ci	__u32 ah_handle;
8918c2ecf20Sopenharmony_ci	__u32 driver_data[0];
8928c2ecf20Sopenharmony_ci};
8938c2ecf20Sopenharmony_ci
8948c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_ah {
8958c2ecf20Sopenharmony_ci	__u32 ah_handle;
8968c2ecf20Sopenharmony_ci};
8978c2ecf20Sopenharmony_ci
8988c2ecf20Sopenharmony_cistruct ib_uverbs_attach_mcast {
8998c2ecf20Sopenharmony_ci	__u8  gid[16];
9008c2ecf20Sopenharmony_ci	__u32 qp_handle;
9018c2ecf20Sopenharmony_ci	__u16 mlid;
9028c2ecf20Sopenharmony_ci	__u16 reserved;
9038c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
9048c2ecf20Sopenharmony_ci};
9058c2ecf20Sopenharmony_ci
9068c2ecf20Sopenharmony_cistruct ib_uverbs_detach_mcast {
9078c2ecf20Sopenharmony_ci	__u8  gid[16];
9088c2ecf20Sopenharmony_ci	__u32 qp_handle;
9098c2ecf20Sopenharmony_ci	__u16 mlid;
9108c2ecf20Sopenharmony_ci	__u16 reserved;
9118c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
9128c2ecf20Sopenharmony_ci};
9138c2ecf20Sopenharmony_ci
9148c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_hdr {
9158c2ecf20Sopenharmony_ci	__u32 type;
9168c2ecf20Sopenharmony_ci	__u16 size;
9178c2ecf20Sopenharmony_ci	__u16 reserved;
9188c2ecf20Sopenharmony_ci	/* followed by flow_spec */
9198c2ecf20Sopenharmony_ci	__aligned_u64 flow_spec_data[0];
9208c2ecf20Sopenharmony_ci};
9218c2ecf20Sopenharmony_ci
9228c2ecf20Sopenharmony_cistruct ib_uverbs_flow_eth_filter {
9238c2ecf20Sopenharmony_ci	__u8  dst_mac[6];
9248c2ecf20Sopenharmony_ci	__u8  src_mac[6];
9258c2ecf20Sopenharmony_ci	__be16 ether_type;
9268c2ecf20Sopenharmony_ci	__be16 vlan_tag;
9278c2ecf20Sopenharmony_ci};
9288c2ecf20Sopenharmony_ci
9298c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_eth {
9308c2ecf20Sopenharmony_ci	union {
9318c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
9328c2ecf20Sopenharmony_ci		struct {
9338c2ecf20Sopenharmony_ci			__u32 type;
9348c2ecf20Sopenharmony_ci			__u16 size;
9358c2ecf20Sopenharmony_ci			__u16 reserved;
9368c2ecf20Sopenharmony_ci		};
9378c2ecf20Sopenharmony_ci	};
9388c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_eth_filter val;
9398c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_eth_filter mask;
9408c2ecf20Sopenharmony_ci};
9418c2ecf20Sopenharmony_ci
9428c2ecf20Sopenharmony_cistruct ib_uverbs_flow_ipv4_filter {
9438c2ecf20Sopenharmony_ci	__be32 src_ip;
9448c2ecf20Sopenharmony_ci	__be32 dst_ip;
9458c2ecf20Sopenharmony_ci	__u8	proto;
9468c2ecf20Sopenharmony_ci	__u8	tos;
9478c2ecf20Sopenharmony_ci	__u8	ttl;
9488c2ecf20Sopenharmony_ci	__u8	flags;
9498c2ecf20Sopenharmony_ci};
9508c2ecf20Sopenharmony_ci
9518c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_ipv4 {
9528c2ecf20Sopenharmony_ci	union {
9538c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
9548c2ecf20Sopenharmony_ci		struct {
9558c2ecf20Sopenharmony_ci			__u32 type;
9568c2ecf20Sopenharmony_ci			__u16 size;
9578c2ecf20Sopenharmony_ci			__u16 reserved;
9588c2ecf20Sopenharmony_ci		};
9598c2ecf20Sopenharmony_ci	};
9608c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_ipv4_filter val;
9618c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_ipv4_filter mask;
9628c2ecf20Sopenharmony_ci};
9638c2ecf20Sopenharmony_ci
9648c2ecf20Sopenharmony_cistruct ib_uverbs_flow_tcp_udp_filter {
9658c2ecf20Sopenharmony_ci	__be16 dst_port;
9668c2ecf20Sopenharmony_ci	__be16 src_port;
9678c2ecf20Sopenharmony_ci};
9688c2ecf20Sopenharmony_ci
9698c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_tcp_udp {
9708c2ecf20Sopenharmony_ci	union {
9718c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
9728c2ecf20Sopenharmony_ci		struct {
9738c2ecf20Sopenharmony_ci			__u32 type;
9748c2ecf20Sopenharmony_ci			__u16 size;
9758c2ecf20Sopenharmony_ci			__u16 reserved;
9768c2ecf20Sopenharmony_ci		};
9778c2ecf20Sopenharmony_ci	};
9788c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_tcp_udp_filter val;
9798c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_tcp_udp_filter mask;
9808c2ecf20Sopenharmony_ci};
9818c2ecf20Sopenharmony_ci
9828c2ecf20Sopenharmony_cistruct ib_uverbs_flow_ipv6_filter {
9838c2ecf20Sopenharmony_ci	__u8    src_ip[16];
9848c2ecf20Sopenharmony_ci	__u8    dst_ip[16];
9858c2ecf20Sopenharmony_ci	__be32	flow_label;
9868c2ecf20Sopenharmony_ci	__u8	next_hdr;
9878c2ecf20Sopenharmony_ci	__u8	traffic_class;
9888c2ecf20Sopenharmony_ci	__u8	hop_limit;
9898c2ecf20Sopenharmony_ci	__u8	reserved;
9908c2ecf20Sopenharmony_ci};
9918c2ecf20Sopenharmony_ci
9928c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_ipv6 {
9938c2ecf20Sopenharmony_ci	union {
9948c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
9958c2ecf20Sopenharmony_ci		struct {
9968c2ecf20Sopenharmony_ci			__u32 type;
9978c2ecf20Sopenharmony_ci			__u16 size;
9988c2ecf20Sopenharmony_ci			__u16 reserved;
9998c2ecf20Sopenharmony_ci		};
10008c2ecf20Sopenharmony_ci	};
10018c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_ipv6_filter val;
10028c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_ipv6_filter mask;
10038c2ecf20Sopenharmony_ci};
10048c2ecf20Sopenharmony_ci
10058c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_action_tag {
10068c2ecf20Sopenharmony_ci	union {
10078c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
10088c2ecf20Sopenharmony_ci		struct {
10098c2ecf20Sopenharmony_ci			__u32 type;
10108c2ecf20Sopenharmony_ci			__u16 size;
10118c2ecf20Sopenharmony_ci			__u16 reserved;
10128c2ecf20Sopenharmony_ci		};
10138c2ecf20Sopenharmony_ci	};
10148c2ecf20Sopenharmony_ci	__u32			      tag_id;
10158c2ecf20Sopenharmony_ci	__u32			      reserved1;
10168c2ecf20Sopenharmony_ci};
10178c2ecf20Sopenharmony_ci
10188c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_action_drop {
10198c2ecf20Sopenharmony_ci	union {
10208c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
10218c2ecf20Sopenharmony_ci		struct {
10228c2ecf20Sopenharmony_ci			__u32 type;
10238c2ecf20Sopenharmony_ci			__u16 size;
10248c2ecf20Sopenharmony_ci			__u16 reserved;
10258c2ecf20Sopenharmony_ci		};
10268c2ecf20Sopenharmony_ci	};
10278c2ecf20Sopenharmony_ci};
10288c2ecf20Sopenharmony_ci
10298c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_action_handle {
10308c2ecf20Sopenharmony_ci	union {
10318c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
10328c2ecf20Sopenharmony_ci		struct {
10338c2ecf20Sopenharmony_ci			__u32 type;
10348c2ecf20Sopenharmony_ci			__u16 size;
10358c2ecf20Sopenharmony_ci			__u16 reserved;
10368c2ecf20Sopenharmony_ci		};
10378c2ecf20Sopenharmony_ci	};
10388c2ecf20Sopenharmony_ci	__u32			      handle;
10398c2ecf20Sopenharmony_ci	__u32			      reserved1;
10408c2ecf20Sopenharmony_ci};
10418c2ecf20Sopenharmony_ci
10428c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_action_count {
10438c2ecf20Sopenharmony_ci	union {
10448c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
10458c2ecf20Sopenharmony_ci		struct {
10468c2ecf20Sopenharmony_ci			__u32 type;
10478c2ecf20Sopenharmony_ci			__u16 size;
10488c2ecf20Sopenharmony_ci			__u16 reserved;
10498c2ecf20Sopenharmony_ci		};
10508c2ecf20Sopenharmony_ci	};
10518c2ecf20Sopenharmony_ci	__u32			      handle;
10528c2ecf20Sopenharmony_ci	__u32			      reserved1;
10538c2ecf20Sopenharmony_ci};
10548c2ecf20Sopenharmony_ci
10558c2ecf20Sopenharmony_cistruct ib_uverbs_flow_tunnel_filter {
10568c2ecf20Sopenharmony_ci	__be32 tunnel_id;
10578c2ecf20Sopenharmony_ci};
10588c2ecf20Sopenharmony_ci
10598c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_tunnel {
10608c2ecf20Sopenharmony_ci	union {
10618c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
10628c2ecf20Sopenharmony_ci		struct {
10638c2ecf20Sopenharmony_ci			__u32 type;
10648c2ecf20Sopenharmony_ci			__u16 size;
10658c2ecf20Sopenharmony_ci			__u16 reserved;
10668c2ecf20Sopenharmony_ci		};
10678c2ecf20Sopenharmony_ci	};
10688c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_tunnel_filter val;
10698c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_tunnel_filter mask;
10708c2ecf20Sopenharmony_ci};
10718c2ecf20Sopenharmony_ci
10728c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_esp_filter {
10738c2ecf20Sopenharmony_ci	__u32 spi;
10748c2ecf20Sopenharmony_ci	__u32 seq;
10758c2ecf20Sopenharmony_ci};
10768c2ecf20Sopenharmony_ci
10778c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_esp {
10788c2ecf20Sopenharmony_ci	union {
10798c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
10808c2ecf20Sopenharmony_ci		struct {
10818c2ecf20Sopenharmony_ci			__u32 type;
10828c2ecf20Sopenharmony_ci			__u16 size;
10838c2ecf20Sopenharmony_ci			__u16 reserved;
10848c2ecf20Sopenharmony_ci		};
10858c2ecf20Sopenharmony_ci	};
10868c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_spec_esp_filter val;
10878c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_spec_esp_filter mask;
10888c2ecf20Sopenharmony_ci};
10898c2ecf20Sopenharmony_ci
10908c2ecf20Sopenharmony_cistruct ib_uverbs_flow_gre_filter {
10918c2ecf20Sopenharmony_ci	/* c_ks_res0_ver field is bits 0-15 in offset 0 of a standard GRE header:
10928c2ecf20Sopenharmony_ci	 * bit 0 - C - checksum bit.
10938c2ecf20Sopenharmony_ci	 * bit 1 - reserved. set to 0.
10948c2ecf20Sopenharmony_ci	 * bit 2 - key bit.
10958c2ecf20Sopenharmony_ci	 * bit 3 - sequence number bit.
10968c2ecf20Sopenharmony_ci	 * bits 4:12 - reserved. set to 0.
10978c2ecf20Sopenharmony_ci	 * bits 13:15 - GRE version.
10988c2ecf20Sopenharmony_ci	 */
10998c2ecf20Sopenharmony_ci	__be16 c_ks_res0_ver;
11008c2ecf20Sopenharmony_ci	__be16 protocol;
11018c2ecf20Sopenharmony_ci	__be32 key;
11028c2ecf20Sopenharmony_ci};
11038c2ecf20Sopenharmony_ci
11048c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_gre {
11058c2ecf20Sopenharmony_ci	union {
11068c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
11078c2ecf20Sopenharmony_ci		struct {
11088c2ecf20Sopenharmony_ci			__u32 type;
11098c2ecf20Sopenharmony_ci			__u16 size;
11108c2ecf20Sopenharmony_ci			__u16 reserved;
11118c2ecf20Sopenharmony_ci		};
11128c2ecf20Sopenharmony_ci	};
11138c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_gre_filter     val;
11148c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_gre_filter     mask;
11158c2ecf20Sopenharmony_ci};
11168c2ecf20Sopenharmony_ci
11178c2ecf20Sopenharmony_cistruct ib_uverbs_flow_mpls_filter {
11188c2ecf20Sopenharmony_ci	/* The field includes the entire MPLS label:
11198c2ecf20Sopenharmony_ci	 * bits 0:19 - label field.
11208c2ecf20Sopenharmony_ci	 * bits 20:22 - traffic class field.
11218c2ecf20Sopenharmony_ci	 * bits 23 - bottom of stack bit.
11228c2ecf20Sopenharmony_ci	 * bits 24:31 - ttl field.
11238c2ecf20Sopenharmony_ci	 */
11248c2ecf20Sopenharmony_ci	__be32 label;
11258c2ecf20Sopenharmony_ci};
11268c2ecf20Sopenharmony_ci
11278c2ecf20Sopenharmony_cistruct ib_uverbs_flow_spec_mpls {
11288c2ecf20Sopenharmony_ci	union {
11298c2ecf20Sopenharmony_ci		struct ib_uverbs_flow_spec_hdr hdr;
11308c2ecf20Sopenharmony_ci		struct {
11318c2ecf20Sopenharmony_ci			__u32 type;
11328c2ecf20Sopenharmony_ci			__u16 size;
11338c2ecf20Sopenharmony_ci			__u16 reserved;
11348c2ecf20Sopenharmony_ci		};
11358c2ecf20Sopenharmony_ci	};
11368c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_mpls_filter     val;
11378c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_mpls_filter     mask;
11388c2ecf20Sopenharmony_ci};
11398c2ecf20Sopenharmony_ci
11408c2ecf20Sopenharmony_cistruct ib_uverbs_flow_attr {
11418c2ecf20Sopenharmony_ci	__u32 type;
11428c2ecf20Sopenharmony_ci	__u16 size;
11438c2ecf20Sopenharmony_ci	__u16 priority;
11448c2ecf20Sopenharmony_ci	__u8  num_of_specs;
11458c2ecf20Sopenharmony_ci	__u8  reserved[2];
11468c2ecf20Sopenharmony_ci	__u8  port;
11478c2ecf20Sopenharmony_ci	__u32 flags;
11488c2ecf20Sopenharmony_ci	/* Following are the optional layers according to user request
11498c2ecf20Sopenharmony_ci	 * struct ib_flow_spec_xxx
11508c2ecf20Sopenharmony_ci	 * struct ib_flow_spec_yyy
11518c2ecf20Sopenharmony_ci	 */
11528c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_spec_hdr flow_specs[0];
11538c2ecf20Sopenharmony_ci};
11548c2ecf20Sopenharmony_ci
11558c2ecf20Sopenharmony_cistruct ib_uverbs_create_flow  {
11568c2ecf20Sopenharmony_ci	__u32 comp_mask;
11578c2ecf20Sopenharmony_ci	__u32 qp_handle;
11588c2ecf20Sopenharmony_ci	struct ib_uverbs_flow_attr flow_attr;
11598c2ecf20Sopenharmony_ci};
11608c2ecf20Sopenharmony_ci
11618c2ecf20Sopenharmony_cistruct ib_uverbs_create_flow_resp {
11628c2ecf20Sopenharmony_ci	__u32 comp_mask;
11638c2ecf20Sopenharmony_ci	__u32 flow_handle;
11648c2ecf20Sopenharmony_ci};
11658c2ecf20Sopenharmony_ci
11668c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_flow  {
11678c2ecf20Sopenharmony_ci	__u32 comp_mask;
11688c2ecf20Sopenharmony_ci	__u32 flow_handle;
11698c2ecf20Sopenharmony_ci};
11708c2ecf20Sopenharmony_ci
11718c2ecf20Sopenharmony_cistruct ib_uverbs_create_srq {
11728c2ecf20Sopenharmony_ci	__aligned_u64 response;
11738c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
11748c2ecf20Sopenharmony_ci	__u32 pd_handle;
11758c2ecf20Sopenharmony_ci	__u32 max_wr;
11768c2ecf20Sopenharmony_ci	__u32 max_sge;
11778c2ecf20Sopenharmony_ci	__u32 srq_limit;
11788c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
11798c2ecf20Sopenharmony_ci};
11808c2ecf20Sopenharmony_ci
11818c2ecf20Sopenharmony_cistruct ib_uverbs_create_xsrq {
11828c2ecf20Sopenharmony_ci	__aligned_u64 response;
11838c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
11848c2ecf20Sopenharmony_ci	__u32 srq_type;
11858c2ecf20Sopenharmony_ci	__u32 pd_handle;
11868c2ecf20Sopenharmony_ci	__u32 max_wr;
11878c2ecf20Sopenharmony_ci	__u32 max_sge;
11888c2ecf20Sopenharmony_ci	__u32 srq_limit;
11898c2ecf20Sopenharmony_ci	__u32 max_num_tags;
11908c2ecf20Sopenharmony_ci	__u32 xrcd_handle;
11918c2ecf20Sopenharmony_ci	__u32 cq_handle;
11928c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
11938c2ecf20Sopenharmony_ci};
11948c2ecf20Sopenharmony_ci
11958c2ecf20Sopenharmony_cistruct ib_uverbs_create_srq_resp {
11968c2ecf20Sopenharmony_ci	__u32 srq_handle;
11978c2ecf20Sopenharmony_ci	__u32 max_wr;
11988c2ecf20Sopenharmony_ci	__u32 max_sge;
11998c2ecf20Sopenharmony_ci	__u32 srqn;
12008c2ecf20Sopenharmony_ci	__u32 driver_data[0];
12018c2ecf20Sopenharmony_ci};
12028c2ecf20Sopenharmony_ci
12038c2ecf20Sopenharmony_cistruct ib_uverbs_modify_srq {
12048c2ecf20Sopenharmony_ci	__u32 srq_handle;
12058c2ecf20Sopenharmony_ci	__u32 attr_mask;
12068c2ecf20Sopenharmony_ci	__u32 max_wr;
12078c2ecf20Sopenharmony_ci	__u32 srq_limit;
12088c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
12098c2ecf20Sopenharmony_ci};
12108c2ecf20Sopenharmony_ci
12118c2ecf20Sopenharmony_cistruct ib_uverbs_query_srq {
12128c2ecf20Sopenharmony_ci	__aligned_u64 response;
12138c2ecf20Sopenharmony_ci	__u32 srq_handle;
12148c2ecf20Sopenharmony_ci	__u32 reserved;
12158c2ecf20Sopenharmony_ci	__aligned_u64 driver_data[0];
12168c2ecf20Sopenharmony_ci};
12178c2ecf20Sopenharmony_ci
12188c2ecf20Sopenharmony_cistruct ib_uverbs_query_srq_resp {
12198c2ecf20Sopenharmony_ci	__u32 max_wr;
12208c2ecf20Sopenharmony_ci	__u32 max_sge;
12218c2ecf20Sopenharmony_ci	__u32 srq_limit;
12228c2ecf20Sopenharmony_ci	__u32 reserved;
12238c2ecf20Sopenharmony_ci};
12248c2ecf20Sopenharmony_ci
12258c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_srq {
12268c2ecf20Sopenharmony_ci	__aligned_u64 response;
12278c2ecf20Sopenharmony_ci	__u32 srq_handle;
12288c2ecf20Sopenharmony_ci	__u32 reserved;
12298c2ecf20Sopenharmony_ci};
12308c2ecf20Sopenharmony_ci
12318c2ecf20Sopenharmony_cistruct ib_uverbs_destroy_srq_resp {
12328c2ecf20Sopenharmony_ci	__u32 events_reported;
12338c2ecf20Sopenharmony_ci};
12348c2ecf20Sopenharmony_ci
12358c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_wq  {
12368c2ecf20Sopenharmony_ci	__u32 comp_mask;
12378c2ecf20Sopenharmony_ci	__u32 wq_type;
12388c2ecf20Sopenharmony_ci	__aligned_u64 user_handle;
12398c2ecf20Sopenharmony_ci	__u32 pd_handle;
12408c2ecf20Sopenharmony_ci	__u32 cq_handle;
12418c2ecf20Sopenharmony_ci	__u32 max_wr;
12428c2ecf20Sopenharmony_ci	__u32 max_sge;
12438c2ecf20Sopenharmony_ci	__u32 create_flags; /* Use enum ib_wq_flags */
12448c2ecf20Sopenharmony_ci	__u32 reserved;
12458c2ecf20Sopenharmony_ci};
12468c2ecf20Sopenharmony_ci
12478c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_wq_resp {
12488c2ecf20Sopenharmony_ci	__u32 comp_mask;
12498c2ecf20Sopenharmony_ci	__u32 response_length;
12508c2ecf20Sopenharmony_ci	__u32 wq_handle;
12518c2ecf20Sopenharmony_ci	__u32 max_wr;
12528c2ecf20Sopenharmony_ci	__u32 max_sge;
12538c2ecf20Sopenharmony_ci	__u32 wqn;
12548c2ecf20Sopenharmony_ci};
12558c2ecf20Sopenharmony_ci
12568c2ecf20Sopenharmony_cistruct ib_uverbs_ex_destroy_wq  {
12578c2ecf20Sopenharmony_ci	__u32 comp_mask;
12588c2ecf20Sopenharmony_ci	__u32 wq_handle;
12598c2ecf20Sopenharmony_ci};
12608c2ecf20Sopenharmony_ci
12618c2ecf20Sopenharmony_cistruct ib_uverbs_ex_destroy_wq_resp {
12628c2ecf20Sopenharmony_ci	__u32 comp_mask;
12638c2ecf20Sopenharmony_ci	__u32 response_length;
12648c2ecf20Sopenharmony_ci	__u32 events_reported;
12658c2ecf20Sopenharmony_ci	__u32 reserved;
12668c2ecf20Sopenharmony_ci};
12678c2ecf20Sopenharmony_ci
12688c2ecf20Sopenharmony_cistruct ib_uverbs_ex_modify_wq  {
12698c2ecf20Sopenharmony_ci	__u32 attr_mask;
12708c2ecf20Sopenharmony_ci	__u32 wq_handle;
12718c2ecf20Sopenharmony_ci	__u32 wq_state;
12728c2ecf20Sopenharmony_ci	__u32 curr_wq_state;
12738c2ecf20Sopenharmony_ci	__u32 flags; /* Use enum ib_wq_flags */
12748c2ecf20Sopenharmony_ci	__u32 flags_mask; /* Use enum ib_wq_flags */
12758c2ecf20Sopenharmony_ci};
12768c2ecf20Sopenharmony_ci
12778c2ecf20Sopenharmony_ci/* Prevent memory allocation rather than max expected size */
12788c2ecf20Sopenharmony_ci#define IB_USER_VERBS_MAX_LOG_IND_TBL_SIZE 0x0d
12798c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_rwq_ind_table  {
12808c2ecf20Sopenharmony_ci	__u32 comp_mask;
12818c2ecf20Sopenharmony_ci	__u32 log_ind_tbl_size;
12828c2ecf20Sopenharmony_ci	/* Following are the wq handles according to log_ind_tbl_size
12838c2ecf20Sopenharmony_ci	 * wq_handle1
12848c2ecf20Sopenharmony_ci	 * wq_handle2
12858c2ecf20Sopenharmony_ci	 */
12868c2ecf20Sopenharmony_ci	__u32 wq_handles[0];
12878c2ecf20Sopenharmony_ci};
12888c2ecf20Sopenharmony_ci
12898c2ecf20Sopenharmony_cistruct ib_uverbs_ex_create_rwq_ind_table_resp {
12908c2ecf20Sopenharmony_ci	__u32 comp_mask;
12918c2ecf20Sopenharmony_ci	__u32 response_length;
12928c2ecf20Sopenharmony_ci	__u32 ind_tbl_handle;
12938c2ecf20Sopenharmony_ci	__u32 ind_tbl_num;
12948c2ecf20Sopenharmony_ci};
12958c2ecf20Sopenharmony_ci
12968c2ecf20Sopenharmony_cistruct ib_uverbs_ex_destroy_rwq_ind_table  {
12978c2ecf20Sopenharmony_ci	__u32 comp_mask;
12988c2ecf20Sopenharmony_ci	__u32 ind_tbl_handle;
12998c2ecf20Sopenharmony_ci};
13008c2ecf20Sopenharmony_ci
13018c2ecf20Sopenharmony_cistruct ib_uverbs_cq_moderation {
13028c2ecf20Sopenharmony_ci	__u16 cq_count;
13038c2ecf20Sopenharmony_ci	__u16 cq_period;
13048c2ecf20Sopenharmony_ci};
13058c2ecf20Sopenharmony_ci
13068c2ecf20Sopenharmony_cistruct ib_uverbs_ex_modify_cq {
13078c2ecf20Sopenharmony_ci	__u32 cq_handle;
13088c2ecf20Sopenharmony_ci	__u32 attr_mask;
13098c2ecf20Sopenharmony_ci	struct ib_uverbs_cq_moderation attr;
13108c2ecf20Sopenharmony_ci	__u32 reserved;
13118c2ecf20Sopenharmony_ci};
13128c2ecf20Sopenharmony_ci
13138c2ecf20Sopenharmony_ci#define IB_DEVICE_NAME_MAX 64
13148c2ecf20Sopenharmony_ci
13158c2ecf20Sopenharmony_ci#endif /* IB_USER_VERBS_H */
1316