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. 3309938b21SHans Petter Selasky * 3409938b21SHans Petter Selasky * $FreeBSD$ 35478d3005SHans Petter Selasky */ 36478d3005SHans Petter Selasky 37478d3005SHans Petter Selasky #ifndef MLX5_ABI_USER_H 38478d3005SHans Petter Selasky #define MLX5_ABI_USER_H 39478d3005SHans Petter Selasky 40c19d6504SHans Petter Selasky #ifdef _KERNEL 41478d3005SHans Petter Selasky #include <linux/types.h> 42c19d6504SHans Petter Selasky #else 43c19d6504SHans Petter Selasky #include <infiniband/types.h> 44c19d6504SHans Petter Selasky #endif 45478d3005SHans Petter Selasky 46478d3005SHans Petter Selasky enum { 47478d3005SHans Petter Selasky MLX5_QP_FLAG_SIGNATURE = 1 << 0, 48478d3005SHans Petter Selasky MLX5_QP_FLAG_SCATTER_CQE = 1 << 1, 49*f8f5b459SHans Petter Selasky MLX5_QP_FLAG_BFREG_INDEX = 1 << 3, 50*f8f5b459SHans Petter Selasky MLX5_QP_FLAG_UAR_PAGE_INDEX = 1 << 10, 51478d3005SHans Petter Selasky }; 52478d3005SHans Petter Selasky 53478d3005SHans Petter Selasky enum { 54478d3005SHans Petter Selasky MLX5_SRQ_FLAG_SIGNATURE = 1 << 0, 55478d3005SHans Petter Selasky }; 56478d3005SHans Petter Selasky 57478d3005SHans Petter Selasky enum { 58478d3005SHans Petter Selasky MLX5_WQ_FLAG_SIGNATURE = 1 << 0, 59478d3005SHans Petter Selasky }; 60478d3005SHans Petter Selasky 61478d3005SHans Petter Selasky /* Increment this value if any changes that break userspace ABI 62478d3005SHans Petter Selasky * compatibility are made. 63478d3005SHans Petter Selasky */ 64478d3005SHans Petter Selasky #define MLX5_IB_UVERBS_ABI_VERSION 1 65478d3005SHans Petter Selasky 66478d3005SHans Petter Selasky /* Make sure that all structs defined in this file remain laid out so 67478d3005SHans Petter Selasky * that they pack the same way on 32-bit and 64-bit architectures (to 68478d3005SHans Petter Selasky * avoid incompatibility between 32-bit userspace and 64-bit kernels). 69478d3005SHans Petter Selasky * In particular do not use pointer types -- pass pointers in __u64 70478d3005SHans Petter Selasky * instead. 71478d3005SHans Petter Selasky */ 72478d3005SHans Petter Selasky 73478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req { 74*f8f5b459SHans Petter Selasky __u32 total_num_bfregs; 75*f8f5b459SHans Petter Selasky __u32 num_low_latency_bfregs; 76478d3005SHans Petter Selasky }; 77478d3005SHans Petter Selasky 78*f8f5b459SHans Petter Selasky enum mlx5_lib_caps { 79*f8f5b459SHans Petter Selasky MLX5_LIB_CAP_4K_UAR = (__u64)1 << 0, 80*f8f5b459SHans Petter Selasky MLX5_LIB_CAP_DYN_UAR = (__u64)1 << 1, 81*f8f5b459SHans Petter Selasky }; 82*f8f5b459SHans Petter Selasky 83*f8f5b459SHans Petter Selasky enum mlx5_ib_alloc_uctx_v2_flags { 84*f8f5b459SHans Petter Selasky MLX5_IB_ALLOC_UCTX_DEVX = 1 << 0, 85*f8f5b459SHans Petter Selasky }; 86478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_req_v2 { 87*f8f5b459SHans Petter Selasky __u32 total_num_bfregs; 88*f8f5b459SHans Petter Selasky __u32 num_low_latency_bfregs; 89478d3005SHans Petter Selasky __u32 flags; 90478d3005SHans Petter Selasky __u32 comp_mask; 91478d3005SHans Petter Selasky __u8 max_cqe_version; 92478d3005SHans Petter Selasky __u8 reserved0; 93478d3005SHans Petter Selasky __u16 reserved1; 94478d3005SHans Petter Selasky __u32 reserved2; 95*f8f5b459SHans Petter Selasky __aligned_u64 lib_caps; 96478d3005SHans Petter Selasky }; 97478d3005SHans Petter Selasky 98478d3005SHans Petter Selasky enum mlx5_ib_alloc_ucontext_resp_mask { 99478d3005SHans Petter Selasky MLX5_IB_ALLOC_UCONTEXT_RESP_MASK_CORE_CLOCK_OFFSET = 1UL << 0, 100478d3005SHans Petter Selasky }; 101478d3005SHans Petter Selasky 102478d3005SHans Petter Selasky enum mlx5_user_cmds_supp_uhw { 103478d3005SHans Petter Selasky MLX5_USER_CMDS_SUPP_UHW_QUERY_DEVICE = 1 << 0, 1041456d97cSHans Petter Selasky MLX5_USER_CMDS_SUPP_UHW_CREATE_AH = 1 << 1, 105478d3005SHans Petter Selasky }; 106478d3005SHans Petter Selasky 107478d3005SHans Petter Selasky struct mlx5_ib_alloc_ucontext_resp { 108478d3005SHans Petter Selasky __u32 qp_tab_size; 109478d3005SHans Petter Selasky __u32 bf_reg_size; 110*f8f5b459SHans Petter Selasky __u32 tot_bfregs; 111478d3005SHans Petter Selasky __u32 cache_line_size; 112478d3005SHans Petter Selasky __u16 max_sq_desc_sz; 113478d3005SHans Petter Selasky __u16 max_rq_desc_sz; 114478d3005SHans Petter Selasky __u32 max_send_wqebb; 115478d3005SHans Petter Selasky __u32 max_recv_wr; 116478d3005SHans Petter Selasky __u32 max_srq_recv_wr; 117478d3005SHans Petter Selasky __u16 num_ports; 118478d3005SHans Petter Selasky __u16 reserved1; 119478d3005SHans Petter Selasky __u32 comp_mask; 120478d3005SHans Petter Selasky __u32 response_length; 121478d3005SHans Petter Selasky __u8 cqe_version; 122478d3005SHans Petter Selasky __u8 cmds_supp_uhw; 123478d3005SHans Petter Selasky __u16 reserved2; 124478d3005SHans Petter Selasky __u64 hca_core_clock_offset; 125*f8f5b459SHans Petter Selasky __u32 log_uar_size; 126*f8f5b459SHans Petter Selasky __u32 num_uars_per_page; 127*f8f5b459SHans Petter Selasky __u32 num_dyn_bfregs; 128478d3005SHans Petter Selasky }; 129478d3005SHans Petter Selasky 130478d3005SHans Petter Selasky struct mlx5_ib_alloc_pd_resp { 131478d3005SHans Petter Selasky __u32 pdn; 132478d3005SHans Petter Selasky }; 133478d3005SHans Petter Selasky 134478d3005SHans Petter Selasky struct mlx5_ib_tso_caps { 135478d3005SHans Petter Selasky __u32 max_tso; /* Maximum tso payload size in bytes */ 136478d3005SHans Petter Selasky 137478d3005SHans Petter Selasky /* Corresponding bit will be set if qp type from 138478d3005SHans Petter Selasky * 'enum ib_qp_type' is supported, e.g. 139478d3005SHans Petter Selasky * supported_qpts |= 1 << IB_QPT_UD 140478d3005SHans Petter Selasky */ 141478d3005SHans Petter Selasky __u32 supported_qpts; 142478d3005SHans Petter Selasky }; 143478d3005SHans Petter Selasky 144478d3005SHans Petter Selasky struct mlx5_ib_rss_caps { 145478d3005SHans Petter Selasky __u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */ 146478d3005SHans Petter Selasky __u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */ 147478d3005SHans Petter Selasky __u8 reserved[7]; 148478d3005SHans Petter Selasky }; 149478d3005SHans Petter Selasky 150478d3005SHans Petter Selasky struct mlx5_ib_query_device_resp { 151478d3005SHans Petter Selasky __u32 comp_mask; 152478d3005SHans Petter Selasky __u32 response_length; 153478d3005SHans Petter Selasky struct mlx5_ib_tso_caps tso_caps; 154478d3005SHans Petter Selasky struct mlx5_ib_rss_caps rss_caps; 155478d3005SHans Petter Selasky }; 156478d3005SHans Petter Selasky 157*f8f5b459SHans Petter Selasky enum mlx5_ib_create_cq_flags { 158*f8f5b459SHans Petter Selasky MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD = 1 << 0, 159*f8f5b459SHans Petter Selasky MLX5_IB_CREATE_CQ_FLAGS_UAR_PAGE_INDEX = 1 << 1, 160*f8f5b459SHans Petter Selasky }; 161*f8f5b459SHans Petter Selasky 162478d3005SHans Petter Selasky struct mlx5_ib_create_cq { 163478d3005SHans Petter Selasky __u64 buf_addr; 164478d3005SHans Petter Selasky __u64 db_addr; 165478d3005SHans Petter Selasky __u32 cqe_size; 166*f8f5b459SHans Petter Selasky __u16 flags; 167*f8f5b459SHans Petter Selasky __u16 uar_page_index; 168478d3005SHans Petter Selasky }; 169478d3005SHans Petter Selasky 170478d3005SHans Petter Selasky struct mlx5_ib_create_cq_resp { 171478d3005SHans Petter Selasky __u32 cqn; 172478d3005SHans Petter Selasky __u32 reserved; 173478d3005SHans Petter Selasky }; 174478d3005SHans Petter Selasky 175478d3005SHans Petter Selasky struct mlx5_ib_resize_cq { 176478d3005SHans Petter Selasky __u64 buf_addr; 177478d3005SHans Petter Selasky __u16 cqe_size; 178478d3005SHans Petter Selasky __u16 reserved0; 179478d3005SHans Petter Selasky __u32 reserved1; 180478d3005SHans Petter Selasky }; 181478d3005SHans Petter Selasky 182478d3005SHans Petter Selasky struct mlx5_ib_create_srq { 183478d3005SHans Petter Selasky __u64 buf_addr; 184478d3005SHans Petter Selasky __u64 db_addr; 185478d3005SHans Petter Selasky __u32 flags; 186478d3005SHans Petter Selasky __u32 reserved0; /* explicit padding (optional on i386) */ 187478d3005SHans Petter Selasky __u32 uidx; 188478d3005SHans Petter Selasky __u32 reserved1; 189478d3005SHans Petter Selasky }; 190478d3005SHans Petter Selasky 191478d3005SHans Petter Selasky struct mlx5_ib_create_srq_resp { 192478d3005SHans Petter Selasky __u32 srqn; 193478d3005SHans Petter Selasky __u32 reserved; 194478d3005SHans Petter Selasky }; 195478d3005SHans Petter Selasky 196478d3005SHans Petter Selasky struct mlx5_ib_create_qp { 197478d3005SHans Petter Selasky __u64 buf_addr; 198478d3005SHans Petter Selasky __u64 db_addr; 199478d3005SHans Petter Selasky __u32 sq_wqe_count; 200478d3005SHans Petter Selasky __u32 rq_wqe_count; 201478d3005SHans Petter Selasky __u32 rq_wqe_shift; 202478d3005SHans Petter Selasky __u32 flags; 203478d3005SHans Petter Selasky __u32 uidx; 204*f8f5b459SHans Petter Selasky __u32 bfreg_index; 205478d3005SHans Petter Selasky __u64 sq_buf_addr; 206478d3005SHans Petter Selasky }; 207478d3005SHans Petter Selasky 208478d3005SHans Petter Selasky /* RX Hash function flags */ 209478d3005SHans Petter Selasky enum mlx5_rx_hash_function_flags { 210478d3005SHans Petter Selasky MLX5_RX_HASH_FUNC_TOEPLITZ = 1 << 0, 211478d3005SHans Petter Selasky }; 212478d3005SHans Petter Selasky 213478d3005SHans Petter Selasky /* 214478d3005SHans Petter Selasky * RX Hash flags, these flags allows to set which incoming packet's field should 215478d3005SHans Petter Selasky * participates in RX Hash. Each flag represent certain packet's field, 216478d3005SHans Petter Selasky * when the flag is set the field that is represented by the flag will 217478d3005SHans Petter Selasky * participate in RX Hash calculation. 218478d3005SHans Petter Selasky * Note: *IPV4 and *IPV6 flags can't be enabled together on the same QP 219478d3005SHans Petter Selasky * and *TCP and *UDP flags can't be enabled together on the same QP. 220478d3005SHans Petter Selasky */ 221478d3005SHans Petter Selasky enum mlx5_rx_hash_fields { 222478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_IPV4 = 1 << 0, 223478d3005SHans Petter Selasky MLX5_RX_HASH_DST_IPV4 = 1 << 1, 224478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_IPV6 = 1 << 2, 225478d3005SHans Petter Selasky MLX5_RX_HASH_DST_IPV6 = 1 << 3, 226478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_PORT_TCP = 1 << 4, 227478d3005SHans Petter Selasky MLX5_RX_HASH_DST_PORT_TCP = 1 << 5, 228478d3005SHans Petter Selasky MLX5_RX_HASH_SRC_PORT_UDP = 1 << 6, 229478d3005SHans Petter Selasky MLX5_RX_HASH_DST_PORT_UDP = 1 << 7 230478d3005SHans Petter Selasky }; 231478d3005SHans Petter Selasky 232478d3005SHans Petter Selasky struct mlx5_ib_create_qp_rss { 233478d3005SHans Petter Selasky __u64 rx_hash_fields_mask; /* enum mlx5_rx_hash_fields */ 234478d3005SHans Petter Selasky __u8 rx_hash_function; /* enum mlx5_rx_hash_function_flags */ 235478d3005SHans Petter Selasky __u8 rx_key_len; /* valid only for Toeplitz */ 236478d3005SHans Petter Selasky __u8 reserved[6]; 237478d3005SHans Petter Selasky __u8 rx_hash_key[128]; /* valid only for Toeplitz */ 238478d3005SHans Petter Selasky __u32 comp_mask; 239478d3005SHans Petter Selasky __u32 reserved1; 240478d3005SHans Petter Selasky }; 241478d3005SHans Petter Selasky 242478d3005SHans Petter Selasky struct mlx5_ib_create_qp_resp { 243*f8f5b459SHans Petter Selasky __u32 bfreg_index; 244478d3005SHans Petter Selasky }; 245478d3005SHans Petter Selasky 246478d3005SHans Petter Selasky struct mlx5_ib_alloc_mw { 247478d3005SHans Petter Selasky __u32 comp_mask; 248478d3005SHans Petter Selasky __u8 num_klms; 249478d3005SHans Petter Selasky __u8 reserved1; 250478d3005SHans Petter Selasky __u16 reserved2; 251478d3005SHans Petter Selasky }; 252478d3005SHans Petter Selasky 253478d3005SHans Petter Selasky struct mlx5_ib_create_wq { 254478d3005SHans Petter Selasky __u64 buf_addr; 255478d3005SHans Petter Selasky __u64 db_addr; 256478d3005SHans Petter Selasky __u32 rq_wqe_count; 257478d3005SHans Petter Selasky __u32 rq_wqe_shift; 258478d3005SHans Petter Selasky __u32 user_index; 259478d3005SHans Petter Selasky __u32 flags; 260478d3005SHans Petter Selasky __u32 comp_mask; 261478d3005SHans Petter Selasky __u32 reserved; 262478d3005SHans Petter Selasky }; 263478d3005SHans Petter Selasky 2641456d97cSHans Petter Selasky struct mlx5_ib_create_ah_resp { 2651456d97cSHans Petter Selasky __u32 response_length; 2661456d97cSHans Petter Selasky __u8 dmac[ETH_ALEN]; 2671456d97cSHans Petter Selasky __u8 reserved[6]; 2681456d97cSHans Petter Selasky }; 2691456d97cSHans Petter Selasky 270478d3005SHans Petter Selasky struct mlx5_ib_create_wq_resp { 271478d3005SHans Petter Selasky __u32 response_length; 272478d3005SHans Petter Selasky __u32 reserved; 273478d3005SHans Petter Selasky }; 274478d3005SHans Petter Selasky 275478d3005SHans Petter Selasky struct mlx5_ib_create_rwq_ind_tbl_resp { 276478d3005SHans Petter Selasky __u32 response_length; 277478d3005SHans Petter Selasky __u32 reserved; 278478d3005SHans Petter Selasky }; 279478d3005SHans Petter Selasky 280478d3005SHans Petter Selasky struct mlx5_ib_modify_wq { 281478d3005SHans Petter Selasky __u32 comp_mask; 282478d3005SHans Petter Selasky __u32 reserved; 283478d3005SHans Petter Selasky }; 284478d3005SHans Petter Selasky #endif /* MLX5_ABI_USER_H */ 285