1*d6b92ffaSHans Petter Selasky /* 2*d6b92ffaSHans Petter Selasky * Copyright (c) 2012 Mellanox Technologies, Inc. All rights reserved. 3*d6b92ffaSHans Petter Selasky * 4*d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two 5*d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU 6*d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file 7*d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the 8*d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below: 9*d6b92ffaSHans Petter Selasky * 10*d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or 11*d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following 12*d6b92ffaSHans Petter Selasky * conditions are met: 13*d6b92ffaSHans Petter Selasky * 14*d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above 15*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 16*d6b92ffaSHans Petter Selasky * disclaimer. 17*d6b92ffaSHans Petter Selasky * 18*d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above 19*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 20*d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials 21*d6b92ffaSHans Petter Selasky * provided with the distribution. 22*d6b92ffaSHans Petter Selasky * 23*d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24*d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25*d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26*d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27*d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28*d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29*d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30*d6b92ffaSHans Petter Selasky * SOFTWARE. 31*d6b92ffaSHans Petter Selasky */ 32*d6b92ffaSHans Petter Selasky 33*d6b92ffaSHans Petter Selasky #ifndef WQE_H 34*d6b92ffaSHans Petter Selasky #define WQE_H 35*d6b92ffaSHans Petter Selasky 36*d6b92ffaSHans Petter Selasky #include <stdint.h> 37*d6b92ffaSHans Petter Selasky 38*d6b92ffaSHans Petter Selasky struct mlx5_sg_copy_ptr { 39*d6b92ffaSHans Petter Selasky int index; 40*d6b92ffaSHans Petter Selasky int offset; 41*d6b92ffaSHans Petter Selasky }; 42*d6b92ffaSHans Petter Selasky 43*d6b92ffaSHans Petter Selasky struct mlx5_eqe_comp { 44*d6b92ffaSHans Petter Selasky uint32_t reserved[6]; 45*d6b92ffaSHans Petter Selasky uint32_t cqn; 46*d6b92ffaSHans Petter Selasky }; 47*d6b92ffaSHans Petter Selasky 48*d6b92ffaSHans Petter Selasky struct mlx5_eqe_qp_srq { 49*d6b92ffaSHans Petter Selasky uint32_t reserved[6]; 50*d6b92ffaSHans Petter Selasky uint32_t qp_srq_n; 51*d6b92ffaSHans Petter Selasky }; 52*d6b92ffaSHans Petter Selasky 53*d6b92ffaSHans Petter Selasky struct mlx5_wqe_xrc_seg { 54*d6b92ffaSHans Petter Selasky uint32_t xrc_srqn; 55*d6b92ffaSHans Petter Selasky uint8_t rsvd[12]; 56*d6b92ffaSHans Petter Selasky }; 57*d6b92ffaSHans Petter Selasky 58*d6b92ffaSHans Petter Selasky struct mlx5_wqe_masked_atomic_seg { 59*d6b92ffaSHans Petter Selasky uint64_t swap_add; 60*d6b92ffaSHans Petter Selasky uint64_t compare; 61*d6b92ffaSHans Petter Selasky uint64_t swap_add_mask; 62*d6b92ffaSHans Petter Selasky uint64_t compare_mask; 63*d6b92ffaSHans Petter Selasky }; 64*d6b92ffaSHans Petter Selasky 65*d6b92ffaSHans Petter Selasky enum { 66*d6b92ffaSHans Petter Selasky MLX5_ETH_L2_INLINE_HEADER_SIZE = 18, 67*d6b92ffaSHans Petter Selasky MLX5_ETH_L2_MIN_HEADER_SIZE = 14, 68*d6b92ffaSHans Petter Selasky }; 69*d6b92ffaSHans Petter Selasky 70*d6b92ffaSHans Petter Selasky enum { 71*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_FLAG_INLINE = 1 << 7, 72*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_FLAG_CHECK_FREE = 1 << 5, 73*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_FLAG_TRNSLATION_OFFSET = 1 << 4, 74*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_FLAG_CHECK_QPN = 1 << 3, 75*d6b92ffaSHans Petter Selasky }; 76*d6b92ffaSHans Petter Selasky 77*d6b92ffaSHans Petter Selasky enum { 78*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_LEN = 1 << 0, 79*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_START_ADDR = 1 << 6, 80*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_MKEY = 1 << 13, 81*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_QPN = 1 << 14, 82*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_LOCAL_WRITE = 1 << 18, 83*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_REMOTE_READ = 1 << 19, 84*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_REMOTE_WRITE = 1 << 20, 85*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_ATOMIC = 1 << 21, 86*d6b92ffaSHans Petter Selasky MLX5_WQE_UMR_CTRL_MKEY_MASK_FREE = 1 << 29, 87*d6b92ffaSHans Petter Selasky }; 88*d6b92ffaSHans Petter Selasky 89*d6b92ffaSHans Petter Selasky struct mlx5_wqe_umr_ctrl_seg { 90*d6b92ffaSHans Petter Selasky uint8_t flags; 91*d6b92ffaSHans Petter Selasky uint8_t rsvd0[3]; 92*d6b92ffaSHans Petter Selasky uint16_t klm_octowords; 93*d6b92ffaSHans Petter Selasky uint16_t translation_offset; 94*d6b92ffaSHans Petter Selasky uint64_t mkey_mask; 95*d6b92ffaSHans Petter Selasky uint8_t rsvd1[32]; 96*d6b92ffaSHans Petter Selasky }; 97*d6b92ffaSHans Petter Selasky 98*d6b92ffaSHans Petter Selasky struct mlx5_wqe_umr_klm_seg { 99*d6b92ffaSHans Petter Selasky /* up to 2GB */ 100*d6b92ffaSHans Petter Selasky uint32_t byte_count; 101*d6b92ffaSHans Petter Selasky uint32_t mkey; 102*d6b92ffaSHans Petter Selasky uint64_t address; 103*d6b92ffaSHans Petter Selasky }; 104*d6b92ffaSHans Petter Selasky 105*d6b92ffaSHans Petter Selasky union mlx5_wqe_umr_inline_seg { 106*d6b92ffaSHans Petter Selasky struct mlx5_wqe_umr_klm_seg klm; 107*d6b92ffaSHans Petter Selasky }; 108*d6b92ffaSHans Petter Selasky 109*d6b92ffaSHans Petter Selasky enum { 110*d6b92ffaSHans Petter Selasky MLX5_WQE_MKEY_CONTEXT_FREE = 1 << 6 111*d6b92ffaSHans Petter Selasky }; 112*d6b92ffaSHans Petter Selasky 113*d6b92ffaSHans Petter Selasky enum { 114*d6b92ffaSHans Petter Selasky MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_ATOMIC = 1 << 6, 115*d6b92ffaSHans Petter Selasky MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_REMOTE_WRITE = 1 << 5, 116*d6b92ffaSHans Petter Selasky MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_REMOTE_READ = 1 << 4, 117*d6b92ffaSHans Petter Selasky MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_LOCAL_WRITE = 1 << 3, 118*d6b92ffaSHans Petter Selasky MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_LOCAL_READ = 1 << 2 119*d6b92ffaSHans Petter Selasky }; 120*d6b92ffaSHans Petter Selasky 121*d6b92ffaSHans Petter Selasky struct mlx5_wqe_mkey_context_seg { 122*d6b92ffaSHans Petter Selasky uint8_t free; 123*d6b92ffaSHans Petter Selasky uint8_t reserved1; 124*d6b92ffaSHans Petter Selasky uint8_t access_flags; 125*d6b92ffaSHans Petter Selasky uint8_t sf; 126*d6b92ffaSHans Petter Selasky uint32_t qpn_mkey; 127*d6b92ffaSHans Petter Selasky uint32_t reserved2; 128*d6b92ffaSHans Petter Selasky uint32_t flags_pd; 129*d6b92ffaSHans Petter Selasky uint64_t start_addr; 130*d6b92ffaSHans Petter Selasky uint64_t len; 131*d6b92ffaSHans Petter Selasky uint32_t bsf_octword_size; 132*d6b92ffaSHans Petter Selasky uint32_t reserved3[4]; 133*d6b92ffaSHans Petter Selasky uint32_t translations_octword_size; 134*d6b92ffaSHans Petter Selasky uint8_t reserved4[3]; 135*d6b92ffaSHans Petter Selasky uint8_t log_page_size; 136*d6b92ffaSHans Petter Selasky uint32_t reserved; 137*d6b92ffaSHans Petter Selasky union mlx5_wqe_umr_inline_seg inseg[0]; 138*d6b92ffaSHans Petter Selasky }; 139*d6b92ffaSHans Petter Selasky 140*d6b92ffaSHans Petter Selasky struct mlx5_seg_set_psv { 141*d6b92ffaSHans Petter Selasky uint8_t rsvd[4]; 142*d6b92ffaSHans Petter Selasky uint16_t syndrome; 143*d6b92ffaSHans Petter Selasky uint16_t status; 144*d6b92ffaSHans Petter Selasky uint16_t block_guard; 145*d6b92ffaSHans Petter Selasky uint16_t app_tag; 146*d6b92ffaSHans Petter Selasky uint32_t ref_tag; 147*d6b92ffaSHans Petter Selasky uint32_t mkey; 148*d6b92ffaSHans Petter Selasky uint64_t va; 149*d6b92ffaSHans Petter Selasky }; 150*d6b92ffaSHans Petter Selasky 151*d6b92ffaSHans Petter Selasky struct mlx5_seg_get_psv { 152*d6b92ffaSHans Petter Selasky uint8_t rsvd[19]; 153*d6b92ffaSHans Petter Selasky uint8_t num_psv; 154*d6b92ffaSHans Petter Selasky uint32_t l_key; 155*d6b92ffaSHans Petter Selasky uint64_t va; 156*d6b92ffaSHans Petter Selasky uint32_t psv_index[4]; 157*d6b92ffaSHans Petter Selasky }; 158*d6b92ffaSHans Petter Selasky 159*d6b92ffaSHans Petter Selasky struct mlx5_seg_check_psv { 160*d6b92ffaSHans Petter Selasky uint8_t rsvd0[2]; 161*d6b92ffaSHans Petter Selasky uint16_t err_coalescing_op; 162*d6b92ffaSHans Petter Selasky uint8_t rsvd1[2]; 163*d6b92ffaSHans Petter Selasky uint16_t xport_err_op; 164*d6b92ffaSHans Petter Selasky uint8_t rsvd2[2]; 165*d6b92ffaSHans Petter Selasky uint16_t xport_err_mask; 166*d6b92ffaSHans Petter Selasky uint8_t rsvd3[7]; 167*d6b92ffaSHans Petter Selasky uint8_t num_psv; 168*d6b92ffaSHans Petter Selasky uint32_t l_key; 169*d6b92ffaSHans Petter Selasky uint64_t va; 170*d6b92ffaSHans Petter Selasky uint32_t psv_index[4]; 171*d6b92ffaSHans Petter Selasky }; 172*d6b92ffaSHans Petter Selasky 173*d6b92ffaSHans Petter Selasky struct mlx5_rwqe_sig { 174*d6b92ffaSHans Petter Selasky uint8_t rsvd0[4]; 175*d6b92ffaSHans Petter Selasky uint8_t signature; 176*d6b92ffaSHans Petter Selasky uint8_t rsvd1[11]; 177*d6b92ffaSHans Petter Selasky }; 178*d6b92ffaSHans Petter Selasky 179*d6b92ffaSHans Petter Selasky struct mlx5_wqe_signature_seg { 180*d6b92ffaSHans Petter Selasky uint8_t rsvd0[4]; 181*d6b92ffaSHans Petter Selasky uint8_t signature; 182*d6b92ffaSHans Petter Selasky uint8_t rsvd1[11]; 183*d6b92ffaSHans Petter Selasky }; 184*d6b92ffaSHans Petter Selasky 185*d6b92ffaSHans Petter Selasky struct mlx5_wqe_inline_seg { 186*d6b92ffaSHans Petter Selasky uint32_t byte_count; 187*d6b92ffaSHans Petter Selasky }; 188*d6b92ffaSHans Petter Selasky 189*d6b92ffaSHans Petter Selasky 190*d6b92ffaSHans Petter Selasky #endif /* WQE_H */ 191