1dc7e38acSHans Petter Selasky /*- 2dc7e38acSHans Petter Selasky * Copyright (c) 2013-2015, Mellanox Technologies, Ltd. All rights reserved. 3dc7e38acSHans Petter Selasky * 4dc7e38acSHans Petter Selasky * Redistribution and use in source and binary forms, with or without 5dc7e38acSHans Petter Selasky * modification, are permitted provided that the following conditions 6dc7e38acSHans Petter Selasky * are met: 7dc7e38acSHans Petter Selasky * 1. Redistributions of source code must retain the above copyright 8dc7e38acSHans Petter Selasky * notice, this list of conditions and the following disclaimer. 9dc7e38acSHans Petter Selasky * 2. Redistributions in binary form must reproduce the above copyright 10dc7e38acSHans Petter Selasky * notice, this list of conditions and the following disclaimer in the 11dc7e38acSHans Petter Selasky * documentation and/or other materials provided with the distribution. 12dc7e38acSHans Petter Selasky * 13dc7e38acSHans Petter Selasky * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS' AND 14dc7e38acSHans Petter Selasky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15dc7e38acSHans Petter Selasky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16dc7e38acSHans Petter Selasky * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 17dc7e38acSHans Petter Selasky * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18dc7e38acSHans Petter Selasky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19dc7e38acSHans Petter Selasky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20dc7e38acSHans Petter Selasky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21dc7e38acSHans Petter Selasky * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22dc7e38acSHans Petter Selasky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23dc7e38acSHans Petter Selasky * SUCH DAMAGE. 24dc7e38acSHans Petter Selasky * 25dc7e38acSHans Petter Selasky * $FreeBSD$ 26dc7e38acSHans Petter Selasky */ 27dc7e38acSHans Petter Selasky 28dc7e38acSHans Petter Selasky #ifndef MLX5_DEVICE_H 29dc7e38acSHans Petter Selasky #define MLX5_DEVICE_H 30dc7e38acSHans Petter Selasky 31dc7e38acSHans Petter Selasky #include <linux/types.h> 32dc7e38acSHans Petter Selasky #include <rdma/ib_verbs.h> 33dc7e38acSHans Petter Selasky #include <dev/mlx5/mlx5_ifc.h> 34dc7e38acSHans Petter Selasky 35dc7e38acSHans Petter Selasky #define FW_INIT_TIMEOUT_MILI 2000 36dc7e38acSHans Petter Selasky #define FW_INIT_WAIT_MS 2 37dc7e38acSHans Petter Selasky 38dc7e38acSHans Petter Selasky #if defined(__LITTLE_ENDIAN) 39dc7e38acSHans Petter Selasky #define MLX5_SET_HOST_ENDIANNESS 0 40dc7e38acSHans Petter Selasky #elif defined(__BIG_ENDIAN) 41dc7e38acSHans Petter Selasky #define MLX5_SET_HOST_ENDIANNESS 0x80 42dc7e38acSHans Petter Selasky #else 43dc7e38acSHans Petter Selasky #error Host endianness not defined 44dc7e38acSHans Petter Selasky #endif 45dc7e38acSHans Petter Selasky 46dc7e38acSHans Petter Selasky /* helper macros */ 47dc7e38acSHans Petter Selasky #define __mlx5_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)0) 48dc7e38acSHans Petter Selasky #define __mlx5_bit_sz(typ, fld) sizeof(__mlx5_nullp(typ)->fld) 49dc7e38acSHans Petter Selasky #define __mlx5_bit_off(typ, fld) __offsetof(struct mlx5_ifc_##typ##_bits, fld) 50dc7e38acSHans Petter Selasky #define __mlx5_dw_off(typ, fld) (__mlx5_bit_off(typ, fld) / 32) 51dc7e38acSHans Petter Selasky #define __mlx5_64_off(typ, fld) (__mlx5_bit_off(typ, fld) / 64) 52dc7e38acSHans Petter Selasky #define __mlx5_dw_bit_off(typ, fld) (32 - __mlx5_bit_sz(typ, fld) - (__mlx5_bit_off(typ, fld) & 0x1f)) 53dc7e38acSHans Petter Selasky #define __mlx5_mask(typ, fld) ((u32)((1ull << __mlx5_bit_sz(typ, fld)) - 1)) 54dc7e38acSHans Petter Selasky #define __mlx5_dw_mask(typ, fld) (__mlx5_mask(typ, fld) << __mlx5_dw_bit_off(typ, fld)) 55dc7e38acSHans Petter Selasky #define __mlx5_st_sz_bits(typ) sizeof(struct mlx5_ifc_##typ##_bits) 56dc7e38acSHans Petter Selasky 57dc7e38acSHans Petter Selasky #define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8) 58dc7e38acSHans Petter Selasky #define MLX5_ST_SZ_BYTES(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 8) 59dc7e38acSHans Petter Selasky #define MLX5_ST_SZ_DW(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 32) 60dc7e38acSHans Petter Selasky #define MLX5_UN_SZ_BYTES(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 8) 61dc7e38acSHans Petter Selasky #define MLX5_UN_SZ_DW(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 32) 62dc7e38acSHans Petter Selasky #define MLX5_BYTE_OFF(typ, fld) (__mlx5_bit_off(typ, fld) / 8) 63dc7e38acSHans Petter Selasky #define MLX5_ADDR_OF(typ, p, fld) ((char *)(p) + MLX5_BYTE_OFF(typ, fld)) 64dc7e38acSHans Petter Selasky 65dc7e38acSHans Petter Selasky /* insert a value to a struct */ 66dc7e38acSHans Petter Selasky #define MLX5_SET(typ, p, fld, v) do { \ 67dc7e38acSHans Petter Selasky BUILD_BUG_ON(__mlx5_st_sz_bits(typ) % 32); \ 68dc7e38acSHans Petter Selasky BUILD_BUG_ON(__mlx5_bit_sz(typ, fld) > 32); \ 69dc7e38acSHans Petter Selasky *((__be32 *)(p) + __mlx5_dw_off(typ, fld)) = \ 70dc7e38acSHans Petter Selasky cpu_to_be32((be32_to_cpu(*((__be32 *)(p) + __mlx5_dw_off(typ, fld))) & \ 71dc7e38acSHans Petter Selasky (~__mlx5_dw_mask(typ, fld))) | (((v) & __mlx5_mask(typ, fld)) \ 72dc7e38acSHans Petter Selasky << __mlx5_dw_bit_off(typ, fld))); \ 73dc7e38acSHans Petter Selasky } while (0) 74dc7e38acSHans Petter Selasky 75dc7e38acSHans Petter Selasky #define MLX5_SET_TO_ONES(typ, p, fld) do { \ 76dc7e38acSHans Petter Selasky BUILD_BUG_ON(__mlx5_st_sz_bits(typ) % 32); \ 77dc7e38acSHans Petter Selasky BUILD_BUG_ON(__mlx5_bit_sz(typ, fld) > 32); \ 78dc7e38acSHans Petter Selasky *((__be32 *)(p) + __mlx5_dw_off(typ, fld)) = \ 79dc7e38acSHans Petter Selasky cpu_to_be32((be32_to_cpu(*((__be32 *)(p) + __mlx5_dw_off(typ, fld))) & \ 80dc7e38acSHans Petter Selasky (~__mlx5_dw_mask(typ, fld))) | ((__mlx5_mask(typ, fld)) \ 81dc7e38acSHans Petter Selasky << __mlx5_dw_bit_off(typ, fld))); \ 82dc7e38acSHans Petter Selasky } while (0) 83dc7e38acSHans Petter Selasky 84dc7e38acSHans Petter Selasky #define MLX5_GET(typ, p, fld) ((be32_to_cpu(*((__be32 *)(p) +\ 85dc7e38acSHans Petter Selasky __mlx5_dw_off(typ, fld))) >> __mlx5_dw_bit_off(typ, fld)) & \ 86dc7e38acSHans Petter Selasky __mlx5_mask(typ, fld)) 87dc7e38acSHans Petter Selasky 88dc7e38acSHans Petter Selasky #define MLX5_GET_PR(typ, p, fld) ({ \ 89dc7e38acSHans Petter Selasky u32 ___t = MLX5_GET(typ, p, fld); \ 90dc7e38acSHans Petter Selasky pr_debug(#fld " = 0x%x\n", ___t); \ 91dc7e38acSHans Petter Selasky ___t; \ 92dc7e38acSHans Petter Selasky }) 93dc7e38acSHans Petter Selasky 94dc7e38acSHans Petter Selasky #define MLX5_SET64(typ, p, fld, v) do { \ 95dc7e38acSHans Petter Selasky BUILD_BUG_ON(__mlx5_bit_sz(typ, fld) != 64); \ 96dc7e38acSHans Petter Selasky BUILD_BUG_ON(__mlx5_bit_off(typ, fld) % 64); \ 97dc7e38acSHans Petter Selasky *((__be64 *)(p) + __mlx5_64_off(typ, fld)) = cpu_to_be64(v); \ 98dc7e38acSHans Petter Selasky } while (0) 99dc7e38acSHans Petter Selasky 100dc7e38acSHans Petter Selasky #define MLX5_GET64(typ, p, fld) be64_to_cpu(*((__be64 *)(p) + __mlx5_64_off(typ, fld))) 101dc7e38acSHans Petter Selasky 102dc7e38acSHans Petter Selasky enum { 103dc7e38acSHans Petter Selasky MLX5_MAX_COMMANDS = 32, 104dc7e38acSHans Petter Selasky MLX5_CMD_DATA_BLOCK_SIZE = 512, 105dc7e38acSHans Petter Selasky MLX5_PCI_CMD_XPORT = 7, 106dc7e38acSHans Petter Selasky MLX5_MKEY_BSF_OCTO_SIZE = 4, 107dc7e38acSHans Petter Selasky MLX5_MAX_PSVS = 4, 108dc7e38acSHans Petter Selasky }; 109dc7e38acSHans Petter Selasky 110dc7e38acSHans Petter Selasky enum { 111dc7e38acSHans Petter Selasky MLX5_EXTENDED_UD_AV = 0x80000000, 112dc7e38acSHans Petter Selasky }; 113dc7e38acSHans Petter Selasky 114dc7e38acSHans Petter Selasky enum { 115dc7e38acSHans Petter Selasky MLX5_STAT_RATE_OFFSET = 5, 116dc7e38acSHans Petter Selasky }; 117dc7e38acSHans Petter Selasky 118dc7e38acSHans Petter Selasky enum { 119dc7e38acSHans Petter Selasky MLX5_INLINE_SEG = 0x80000000, 120dc7e38acSHans Petter Selasky }; 121dc7e38acSHans Petter Selasky 122dc7e38acSHans Petter Selasky enum { 123dc7e38acSHans Petter Selasky MLX5_HW_START_PADDING = MLX5_INLINE_SEG, 124dc7e38acSHans Petter Selasky }; 125dc7e38acSHans Petter Selasky 126dc7e38acSHans Petter Selasky enum { 127dc7e38acSHans Petter Selasky MLX5_MIN_PKEY_TABLE_SIZE = 128, 128dc7e38acSHans Petter Selasky MLX5_MAX_LOG_PKEY_TABLE = 5, 129dc7e38acSHans Petter Selasky }; 130dc7e38acSHans Petter Selasky 131dc7e38acSHans Petter Selasky enum { 132dc7e38acSHans Petter Selasky MLX5_PERM_LOCAL_READ = 1 << 2, 133dc7e38acSHans Petter Selasky MLX5_PERM_LOCAL_WRITE = 1 << 3, 134dc7e38acSHans Petter Selasky MLX5_PERM_REMOTE_READ = 1 << 4, 135dc7e38acSHans Petter Selasky MLX5_PERM_REMOTE_WRITE = 1 << 5, 136dc7e38acSHans Petter Selasky MLX5_PERM_ATOMIC = 1 << 6, 137dc7e38acSHans Petter Selasky MLX5_PERM_UMR_EN = 1 << 7, 138dc7e38acSHans Petter Selasky }; 139dc7e38acSHans Petter Selasky 140dc7e38acSHans Petter Selasky enum { 141dc7e38acSHans Petter Selasky MLX5_PCIE_CTRL_SMALL_FENCE = 1 << 0, 142dc7e38acSHans Petter Selasky MLX5_PCIE_CTRL_RELAXED_ORDERING = 1 << 2, 143dc7e38acSHans Petter Selasky MLX5_PCIE_CTRL_NO_SNOOP = 1 << 3, 144dc7e38acSHans Petter Selasky MLX5_PCIE_CTRL_TLP_PROCE_EN = 1 << 6, 145dc7e38acSHans Petter Selasky MLX5_PCIE_CTRL_TPH_MASK = 3 << 4, 146dc7e38acSHans Petter Selasky }; 147dc7e38acSHans Petter Selasky 148dc7e38acSHans Petter Selasky enum { 149dc7e38acSHans Petter Selasky MLX5_MKEY_REMOTE_INVAL = 1 << 24, 150dc7e38acSHans Petter Selasky MLX5_MKEY_FLAG_SYNC_UMR = 1 << 29, 151dc7e38acSHans Petter Selasky MLX5_MKEY_BSF_EN = 1 << 30, 152dc7e38acSHans Petter Selasky MLX5_MKEY_LEN64 = 1 << 31, 153dc7e38acSHans Petter Selasky }; 154dc7e38acSHans Petter Selasky 155dc7e38acSHans Petter Selasky enum { 156dc7e38acSHans Petter Selasky MLX5_EN_RD = (u64)1, 157dc7e38acSHans Petter Selasky MLX5_EN_WR = (u64)2 158dc7e38acSHans Petter Selasky }; 159dc7e38acSHans Petter Selasky 160dc7e38acSHans Petter Selasky enum { 161dc7e38acSHans Petter Selasky MLX5_BF_REGS_PER_PAGE = 4, 162dc7e38acSHans Petter Selasky MLX5_MAX_UAR_PAGES = 1 << 8, 163dc7e38acSHans Petter Selasky MLX5_NON_FP_BF_REGS_PER_PAGE = 2, 164dc7e38acSHans Petter Selasky MLX5_MAX_UUARS = MLX5_MAX_UAR_PAGES * MLX5_NON_FP_BF_REGS_PER_PAGE, 165dc7e38acSHans Petter Selasky }; 166dc7e38acSHans Petter Selasky 167dc7e38acSHans Petter Selasky enum { 168dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_LEN = 1ull << 0, 169dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_PAGE_SIZE = 1ull << 1, 170dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_START_ADDR = 1ull << 6, 171dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_PD = 1ull << 7, 172dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_EN_RINVAL = 1ull << 8, 173dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_EN_SIGERR = 1ull << 9, 174dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_BSF_EN = 1ull << 12, 175dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_KEY = 1ull << 13, 176dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_QPN = 1ull << 14, 177dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_LR = 1ull << 17, 178dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_LW = 1ull << 18, 179dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_RR = 1ull << 19, 180dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_RW = 1ull << 20, 181dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_A = 1ull << 21, 182dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_SMALL_FENCE = 1ull << 23, 183dc7e38acSHans Petter Selasky MLX5_MKEY_MASK_FREE = 1ull << 29, 184dc7e38acSHans Petter Selasky }; 185dc7e38acSHans Petter Selasky 186dc7e38acSHans Petter Selasky enum { 187dc7e38acSHans Petter Selasky MLX5_PORT_CHANGE_SUBTYPE_DOWN = 1, 188dc7e38acSHans Petter Selasky MLX5_PORT_CHANGE_SUBTYPE_ACTIVE = 4, 189dc7e38acSHans Petter Selasky MLX5_PORT_CHANGE_SUBTYPE_INITIALIZED = 5, 190dc7e38acSHans Petter Selasky MLX5_PORT_CHANGE_SUBTYPE_LID = 6, 191dc7e38acSHans Petter Selasky MLX5_PORT_CHANGE_SUBTYPE_PKEY = 7, 192dc7e38acSHans Petter Selasky MLX5_PORT_CHANGE_SUBTYPE_GUID = 8, 193dc7e38acSHans Petter Selasky MLX5_PORT_CHANGE_SUBTYPE_CLIENT_REREG = 9, 194dc7e38acSHans Petter Selasky }; 195dc7e38acSHans Petter Selasky 196dc7e38acSHans Petter Selasky enum { 197dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_XRC = 1LL << 3, 198dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_BAD_PKEY_CNTR = 1LL << 8, 199dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_BAD_QKEY_CNTR = 1LL << 9, 200dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_APM = 1LL << 17, 201dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_ATOMIC = 1LL << 18, 202dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_SCQE_BRK_MOD = 1LL << 21, 203dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_BLOCK_MCAST = 1LL << 23, 204dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_CQ_MODER = 1LL << 29, 205dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_RESIZE_CQ = 1LL << 30, 206dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_ROCE = 1LL << 34, 207dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_DCT = 1LL << 37, 208dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40, 209dc7e38acSHans Petter Selasky MLX5_DEV_CAP_FLAG_CMDIF_CSUM = 3LL << 46, 210dc7e38acSHans Petter Selasky }; 211dc7e38acSHans Petter Selasky 212dc7e38acSHans Petter Selasky enum { 213dc7e38acSHans Petter Selasky MLX5_ROCE_VERSION_1 = 0, 214dc7e38acSHans Petter Selasky MLX5_ROCE_VERSION_1_5 = 1, 215dc7e38acSHans Petter Selasky MLX5_ROCE_VERSION_2 = 2, 216dc7e38acSHans Petter Selasky }; 217dc7e38acSHans Petter Selasky 218dc7e38acSHans Petter Selasky enum { 219dc7e38acSHans Petter Selasky MLX5_ROCE_VERSION_1_CAP = 1 << MLX5_ROCE_VERSION_1, 220dc7e38acSHans Petter Selasky MLX5_ROCE_VERSION_1_5_CAP = 1 << MLX5_ROCE_VERSION_1_5, 221dc7e38acSHans Petter Selasky MLX5_ROCE_VERSION_2_CAP = 1 << MLX5_ROCE_VERSION_2, 222dc7e38acSHans Petter Selasky }; 223dc7e38acSHans Petter Selasky 224dc7e38acSHans Petter Selasky enum { 225dc7e38acSHans Petter Selasky MLX5_ROCE_L3_TYPE_IPV4 = 0, 226dc7e38acSHans Petter Selasky MLX5_ROCE_L3_TYPE_IPV6 = 1, 227dc7e38acSHans Petter Selasky }; 228dc7e38acSHans Petter Selasky 229dc7e38acSHans Petter Selasky enum { 230dc7e38acSHans Petter Selasky MLX5_ROCE_L3_TYPE_IPV4_CAP = 1 << 1, 231dc7e38acSHans Petter Selasky MLX5_ROCE_L3_TYPE_IPV6_CAP = 1 << 2, 232dc7e38acSHans Petter Selasky }; 233dc7e38acSHans Petter Selasky 234dc7e38acSHans Petter Selasky enum { 235dc7e38acSHans Petter Selasky MLX5_OPCODE_NOP = 0x00, 236dc7e38acSHans Petter Selasky MLX5_OPCODE_SEND_INVAL = 0x01, 237dc7e38acSHans Petter Selasky MLX5_OPCODE_RDMA_WRITE = 0x08, 238dc7e38acSHans Petter Selasky MLX5_OPCODE_RDMA_WRITE_IMM = 0x09, 239dc7e38acSHans Petter Selasky MLX5_OPCODE_SEND = 0x0a, 240dc7e38acSHans Petter Selasky MLX5_OPCODE_SEND_IMM = 0x0b, 241dc7e38acSHans Petter Selasky MLX5_OPCODE_LSO = 0x0e, 242dc7e38acSHans Petter Selasky MLX5_OPCODE_RDMA_READ = 0x10, 243dc7e38acSHans Petter Selasky MLX5_OPCODE_ATOMIC_CS = 0x11, 244dc7e38acSHans Petter Selasky MLX5_OPCODE_ATOMIC_FA = 0x12, 245dc7e38acSHans Petter Selasky MLX5_OPCODE_ATOMIC_MASKED_CS = 0x14, 246dc7e38acSHans Petter Selasky MLX5_OPCODE_ATOMIC_MASKED_FA = 0x15, 247dc7e38acSHans Petter Selasky MLX5_OPCODE_BIND_MW = 0x18, 248dc7e38acSHans Petter Selasky MLX5_OPCODE_CONFIG_CMD = 0x1f, 249dc7e38acSHans Petter Selasky 250dc7e38acSHans Petter Selasky MLX5_RECV_OPCODE_RDMA_WRITE_IMM = 0x00, 251dc7e38acSHans Petter Selasky MLX5_RECV_OPCODE_SEND = 0x01, 252dc7e38acSHans Petter Selasky MLX5_RECV_OPCODE_SEND_IMM = 0x02, 253dc7e38acSHans Petter Selasky MLX5_RECV_OPCODE_SEND_INVAL = 0x03, 254dc7e38acSHans Petter Selasky 255dc7e38acSHans Petter Selasky MLX5_CQE_OPCODE_ERROR = 0x1e, 256dc7e38acSHans Petter Selasky MLX5_CQE_OPCODE_RESIZE = 0x16, 257dc7e38acSHans Petter Selasky 258dc7e38acSHans Petter Selasky MLX5_OPCODE_SET_PSV = 0x20, 259dc7e38acSHans Petter Selasky MLX5_OPCODE_GET_PSV = 0x21, 260dc7e38acSHans Petter Selasky MLX5_OPCODE_CHECK_PSV = 0x22, 261dc7e38acSHans Petter Selasky MLX5_OPCODE_RGET_PSV = 0x26, 262dc7e38acSHans Petter Selasky MLX5_OPCODE_RCHECK_PSV = 0x27, 263dc7e38acSHans Petter Selasky 264dc7e38acSHans Petter Selasky MLX5_OPCODE_UMR = 0x25, 265dc7e38acSHans Petter Selasky 266dc7e38acSHans Petter Selasky }; 267dc7e38acSHans Petter Selasky 268dc7e38acSHans Petter Selasky enum { 269dc7e38acSHans Petter Selasky MLX5_SET_PORT_RESET_QKEY = 0, 270dc7e38acSHans Petter Selasky MLX5_SET_PORT_GUID0 = 16, 271dc7e38acSHans Petter Selasky MLX5_SET_PORT_NODE_GUID = 17, 272dc7e38acSHans Petter Selasky MLX5_SET_PORT_SYS_GUID = 18, 273dc7e38acSHans Petter Selasky MLX5_SET_PORT_GID_TABLE = 19, 274dc7e38acSHans Petter Selasky MLX5_SET_PORT_PKEY_TABLE = 20, 275dc7e38acSHans Petter Selasky }; 276dc7e38acSHans Petter Selasky 277dc7e38acSHans Petter Selasky enum { 278dc7e38acSHans Petter Selasky MLX5_MAX_PAGE_SHIFT = 31 279dc7e38acSHans Petter Selasky }; 280dc7e38acSHans Petter Selasky 281dc7e38acSHans Petter Selasky enum { 282dc7e38acSHans Petter Selasky MLX5_ADAPTER_PAGE_SHIFT = 12, 283dc7e38acSHans Petter Selasky MLX5_ADAPTER_PAGE_SIZE = 1 << MLX5_ADAPTER_PAGE_SHIFT, 284dc7e38acSHans Petter Selasky }; 285dc7e38acSHans Petter Selasky 286dc7e38acSHans Petter Selasky enum { 287dc7e38acSHans Petter Selasky MLX5_CAP_OFF_CMDIF_CSUM = 46, 288dc7e38acSHans Petter Selasky }; 289dc7e38acSHans Petter Selasky 290dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr { 291dc7e38acSHans Petter Selasky __be16 opcode; 292dc7e38acSHans Petter Selasky u8 rsvd[4]; 293dc7e38acSHans Petter Selasky __be16 opmod; 294dc7e38acSHans Petter Selasky }; 295dc7e38acSHans Petter Selasky 296dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr { 297dc7e38acSHans Petter Selasky u8 status; 298dc7e38acSHans Petter Selasky u8 rsvd[3]; 299dc7e38acSHans Petter Selasky __be32 syndrome; 300dc7e38acSHans Petter Selasky }; 301dc7e38acSHans Petter Selasky 302dc7e38acSHans Petter Selasky struct mlx5_cmd_layout { 303dc7e38acSHans Petter Selasky u8 type; 304dc7e38acSHans Petter Selasky u8 rsvd0[3]; 305dc7e38acSHans Petter Selasky __be32 inlen; 306dc7e38acSHans Petter Selasky __be64 in_ptr; 307dc7e38acSHans Petter Selasky __be32 in[4]; 308dc7e38acSHans Petter Selasky __be32 out[4]; 309dc7e38acSHans Petter Selasky __be64 out_ptr; 310dc7e38acSHans Petter Selasky __be32 outlen; 311dc7e38acSHans Petter Selasky u8 token; 312dc7e38acSHans Petter Selasky u8 sig; 313dc7e38acSHans Petter Selasky u8 rsvd1; 314dc7e38acSHans Petter Selasky u8 status_own; 315dc7e38acSHans Petter Selasky }; 316dc7e38acSHans Petter Selasky 317dc7e38acSHans Petter Selasky 318dc7e38acSHans Petter Selasky struct mlx5_health_buffer { 319dc7e38acSHans Petter Selasky __be32 assert_var[5]; 320dc7e38acSHans Petter Selasky __be32 rsvd0[3]; 321dc7e38acSHans Petter Selasky __be32 assert_exit_ptr; 322dc7e38acSHans Petter Selasky __be32 assert_callra; 323dc7e38acSHans Petter Selasky __be32 rsvd1[2]; 324dc7e38acSHans Petter Selasky __be32 fw_ver; 325dc7e38acSHans Petter Selasky __be32 hw_id; 326dc7e38acSHans Petter Selasky __be32 rsvd2; 327dc7e38acSHans Petter Selasky u8 irisc_index; 328dc7e38acSHans Petter Selasky u8 synd; 329dc7e38acSHans Petter Selasky __be16 ext_sync; 330dc7e38acSHans Petter Selasky }; 331dc7e38acSHans Petter Selasky 332dc7e38acSHans Petter Selasky struct mlx5_init_seg { 333dc7e38acSHans Petter Selasky __be32 fw_rev; 334dc7e38acSHans Petter Selasky __be32 cmdif_rev_fw_sub; 335dc7e38acSHans Petter Selasky __be32 rsvd0[2]; 336dc7e38acSHans Petter Selasky __be32 cmdq_addr_h; 337dc7e38acSHans Petter Selasky __be32 cmdq_addr_l_sz; 338dc7e38acSHans Petter Selasky __be32 cmd_dbell; 339dc7e38acSHans Petter Selasky __be32 rsvd1[120]; 340dc7e38acSHans Petter Selasky __be32 initializing; 341dc7e38acSHans Petter Selasky struct mlx5_health_buffer health; 342dc7e38acSHans Petter Selasky __be32 rsvd2[884]; 343dc7e38acSHans Petter Selasky __be32 health_counter; 344dc7e38acSHans Petter Selasky __be32 rsvd3[1019]; 345dc7e38acSHans Petter Selasky __be64 ieee1588_clk; 346dc7e38acSHans Petter Selasky __be32 ieee1588_clk_type; 347dc7e38acSHans Petter Selasky __be32 clr_intx; 348dc7e38acSHans Petter Selasky }; 349dc7e38acSHans Petter Selasky 350dc7e38acSHans Petter Selasky struct mlx5_eqe_comp { 351dc7e38acSHans Petter Selasky __be32 reserved[6]; 352dc7e38acSHans Petter Selasky __be32 cqn; 353dc7e38acSHans Petter Selasky }; 354dc7e38acSHans Petter Selasky 355dc7e38acSHans Petter Selasky struct mlx5_eqe_qp_srq { 356dc7e38acSHans Petter Selasky __be32 reserved[6]; 357dc7e38acSHans Petter Selasky __be32 qp_srq_n; 358dc7e38acSHans Petter Selasky }; 359dc7e38acSHans Petter Selasky 360dc7e38acSHans Petter Selasky struct mlx5_eqe_cq_err { 361dc7e38acSHans Petter Selasky __be32 cqn; 362dc7e38acSHans Petter Selasky u8 reserved1[7]; 363dc7e38acSHans Petter Selasky u8 syndrome; 364dc7e38acSHans Petter Selasky }; 365dc7e38acSHans Petter Selasky 366dc7e38acSHans Petter Selasky struct mlx5_eqe_port_state { 367dc7e38acSHans Petter Selasky u8 reserved0[8]; 368dc7e38acSHans Petter Selasky u8 port; 369dc7e38acSHans Petter Selasky }; 370dc7e38acSHans Petter Selasky 371dc7e38acSHans Petter Selasky struct mlx5_eqe_gpio { 372dc7e38acSHans Petter Selasky __be32 reserved0[2]; 373dc7e38acSHans Petter Selasky __be64 gpio_event; 374dc7e38acSHans Petter Selasky }; 375dc7e38acSHans Petter Selasky 376dc7e38acSHans Petter Selasky struct mlx5_eqe_congestion { 377dc7e38acSHans Petter Selasky u8 type; 378dc7e38acSHans Petter Selasky u8 rsvd0; 379dc7e38acSHans Petter Selasky u8 congestion_level; 380dc7e38acSHans Petter Selasky }; 381dc7e38acSHans Petter Selasky 382dc7e38acSHans Petter Selasky struct mlx5_eqe_stall_vl { 383dc7e38acSHans Petter Selasky u8 rsvd0[3]; 384dc7e38acSHans Petter Selasky u8 port_vl; 385dc7e38acSHans Petter Selasky }; 386dc7e38acSHans Petter Selasky 387dc7e38acSHans Petter Selasky struct mlx5_eqe_cmd { 388dc7e38acSHans Petter Selasky __be32 vector; 389dc7e38acSHans Petter Selasky __be32 rsvd[6]; 390dc7e38acSHans Petter Selasky }; 391dc7e38acSHans Petter Selasky 392dc7e38acSHans Petter Selasky struct mlx5_eqe_page_req { 393dc7e38acSHans Petter Selasky u8 rsvd0[2]; 394dc7e38acSHans Petter Selasky __be16 func_id; 395dc7e38acSHans Petter Selasky __be32 num_pages; 396dc7e38acSHans Petter Selasky __be32 rsvd1[5]; 397dc7e38acSHans Petter Selasky }; 398dc7e38acSHans Petter Selasky 399dc7e38acSHans Petter Selasky struct mlx5_eqe_vport_change { 400dc7e38acSHans Petter Selasky u8 rsvd0[2]; 401dc7e38acSHans Petter Selasky __be16 vport_num; 402dc7e38acSHans Petter Selasky __be32 rsvd1[6]; 403dc7e38acSHans Petter Selasky }; 404dc7e38acSHans Petter Selasky 405dc7e38acSHans Petter Selasky 406dc7e38acSHans Petter Selasky #define PORT_MODULE_EVENT_MODULE_STATUS_MASK 0xF 407dc7e38acSHans Petter Selasky #define PORT_MODULE_EVENT_ERROR_TYPE_MASK 0xF 408dc7e38acSHans Petter Selasky 409dc7e38acSHans Petter Selasky enum { 410dc7e38acSHans Petter Selasky MLX5_MODULE_STATUS_PLUGGED = 0x1, 411dc7e38acSHans Petter Selasky MLX5_MODULE_STATUS_UNPLUGGED = 0x2, 412dc7e38acSHans Petter Selasky MLX5_MODULE_STATUS_ERROR = 0x3, 413dc7e38acSHans Petter Selasky }; 414dc7e38acSHans Petter Selasky 415dc7e38acSHans Petter Selasky enum { 416dc7e38acSHans Petter Selasky MLX5_MODULE_EVENT_ERROR_POWER_BUDGET_EXCEEDED = 0x0, 417dc7e38acSHans Petter Selasky MLX5_MODULE_EVENT_ERROR_LONG_RANGE_FOR_NON_MLNX_CABLE_MODULE = 0x1, 418dc7e38acSHans Petter Selasky MLX5_MODULE_EVENT_ERROR_BUS_STUCK = 0x2, 419dc7e38acSHans Petter Selasky MLX5_MODULE_EVENT_ERROR_NO_EEPROM_RETRY_TIMEOUT = 0x3, 420dc7e38acSHans Petter Selasky MLX5_MODULE_EVENT_ERROR_ENFORCE_PART_NUMBER_LIST = 0x4, 421dc7e38acSHans Petter Selasky MLX5_MODULE_EVENT_ERROR_UNKNOWN_IDENTIFIER = 0x5, 422dc7e38acSHans Petter Selasky MLX5_MODULE_EVENT_ERROR_HIGH_TEMPERATURE = 0x6, 423dc7e38acSHans Petter Selasky }; 424dc7e38acSHans Petter Selasky 425dc7e38acSHans Petter Selasky struct mlx5_eqe_port_module_event { 426dc7e38acSHans Petter Selasky u8 rsvd0; 427dc7e38acSHans Petter Selasky u8 module; 428dc7e38acSHans Petter Selasky u8 rsvd1; 429dc7e38acSHans Petter Selasky u8 module_status; 430dc7e38acSHans Petter Selasky u8 rsvd2[2]; 431dc7e38acSHans Petter Selasky u8 error_type; 432dc7e38acSHans Petter Selasky }; 433dc7e38acSHans Petter Selasky 434dc7e38acSHans Petter Selasky union ev_data { 435dc7e38acSHans Petter Selasky __be32 raw[7]; 436dc7e38acSHans Petter Selasky struct mlx5_eqe_cmd cmd; 437dc7e38acSHans Petter Selasky struct mlx5_eqe_comp comp; 438dc7e38acSHans Petter Selasky struct mlx5_eqe_qp_srq qp_srq; 439dc7e38acSHans Petter Selasky struct mlx5_eqe_cq_err cq_err; 440dc7e38acSHans Petter Selasky struct mlx5_eqe_port_state port; 441dc7e38acSHans Petter Selasky struct mlx5_eqe_gpio gpio; 442dc7e38acSHans Petter Selasky struct mlx5_eqe_congestion cong; 443dc7e38acSHans Petter Selasky struct mlx5_eqe_stall_vl stall_vl; 444dc7e38acSHans Petter Selasky struct mlx5_eqe_page_req req_pages; 445dc7e38acSHans Petter Selasky struct mlx5_eqe_port_module_event port_module_event; 446dc7e38acSHans Petter Selasky struct mlx5_eqe_vport_change vport_change; 447dc7e38acSHans Petter Selasky } __packed; 448dc7e38acSHans Petter Selasky 449dc7e38acSHans Petter Selasky struct mlx5_eqe { 450dc7e38acSHans Petter Selasky u8 rsvd0; 451dc7e38acSHans Petter Selasky u8 type; 452dc7e38acSHans Petter Selasky u8 rsvd1; 453dc7e38acSHans Petter Selasky u8 sub_type; 454dc7e38acSHans Petter Selasky __be32 rsvd2[7]; 455dc7e38acSHans Petter Selasky union ev_data data; 456dc7e38acSHans Petter Selasky __be16 rsvd3; 457dc7e38acSHans Petter Selasky u8 signature; 458dc7e38acSHans Petter Selasky u8 owner; 459dc7e38acSHans Petter Selasky } __packed; 460dc7e38acSHans Petter Selasky 461dc7e38acSHans Petter Selasky struct mlx5_cmd_prot_block { 462dc7e38acSHans Petter Selasky u8 data[MLX5_CMD_DATA_BLOCK_SIZE]; 463dc7e38acSHans Petter Selasky u8 rsvd0[48]; 464dc7e38acSHans Petter Selasky __be64 next; 465dc7e38acSHans Petter Selasky __be32 block_num; 466dc7e38acSHans Petter Selasky u8 rsvd1; 467dc7e38acSHans Petter Selasky u8 token; 468dc7e38acSHans Petter Selasky u8 ctrl_sig; 469dc7e38acSHans Petter Selasky u8 sig; 470dc7e38acSHans Petter Selasky }; 471dc7e38acSHans Petter Selasky 472dc7e38acSHans Petter Selasky enum { 473dc7e38acSHans Petter Selasky MLX5_CQE_SYND_FLUSHED_IN_ERROR = 5, 474dc7e38acSHans Petter Selasky }; 475dc7e38acSHans Petter Selasky 476dc7e38acSHans Petter Selasky struct mlx5_err_cqe { 477dc7e38acSHans Petter Selasky u8 rsvd0[32]; 478dc7e38acSHans Petter Selasky __be32 srqn; 479dc7e38acSHans Petter Selasky u8 rsvd1[18]; 480dc7e38acSHans Petter Selasky u8 vendor_err_synd; 481dc7e38acSHans Petter Selasky u8 syndrome; 482dc7e38acSHans Petter Selasky __be32 s_wqe_opcode_qpn; 483dc7e38acSHans Petter Selasky __be16 wqe_counter; 484dc7e38acSHans Petter Selasky u8 signature; 485dc7e38acSHans Petter Selasky u8 op_own; 486dc7e38acSHans Petter Selasky }; 487dc7e38acSHans Petter Selasky 488dc7e38acSHans Petter Selasky struct mlx5_cqe64 { 489dc7e38acSHans Petter Selasky u8 tunneled_etc; 490dc7e38acSHans Petter Selasky u8 rsvd0[3]; 491dc7e38acSHans Petter Selasky u8 lro_tcppsh_abort_dupack; 492dc7e38acSHans Petter Selasky u8 lro_min_ttl; 493dc7e38acSHans Petter Selasky __be16 lro_tcp_win; 494dc7e38acSHans Petter Selasky __be32 lro_ack_seq_num; 495dc7e38acSHans Petter Selasky __be32 rss_hash_result; 496dc7e38acSHans Petter Selasky u8 rss_hash_type; 497dc7e38acSHans Petter Selasky u8 ml_path; 498dc7e38acSHans Petter Selasky u8 rsvd20[2]; 499dc7e38acSHans Petter Selasky __be16 check_sum; 500dc7e38acSHans Petter Selasky __be16 slid; 501dc7e38acSHans Petter Selasky __be32 flags_rqpn; 502dc7e38acSHans Petter Selasky u8 hds_ip_ext; 503dc7e38acSHans Petter Selasky u8 l4_hdr_type_etc; 504dc7e38acSHans Petter Selasky __be16 vlan_info; 505dc7e38acSHans Petter Selasky __be32 srqn; /* [31:24]: lro_num_seg, [23:0]: srqn */ 506dc7e38acSHans Petter Selasky __be32 imm_inval_pkey; 507dc7e38acSHans Petter Selasky u8 rsvd40[4]; 508dc7e38acSHans Petter Selasky __be32 byte_cnt; 509dc7e38acSHans Petter Selasky __be64 timestamp; 510dc7e38acSHans Petter Selasky __be32 sop_drop_qpn; 511dc7e38acSHans Petter Selasky __be16 wqe_counter; 512dc7e38acSHans Petter Selasky u8 signature; 513dc7e38acSHans Petter Selasky u8 op_own; 514dc7e38acSHans Petter Selasky }; 515dc7e38acSHans Petter Selasky 516dc7e38acSHans Petter Selasky static inline bool get_cqe_lro_timestamp_valid(struct mlx5_cqe64 *cqe) 517dc7e38acSHans Petter Selasky { 518dc7e38acSHans Petter Selasky return (cqe->lro_tcppsh_abort_dupack >> 7) & 1; 519dc7e38acSHans Petter Selasky } 520dc7e38acSHans Petter Selasky 521dc7e38acSHans Petter Selasky static inline bool get_cqe_lro_tcppsh(struct mlx5_cqe64 *cqe) 522dc7e38acSHans Petter Selasky { 523dc7e38acSHans Petter Selasky return (cqe->lro_tcppsh_abort_dupack >> 6) & 1; 524dc7e38acSHans Petter Selasky } 525dc7e38acSHans Petter Selasky 526dc7e38acSHans Petter Selasky static inline u8 get_cqe_l4_hdr_type(struct mlx5_cqe64 *cqe) 527dc7e38acSHans Petter Selasky { 528dc7e38acSHans Petter Selasky return (cqe->l4_hdr_type_etc >> 4) & 0x7; 529dc7e38acSHans Petter Selasky } 530dc7e38acSHans Petter Selasky 531dc7e38acSHans Petter Selasky static inline u16 get_cqe_vlan(struct mlx5_cqe64 *cqe) 532dc7e38acSHans Petter Selasky { 533dc7e38acSHans Petter Selasky return be16_to_cpu(cqe->vlan_info) & 0xfff; 534dc7e38acSHans Petter Selasky } 535dc7e38acSHans Petter Selasky 536dc7e38acSHans Petter Selasky static inline void get_cqe_smac(struct mlx5_cqe64 *cqe, u8 *smac) 537dc7e38acSHans Petter Selasky { 538dc7e38acSHans Petter Selasky memcpy(smac, &cqe->rss_hash_type , 4); 539dc7e38acSHans Petter Selasky memcpy(smac + 4, &cqe->slid , 2); 540dc7e38acSHans Petter Selasky } 541dc7e38acSHans Petter Selasky 542dc7e38acSHans Petter Selasky static inline bool cqe_has_vlan(struct mlx5_cqe64 *cqe) 543dc7e38acSHans Petter Selasky { 544dc7e38acSHans Petter Selasky return cqe->l4_hdr_type_etc & 0x1; 545dc7e38acSHans Petter Selasky } 546dc7e38acSHans Petter Selasky 547dc7e38acSHans Petter Selasky static inline bool cqe_is_tunneled(struct mlx5_cqe64 *cqe) 548dc7e38acSHans Petter Selasky { 549dc7e38acSHans Petter Selasky return cqe->tunneled_etc & 0x1; 550dc7e38acSHans Petter Selasky } 551dc7e38acSHans Petter Selasky 552dc7e38acSHans Petter Selasky enum { 553dc7e38acSHans Petter Selasky CQE_L4_HDR_TYPE_NONE = 0x0, 554dc7e38acSHans Petter Selasky CQE_L4_HDR_TYPE_TCP_NO_ACK = 0x1, 555dc7e38acSHans Petter Selasky CQE_L4_HDR_TYPE_UDP = 0x2, 556dc7e38acSHans Petter Selasky CQE_L4_HDR_TYPE_TCP_ACK_NO_DATA = 0x3, 557dc7e38acSHans Petter Selasky CQE_L4_HDR_TYPE_TCP_ACK_AND_DATA = 0x4, 558dc7e38acSHans Petter Selasky }; 559dc7e38acSHans Petter Selasky 560dc7e38acSHans Petter Selasky enum { 561dc7e38acSHans Petter Selasky /* source L3 hash types */ 562dc7e38acSHans Petter Selasky CQE_RSS_SRC_HTYPE_IP = 0x3 << 0, 563dc7e38acSHans Petter Selasky CQE_RSS_SRC_HTYPE_IPV4 = 0x1 << 0, 564dc7e38acSHans Petter Selasky CQE_RSS_SRC_HTYPE_IPV6 = 0x2 << 0, 565dc7e38acSHans Petter Selasky 566dc7e38acSHans Petter Selasky /* destination L3 hash types */ 567dc7e38acSHans Petter Selasky CQE_RSS_DST_HTYPE_IP = 0x3 << 2, 568dc7e38acSHans Petter Selasky CQE_RSS_DST_HTYPE_IPV4 = 0x1 << 2, 569dc7e38acSHans Petter Selasky CQE_RSS_DST_HTYPE_IPV6 = 0x2 << 2, 570dc7e38acSHans Petter Selasky 571dc7e38acSHans Petter Selasky /* source L4 hash types */ 572dc7e38acSHans Petter Selasky CQE_RSS_SRC_HTYPE_L4 = 0x3 << 4, 573dc7e38acSHans Petter Selasky CQE_RSS_SRC_HTYPE_TCP = 0x1 << 4, 574dc7e38acSHans Petter Selasky CQE_RSS_SRC_HTYPE_UDP = 0x2 << 4, 575dc7e38acSHans Petter Selasky CQE_RSS_SRC_HTYPE_IPSEC = 0x3 << 4, 576dc7e38acSHans Petter Selasky 577dc7e38acSHans Petter Selasky /* destination L4 hash types */ 578dc7e38acSHans Petter Selasky CQE_RSS_DST_HTYPE_L4 = 0x3 << 6, 579dc7e38acSHans Petter Selasky CQE_RSS_DST_HTYPE_TCP = 0x1 << 6, 580dc7e38acSHans Petter Selasky CQE_RSS_DST_HTYPE_UDP = 0x2 << 6, 581dc7e38acSHans Petter Selasky CQE_RSS_DST_HTYPE_IPSEC = 0x3 << 6, 582dc7e38acSHans Petter Selasky }; 583dc7e38acSHans Petter Selasky 584dc7e38acSHans Petter Selasky enum { 585dc7e38acSHans Petter Selasky CQE_ROCE_L3_HEADER_TYPE_GRH = 0x0, 586dc7e38acSHans Petter Selasky CQE_ROCE_L3_HEADER_TYPE_IPV6 = 0x1, 587dc7e38acSHans Petter Selasky CQE_ROCE_L3_HEADER_TYPE_IPV4 = 0x2, 588dc7e38acSHans Petter Selasky }; 589dc7e38acSHans Petter Selasky 590dc7e38acSHans Petter Selasky enum { 591dc7e38acSHans Petter Selasky CQE_L2_OK = 1 << 0, 592dc7e38acSHans Petter Selasky CQE_L3_OK = 1 << 1, 593dc7e38acSHans Petter Selasky CQE_L4_OK = 1 << 2, 594dc7e38acSHans Petter Selasky }; 595dc7e38acSHans Petter Selasky 596dc7e38acSHans Petter Selasky struct mlx5_sig_err_cqe { 597dc7e38acSHans Petter Selasky u8 rsvd0[16]; 598dc7e38acSHans Petter Selasky __be32 expected_trans_sig; 599dc7e38acSHans Petter Selasky __be32 actual_trans_sig; 600dc7e38acSHans Petter Selasky __be32 expected_reftag; 601dc7e38acSHans Petter Selasky __be32 actual_reftag; 602dc7e38acSHans Petter Selasky __be16 syndrome; 603dc7e38acSHans Petter Selasky u8 rsvd22[2]; 604dc7e38acSHans Petter Selasky __be32 mkey; 605dc7e38acSHans Petter Selasky __be64 err_offset; 606dc7e38acSHans Petter Selasky u8 rsvd30[8]; 607dc7e38acSHans Petter Selasky __be32 qpn; 608dc7e38acSHans Petter Selasky u8 rsvd38[2]; 609dc7e38acSHans Petter Selasky u8 signature; 610dc7e38acSHans Petter Selasky u8 op_own; 611dc7e38acSHans Petter Selasky }; 612dc7e38acSHans Petter Selasky 613dc7e38acSHans Petter Selasky struct mlx5_wqe_srq_next_seg { 614dc7e38acSHans Petter Selasky u8 rsvd0[2]; 615dc7e38acSHans Petter Selasky __be16 next_wqe_index; 616dc7e38acSHans Petter Selasky u8 signature; 617dc7e38acSHans Petter Selasky u8 rsvd1[11]; 618dc7e38acSHans Petter Selasky }; 619dc7e38acSHans Petter Selasky 620dc7e38acSHans Petter Selasky union mlx5_ext_cqe { 621dc7e38acSHans Petter Selasky struct ib_grh grh; 622dc7e38acSHans Petter Selasky u8 inl[64]; 623dc7e38acSHans Petter Selasky }; 624dc7e38acSHans Petter Selasky 625dc7e38acSHans Petter Selasky struct mlx5_cqe128 { 626dc7e38acSHans Petter Selasky union mlx5_ext_cqe inl_grh; 627dc7e38acSHans Petter Selasky struct mlx5_cqe64 cqe64; 628dc7e38acSHans Petter Selasky }; 629dc7e38acSHans Petter Selasky 630dc7e38acSHans Petter Selasky struct mlx5_srq_ctx { 631dc7e38acSHans Petter Selasky u8 state_log_sz; 632dc7e38acSHans Petter Selasky u8 rsvd0[3]; 633dc7e38acSHans Petter Selasky __be32 flags_xrcd; 634dc7e38acSHans Petter Selasky __be32 pgoff_cqn; 635dc7e38acSHans Petter Selasky u8 rsvd1[4]; 636dc7e38acSHans Petter Selasky u8 log_pg_sz; 637dc7e38acSHans Petter Selasky u8 rsvd2[7]; 638dc7e38acSHans Petter Selasky __be32 pd; 639dc7e38acSHans Petter Selasky __be16 lwm; 640dc7e38acSHans Petter Selasky __be16 wqe_cnt; 641dc7e38acSHans Petter Selasky u8 rsvd3[8]; 642dc7e38acSHans Petter Selasky __be64 db_record; 643dc7e38acSHans Petter Selasky }; 644dc7e38acSHans Petter Selasky 645dc7e38acSHans Petter Selasky struct mlx5_create_srq_mbox_in { 646dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 647dc7e38acSHans Petter Selasky __be32 input_srqn; 648dc7e38acSHans Petter Selasky u8 rsvd0[4]; 649dc7e38acSHans Petter Selasky struct mlx5_srq_ctx ctx; 650dc7e38acSHans Petter Selasky u8 rsvd1[208]; 651dc7e38acSHans Petter Selasky __be64 pas[0]; 652dc7e38acSHans Petter Selasky }; 653dc7e38acSHans Petter Selasky 654dc7e38acSHans Petter Selasky struct mlx5_create_srq_mbox_out { 655dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 656dc7e38acSHans Petter Selasky __be32 srqn; 657dc7e38acSHans Petter Selasky u8 rsvd[4]; 658dc7e38acSHans Petter Selasky }; 659dc7e38acSHans Petter Selasky 660dc7e38acSHans Petter Selasky struct mlx5_destroy_srq_mbox_in { 661dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 662dc7e38acSHans Petter Selasky __be32 srqn; 663dc7e38acSHans Petter Selasky u8 rsvd[4]; 664dc7e38acSHans Petter Selasky }; 665dc7e38acSHans Petter Selasky 666dc7e38acSHans Petter Selasky struct mlx5_destroy_srq_mbox_out { 667dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 668dc7e38acSHans Petter Selasky u8 rsvd[8]; 669dc7e38acSHans Petter Selasky }; 670dc7e38acSHans Petter Selasky 671dc7e38acSHans Petter Selasky struct mlx5_query_srq_mbox_in { 672dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 673dc7e38acSHans Petter Selasky __be32 srqn; 674dc7e38acSHans Petter Selasky u8 rsvd0[4]; 675dc7e38acSHans Petter Selasky }; 676dc7e38acSHans Petter Selasky 677dc7e38acSHans Petter Selasky struct mlx5_query_srq_mbox_out { 678dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 679dc7e38acSHans Petter Selasky u8 rsvd0[8]; 680dc7e38acSHans Petter Selasky struct mlx5_srq_ctx ctx; 681dc7e38acSHans Petter Selasky u8 rsvd1[32]; 682dc7e38acSHans Petter Selasky __be64 pas[0]; 683dc7e38acSHans Petter Selasky }; 684dc7e38acSHans Petter Selasky 685dc7e38acSHans Petter Selasky struct mlx5_arm_srq_mbox_in { 686dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 687dc7e38acSHans Petter Selasky __be32 srqn; 688dc7e38acSHans Petter Selasky __be16 rsvd; 689dc7e38acSHans Petter Selasky __be16 lwm; 690dc7e38acSHans Petter Selasky }; 691dc7e38acSHans Petter Selasky 692dc7e38acSHans Petter Selasky struct mlx5_arm_srq_mbox_out { 693dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 694dc7e38acSHans Petter Selasky u8 rsvd[8]; 695dc7e38acSHans Petter Selasky }; 696dc7e38acSHans Petter Selasky 697dc7e38acSHans Petter Selasky struct mlx5_cq_context { 698dc7e38acSHans Petter Selasky u8 status; 699dc7e38acSHans Petter Selasky u8 cqe_sz_flags; 700dc7e38acSHans Petter Selasky u8 st; 701dc7e38acSHans Petter Selasky u8 rsvd3; 702dc7e38acSHans Petter Selasky u8 rsvd4[6]; 703dc7e38acSHans Petter Selasky __be16 page_offset; 704dc7e38acSHans Petter Selasky __be32 log_sz_usr_page; 705dc7e38acSHans Petter Selasky __be16 cq_period; 706dc7e38acSHans Petter Selasky __be16 cq_max_count; 707dc7e38acSHans Petter Selasky __be16 rsvd20; 708dc7e38acSHans Petter Selasky __be16 c_eqn; 709dc7e38acSHans Petter Selasky u8 log_pg_sz; 710dc7e38acSHans Petter Selasky u8 rsvd25[7]; 711dc7e38acSHans Petter Selasky __be32 last_notified_index; 712dc7e38acSHans Petter Selasky __be32 solicit_producer_index; 713dc7e38acSHans Petter Selasky __be32 consumer_counter; 714dc7e38acSHans Petter Selasky __be32 producer_counter; 715dc7e38acSHans Petter Selasky u8 rsvd48[8]; 716dc7e38acSHans Petter Selasky __be64 db_record_addr; 717dc7e38acSHans Petter Selasky }; 718dc7e38acSHans Petter Selasky 719dc7e38acSHans Petter Selasky struct mlx5_create_cq_mbox_in { 720dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 721dc7e38acSHans Petter Selasky __be32 input_cqn; 722dc7e38acSHans Petter Selasky u8 rsvdx[4]; 723dc7e38acSHans Petter Selasky struct mlx5_cq_context ctx; 724dc7e38acSHans Petter Selasky u8 rsvd6[192]; 725dc7e38acSHans Petter Selasky __be64 pas[0]; 726dc7e38acSHans Petter Selasky }; 727dc7e38acSHans Petter Selasky 728dc7e38acSHans Petter Selasky struct mlx5_create_cq_mbox_out { 729dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 730dc7e38acSHans Petter Selasky __be32 cqn; 731dc7e38acSHans Petter Selasky u8 rsvd0[4]; 732dc7e38acSHans Petter Selasky }; 733dc7e38acSHans Petter Selasky 734dc7e38acSHans Petter Selasky struct mlx5_destroy_cq_mbox_in { 735dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 736dc7e38acSHans Petter Selasky __be32 cqn; 737dc7e38acSHans Petter Selasky u8 rsvd0[4]; 738dc7e38acSHans Petter Selasky }; 739dc7e38acSHans Petter Selasky 740dc7e38acSHans Petter Selasky struct mlx5_destroy_cq_mbox_out { 741dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 742dc7e38acSHans Petter Selasky u8 rsvd0[8]; 743dc7e38acSHans Petter Selasky }; 744dc7e38acSHans Petter Selasky 745dc7e38acSHans Petter Selasky struct mlx5_query_cq_mbox_in { 746dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 747dc7e38acSHans Petter Selasky __be32 cqn; 748dc7e38acSHans Petter Selasky u8 rsvd0[4]; 749dc7e38acSHans Petter Selasky }; 750dc7e38acSHans Petter Selasky 751dc7e38acSHans Petter Selasky struct mlx5_query_cq_mbox_out { 752dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 753dc7e38acSHans Petter Selasky u8 rsvd0[8]; 754dc7e38acSHans Petter Selasky struct mlx5_cq_context ctx; 755dc7e38acSHans Petter Selasky u8 rsvd6[16]; 756dc7e38acSHans Petter Selasky __be64 pas[0]; 757dc7e38acSHans Petter Selasky }; 758dc7e38acSHans Petter Selasky 759dc7e38acSHans Petter Selasky struct mlx5_modify_cq_mbox_in { 760dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 761dc7e38acSHans Petter Selasky __be32 cqn; 762dc7e38acSHans Petter Selasky __be32 field_select; 763dc7e38acSHans Petter Selasky struct mlx5_cq_context ctx; 764dc7e38acSHans Petter Selasky u8 rsvd[192]; 765dc7e38acSHans Petter Selasky __be64 pas[0]; 766dc7e38acSHans Petter Selasky }; 767dc7e38acSHans Petter Selasky 768dc7e38acSHans Petter Selasky struct mlx5_modify_cq_mbox_out { 769dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 770dc7e38acSHans Petter Selasky u8 rsvd[8]; 771dc7e38acSHans Petter Selasky }; 772dc7e38acSHans Petter Selasky 773dc7e38acSHans Petter Selasky struct mlx5_eq_context { 774dc7e38acSHans Petter Selasky u8 status; 775dc7e38acSHans Petter Selasky u8 ec_oi; 776dc7e38acSHans Petter Selasky u8 st; 777dc7e38acSHans Petter Selasky u8 rsvd2[7]; 778dc7e38acSHans Petter Selasky __be16 page_pffset; 779dc7e38acSHans Petter Selasky __be32 log_sz_usr_page; 780dc7e38acSHans Petter Selasky u8 rsvd3[7]; 781dc7e38acSHans Petter Selasky u8 intr; 782dc7e38acSHans Petter Selasky u8 log_page_size; 783dc7e38acSHans Petter Selasky u8 rsvd4[15]; 784dc7e38acSHans Petter Selasky __be32 consumer_counter; 785dc7e38acSHans Petter Selasky __be32 produser_counter; 786dc7e38acSHans Petter Selasky u8 rsvd5[16]; 787dc7e38acSHans Petter Selasky }; 788dc7e38acSHans Petter Selasky 789dc7e38acSHans Petter Selasky struct mlx5_create_eq_mbox_in { 790dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 791dc7e38acSHans Petter Selasky u8 rsvd0[3]; 792dc7e38acSHans Petter Selasky u8 input_eqn; 793dc7e38acSHans Petter Selasky u8 rsvd1[4]; 794dc7e38acSHans Petter Selasky struct mlx5_eq_context ctx; 795dc7e38acSHans Petter Selasky u8 rsvd2[8]; 796dc7e38acSHans Petter Selasky __be64 events_mask; 797dc7e38acSHans Petter Selasky u8 rsvd3[176]; 798dc7e38acSHans Petter Selasky __be64 pas[0]; 799dc7e38acSHans Petter Selasky }; 800dc7e38acSHans Petter Selasky 801dc7e38acSHans Petter Selasky struct mlx5_create_eq_mbox_out { 802dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 803dc7e38acSHans Petter Selasky u8 rsvd0[3]; 804dc7e38acSHans Petter Selasky u8 eq_number; 805dc7e38acSHans Petter Selasky u8 rsvd1[4]; 806dc7e38acSHans Petter Selasky }; 807dc7e38acSHans Petter Selasky 808dc7e38acSHans Petter Selasky struct mlx5_map_eq_mbox_in { 809dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 810dc7e38acSHans Petter Selasky __be64 mask; 811dc7e38acSHans Petter Selasky u8 mu; 812dc7e38acSHans Petter Selasky u8 rsvd0[2]; 813dc7e38acSHans Petter Selasky u8 eqn; 814dc7e38acSHans Petter Selasky u8 rsvd1[24]; 815dc7e38acSHans Petter Selasky }; 816dc7e38acSHans Petter Selasky 817dc7e38acSHans Petter Selasky struct mlx5_map_eq_mbox_out { 818dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 819dc7e38acSHans Petter Selasky u8 rsvd[8]; 820dc7e38acSHans Petter Selasky }; 821dc7e38acSHans Petter Selasky 822dc7e38acSHans Petter Selasky struct mlx5_query_eq_mbox_in { 823dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 824dc7e38acSHans Petter Selasky u8 rsvd0[3]; 825dc7e38acSHans Petter Selasky u8 eqn; 826dc7e38acSHans Petter Selasky u8 rsvd1[4]; 827dc7e38acSHans Petter Selasky }; 828dc7e38acSHans Petter Selasky 829dc7e38acSHans Petter Selasky struct mlx5_query_eq_mbox_out { 830dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 831dc7e38acSHans Petter Selasky u8 rsvd[8]; 832dc7e38acSHans Petter Selasky struct mlx5_eq_context ctx; 833dc7e38acSHans Petter Selasky }; 834dc7e38acSHans Petter Selasky 835dc7e38acSHans Petter Selasky struct mlx5_mkey_seg { 836dc7e38acSHans Petter Selasky /* This is a two bit field occupying bits 31-30. 837dc7e38acSHans Petter Selasky * bit 31 is always 0, 838dc7e38acSHans Petter Selasky * bit 30 is zero for regular MRs and 1 (e.g free) for UMRs that do not have tanslation 839dc7e38acSHans Petter Selasky */ 840dc7e38acSHans Petter Selasky u8 status; 841dc7e38acSHans Petter Selasky u8 pcie_control; 842dc7e38acSHans Petter Selasky u8 flags; 843dc7e38acSHans Petter Selasky u8 version; 844dc7e38acSHans Petter Selasky __be32 qpn_mkey7_0; 845dc7e38acSHans Petter Selasky u8 rsvd1[4]; 846dc7e38acSHans Petter Selasky __be32 flags_pd; 847dc7e38acSHans Petter Selasky __be64 start_addr; 848dc7e38acSHans Petter Selasky __be64 len; 849dc7e38acSHans Petter Selasky __be32 bsfs_octo_size; 850dc7e38acSHans Petter Selasky u8 rsvd2[16]; 851dc7e38acSHans Petter Selasky __be32 xlt_oct_size; 852dc7e38acSHans Petter Selasky u8 rsvd3[3]; 853dc7e38acSHans Petter Selasky u8 log2_page_size; 854dc7e38acSHans Petter Selasky u8 rsvd4[4]; 855dc7e38acSHans Petter Selasky }; 856dc7e38acSHans Petter Selasky 857dc7e38acSHans Petter Selasky struct mlx5_query_special_ctxs_mbox_in { 858dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 859dc7e38acSHans Petter Selasky u8 rsvd[8]; 860dc7e38acSHans Petter Selasky }; 861dc7e38acSHans Petter Selasky 862dc7e38acSHans Petter Selasky struct mlx5_query_special_ctxs_mbox_out { 863dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 864dc7e38acSHans Petter Selasky __be32 dump_fill_mkey; 865dc7e38acSHans Petter Selasky __be32 reserved_lkey; 866dc7e38acSHans Petter Selasky }; 867dc7e38acSHans Petter Selasky 868dc7e38acSHans Petter Selasky struct mlx5_create_mkey_mbox_in { 869dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 870dc7e38acSHans Petter Selasky __be32 input_mkey_index; 871dc7e38acSHans Petter Selasky u8 rsvd0[4]; 872dc7e38acSHans Petter Selasky struct mlx5_mkey_seg seg; 873dc7e38acSHans Petter Selasky u8 rsvd1[16]; 874dc7e38acSHans Petter Selasky __be32 xlat_oct_act_size; 875dc7e38acSHans Petter Selasky __be32 rsvd2; 876dc7e38acSHans Petter Selasky u8 rsvd3[168]; 877dc7e38acSHans Petter Selasky __be64 pas[0]; 878dc7e38acSHans Petter Selasky }; 879dc7e38acSHans Petter Selasky 880dc7e38acSHans Petter Selasky struct mlx5_create_mkey_mbox_out { 881dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 882dc7e38acSHans Petter Selasky __be32 mkey; 883dc7e38acSHans Petter Selasky u8 rsvd[4]; 884dc7e38acSHans Petter Selasky }; 885dc7e38acSHans Petter Selasky 886dc7e38acSHans Petter Selasky struct mlx5_query_mkey_mbox_in { 887dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 888dc7e38acSHans Petter Selasky __be32 mkey; 889dc7e38acSHans Petter Selasky }; 890dc7e38acSHans Petter Selasky 891dc7e38acSHans Petter Selasky struct mlx5_query_mkey_mbox_out { 892dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 893dc7e38acSHans Petter Selasky __be64 pas[0]; 894dc7e38acSHans Petter Selasky }; 895dc7e38acSHans Petter Selasky 896dc7e38acSHans Petter Selasky struct mlx5_modify_mkey_mbox_in { 897dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 898dc7e38acSHans Petter Selasky __be32 mkey; 899dc7e38acSHans Petter Selasky __be64 pas[0]; 900dc7e38acSHans Petter Selasky }; 901dc7e38acSHans Petter Selasky 902dc7e38acSHans Petter Selasky struct mlx5_modify_mkey_mbox_out { 903dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 904dc7e38acSHans Petter Selasky u8 rsvd[8]; 905dc7e38acSHans Petter Selasky }; 906dc7e38acSHans Petter Selasky 907dc7e38acSHans Petter Selasky struct mlx5_dump_mkey_mbox_in { 908dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 909dc7e38acSHans Petter Selasky }; 910dc7e38acSHans Petter Selasky 911dc7e38acSHans Petter Selasky struct mlx5_dump_mkey_mbox_out { 912dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 913dc7e38acSHans Petter Selasky __be32 mkey; 914dc7e38acSHans Petter Selasky }; 915dc7e38acSHans Petter Selasky 916dc7e38acSHans Petter Selasky struct mlx5_mad_ifc_mbox_in { 917dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 918dc7e38acSHans Petter Selasky __be16 remote_lid; 919dc7e38acSHans Petter Selasky u8 rsvd0; 920dc7e38acSHans Petter Selasky u8 port; 921dc7e38acSHans Petter Selasky u8 rsvd1[4]; 922dc7e38acSHans Petter Selasky u8 data[256]; 923dc7e38acSHans Petter Selasky }; 924dc7e38acSHans Petter Selasky 925dc7e38acSHans Petter Selasky struct mlx5_mad_ifc_mbox_out { 926dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 927dc7e38acSHans Petter Selasky u8 rsvd[8]; 928dc7e38acSHans Petter Selasky u8 data[256]; 929dc7e38acSHans Petter Selasky }; 930dc7e38acSHans Petter Selasky 931dc7e38acSHans Petter Selasky struct mlx5_access_reg_mbox_in { 932dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 933dc7e38acSHans Petter Selasky u8 rsvd0[2]; 934dc7e38acSHans Petter Selasky __be16 register_id; 935dc7e38acSHans Petter Selasky __be32 arg; 936dc7e38acSHans Petter Selasky __be32 data[0]; 937dc7e38acSHans Petter Selasky }; 938dc7e38acSHans Petter Selasky 939dc7e38acSHans Petter Selasky struct mlx5_access_reg_mbox_out { 940dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 941dc7e38acSHans Petter Selasky u8 rsvd[8]; 942dc7e38acSHans Petter Selasky __be32 data[0]; 943dc7e38acSHans Petter Selasky }; 944dc7e38acSHans Petter Selasky 945dc7e38acSHans Petter Selasky #define MLX5_ATTR_EXTENDED_PORT_INFO cpu_to_be16(0xff90) 946dc7e38acSHans Petter Selasky 947dc7e38acSHans Petter Selasky enum { 948dc7e38acSHans Petter Selasky MLX_EXT_PORT_CAP_FLAG_EXTENDED_PORT_INFO = 1 << 0 949dc7e38acSHans Petter Selasky }; 950dc7e38acSHans Petter Selasky 951dc7e38acSHans Petter Selasky struct mlx5_allocate_psv_in { 952dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 953dc7e38acSHans Petter Selasky __be32 npsv_pd; 954dc7e38acSHans Petter Selasky __be32 rsvd_psv0; 955dc7e38acSHans Petter Selasky }; 956dc7e38acSHans Petter Selasky 957dc7e38acSHans Petter Selasky struct mlx5_allocate_psv_out { 958dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 959dc7e38acSHans Petter Selasky u8 rsvd[8]; 960dc7e38acSHans Petter Selasky __be32 psv_idx[4]; 961dc7e38acSHans Petter Selasky }; 962dc7e38acSHans Petter Selasky 963dc7e38acSHans Petter Selasky struct mlx5_destroy_psv_in { 964dc7e38acSHans Petter Selasky struct mlx5_inbox_hdr hdr; 965dc7e38acSHans Petter Selasky __be32 psv_number; 966dc7e38acSHans Petter Selasky u8 rsvd[4]; 967dc7e38acSHans Petter Selasky }; 968dc7e38acSHans Petter Selasky 969dc7e38acSHans Petter Selasky struct mlx5_destroy_psv_out { 970dc7e38acSHans Petter Selasky struct mlx5_outbox_hdr hdr; 971dc7e38acSHans Petter Selasky u8 rsvd[8]; 972dc7e38acSHans Petter Selasky }; 973dc7e38acSHans Petter Selasky 974dc7e38acSHans Petter Selasky #define MLX5_CMD_OP_MAX 0x939 975dc7e38acSHans Petter Selasky 976dc7e38acSHans Petter Selasky enum { 977dc7e38acSHans Petter Selasky VPORT_STATE_DOWN = 0x0, 978dc7e38acSHans Petter Selasky VPORT_STATE_UP = 0x1, 979dc7e38acSHans Petter Selasky }; 980dc7e38acSHans Petter Selasky 981dc7e38acSHans Petter Selasky enum { 982dc7e38acSHans Petter Selasky MLX5_L3_PROT_TYPE_IPV4 = 0, 983dc7e38acSHans Petter Selasky MLX5_L3_PROT_TYPE_IPV6 = 1, 984dc7e38acSHans Petter Selasky }; 985dc7e38acSHans Petter Selasky 986dc7e38acSHans Petter Selasky enum { 987dc7e38acSHans Petter Selasky MLX5_L4_PROT_TYPE_TCP = 0, 988dc7e38acSHans Petter Selasky MLX5_L4_PROT_TYPE_UDP = 1, 989dc7e38acSHans Petter Selasky }; 990dc7e38acSHans Petter Selasky 991dc7e38acSHans Petter Selasky enum { 992dc7e38acSHans Petter Selasky MLX5_HASH_FIELD_SEL_SRC_IP = 1 << 0, 993dc7e38acSHans Petter Selasky MLX5_HASH_FIELD_SEL_DST_IP = 1 << 1, 994dc7e38acSHans Petter Selasky MLX5_HASH_FIELD_SEL_L4_SPORT = 1 << 2, 995dc7e38acSHans Petter Selasky MLX5_HASH_FIELD_SEL_L4_DPORT = 1 << 3, 996dc7e38acSHans Petter Selasky MLX5_HASH_FIELD_SEL_IPSEC_SPI = 1 << 4, 997dc7e38acSHans Petter Selasky }; 998dc7e38acSHans Petter Selasky 999dc7e38acSHans Petter Selasky enum { 1000dc7e38acSHans Petter Selasky MLX5_MATCH_OUTER_HEADERS = 1 << 0, 1001dc7e38acSHans Petter Selasky MLX5_MATCH_MISC_PARAMETERS = 1 << 1, 1002dc7e38acSHans Petter Selasky MLX5_MATCH_INNER_HEADERS = 1 << 2, 1003dc7e38acSHans Petter Selasky 1004dc7e38acSHans Petter Selasky }; 1005dc7e38acSHans Petter Selasky 1006dc7e38acSHans Petter Selasky enum { 1007dc7e38acSHans Petter Selasky MLX5_FLOW_TABLE_TYPE_NIC_RCV = 0, 1008dc7e38acSHans Petter Selasky MLX5_FLOW_TABLE_TYPE_EGRESS_ACL = 2, 1009dc7e38acSHans Petter Selasky MLX5_FLOW_TABLE_TYPE_INGRESS_ACL = 3, 1010dc7e38acSHans Petter Selasky MLX5_FLOW_TABLE_TYPE_ESWITCH = 4, 1011dc7e38acSHans Petter Selasky }; 1012dc7e38acSHans Petter Selasky 1013dc7e38acSHans Petter Selasky enum { 1014dc7e38acSHans Petter Selasky MLX5_MODIFY_ESW_VPORT_CONTEXT_CVLAN_INSERT_NONE = 0, 1015dc7e38acSHans Petter Selasky MLX5_MODIFY_ESW_VPORT_CONTEXT_CVLAN_INSERT_IF_NO_VLAN = 1, 1016dc7e38acSHans Petter Selasky MLX5_MODIFY_ESW_VPORT_CONTEXT_CVLAN_INSERT_OVERWRITE = 2 1017dc7e38acSHans Petter Selasky }; 1018dc7e38acSHans Petter Selasky 1019dc7e38acSHans Petter Selasky enum { 1020dc7e38acSHans Petter Selasky MLX5_MODIFY_ESW_VPORT_CONTEXT_FIELD_SELECT_SVLAN_STRIP = 1 << 0, 1021dc7e38acSHans Petter Selasky MLX5_MODIFY_ESW_VPORT_CONTEXT_FIELD_SELECT_CVLAN_STRIP = 1 << 1, 1022dc7e38acSHans Petter Selasky MLX5_MODIFY_ESW_VPORT_CONTEXT_FIELD_SELECT_SVLAN_INSERT = 1 << 2, 1023dc7e38acSHans Petter Selasky MLX5_MODIFY_ESW_VPORT_CONTEXT_FIELD_SELECT_CVLAN_INSERT = 1 << 3 1024dc7e38acSHans Petter Selasky }; 1025dc7e38acSHans Petter Selasky 102698a998d5SHans Petter Selasky enum { 102798a998d5SHans Petter Selasky MLX5_UC_ADDR_CHANGE = (1 << 0), 102898a998d5SHans Petter Selasky MLX5_MC_ADDR_CHANGE = (1 << 1), 102998a998d5SHans Petter Selasky MLX5_VLAN_CHANGE = (1 << 2), 103098a998d5SHans Petter Selasky MLX5_PROMISC_CHANGE = (1 << 3), 103198a998d5SHans Petter Selasky MLX5_MTU_CHANGE = (1 << 4), 103298a998d5SHans Petter Selasky }; 103398a998d5SHans Petter Selasky 103498a998d5SHans Petter Selasky enum mlx5_list_type { 103598a998d5SHans Petter Selasky MLX5_NIC_VPORT_LIST_TYPE_UC = 0x0, 103698a998d5SHans Petter Selasky MLX5_NIC_VPORT_LIST_TYPE_MC = 0x1, 103798a998d5SHans Petter Selasky MLX5_NIC_VPORT_LIST_TYPE_VLAN = 0x2, 103898a998d5SHans Petter Selasky }; 103998a998d5SHans Petter Selasky 104098a998d5SHans Petter Selasky enum { 104198a998d5SHans Petter Selasky MLX5_ESW_VPORT_ADMIN_STATE_DOWN = 0x0, 104298a998d5SHans Petter Selasky MLX5_ESW_VPORT_ADMIN_STATE_UP = 0x1, 104398a998d5SHans Petter Selasky MLX5_ESW_VPORT_ADMIN_STATE_AUTO = 0x2, 104498a998d5SHans Petter Selasky }; 1045*90cc1c77SHans Petter Selasky 1046dc7e38acSHans Petter Selasky /* MLX5 DEV CAPs */ 1047dc7e38acSHans Petter Selasky 1048dc7e38acSHans Petter Selasky /* TODO: EAT.ME */ 1049dc7e38acSHans Petter Selasky enum mlx5_cap_mode { 1050dc7e38acSHans Petter Selasky HCA_CAP_OPMOD_GET_MAX = 0, 1051dc7e38acSHans Petter Selasky HCA_CAP_OPMOD_GET_CUR = 1, 1052dc7e38acSHans Petter Selasky }; 1053dc7e38acSHans Petter Selasky 1054dc7e38acSHans Petter Selasky enum mlx5_cap_type { 1055dc7e38acSHans Petter Selasky MLX5_CAP_GENERAL = 0, 1056dc7e38acSHans Petter Selasky MLX5_CAP_ETHERNET_OFFLOADS, 1057dc7e38acSHans Petter Selasky MLX5_CAP_ODP, 1058dc7e38acSHans Petter Selasky MLX5_CAP_ATOMIC, 1059dc7e38acSHans Petter Selasky MLX5_CAP_ROCE, 1060dc7e38acSHans Petter Selasky MLX5_CAP_IPOIB_OFFLOADS, 1061dc7e38acSHans Petter Selasky MLX5_CAP_EOIB_OFFLOADS, 1062dc7e38acSHans Petter Selasky MLX5_CAP_FLOW_TABLE, 1063dc7e38acSHans Petter Selasky MLX5_CAP_ESWITCH_FLOW_TABLE, 1064dc7e38acSHans Petter Selasky MLX5_CAP_ESWITCH, 1065dc7e38acSHans Petter Selasky /* NUM OF CAP Types */ 1066dc7e38acSHans Petter Selasky MLX5_CAP_NUM 1067dc7e38acSHans Petter Selasky }; 1068dc7e38acSHans Petter Selasky 1069dc7e38acSHans Petter Selasky /* GET Dev Caps macros */ 1070dc7e38acSHans Petter Selasky #define MLX5_CAP_GEN(mdev, cap) \ 1071dc7e38acSHans Petter Selasky MLX5_GET(cmd_hca_cap, mdev->hca_caps_cur[MLX5_CAP_GENERAL], cap) 1072dc7e38acSHans Petter Selasky 1073dc7e38acSHans Petter Selasky #define MLX5_CAP_GEN_MAX(mdev, cap) \ 1074dc7e38acSHans Petter Selasky MLX5_GET(cmd_hca_cap, mdev->hca_caps_max[MLX5_CAP_GENERAL], cap) 1075dc7e38acSHans Petter Selasky 1076dc7e38acSHans Petter Selasky #define MLX5_CAP_ETH(mdev, cap) \ 1077dc7e38acSHans Petter Selasky MLX5_GET(per_protocol_networking_offload_caps,\ 1078dc7e38acSHans Petter Selasky mdev->hca_caps_cur[MLX5_CAP_ETHERNET_OFFLOADS], cap) 1079dc7e38acSHans Petter Selasky 1080dc7e38acSHans Petter Selasky #define MLX5_CAP_ETH_MAX(mdev, cap) \ 1081dc7e38acSHans Petter Selasky MLX5_GET(per_protocol_networking_offload_caps,\ 1082dc7e38acSHans Petter Selasky mdev->hca_caps_max[MLX5_CAP_ETHERNET_OFFLOADS], cap) 1083dc7e38acSHans Petter Selasky 1084dc7e38acSHans Petter Selasky #define MLX5_CAP_ROCE(mdev, cap) \ 1085dc7e38acSHans Petter Selasky MLX5_GET(roce_cap, mdev->hca_caps_cur[MLX5_CAP_ROCE], cap) 1086dc7e38acSHans Petter Selasky 1087dc7e38acSHans Petter Selasky #define MLX5_CAP_ROCE_MAX(mdev, cap) \ 1088dc7e38acSHans Petter Selasky MLX5_GET(roce_cap, mdev->hca_caps_max[MLX5_CAP_ROCE], cap) 1089dc7e38acSHans Petter Selasky 1090dc7e38acSHans Petter Selasky #define MLX5_CAP_ATOMIC(mdev, cap) \ 1091dc7e38acSHans Petter Selasky MLX5_GET(atomic_caps, mdev->hca_caps_cur[MLX5_CAP_ATOMIC], cap) 1092dc7e38acSHans Petter Selasky 1093dc7e38acSHans Petter Selasky #define MLX5_CAP_ATOMIC_MAX(mdev, cap) \ 1094dc7e38acSHans Petter Selasky MLX5_GET(atomic_caps, mdev->hca_caps_max[MLX5_CAP_ATOMIC], cap) 1095dc7e38acSHans Petter Selasky 1096dc7e38acSHans Petter Selasky #define MLX5_CAP_FLOWTABLE(mdev, cap) \ 1097dc7e38acSHans Petter Selasky MLX5_GET(flow_table_nic_cap, mdev->hca_caps_cur[MLX5_CAP_FLOW_TABLE], cap) 1098dc7e38acSHans Petter Selasky 1099dc7e38acSHans Petter Selasky #define MLX5_CAP_FLOWTABLE_MAX(mdev, cap) \ 1100dc7e38acSHans Petter Selasky MLX5_GET(flow_table_nic_cap, mdev->hca_caps_max[MLX5_CAP_FLOW_TABLE], cap) 1101dc7e38acSHans Petter Selasky 1102dc7e38acSHans Petter Selasky #define MLX5_CAP_ESW_FLOWTABLE(mdev, cap) \ 1103dc7e38acSHans Petter Selasky MLX5_GET(flow_table_eswitch_cap, \ 1104dc7e38acSHans Petter Selasky mdev->hca_caps_cur[MLX5_CAP_ESWITCH_FLOW_TABLE], cap) 1105dc7e38acSHans Petter Selasky 1106dc7e38acSHans Petter Selasky #define MLX5_CAP_ESW_FLOWTABLE_MAX(mdev, cap) \ 1107dc7e38acSHans Petter Selasky MLX5_GET(flow_table_eswitch_cap, \ 1108dc7e38acSHans Petter Selasky mdev->hca_caps_max[MLX5_CAP_ESWITCH_FLOW_TABLE], cap) 1109dc7e38acSHans Petter Selasky 111098a998d5SHans Petter Selasky #define MLX5_CAP_ESW_FLOWTABLE_EGRESS_ACL(mdev, cap) \ 111198a998d5SHans Petter Selasky MLX5_CAP_ESW_FLOWTABLE(dev, \ 111298a998d5SHans Petter Selasky flow_table_properties_esw_acl_egress.cap) 111398a998d5SHans Petter Selasky 111498a998d5SHans Petter Selasky #define MLX5_CAP_ESW_FLOWTABLE_EGRESS_ACL_MAX(mdev, cap) \ 111598a998d5SHans Petter Selasky MLX5_CAP_ESW_FLOWTABLE_MAX(dev, \ 111698a998d5SHans Petter Selasky flow_table_properties_esw_acl_egress.cap) 111798a998d5SHans Petter Selasky 111898a998d5SHans Petter Selasky #define MLX5_CAP_ESW_FLOWTABLE_INGRESS_ACL(mdev, cap) \ 111998a998d5SHans Petter Selasky MLX5_CAP_ESW_FLOWTABLE(dev, \ 112098a998d5SHans Petter Selasky flow_table_properties_esw_acl_ingress.cap) 112198a998d5SHans Petter Selasky 112298a998d5SHans Petter Selasky #define MLX5_CAP_ESW_FLOWTABLE_INGRESS_ACL_MAX(mdev, cap) \ 112398a998d5SHans Petter Selasky MLX5_CAP_ESW_FLOWTABLE_MAX(dev, \ 112498a998d5SHans Petter Selasky flow_table_properties_esw_acl_ingress.cap) 112598a998d5SHans Petter Selasky 1126dc7e38acSHans Petter Selasky #define MLX5_CAP_ESW(mdev, cap) \ 1127dc7e38acSHans Petter Selasky MLX5_GET(e_switch_cap, \ 1128dc7e38acSHans Petter Selasky mdev->hca_caps_cur[MLX5_CAP_ESWITCH], cap) 1129dc7e38acSHans Petter Selasky 1130dc7e38acSHans Petter Selasky #define MLX5_CAP_ESW_MAX(mdev, cap) \ 1131dc7e38acSHans Petter Selasky MLX5_GET(e_switch_cap, \ 1132dc7e38acSHans Petter Selasky mdev->hca_caps_max[MLX5_CAP_ESWITCH], cap) 1133dc7e38acSHans Petter Selasky 1134dc7e38acSHans Petter Selasky #define MLX5_CAP_ODP(mdev, cap)\ 1135dc7e38acSHans Petter Selasky MLX5_GET(odp_cap, mdev->hca_caps_cur[MLX5_CAP_ODP], cap) 1136dc7e38acSHans Petter Selasky 1137dc7e38acSHans Petter Selasky #define MLX5_CAP_ODP_MAX(mdev, cap)\ 1138dc7e38acSHans Petter Selasky MLX5_GET(odp_cap, mdev->hca_caps_max[MLX5_CAP_ODP], cap) 1139dc7e38acSHans Petter Selasky 1140dc7e38acSHans Petter Selasky enum { 1141dc7e38acSHans Petter Selasky MLX5_CMD_STAT_OK = 0x0, 1142dc7e38acSHans Petter Selasky MLX5_CMD_STAT_INT_ERR = 0x1, 1143dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_OP_ERR = 0x2, 1144dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_PARAM_ERR = 0x3, 1145dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_SYS_STATE_ERR = 0x4, 1146dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_RES_ERR = 0x5, 1147dc7e38acSHans Petter Selasky MLX5_CMD_STAT_RES_BUSY = 0x6, 1148dc7e38acSHans Petter Selasky MLX5_CMD_STAT_LIM_ERR = 0x8, 1149dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_RES_STATE_ERR = 0x9, 1150dc7e38acSHans Petter Selasky MLX5_CMD_STAT_IX_ERR = 0xa, 1151dc7e38acSHans Petter Selasky MLX5_CMD_STAT_NO_RES_ERR = 0xf, 1152dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_INP_LEN_ERR = 0x50, 1153dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_OUTP_LEN_ERR = 0x51, 1154dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_QP_STATE_ERR = 0x10, 1155dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_PKT_ERR = 0x30, 1156dc7e38acSHans Petter Selasky MLX5_CMD_STAT_BAD_SIZE_OUTS_CQES_ERR = 0x40, 1157dc7e38acSHans Petter Selasky }; 1158dc7e38acSHans Petter Selasky 1159dc7e38acSHans Petter Selasky enum { 1160dc7e38acSHans Petter Selasky MLX5_IEEE_802_3_COUNTERS_GROUP = 0x0, 1161dc7e38acSHans Petter Selasky MLX5_RFC_2863_COUNTERS_GROUP = 0x1, 1162dc7e38acSHans Petter Selasky MLX5_RFC_2819_COUNTERS_GROUP = 0x2, 1163dc7e38acSHans Petter Selasky MLX5_RFC_3635_COUNTERS_GROUP = 0x3, 1164dc7e38acSHans Petter Selasky MLX5_ETHERNET_EXTENDED_COUNTERS_GROUP = 0x5, 1165dc7e38acSHans Petter Selasky MLX5_PER_PRIORITY_COUNTERS_GROUP = 0x10, 1166dc7e38acSHans Petter Selasky MLX5_PER_TRAFFIC_CLASS_COUNTERS_GROUP = 0x11, 1167dc7e38acSHans Petter Selasky MLX5_PHYSICAL_LAYER_COUNTERS_GROUP = 0x12, 1168dc7e38acSHans Petter Selasky }; 1169dc7e38acSHans Petter Selasky 1170dc7e38acSHans Petter Selasky enum { 1171dc7e38acSHans Petter Selasky MLX5_CAP_PORT_TYPE_IB = 0x0, 1172dc7e38acSHans Petter Selasky MLX5_CAP_PORT_TYPE_ETH = 0x1, 1173dc7e38acSHans Petter Selasky }; 1174dc7e38acSHans Petter Selasky 1175dc7e38acSHans Petter Selasky enum { 1176dc7e38acSHans Petter Selasky MLX5_CMD_HCA_CAP_MIN_WQE_INLINE_MODE_L2 = 0x0, 1177dc7e38acSHans Petter Selasky MLX5_CMD_HCA_CAP_MIN_WQE_INLINE_MODE_VPORT_CONFIG = 0x1, 1178dc7e38acSHans Petter Selasky MLX5_CMD_HCA_CAP_MIN_WQE_INLINE_MODE_NOT_REQUIRED = 0x2 1179dc7e38acSHans Petter Selasky }; 1180dc7e38acSHans Petter Selasky 1181dc7e38acSHans Petter Selasky enum { 1182dc7e38acSHans Petter Selasky MLX5_QUERY_VPORT_STATE_OUT_STATE_FOLLOW = 0x2, 1183dc7e38acSHans Petter Selasky }; 1184dc7e38acSHans Petter Selasky 1185dc7e38acSHans Petter Selasky static inline u16 mlx5_to_sw_pkey_sz(int pkey_sz) 1186dc7e38acSHans Petter Selasky { 1187dc7e38acSHans Petter Selasky if (pkey_sz > MLX5_MAX_LOG_PKEY_TABLE) 1188dc7e38acSHans Petter Selasky return 0; 1189dc7e38acSHans Petter Selasky return MLX5_MIN_PKEY_TABLE_SIZE << pkey_sz; 1190dc7e38acSHans Petter Selasky } 1191dc7e38acSHans Petter Selasky 1192dc7e38acSHans Petter Selasky struct mlx5_ifc_mcia_reg_bits { 1193dc7e38acSHans Petter Selasky u8 l[0x1]; 1194dc7e38acSHans Petter Selasky u8 reserved_0[0x7]; 1195dc7e38acSHans Petter Selasky u8 module[0x8]; 1196dc7e38acSHans Petter Selasky u8 reserved_1[0x8]; 1197dc7e38acSHans Petter Selasky u8 status[0x8]; 1198dc7e38acSHans Petter Selasky 1199dc7e38acSHans Petter Selasky u8 i2c_device_address[0x8]; 1200dc7e38acSHans Petter Selasky u8 page_number[0x8]; 1201dc7e38acSHans Petter Selasky u8 device_address[0x10]; 1202dc7e38acSHans Petter Selasky 1203dc7e38acSHans Petter Selasky u8 reserved_2[0x10]; 1204dc7e38acSHans Petter Selasky u8 size[0x10]; 1205dc7e38acSHans Petter Selasky 1206dc7e38acSHans Petter Selasky u8 reserved_3[0x20]; 1207dc7e38acSHans Petter Selasky 1208dc7e38acSHans Petter Selasky u8 dword_0[0x20]; 1209dc7e38acSHans Petter Selasky u8 dword_1[0x20]; 1210dc7e38acSHans Petter Selasky u8 dword_2[0x20]; 1211dc7e38acSHans Petter Selasky u8 dword_3[0x20]; 1212dc7e38acSHans Petter Selasky u8 dword_4[0x20]; 1213dc7e38acSHans Petter Selasky u8 dword_5[0x20]; 1214dc7e38acSHans Petter Selasky u8 dword_6[0x20]; 1215dc7e38acSHans Petter Selasky u8 dword_7[0x20]; 1216dc7e38acSHans Petter Selasky u8 dword_8[0x20]; 1217dc7e38acSHans Petter Selasky u8 dword_9[0x20]; 1218dc7e38acSHans Petter Selasky u8 dword_10[0x20]; 1219dc7e38acSHans Petter Selasky u8 dword_11[0x20]; 1220dc7e38acSHans Petter Selasky }; 1221dc7e38acSHans Petter Selasky 1222dc7e38acSHans Petter Selasky #define MLX5_CMD_OP_QUERY_EEPROM 0x93c 1223*90cc1c77SHans Petter Selasky 1224*90cc1c77SHans Petter Selasky struct mlx5_mini_cqe8 { 1225*90cc1c77SHans Petter Selasky union { 1226*90cc1c77SHans Petter Selasky u32 rx_hash_result; 1227*90cc1c77SHans Petter Selasky u32 checksum; 1228*90cc1c77SHans Petter Selasky struct { 1229*90cc1c77SHans Petter Selasky u16 wqe_counter; 1230*90cc1c77SHans Petter Selasky u8 s_wqe_opcode; 1231*90cc1c77SHans Petter Selasky u8 reserved; 1232*90cc1c77SHans Petter Selasky } s_wqe_info; 1233*90cc1c77SHans Petter Selasky }; 1234*90cc1c77SHans Petter Selasky u32 byte_cnt; 1235*90cc1c77SHans Petter Selasky }; 1236*90cc1c77SHans Petter Selasky 1237*90cc1c77SHans Petter Selasky enum { 1238*90cc1c77SHans Petter Selasky MLX5_NO_INLINE_DATA, 1239*90cc1c77SHans Petter Selasky MLX5_INLINE_DATA32_SEG, 1240*90cc1c77SHans Petter Selasky MLX5_INLINE_DATA64_SEG, 1241*90cc1c77SHans Petter Selasky MLX5_COMPRESSED, 1242*90cc1c77SHans Petter Selasky }; 1243*90cc1c77SHans Petter Selasky 1244*90cc1c77SHans Petter Selasky enum mlx5_exp_cqe_zip_recv_type { 1245*90cc1c77SHans Petter Selasky MLX5_CQE_FORMAT_HASH, 1246*90cc1c77SHans Petter Selasky MLX5_CQE_FORMAT_CSUM, 1247*90cc1c77SHans Petter Selasky }; 1248*90cc1c77SHans Petter Selasky 1249*90cc1c77SHans Petter Selasky #define MLX5E_CQE_FORMAT_MASK 0xc 1250*90cc1c77SHans Petter Selasky static inline int mlx5_get_cqe_format(const struct mlx5_cqe64 *cqe) 1251*90cc1c77SHans Petter Selasky { 1252*90cc1c77SHans Petter Selasky return (cqe->op_own & MLX5E_CQE_FORMAT_MASK) >> 2; 1253*90cc1c77SHans Petter Selasky } 1254*90cc1c77SHans Petter Selasky 1255dc7e38acSHans Petter Selasky #endif /* MLX5_DEVICE_H */ 1256