109938b21SHans Petter Selasky /*- 209938b21SHans Petter Selasky * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0 309938b21SHans Petter Selasky * 4478d3005SHans Petter Selasky * Copyright (c) 2013-2015, Mellanox Technologies. All rights reserved. 5478d3005SHans Petter Selasky * 6478d3005SHans Petter Selasky * This software is available to you under a choice of one of two 7478d3005SHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU 8478d3005SHans Petter Selasky * General Public License (GPL) Version 2, available from the file 9478d3005SHans Petter Selasky * COPYING in the main directory of this source tree, or the 10478d3005SHans Petter Selasky * OpenIB.org BSD license below: 11478d3005SHans Petter Selasky * 12478d3005SHans Petter Selasky * Redistribution and use in source and binary forms, with or 13478d3005SHans Petter Selasky * without modification, are permitted provided that the following 14478d3005SHans Petter Selasky * conditions are met: 15478d3005SHans Petter Selasky * 16478d3005SHans Petter Selasky * - Redistributions of source code must retain the above 17478d3005SHans Petter Selasky * copyright notice, this list of conditions and the following 18478d3005SHans Petter Selasky * disclaimer. 19478d3005SHans Petter Selasky * 20478d3005SHans Petter Selasky * - Redistributions in binary form must reproduce the above 21478d3005SHans Petter Selasky * copyright notice, this list of conditions and the following 22478d3005SHans Petter Selasky * disclaimer in the documentation and/or other materials 23478d3005SHans Petter Selasky * provided with the distribution. 24478d3005SHans Petter Selasky * 25478d3005SHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26478d3005SHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27478d3005SHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28478d3005SHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29478d3005SHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30478d3005SHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31478d3005SHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32478d3005SHans Petter Selasky * SOFTWARE. 33478d3005SHans Petter Selasky */ 34478d3005SHans Petter Selasky 35478d3005SHans Petter Selasky #ifndef MLX5_ABI_USER_H 36478d3005SHans Petter Selasky #define MLX5_ABI_USER_H 37478d3005SHans Petter Selasky 38c19d6504SHans Petter Selasky #ifdef _KERNEL 39478d3005SHans Petter Selasky #include <linux/types.h> 40c19d6504SHans Petter Selasky #else 41c19d6504SHans Petter Selasky #include <infiniband/types.h> 42c19d6504SHans Petter Selasky #endif 43478d3005SHans Petter Selasky 44478d3005SHans Petter Selasky enum { 45478d3005SHans Petter Selasky MLX5_QP_FLAG_SIGNATURE = 1 << 0, 46478d3005SHans Petter Selasky MLX5_QP_FLAG_SCATTER_CQE = 1 << 1, 47f8f5b459SHans Petter Selasky MLX5_QP_FLAG_BFREG_INDEX = 1 << 3, 48f8f5b459SHans Petter Selasky MLX5_QP_FLAG_UAR_PAGE_INDEX = 1 << 10, 49478d3005SHans Petter Selasky }; 50478d3005SHans Petter Selasky 51478d3005SHans Petter Selasky enum { 52478d3005SHans Petter Selasky MLX5_SRQ_FLAG_SIGNATURE = 1 << 0, 53478d3005SHans Petter Selasky }; 54478d3005SHans Petter Selasky 55478d3005SHans Petter Selasky enum { 56478d3005SHans Petter Selasky MLX5_WQ_FLAG_SIGNATURE = 1 << 0, 57478d3005SHans Petter Selasky }; 58478d3005SHans Petter Selasky 59478d3005SHans Petter Selasky /* Increment this value if any changes that break userspace ABI 60478d3005SHans Petter Selasky * compatibility are made. 61478d3005SHans Petter Selasky */ 62478d3005SHans Petter Selasky #define MLX5_IB_UVERBS_ABI_VERSION 1 63478d3005SHans Petter Selasky 64478d3005SHans Petter Selasky /* Make sure that all structs defined in this file remain laid out so 65478d3005SHans Petter Selasky * that they pack the same way on 32-bit and 64-bit architectures (to 66478d3005SHans Petter Selasky * avoid incompatibility between 32-bit userspace and 64-bit kernels). 67478d3005SHans Petter Selasky * In particular do not use pointer types -- pass pointers in __u64 68478d3005SHans Petter Selasky * instead. 69478d3005SHans Petter Selasky */ 70478d3005SHans Petter Selasky 71478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req { 72f8f5b459SHans Petter Selasky __u32 total_num_bfregs; 73f8f5b459SHans Petter Selasky __u32 num_low_latency_bfregs; 74478d3005SHans Petter Selasky }; 75478d3005SHans Petter Selasky 76f8f5b459SHans Petter Selasky enum mlx5_lib_caps { 77f8f5b459SHans Petter Selasky MLX5_LIB_CAP_4K_UAR = (__u64)1 << 0, 78f8f5b459SHans Petter Selasky MLX5_LIB_CAP_DYN_UAR = (__u64)1 << 1, 79f8f5b459SHans Petter Selasky }; 80f8f5b459SHans Petter Selasky 81f8f5b459SHans Petter Selasky enum mlx5_ib_alloc_uctx_v2_flags { 82f8f5b459SHans Petter Selasky MLX5_IB_ALLOC_UCTX_DEVX = 1 << 0, 83f8f5b459SHans Petter Selasky }; 84478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req_v2 { 85f8f5b459SHans Petter Selasky __u32 total_num_bfregs; 86f8f5b459SHans Petter Selasky __u32 num_low_latency_bfregs; 87478d3005SHans Petter Selasky __u32 flags; 88478d3005SHans Petter Selasky __u32 comp_mask; 89478d3005SHans Petter Selasky __u8 max_cqe_version; 90478d3005SHans Petter Selasky __u8 reserved0; 91478d3005SHans Petter Selasky __u16 reserved1; 92478d3005SHans Petter Selasky __u32 reserved2; 93f8f5b459SHans Petter Selasky __aligned_u64 lib_caps; 94478d3005SHans Petter Selasky }; 95478d3005SHans Petter Selasky 96478d3005SHans Petter Selasky enum mlx5_ib_alloc_ucontext_resp_mask { 97478d3005SHans Petter Selasky MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0, 98478d3005SHans Petter Selasky }; 99478d3005SHans Petter Selasky 100478d3005SHans Petter Selasky enum mlx5_user_cmds_supp_uhw { 101478d3005SHans Petter Selasky MLX5_USER_CMDS_SUPP_UHW_QUERY_DEVICE = 1 << 0, 1021456d97cSHans Petter Selasky MLX5_USER_CMDS_SUPP_UHW_CREATE_AH = 1 << 1, 103478d3005SHans Petter Selasky }; 104478d3005SHans Petter Selasky 105478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_resp { 106478d3005SHans Petter Selasky __u32 qp_tab_size; 107478d3005SHans Petter Selasky __u32 bf_reg_size; 108f8f5b459SHans Petter Selasky __u32 tot_bfregs; 109478d3005SHans Petter Selasky __u32 cache_line_size; 110478d3005SHans Petter Selasky __u16 max_sq_desc_sz; 111478d3005SHans Petter Selasky __u16 max_rq_desc_sz; 112478d3005SHans Petter Selasky __u32 max_send_wqebb; 113478d3005SHans Petter Selasky __u32 max_recv_wr; 114478d3005SHans Petter Selasky __u32 max_srq_recv_wr; 115478d3005SHans Petter Selasky __u16 num_ports; 116478d3005SHans Petter Selasky __u16 reserved1; 117478d3005SHans Petter Selasky __u32 comp_mask; 118478d3005SHans Petter Selasky __u32 response_length; 119478d3005SHans Petter Selasky __u8 cqe_version; 120478d3005SHans Petter Selasky __u8 cmds_supp_uhw; 121478d3005SHans Petter Selasky __u16 reserved2; 122478d3005SHans Petter Selasky __u64 hca_core_clock_offset; 123f8f5b459SHans Petter Selasky __u32 log_uar_size; 124f8f5b459SHans Petter Selasky __u32 num_uars_per_page; 125f8f5b459SHans Petter Selasky __u32 num_dyn_bfregs; 126478d3005SHans Petter Selasky }; 127478d3005SHans Petter Selasky 128478d3005SHans Petter Selasky struct mlx5_ib_alloc_pd_resp { 129478d3005SHans Petter Selasky __u32 pdn; 130478d3005SHans Petter Selasky }; 131478d3005SHans Petter Selasky 132478d3005SHans Petter Selasky struct mlx5_ib_tso_caps { 133478d3005SHans Petter Selasky __u32 max_tso; /* Maximum tso payload size in bytes */ 134478d3005SHans Petter Selasky 135478d3005SHans Petter Selasky /* Corresponding bit will be set if qp type from 136478d3005SHans Petter Selasky * 'enum ib_qp_type' is supported, e.g. 137478d3005SHans Petter Selasky * supported_qpts |= 1 << IB_QPT_UD 138478d3005SHans Petter Selasky */ 139478d3005SHans Petter Selasky __u32 supported_qpts; 140478d3005SHans Petter Selasky }; 141478d3005SHans Petter Selasky 142478d3005SHans Petter Selasky struct mlx5_ib_rss_caps { 143478d3005SHans Petter Selasky __u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */ 144478d3005SHans Petter Selasky __u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */ 145478d3005SHans Petter Selasky __u8 reserved[7]; 146478d3005SHans Petter Selasky }; 147478d3005SHans Petter Selasky 148478d3005SHans Petter Selasky struct mlx5_ib_query_device_resp { 149478d3005SHans Petter Selasky __u32 comp_mask; 150478d3005SHans Petter Selasky __u32 response_length; 151478d3005SHans Petter Selasky struct mlx5_ib_tso_caps tso_caps; 152478d3005SHans Petter Selasky struct mlx5_ib_rss_caps rss_caps; 153478d3005SHans Petter Selasky }; 154478d3005SHans Petter Selasky 155f8f5b459SHans Petter Selasky enum mlx5_ib_create_cq_flags { 156f8f5b459SHans Petter Selasky MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD = 1 << 0, 157f8f5b459SHans Petter Selasky MLX5_IB_CREATE_CQ_FLAGS_UAR_PAGE_INDEX = 1 << 1, 158f8f5b459SHans Petter Selasky }; 159f8f5b459SHans Petter Selasky 160478d3005SHans Petter Selasky struct mlx5_ib_create_cq { 161478d3005SHans Petter Selasky __u64 buf_addr; 162478d3005SHans Petter Selasky __u64 db_addr; 163478d3005SHans Petter Selasky __u32 cqe_size; 164f8f5b459SHans Petter Selasky __u16 flags; 165f8f5b459SHans Petter Selasky __u16 uar_page_index; 166478d3005SHans Petter Selasky }; 167478d3005SHans Petter Selasky 168478d3005SHans Petter Selasky struct mlx5_ib_create_cq_resp { 169478d3005SHans Petter Selasky __u32 cqn; 170478d3005SHans Petter Selasky __u32 reserved; 171478d3005SHans Petter Selasky }; 172478d3005SHans Petter Selasky 173478d3005SHans Petter Selasky struct mlx5_ib_resize_cq { 174478d3005SHans Petter Selasky __u64 buf_addr; 175478d3005SHans Petter Selasky __u16 cqe_size; 176478d3005SHans Petter Selasky __u16 reserved0; 177478d3005SHans Petter Selasky __u32 reserved1; 178478d3005SHans Petter Selasky }; 179478d3005SHans Petter Selasky 180478d3005SHans Petter Selasky struct mlx5_ib_create_srq { 181478d3005SHans Petter Selasky __u64 buf_addr; 182478d3005SHans Petter Selasky __u64 db_addr; 183478d3005SHans Petter Selasky __u32 flags; 184478d3005SHans Petter Selasky __u32 reserved0; /* explicit padding (optional on i386) */ 185478d3005SHans Petter Selasky __u32 uidx; 186478d3005SHans Petter Selasky __u32 reserved1; 187478d3005SHans Petter Selasky }; 188478d3005SHans Petter Selasky 189478d3005SHans Petter Selasky struct mlx5_ib_create_srq_resp { 190478d3005SHans Petter Selasky __u32 srqn; 191478d3005SHans Petter Selasky __u32 reserved; 192478d3005SHans Petter Selasky }; 193478d3005SHans Petter Selasky 194478d3005SHans Petter Selasky struct mlx5_ib_create_qp { 195478d3005SHans Petter Selasky __u64 buf_addr; 196478d3005SHans Petter Selasky __u64 db_addr; 197478d3005SHans Petter Selasky __u32 sq_wqe_count; 198478d3005SHans Petter Selasky __u32 rq_wqe_count; 199478d3005SHans Petter Selasky __u32 rq_wqe_shift; 200478d3005SHans Petter Selasky __u32 flags; 201478d3005SHans Petter Selasky __u32 uidx; 202f8f5b459SHans Petter Selasky __u32 bfreg_index; 203478d3005SHans Petter Selasky __u64 sq_buf_addr; 204478d3005SHans Petter Selasky }; 205478d3005SHans Petter Selasky 206478d3005SHans Petter Selasky /* RX Hash function flags */ 207478d3005SHans Petter Selasky enum mlx5_rx_hash_function_flags { 208478d3005SHans Petter Selasky MLX5_RX_HASH_FUNC_TOEPLITZ = 1 << 0, 209478d3005SHans Petter Selasky }; 210478d3005SHans Petter Selasky 211478d3005SHans Petter Selasky /* 212478d3005SHans Petter Selasky * RX Hash flags, these flags allows to set which incoming packet's field should 213478d3005SHans Petter Selasky * participates in RX Hash. Each flag represent certain packet's field, 214478d3005SHans Petter Selasky * when the flag is set the field that is represented by the flag will 215478d3005SHans Petter Selasky * participate in RX Hash calculation. 216478d3005SHans Petter Selasky * Note: *IPV4 and *IPV6 flags can't be enabled together on the same QP 217478d3005SHans Petter Selasky * and *TCP and *UDP flags can't be enabled together on the same QP. 218478d3005SHans Petter Selasky */ 219478d3005SHans Petter Selasky enum mlx5_rx_hash_fields { 220478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_IPV4 = 1 << 0, 221478d3005SHans Petter Selasky MLX5_RX_HASH_DST_IPV4 = 1 << 1, 222478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_IPV6 = 1 << 2, 223478d3005SHans Petter Selasky MLX5_RX_HASH_DST_IPV6 = 1 << 3, 224478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_PORT_TCP = 1 << 4, 225478d3005SHans Petter Selasky MLX5_RX_HASH_DST_PORT_TCP = 1 << 5, 226478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_PORT_UDP = 1 << 6, 227478d3005SHans Petter Selasky MLX5_RX_HASH_DST_PORT_UDP = 1 << 7 228478d3005SHans Petter Selasky }; 229478d3005SHans Petter Selasky 230478d3005SHans Petter Selasky struct mlx5_ib_create_qp_rss { 231478d3005SHans Petter Selasky __u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */ 232478d3005SHans Petter Selasky __u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */ 233478d3005SHans Petter Selasky __u8 rx_key_len; /* valid only for Toeplitz */ 234478d3005SHans Petter Selasky __u8 reserved[6]; 235478d3005SHans Petter Selasky __u8 rx_hash_key[128]; /* valid only for Toeplitz */ 236478d3005SHans Petter Selasky __u32 comp_mask; 237478d3005SHans Petter Selasky __u32 reserved1; 238478d3005SHans Petter Selasky }; 239478d3005SHans Petter Selasky 240478d3005SHans Petter Selasky struct mlx5_ib_create_qp_resp { 241f8f5b459SHans Petter Selasky __u32 bfreg_index; 242478d3005SHans Petter Selasky }; 243478d3005SHans Petter Selasky 244478d3005SHans Petter Selasky struct mlx5_ib_alloc_mw { 245478d3005SHans Petter Selasky __u32 comp_mask; 246478d3005SHans Petter Selasky __u8 num_klms; 247478d3005SHans Petter Selasky __u8 reserved1; 248478d3005SHans Petter Selasky __u16 reserved2; 249478d3005SHans Petter Selasky }; 250478d3005SHans Petter Selasky 251478d3005SHans Petter Selasky struct mlx5_ib_create_wq { 252478d3005SHans Petter Selasky __u64 buf_addr; 253478d3005SHans Petter Selasky __u64 db_addr; 254478d3005SHans Petter Selasky __u32 rq_wqe_count; 255478d3005SHans Petter Selasky __u32 rq_wqe_shift; 256478d3005SHans Petter Selasky __u32 user_index; 257478d3005SHans Petter Selasky __u32 flags; 258478d3005SHans Petter Selasky __u32 comp_mask; 259478d3005SHans Petter Selasky __u32 reserved; 260478d3005SHans Petter Selasky }; 261478d3005SHans Petter Selasky 2621456d97cSHans Petter Selasky struct mlx5_ib_create_ah_resp { 2631456d97cSHans Petter Selasky __u32 response_length; 2641456d97cSHans Petter Selasky __u8 dmac[ETH_ALEN]; 2651456d97cSHans Petter Selasky __u8 reserved[6]; 2661456d97cSHans Petter Selasky }; 2671456d97cSHans Petter Selasky 268478d3005SHans Petter Selasky struct mlx5_ib_create_wq_resp { 269478d3005SHans Petter Selasky __u32 response_length; 270478d3005SHans Petter Selasky __u32 reserved; 271478d3005SHans Petter Selasky }; 272478d3005SHans Petter Selasky 273478d3005SHans Petter Selasky struct mlx5_ib_create_rwq_ind_tbl_resp { 274478d3005SHans Petter Selasky __u32 response_length; 275478d3005SHans Petter Selasky __u32 reserved; 276478d3005SHans Petter Selasky }; 277478d3005SHans Petter Selasky 278478d3005SHans Petter Selasky struct mlx5_ib_modify_wq { 279478d3005SHans Petter Selasky __u32 comp_mask; 280478d3005SHans Petter Selasky __u32 reserved; 281478d3005SHans Petter Selasky }; 282b633e08cSHans Petter Selasky 283b633e08cSHans Petter Selasky enum mlx5_ib_mmap_cmd { 284b633e08cSHans Petter Selasky MLX5_IB_MMAP_REGULAR_PAGE = 0, 285b633e08cSHans Petter Selasky MLX5_IB_MMAP_GET_CONTIGUOUS_PAGES = 1, 286b633e08cSHans Petter Selasky MLX5_IB_MMAP_WC_PAGE = 2, 287b633e08cSHans Petter Selasky MLX5_IB_MMAP_NC_PAGE = 3, 288b633e08cSHans Petter Selasky /* 5 is chosen in order to be compatible with old versions of libmlx5 */ 289b633e08cSHans Petter Selasky MLX5_IB_MMAP_CORE_CLOCK = 5, 290b633e08cSHans Petter Selasky MLX5_IB_MMAP_ALLOC_WC = 6, 291b633e08cSHans Petter Selasky MLX5_IB_MMAP_CLOCK_INFO = 7, 292b633e08cSHans Petter Selasky MLX5_IB_MMAP_DEVICE_MEM = 8, 293b633e08cSHans Petter Selasky }; 294b633e08cSHans Petter Selasky 295b633e08cSHans Petter Selasky /* Bit indexes for the mlx5_alloc_ucontext_resp.clock_info_versions bitmap */ 296b633e08cSHans Petter Selasky enum { 297b633e08cSHans Petter Selasky MLX5_IB_CLOCK_INFO_V1 = 0, 298b633e08cSHans Petter Selasky }; 299b633e08cSHans Petter Selasky 300*a30f7170SHans Petter Selasky struct mlx5_ib_flow_counters_desc { 301*a30f7170SHans Petter Selasky __u32 description; 302*a30f7170SHans Petter Selasky __u32 index; 303*a30f7170SHans Petter Selasky }; 304*a30f7170SHans Petter Selasky 305*a30f7170SHans Petter Selasky struct mlx5_ib_flow_counters_data { 306*a30f7170SHans Petter Selasky RDMA_UAPI_PTR(struct mlx5_ib_flow_counters_desc *, counters_data); 307*a30f7170SHans Petter Selasky __u32 ncounters; 308*a30f7170SHans Petter Selasky __u32 reserved; 309*a30f7170SHans Petter Selasky }; 310*a30f7170SHans Petter Selasky 311*a30f7170SHans Petter Selasky struct mlx5_ib_create_flow { 312*a30f7170SHans Petter Selasky __u32 ncounters_data; 313*a30f7170SHans Petter Selasky __u32 reserved; 314*a30f7170SHans Petter Selasky /* 315*a30f7170SHans Petter Selasky * Following are counters data based on ncounters_data, each 316*a30f7170SHans Petter Selasky * entry in the data[] should match a corresponding counter object 317*a30f7170SHans Petter Selasky * that was pointed by a counters spec upon the flow creation 318*a30f7170SHans Petter Selasky */ 319*a30f7170SHans Petter Selasky struct mlx5_ib_flow_counters_data data[]; 320*a30f7170SHans Petter Selasky }; 321*a30f7170SHans Petter Selasky 322478d3005SHans Petter Selasky #endif /* MLX5_ABI_USER_H */ 323