1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Broadcom NetXtreme-E RoCE driver. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (c) 2016 - 2017, Broadcom. All rights reserved. The term 5*4882a593Smuzhiyun * Broadcom refers to Broadcom Limited and/or its subsidiaries. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * This software is available to you under a choice of one of two 8*4882a593Smuzhiyun * licenses. You may choose to be licensed under the terms of the GNU 9*4882a593Smuzhiyun * General Public License (GPL) Version 2, available from the file 10*4882a593Smuzhiyun * COPYING in the main directory of this source tree, or the 11*4882a593Smuzhiyun * BSD license below: 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 14*4882a593Smuzhiyun * modification, are permitted provided that the following conditions 15*4882a593Smuzhiyun * are met: 16*4882a593Smuzhiyun * 17*4882a593Smuzhiyun * 1. Redistributions of source code must retain the above copyright 18*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer. 19*4882a593Smuzhiyun * 2. Redistributions in binary form must reproduce the above copyright 20*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in 21*4882a593Smuzhiyun * the documentation and/or other materials provided with the 22*4882a593Smuzhiyun * distribution. 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' 25*4882a593Smuzhiyun * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 26*4882a593Smuzhiyun * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 27*4882a593Smuzhiyun * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS 28*4882a593Smuzhiyun * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29*4882a593Smuzhiyun * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30*4882a593Smuzhiyun * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 31*4882a593Smuzhiyun * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 32*4882a593Smuzhiyun * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 33*4882a593Smuzhiyun * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 34*4882a593Smuzhiyun * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35*4882a593Smuzhiyun * 36*4882a593Smuzhiyun * Description: RoCE HSI File - Autogenerated 37*4882a593Smuzhiyun */ 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #ifndef __BNXT_RE_HSI_H__ 40*4882a593Smuzhiyun #define __BNXT_RE_HSI_H__ 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /* include bnxt_hsi.h from bnxt_en driver */ 43*4882a593Smuzhiyun #include "bnxt_hsi.h" 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* CMP Door Bell Format (4 bytes) */ 46*4882a593Smuzhiyun struct cmpl_doorbell { 47*4882a593Smuzhiyun __le32 key_mask_valid_idx; 48*4882a593Smuzhiyun #define CMPL_DOORBELL_IDX_MASK 0xffffffUL 49*4882a593Smuzhiyun #define CMPL_DOORBELL_IDX_SFT 0 50*4882a593Smuzhiyun #define CMPL_DOORBELL_RESERVED_MASK 0x3000000UL 51*4882a593Smuzhiyun #define CMPL_DOORBELL_RESERVED_SFT 24 52*4882a593Smuzhiyun #define CMPL_DOORBELL_IDX_VALID 0x4000000UL 53*4882a593Smuzhiyun #define CMPL_DOORBELL_MASK 0x8000000UL 54*4882a593Smuzhiyun #define CMPL_DOORBELL_KEY_MASK 0xf0000000UL 55*4882a593Smuzhiyun #define CMPL_DOORBELL_KEY_SFT 28 56*4882a593Smuzhiyun #define CMPL_DOORBELL_KEY_CMPL (0x2UL << 28) 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* Status Door Bell Format (4 bytes) */ 60*4882a593Smuzhiyun struct status_doorbell { 61*4882a593Smuzhiyun __le32 key_idx; 62*4882a593Smuzhiyun #define STATUS_DOORBELL_IDX_MASK 0xffffffUL 63*4882a593Smuzhiyun #define STATUS_DOORBELL_IDX_SFT 0 64*4882a593Smuzhiyun #define STATUS_DOORBELL_RESERVED_MASK 0xf000000UL 65*4882a593Smuzhiyun #define STATUS_DOORBELL_RESERVED_SFT 24 66*4882a593Smuzhiyun #define STATUS_DOORBELL_KEY_MASK 0xf0000000UL 67*4882a593Smuzhiyun #define STATUS_DOORBELL_KEY_SFT 28 68*4882a593Smuzhiyun #define STATUS_DOORBELL_KEY_STAT (0x3UL << 28) 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* RoCE Host Structures */ 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* Doorbell Structures */ 74*4882a593Smuzhiyun /* dbc_dbc (size:64b/8B) */ 75*4882a593Smuzhiyun struct dbc_dbc { 76*4882a593Smuzhiyun __le32 index; 77*4882a593Smuzhiyun #define DBC_DBC_INDEX_MASK 0xffffffUL 78*4882a593Smuzhiyun #define DBC_DBC_INDEX_SFT 0 79*4882a593Smuzhiyun __le32 type_path_xid; 80*4882a593Smuzhiyun #define DBC_DBC_XID_MASK 0xfffffUL 81*4882a593Smuzhiyun #define DBC_DBC_XID_SFT 0 82*4882a593Smuzhiyun #define DBC_DBC_PATH_MASK 0x3000000UL 83*4882a593Smuzhiyun #define DBC_DBC_PATH_SFT 24 84*4882a593Smuzhiyun #define DBC_DBC_PATH_ROCE (0x0UL << 24) 85*4882a593Smuzhiyun #define DBC_DBC_PATH_L2 (0x1UL << 24) 86*4882a593Smuzhiyun #define DBC_DBC_PATH_ENGINE (0x2UL << 24) 87*4882a593Smuzhiyun #define DBC_DBC_PATH_LAST DBC_DBC_PATH_ENGINE 88*4882a593Smuzhiyun #define DBC_DBC_DEBUG_TRACE 0x8000000UL 89*4882a593Smuzhiyun #define DBC_DBC_TYPE_MASK 0xf0000000UL 90*4882a593Smuzhiyun #define DBC_DBC_TYPE_SFT 28 91*4882a593Smuzhiyun #define DBC_DBC_TYPE_SQ (0x0UL << 28) 92*4882a593Smuzhiyun #define DBC_DBC_TYPE_RQ (0x1UL << 28) 93*4882a593Smuzhiyun #define DBC_DBC_TYPE_SRQ (0x2UL << 28) 94*4882a593Smuzhiyun #define DBC_DBC_TYPE_SRQ_ARM (0x3UL << 28) 95*4882a593Smuzhiyun #define DBC_DBC_TYPE_CQ (0x4UL << 28) 96*4882a593Smuzhiyun #define DBC_DBC_TYPE_CQ_ARMSE (0x5UL << 28) 97*4882a593Smuzhiyun #define DBC_DBC_TYPE_CQ_ARMALL (0x6UL << 28) 98*4882a593Smuzhiyun #define DBC_DBC_TYPE_CQ_ARMENA (0x7UL << 28) 99*4882a593Smuzhiyun #define DBC_DBC_TYPE_SRQ_ARMENA (0x8UL << 28) 100*4882a593Smuzhiyun #define DBC_DBC_TYPE_CQ_CUTOFF_ACK (0x9UL << 28) 101*4882a593Smuzhiyun #define DBC_DBC_TYPE_NQ (0xaUL << 28) 102*4882a593Smuzhiyun #define DBC_DBC_TYPE_NQ_ARM (0xbUL << 28) 103*4882a593Smuzhiyun #define DBC_DBC_TYPE_NULL (0xfUL << 28) 104*4882a593Smuzhiyun #define DBC_DBC_TYPE_LAST DBC_DBC_TYPE_NULL 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun /* dbc_dbc32 (size:32b/4B) */ 108*4882a593Smuzhiyun struct dbc_dbc32 { 109*4882a593Smuzhiyun __le32 type_abs_incr_xid; 110*4882a593Smuzhiyun #define DBC_DBC32_XID_MASK 0xfffffUL 111*4882a593Smuzhiyun #define DBC_DBC32_XID_SFT 0 112*4882a593Smuzhiyun #define DBC_DBC32_PATH_MASK 0xc00000UL 113*4882a593Smuzhiyun #define DBC_DBC32_PATH_SFT 22 114*4882a593Smuzhiyun #define DBC_DBC32_PATH_ROCE (0x0UL << 22) 115*4882a593Smuzhiyun #define DBC_DBC32_PATH_L2 (0x1UL << 22) 116*4882a593Smuzhiyun #define DBC_DBC32_PATH_LAST DBC_DBC32_PATH_L2 117*4882a593Smuzhiyun #define DBC_DBC32_INCR_MASK 0xf000000UL 118*4882a593Smuzhiyun #define DBC_DBC32_INCR_SFT 24 119*4882a593Smuzhiyun #define DBC_DBC32_ABS 0x10000000UL 120*4882a593Smuzhiyun #define DBC_DBC32_TYPE_MASK 0xe0000000UL 121*4882a593Smuzhiyun #define DBC_DBC32_TYPE_SFT 29 122*4882a593Smuzhiyun #define DBC_DBC32_TYPE_SQ (0x0UL << 29) 123*4882a593Smuzhiyun #define DBC_DBC32_TYPE_LAST DBC_DBC32_TYPE_SQ 124*4882a593Smuzhiyun }; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun /* SQ WQE Structures */ 127*4882a593Smuzhiyun /* Base SQ WQE (8 bytes) */ 128*4882a593Smuzhiyun struct sq_base { 129*4882a593Smuzhiyun u8 wqe_type; 130*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_SEND 0x0UL 131*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_SEND_W_IMMEAD 0x1UL 132*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_SEND_W_INVALID 0x2UL 133*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_WRITE_WQE 0x4UL 134*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_WRITE_W_IMMEAD 0x5UL 135*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_READ_WQE 0x6UL 136*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_ATOMIC_CS 0x8UL 137*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_ATOMIC_FA 0xbUL 138*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_LOCAL_INVALID 0xcUL 139*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_FR_PMR 0xdUL 140*4882a593Smuzhiyun #define SQ_BASE_WQE_TYPE_BIND 0xeUL 141*4882a593Smuzhiyun u8 unused_0[7]; 142*4882a593Smuzhiyun }; 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun /* WQE SGE (16 bytes) */ 145*4882a593Smuzhiyun struct sq_sge { 146*4882a593Smuzhiyun __le64 va_or_pa; 147*4882a593Smuzhiyun __le32 l_key; 148*4882a593Smuzhiyun __le32 size; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* PSN Search Structure (8 bytes) */ 152*4882a593Smuzhiyun struct sq_psn_search { 153*4882a593Smuzhiyun __le32 opcode_start_psn; 154*4882a593Smuzhiyun #define SQ_PSN_SEARCH_START_PSN_MASK 0xffffffUL 155*4882a593Smuzhiyun #define SQ_PSN_SEARCH_START_PSN_SFT 0 156*4882a593Smuzhiyun #define SQ_PSN_SEARCH_OPCODE_MASK 0xff000000UL 157*4882a593Smuzhiyun #define SQ_PSN_SEARCH_OPCODE_SFT 24 158*4882a593Smuzhiyun __le32 flags_next_psn; 159*4882a593Smuzhiyun #define SQ_PSN_SEARCH_NEXT_PSN_MASK 0xffffffUL 160*4882a593Smuzhiyun #define SQ_PSN_SEARCH_NEXT_PSN_SFT 0 161*4882a593Smuzhiyun #define SQ_PSN_SEARCH_FLAGS_MASK 0xff000000UL 162*4882a593Smuzhiyun #define SQ_PSN_SEARCH_FLAGS_SFT 24 163*4882a593Smuzhiyun }; 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun /* sq_psn_search_ext (size:128b/16B) */ 166*4882a593Smuzhiyun struct sq_psn_search_ext { 167*4882a593Smuzhiyun __le32 opcode_start_psn; 168*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_START_PSN_MASK 0xffffffUL 169*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_START_PSN_SFT 0 170*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_OPCODE_MASK 0xff000000UL 171*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_OPCODE_SFT 24 172*4882a593Smuzhiyun __le32 flags_next_psn; 173*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_NEXT_PSN_MASK 0xffffffUL 174*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_NEXT_PSN_SFT 0 175*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_FLAGS_MASK 0xff000000UL 176*4882a593Smuzhiyun #define SQ_PSN_SEARCH_EXT_FLAGS_SFT 24 177*4882a593Smuzhiyun __le16 start_slot_idx; 178*4882a593Smuzhiyun __le16 reserved16; 179*4882a593Smuzhiyun __le32 reserved32; 180*4882a593Smuzhiyun }; 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun /* Send SQ WQE (40 bytes) */ 183*4882a593Smuzhiyun struct sq_send { 184*4882a593Smuzhiyun u8 wqe_type; 185*4882a593Smuzhiyun #define SQ_SEND_WQE_TYPE_SEND 0x0UL 186*4882a593Smuzhiyun #define SQ_SEND_WQE_TYPE_SEND_W_IMMEAD 0x1UL 187*4882a593Smuzhiyun #define SQ_SEND_WQE_TYPE_SEND_W_INVALID 0x2UL 188*4882a593Smuzhiyun u8 flags; 189*4882a593Smuzhiyun #define SQ_SEND_FLAGS_SIGNAL_COMP 0x1UL 190*4882a593Smuzhiyun #define SQ_SEND_FLAGS_RD_OR_ATOMIC_FENCE 0x2UL 191*4882a593Smuzhiyun #define SQ_SEND_FLAGS_UC_FENCE 0x4UL 192*4882a593Smuzhiyun #define SQ_SEND_FLAGS_SE 0x8UL 193*4882a593Smuzhiyun #define SQ_SEND_FLAGS_INLINE 0x10UL 194*4882a593Smuzhiyun u8 wqe_size; 195*4882a593Smuzhiyun u8 reserved8_1; 196*4882a593Smuzhiyun __le32 inv_key_or_imm_data; 197*4882a593Smuzhiyun __le32 length; 198*4882a593Smuzhiyun __le32 q_key; 199*4882a593Smuzhiyun __le32 dst_qp; 200*4882a593Smuzhiyun #define SQ_SEND_DST_QP_MASK 0xffffffUL 201*4882a593Smuzhiyun #define SQ_SEND_DST_QP_SFT 0 202*4882a593Smuzhiyun #define SQ_SEND_RESERVED8_2_MASK 0xff000000UL 203*4882a593Smuzhiyun #define SQ_SEND_RESERVED8_2_SFT 24 204*4882a593Smuzhiyun __le32 avid; 205*4882a593Smuzhiyun #define SQ_SEND_AVID_MASK 0xfffffUL 206*4882a593Smuzhiyun #define SQ_SEND_AVID_SFT 0 207*4882a593Smuzhiyun #define SQ_SEND_RESERVED_AVID_MASK 0xfff00000UL 208*4882a593Smuzhiyun #define SQ_SEND_RESERVED_AVID_SFT 20 209*4882a593Smuzhiyun __le64 reserved64; 210*4882a593Smuzhiyun __le32 data[24]; 211*4882a593Smuzhiyun }; 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun /* sq_send_hdr (size:256b/32B) */ 214*4882a593Smuzhiyun struct sq_send_hdr { 215*4882a593Smuzhiyun u8 wqe_type; 216*4882a593Smuzhiyun u8 flags; 217*4882a593Smuzhiyun u8 wqe_size; 218*4882a593Smuzhiyun u8 reserved8_1; 219*4882a593Smuzhiyun __le32 inv_key_or_imm_data; 220*4882a593Smuzhiyun __le32 length; 221*4882a593Smuzhiyun __le32 q_key; 222*4882a593Smuzhiyun __le32 dst_qp; 223*4882a593Smuzhiyun __le32 avid; 224*4882a593Smuzhiyun __le64 reserved64; 225*4882a593Smuzhiyun }; 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun /* Send Raw Ethernet and QP1 SQ WQE (40 bytes) */ 228*4882a593Smuzhiyun struct sq_send_raweth_qp1 { 229*4882a593Smuzhiyun u8 wqe_type; 230*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_WQE_TYPE_SEND 0x0UL 231*4882a593Smuzhiyun u8 flags; 232*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_FLAGS_SIGNAL_COMP 0x1UL 233*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_FLAGS_RD_OR_ATOMIC_FENCE 0x2UL 234*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_FLAGS_UC_FENCE 0x4UL 235*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_FLAGS_SE 0x8UL 236*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_FLAGS_INLINE 0x10UL 237*4882a593Smuzhiyun u8 wqe_size; 238*4882a593Smuzhiyun u8 reserved8; 239*4882a593Smuzhiyun __le16 lflags; 240*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_TCP_UDP_CHKSUM 0x1UL 241*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_IP_CHKSUM 0x2UL 242*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_NOCRC 0x4UL 243*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_STAMP 0x8UL 244*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_T_IP_CHKSUM 0x10UL 245*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_RESERVED1_1 0x20UL 246*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_RESERVED1_2 0x40UL 247*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_RESERVED1_3 0x80UL 248*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_ROCE_CRC 0x100UL 249*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_LFLAGS_FCOE_CRC 0x200UL 250*4882a593Smuzhiyun __le16 cfa_action; 251*4882a593Smuzhiyun __le32 length; 252*4882a593Smuzhiyun __le32 reserved32_1; 253*4882a593Smuzhiyun __le32 cfa_meta; 254*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_VID_MASK 0xfffUL 255*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_VID_SFT 0 256*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_DE 0x1000UL 257*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_PRI_MASK 0xe000UL 258*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_PRI_SFT 13 259*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_MASK 0x70000UL 260*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_SFT 16 261*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_TPID88A8 (0x0UL << 16) 262*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_TPID8100 (0x1UL << 16) 263*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_TPID9100 (0x2UL << 16) 264*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_TPID9200 (0x3UL << 16) 265*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_TPID9300 (0x4UL << 16) 266*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_TPIDCFG (0x5UL << 16) 267*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_LAST \ 268*4882a593Smuzhiyun SQ_SEND_RAWETH_QP1_CFA_META_VLAN_TPID_TPIDCFG 269*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_RESERVED_MASK 0xff80000UL 270*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_VLAN_RESERVED_SFT 19 271*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_KEY_MASK 0xf0000000UL 272*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_KEY_SFT 28 273*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_KEY_NONE (0x0UL << 28) 274*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_KEY_VLAN_TAG (0x1UL << 28) 275*4882a593Smuzhiyun #define SQ_SEND_RAWETH_QP1_CFA_META_KEY_LAST \ 276*4882a593Smuzhiyun SQ_SEND_RAWETH_QP1_CFA_META_KEY_VLAN_TAG 277*4882a593Smuzhiyun __le32 reserved32_2; 278*4882a593Smuzhiyun __le64 reserved64; 279*4882a593Smuzhiyun __le32 data[24]; 280*4882a593Smuzhiyun }; 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun /* sq_send_raweth_qp1_hdr (size:256b/32B) */ 283*4882a593Smuzhiyun struct sq_send_raweth_qp1_hdr { 284*4882a593Smuzhiyun u8 wqe_type; 285*4882a593Smuzhiyun u8 flags; 286*4882a593Smuzhiyun u8 wqe_size; 287*4882a593Smuzhiyun u8 reserved8; 288*4882a593Smuzhiyun __le16 lflags; 289*4882a593Smuzhiyun __le16 cfa_action; 290*4882a593Smuzhiyun __le32 length; 291*4882a593Smuzhiyun __le32 reserved32_1; 292*4882a593Smuzhiyun __le32 cfa_meta; 293*4882a593Smuzhiyun __le32 reserved32_2; 294*4882a593Smuzhiyun __le64 reserved64; 295*4882a593Smuzhiyun }; 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /* RDMA SQ WQE (40 bytes) */ 298*4882a593Smuzhiyun struct sq_rdma { 299*4882a593Smuzhiyun u8 wqe_type; 300*4882a593Smuzhiyun #define SQ_RDMA_WQE_TYPE_WRITE_WQE 0x4UL 301*4882a593Smuzhiyun #define SQ_RDMA_WQE_TYPE_WRITE_W_IMMEAD 0x5UL 302*4882a593Smuzhiyun #define SQ_RDMA_WQE_TYPE_READ_WQE 0x6UL 303*4882a593Smuzhiyun u8 flags; 304*4882a593Smuzhiyun #define SQ_RDMA_FLAGS_SIGNAL_COMP 0x1UL 305*4882a593Smuzhiyun #define SQ_RDMA_FLAGS_RD_OR_ATOMIC_FENCE 0x2UL 306*4882a593Smuzhiyun #define SQ_RDMA_FLAGS_UC_FENCE 0x4UL 307*4882a593Smuzhiyun #define SQ_RDMA_FLAGS_SE 0x8UL 308*4882a593Smuzhiyun #define SQ_RDMA_FLAGS_INLINE 0x10UL 309*4882a593Smuzhiyun u8 wqe_size; 310*4882a593Smuzhiyun u8 reserved8; 311*4882a593Smuzhiyun __le32 imm_data; 312*4882a593Smuzhiyun __le32 length; 313*4882a593Smuzhiyun __le32 reserved32_1; 314*4882a593Smuzhiyun __le64 remote_va; 315*4882a593Smuzhiyun __le32 remote_key; 316*4882a593Smuzhiyun __le32 reserved32_2; 317*4882a593Smuzhiyun __le32 data[24]; 318*4882a593Smuzhiyun }; 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun /* sq_rdma_hdr (size:256b/32B) */ 321*4882a593Smuzhiyun struct sq_rdma_hdr { 322*4882a593Smuzhiyun u8 wqe_type; 323*4882a593Smuzhiyun u8 flags; 324*4882a593Smuzhiyun u8 wqe_size; 325*4882a593Smuzhiyun u8 reserved8; 326*4882a593Smuzhiyun __le32 imm_data; 327*4882a593Smuzhiyun __le32 length; 328*4882a593Smuzhiyun __le32 reserved32_1; 329*4882a593Smuzhiyun __le64 remote_va; 330*4882a593Smuzhiyun __le32 remote_key; 331*4882a593Smuzhiyun __le32 reserved32_2; 332*4882a593Smuzhiyun }; 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun /* Atomic SQ WQE (40 bytes) */ 335*4882a593Smuzhiyun struct sq_atomic { 336*4882a593Smuzhiyun u8 wqe_type; 337*4882a593Smuzhiyun #define SQ_ATOMIC_WQE_TYPE_ATOMIC_CS 0x8UL 338*4882a593Smuzhiyun #define SQ_ATOMIC_WQE_TYPE_ATOMIC_FA 0xbUL 339*4882a593Smuzhiyun u8 flags; 340*4882a593Smuzhiyun #define SQ_ATOMIC_FLAGS_SIGNAL_COMP 0x1UL 341*4882a593Smuzhiyun #define SQ_ATOMIC_FLAGS_RD_OR_ATOMIC_FENCE 0x2UL 342*4882a593Smuzhiyun #define SQ_ATOMIC_FLAGS_UC_FENCE 0x4UL 343*4882a593Smuzhiyun #define SQ_ATOMIC_FLAGS_SE 0x8UL 344*4882a593Smuzhiyun #define SQ_ATOMIC_FLAGS_INLINE 0x10UL 345*4882a593Smuzhiyun __le16 reserved16; 346*4882a593Smuzhiyun __le32 remote_key; 347*4882a593Smuzhiyun __le64 remote_va; 348*4882a593Smuzhiyun __le64 swap_data; 349*4882a593Smuzhiyun __le64 cmp_data; 350*4882a593Smuzhiyun __le32 data[24]; 351*4882a593Smuzhiyun }; 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun /* sq_atomic_hdr (size:256b/32B) */ 354*4882a593Smuzhiyun struct sq_atomic_hdr { 355*4882a593Smuzhiyun u8 wqe_type; 356*4882a593Smuzhiyun u8 flags; 357*4882a593Smuzhiyun __le16 reserved16; 358*4882a593Smuzhiyun __le32 remote_key; 359*4882a593Smuzhiyun __le64 remote_va; 360*4882a593Smuzhiyun __le64 swap_data; 361*4882a593Smuzhiyun __le64 cmp_data; 362*4882a593Smuzhiyun }; 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun /* Local Invalidate SQ WQE (40 bytes) */ 365*4882a593Smuzhiyun struct sq_localinvalidate { 366*4882a593Smuzhiyun u8 wqe_type; 367*4882a593Smuzhiyun #define SQ_LOCALINVALIDATE_WQE_TYPE_LOCAL_INVALID 0xcUL 368*4882a593Smuzhiyun u8 flags; 369*4882a593Smuzhiyun #define SQ_LOCALINVALIDATE_FLAGS_SIGNAL_COMP 0x1UL 370*4882a593Smuzhiyun #define SQ_LOCALINVALIDATE_FLAGS_RD_OR_ATOMIC_FENCE 0x2UL 371*4882a593Smuzhiyun #define SQ_LOCALINVALIDATE_FLAGS_UC_FENCE 0x4UL 372*4882a593Smuzhiyun #define SQ_LOCALINVALIDATE_FLAGS_SE 0x8UL 373*4882a593Smuzhiyun #define SQ_LOCALINVALIDATE_FLAGS_INLINE 0x10UL 374*4882a593Smuzhiyun __le16 reserved16; 375*4882a593Smuzhiyun __le32 inv_l_key; 376*4882a593Smuzhiyun __le64 reserved64; 377*4882a593Smuzhiyun __le32 reserved128[4]; 378*4882a593Smuzhiyun __le32 data[24]; 379*4882a593Smuzhiyun }; 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun /* sq_localinvalidate_hdr (size:256b/32B) */ 382*4882a593Smuzhiyun struct sq_localinvalidate_hdr { 383*4882a593Smuzhiyun u8 wqe_type; 384*4882a593Smuzhiyun u8 flags; 385*4882a593Smuzhiyun __le16 reserved16; 386*4882a593Smuzhiyun __le32 inv_l_key; 387*4882a593Smuzhiyun __le64 reserved64; 388*4882a593Smuzhiyun u8 reserved128[16]; 389*4882a593Smuzhiyun }; 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun /* FR-PMR SQ WQE (40 bytes) */ 392*4882a593Smuzhiyun struct sq_fr_pmr { 393*4882a593Smuzhiyun u8 wqe_type; 394*4882a593Smuzhiyun #define SQ_FR_PMR_WQE_TYPE_FR_PMR 0xdUL 395*4882a593Smuzhiyun u8 flags; 396*4882a593Smuzhiyun #define SQ_FR_PMR_FLAGS_SIGNAL_COMP 0x1UL 397*4882a593Smuzhiyun #define SQ_FR_PMR_FLAGS_RD_OR_ATOMIC_FENCE 0x2UL 398*4882a593Smuzhiyun #define SQ_FR_PMR_FLAGS_UC_FENCE 0x4UL 399*4882a593Smuzhiyun #define SQ_FR_PMR_FLAGS_SE 0x8UL 400*4882a593Smuzhiyun #define SQ_FR_PMR_FLAGS_INLINE 0x10UL 401*4882a593Smuzhiyun u8 access_cntl; 402*4882a593Smuzhiyun #define SQ_FR_PMR_ACCESS_CNTL_LOCAL_WRITE 0x1UL 403*4882a593Smuzhiyun #define SQ_FR_PMR_ACCESS_CNTL_REMOTE_READ 0x2UL 404*4882a593Smuzhiyun #define SQ_FR_PMR_ACCESS_CNTL_REMOTE_WRITE 0x4UL 405*4882a593Smuzhiyun #define SQ_FR_PMR_ACCESS_CNTL_REMOTE_ATOMIC 0x8UL 406*4882a593Smuzhiyun #define SQ_FR_PMR_ACCESS_CNTL_WINDOW_BIND 0x10UL 407*4882a593Smuzhiyun u8 zero_based_page_size_log; 408*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_MASK 0x1fUL 409*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_SFT 0 410*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_4K 0x0UL 411*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_8K 0x1UL 412*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_64K 0x4UL 413*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_256K 0x6UL 414*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_1M 0x8UL 415*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_2M 0x9UL 416*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_4M 0xaUL 417*4882a593Smuzhiyun #define SQ_FR_PMR_PAGE_SIZE_LOG_PGSZ_1G 0x12UL 418*4882a593Smuzhiyun #define SQ_FR_PMR_ZERO_BASED 0x20UL 419*4882a593Smuzhiyun #define SQ_FR_PMR_RESERVED2_MASK 0xc0UL 420*4882a593Smuzhiyun #define SQ_FR_PMR_RESERVED2_SFT 6 421*4882a593Smuzhiyun __le32 l_key; 422*4882a593Smuzhiyun u8 length[5]; 423*4882a593Smuzhiyun u8 reserved8_1; 424*4882a593Smuzhiyun u8 reserved8_2; 425*4882a593Smuzhiyun u8 numlevels_pbl_page_size_log; 426*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_MASK 0x1fUL 427*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_SFT 0 428*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_4K 0x0UL 429*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_8K 0x1UL 430*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_64K 0x4UL 431*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_256K 0x6UL 432*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_1M 0x8UL 433*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_2M 0x9UL 434*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_4M 0xaUL 435*4882a593Smuzhiyun #define SQ_FR_PMR_PBL_PAGE_SIZE_LOG_PGSZ_1G 0x12UL 436*4882a593Smuzhiyun #define SQ_FR_PMR_RESERVED1 0x20UL 437*4882a593Smuzhiyun #define SQ_FR_PMR_NUMLEVELS_MASK 0xc0UL 438*4882a593Smuzhiyun #define SQ_FR_PMR_NUMLEVELS_SFT 6 439*4882a593Smuzhiyun #define SQ_FR_PMR_NUMLEVELS_PHYSICAL (0x0UL << 6) 440*4882a593Smuzhiyun #define SQ_FR_PMR_NUMLEVELS_LAYER1 (0x1UL << 6) 441*4882a593Smuzhiyun #define SQ_FR_PMR_NUMLEVELS_LAYER2 (0x2UL << 6) 442*4882a593Smuzhiyun __le64 pblptr; 443*4882a593Smuzhiyun __le64 va; 444*4882a593Smuzhiyun __le32 data[24]; 445*4882a593Smuzhiyun }; 446*4882a593Smuzhiyun 447*4882a593Smuzhiyun /* sq_fr_pmr_hdr (size:256b/32B) */ 448*4882a593Smuzhiyun struct sq_fr_pmr_hdr { 449*4882a593Smuzhiyun u8 wqe_type; 450*4882a593Smuzhiyun u8 flags; 451*4882a593Smuzhiyun u8 access_cntl; 452*4882a593Smuzhiyun u8 zero_based_page_size_log; 453*4882a593Smuzhiyun __le32 l_key; 454*4882a593Smuzhiyun u8 length[5]; 455*4882a593Smuzhiyun u8 reserved8_1; 456*4882a593Smuzhiyun u8 reserved8_2; 457*4882a593Smuzhiyun u8 numlevels_pbl_page_size_log; 458*4882a593Smuzhiyun __le64 pblptr; 459*4882a593Smuzhiyun __le64 va; 460*4882a593Smuzhiyun }; 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun /* Bind SQ WQE (40 bytes) */ 463*4882a593Smuzhiyun struct sq_bind { 464*4882a593Smuzhiyun u8 wqe_type; 465*4882a593Smuzhiyun #define SQ_BIND_WQE_TYPE_BIND 0xeUL 466*4882a593Smuzhiyun u8 flags; 467*4882a593Smuzhiyun #define SQ_BIND_FLAGS_SIGNAL_COMP 0x1UL 468*4882a593Smuzhiyun #define SQ_BIND_FLAGS_RD_OR_ATOMIC_FENCE 0x2UL 469*4882a593Smuzhiyun #define SQ_BIND_FLAGS_UC_FENCE 0x4UL 470*4882a593Smuzhiyun #define SQ_BIND_FLAGS_SE 0x8UL 471*4882a593Smuzhiyun #define SQ_BIND_FLAGS_INLINE 0x10UL 472*4882a593Smuzhiyun u8 access_cntl; 473*4882a593Smuzhiyun #define SQ_BIND_ACCESS_CNTL_LOCAL_WRITE 0x1UL 474*4882a593Smuzhiyun #define SQ_BIND_ACCESS_CNTL_REMOTE_READ 0x2UL 475*4882a593Smuzhiyun #define SQ_BIND_ACCESS_CNTL_REMOTE_WRITE 0x4UL 476*4882a593Smuzhiyun #define SQ_BIND_ACCESS_CNTL_REMOTE_ATOMIC 0x8UL 477*4882a593Smuzhiyun #define SQ_BIND_ACCESS_CNTL_WINDOW_BIND 0x10UL 478*4882a593Smuzhiyun u8 reserved8_1; 479*4882a593Smuzhiyun u8 mw_type_zero_based; 480*4882a593Smuzhiyun #define SQ_BIND_ZERO_BASED 0x1UL 481*4882a593Smuzhiyun #define SQ_BIND_MW_TYPE 0x2UL 482*4882a593Smuzhiyun #define SQ_BIND_MW_TYPE_TYPE1 (0x0UL << 1) 483*4882a593Smuzhiyun #define SQ_BIND_MW_TYPE_TYPE2 (0x1UL << 1) 484*4882a593Smuzhiyun #define SQ_BIND_RESERVED6_MASK 0xfcUL 485*4882a593Smuzhiyun #define SQ_BIND_RESERVED6_SFT 2 486*4882a593Smuzhiyun u8 reserved8_2; 487*4882a593Smuzhiyun __le16 reserved16; 488*4882a593Smuzhiyun __le32 parent_l_key; 489*4882a593Smuzhiyun __le32 l_key; 490*4882a593Smuzhiyun __le64 va; 491*4882a593Smuzhiyun u8 length[5]; 492*4882a593Smuzhiyun u8 data_reserved24[99]; 493*4882a593Smuzhiyun #define SQ_BIND_RESERVED24_MASK 0xffffff00UL 494*4882a593Smuzhiyun #define SQ_BIND_RESERVED24_SFT 8 495*4882a593Smuzhiyun #define SQ_BIND_DATA_MASK 0xffffffffUL 496*4882a593Smuzhiyun #define SQ_BIND_DATA_SFT 0 497*4882a593Smuzhiyun }; 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun /* sq_bind_hdr (size:256b/32B) */ 500*4882a593Smuzhiyun struct sq_bind_hdr { 501*4882a593Smuzhiyun u8 wqe_type; 502*4882a593Smuzhiyun u8 flags; 503*4882a593Smuzhiyun u8 access_cntl; 504*4882a593Smuzhiyun u8 reserved8_1; 505*4882a593Smuzhiyun u8 mw_type_zero_based; 506*4882a593Smuzhiyun u8 reserved8_2; 507*4882a593Smuzhiyun __le16 reserved16; 508*4882a593Smuzhiyun __le32 parent_l_key; 509*4882a593Smuzhiyun __le32 l_key; 510*4882a593Smuzhiyun __le64 va; 511*4882a593Smuzhiyun u8 length[5]; 512*4882a593Smuzhiyun u8 reserved24[3]; 513*4882a593Smuzhiyun }; 514*4882a593Smuzhiyun 515*4882a593Smuzhiyun /* RQ/SRQ WQE Structures */ 516*4882a593Smuzhiyun /* RQ/SRQ WQE (40 bytes) */ 517*4882a593Smuzhiyun struct rq_wqe { 518*4882a593Smuzhiyun u8 wqe_type; 519*4882a593Smuzhiyun #define RQ_WQE_WQE_TYPE_RCV 0x80UL 520*4882a593Smuzhiyun u8 flags; 521*4882a593Smuzhiyun u8 wqe_size; 522*4882a593Smuzhiyun u8 reserved8; 523*4882a593Smuzhiyun __le32 reserved32; 524*4882a593Smuzhiyun __le32 wr_id[2]; 525*4882a593Smuzhiyun #define RQ_WQE_WR_ID_MASK 0xfffffUL 526*4882a593Smuzhiyun #define RQ_WQE_WR_ID_SFT 0 527*4882a593Smuzhiyun #define RQ_WQE_RESERVED44_MASK 0xfff00000UL 528*4882a593Smuzhiyun #define RQ_WQE_RESERVED44_SFT 20 529*4882a593Smuzhiyun __le32 reserved128[4]; 530*4882a593Smuzhiyun __le32 data[24]; 531*4882a593Smuzhiyun }; 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun /* rq_wqe_hdr (size:256b/32B) */ 534*4882a593Smuzhiyun struct rq_wqe_hdr { 535*4882a593Smuzhiyun u8 wqe_type; 536*4882a593Smuzhiyun u8 flags; 537*4882a593Smuzhiyun u8 wqe_size; 538*4882a593Smuzhiyun u8 reserved8; 539*4882a593Smuzhiyun __le32 reserved32; 540*4882a593Smuzhiyun __le32 wr_id[2]; 541*4882a593Smuzhiyun u8 reserved128[16]; 542*4882a593Smuzhiyun }; 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun /* CQ CQE Structures */ 545*4882a593Smuzhiyun /* Base CQE (32 bytes) */ 546*4882a593Smuzhiyun struct cq_base { 547*4882a593Smuzhiyun __le64 reserved64_1; 548*4882a593Smuzhiyun __le64 reserved64_2; 549*4882a593Smuzhiyun __le64 reserved64_3; 550*4882a593Smuzhiyun u8 cqe_type_toggle; 551*4882a593Smuzhiyun #define CQ_BASE_TOGGLE 0x1UL 552*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_MASK 0x1eUL 553*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_SFT 1 554*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_REQ (0x0UL << 1) 555*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_RES_RC (0x1UL << 1) 556*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_RES_UD (0x2UL << 1) 557*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_RES_RAWETH_QP1 (0x3UL << 1) 558*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_TERMINAL (0xeUL << 1) 559*4882a593Smuzhiyun #define CQ_BASE_CQE_TYPE_CUT_OFF (0xfUL << 1) 560*4882a593Smuzhiyun #define CQ_BASE_RESERVED3_MASK 0xe0UL 561*4882a593Smuzhiyun #define CQ_BASE_RESERVED3_SFT 5 562*4882a593Smuzhiyun u8 status; 563*4882a593Smuzhiyun __le16 reserved16; 564*4882a593Smuzhiyun __le32 reserved32; 565*4882a593Smuzhiyun }; 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun /* Requester CQ CQE (32 bytes) */ 568*4882a593Smuzhiyun struct cq_req { 569*4882a593Smuzhiyun __le64 qp_handle; 570*4882a593Smuzhiyun __le16 sq_cons_idx; 571*4882a593Smuzhiyun __le16 reserved16_1; 572*4882a593Smuzhiyun __le32 reserved32_2; 573*4882a593Smuzhiyun __le64 reserved64; 574*4882a593Smuzhiyun u8 cqe_type_toggle; 575*4882a593Smuzhiyun #define CQ_REQ_TOGGLE 0x1UL 576*4882a593Smuzhiyun #define CQ_REQ_CQE_TYPE_MASK 0x1eUL 577*4882a593Smuzhiyun #define CQ_REQ_CQE_TYPE_SFT 1 578*4882a593Smuzhiyun #define CQ_REQ_CQE_TYPE_REQ (0x0UL << 1) 579*4882a593Smuzhiyun #define CQ_REQ_RESERVED3_MASK 0xe0UL 580*4882a593Smuzhiyun #define CQ_REQ_RESERVED3_SFT 5 581*4882a593Smuzhiyun u8 status; 582*4882a593Smuzhiyun #define CQ_REQ_STATUS_OK 0x0UL 583*4882a593Smuzhiyun #define CQ_REQ_STATUS_BAD_RESPONSE_ERR 0x1UL 584*4882a593Smuzhiyun #define CQ_REQ_STATUS_LOCAL_LENGTH_ERR 0x2UL 585*4882a593Smuzhiyun #define CQ_REQ_STATUS_LOCAL_QP_OPERATION_ERR 0x3UL 586*4882a593Smuzhiyun #define CQ_REQ_STATUS_LOCAL_PROTECTION_ERR 0x4UL 587*4882a593Smuzhiyun #define CQ_REQ_STATUS_MEMORY_MGT_OPERATION_ERR 0x5UL 588*4882a593Smuzhiyun #define CQ_REQ_STATUS_REMOTE_INVALID_REQUEST_ERR 0x6UL 589*4882a593Smuzhiyun #define CQ_REQ_STATUS_REMOTE_ACCESS_ERR 0x7UL 590*4882a593Smuzhiyun #define CQ_REQ_STATUS_REMOTE_OPERATION_ERR 0x8UL 591*4882a593Smuzhiyun #define CQ_REQ_STATUS_RNR_NAK_RETRY_CNT_ERR 0x9UL 592*4882a593Smuzhiyun #define CQ_REQ_STATUS_TRANSPORT_RETRY_CNT_ERR 0xaUL 593*4882a593Smuzhiyun #define CQ_REQ_STATUS_WORK_REQUEST_FLUSHED_ERR 0xbUL 594*4882a593Smuzhiyun __le16 reserved16_2; 595*4882a593Smuzhiyun __le32 reserved32_1; 596*4882a593Smuzhiyun }; 597*4882a593Smuzhiyun 598*4882a593Smuzhiyun /* Responder RC CQE (32 bytes) */ 599*4882a593Smuzhiyun struct cq_res_rc { 600*4882a593Smuzhiyun __le32 length; 601*4882a593Smuzhiyun __le32 imm_data_or_inv_r_key; 602*4882a593Smuzhiyun __le64 qp_handle; 603*4882a593Smuzhiyun __le64 mr_handle; 604*4882a593Smuzhiyun u8 cqe_type_toggle; 605*4882a593Smuzhiyun #define CQ_RES_RC_TOGGLE 0x1UL 606*4882a593Smuzhiyun #define CQ_RES_RC_CQE_TYPE_MASK 0x1eUL 607*4882a593Smuzhiyun #define CQ_RES_RC_CQE_TYPE_SFT 1 608*4882a593Smuzhiyun #define CQ_RES_RC_CQE_TYPE_RES_RC (0x1UL << 1) 609*4882a593Smuzhiyun #define CQ_RES_RC_RESERVED3_MASK 0xe0UL 610*4882a593Smuzhiyun #define CQ_RES_RC_RESERVED3_SFT 5 611*4882a593Smuzhiyun u8 status; 612*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_OK 0x0UL 613*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_LOCAL_ACCESS_ERROR 0x1UL 614*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_LOCAL_LENGTH_ERR 0x2UL 615*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_LOCAL_PROTECTION_ERR 0x3UL 616*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_LOCAL_QP_OPERATION_ERR 0x4UL 617*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_MEMORY_MGT_OPERATION_ERR 0x5UL 618*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_REMOTE_INVALID_REQUEST_ERR 0x6UL 619*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_WORK_REQUEST_FLUSHED_ERR 0x7UL 620*4882a593Smuzhiyun #define CQ_RES_RC_STATUS_HW_FLUSH_ERR 0x8UL 621*4882a593Smuzhiyun __le16 flags; 622*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_SRQ 0x1UL 623*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_SRQ_RQ (0x0UL << 0) 624*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_SRQ_SRQ (0x1UL << 0) 625*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_SRQ_LAST CQ_RES_RC_FLAGS_SRQ_SRQ 626*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_IMM 0x2UL 627*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_INV 0x4UL 628*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_RDMA 0x8UL 629*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_RDMA_SEND (0x0UL << 3) 630*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_RDMA_RDMA_WRITE (0x1UL << 3) 631*4882a593Smuzhiyun #define CQ_RES_RC_FLAGS_RDMA_LAST CQ_RES_RC_FLAGS_RDMA_RDMA_WRITE 632*4882a593Smuzhiyun __le32 srq_or_rq_wr_id; 633*4882a593Smuzhiyun #define CQ_RES_RC_SRQ_OR_RQ_WR_ID_MASK 0xfffffUL 634*4882a593Smuzhiyun #define CQ_RES_RC_SRQ_OR_RQ_WR_ID_SFT 0 635*4882a593Smuzhiyun #define CQ_RES_RC_RESERVED12_MASK 0xfff00000UL 636*4882a593Smuzhiyun #define CQ_RES_RC_RESERVED12_SFT 20 637*4882a593Smuzhiyun }; 638*4882a593Smuzhiyun 639*4882a593Smuzhiyun /* Responder UD CQE (32 bytes) */ 640*4882a593Smuzhiyun struct cq_res_ud { 641*4882a593Smuzhiyun __le16 length; 642*4882a593Smuzhiyun #define CQ_RES_UD_LENGTH_MASK 0x3fffUL 643*4882a593Smuzhiyun #define CQ_RES_UD_LENGTH_SFT 0 644*4882a593Smuzhiyun __le16 cfa_metadata; 645*4882a593Smuzhiyun #define CQ_RES_UD_CFA_METADATA_VID_MASK 0xfffUL 646*4882a593Smuzhiyun #define CQ_RES_UD_CFA_METADATA_VID_SFT 0 647*4882a593Smuzhiyun #define CQ_RES_UD_CFA_METADATA_DE 0x1000UL 648*4882a593Smuzhiyun #define CQ_RES_UD_CFA_METADATA_PRI_MASK 0xe000UL 649*4882a593Smuzhiyun #define CQ_RES_UD_CFA_METADATA_PRI_SFT 13 650*4882a593Smuzhiyun __le32 imm_data; 651*4882a593Smuzhiyun __le64 qp_handle; 652*4882a593Smuzhiyun __le16 src_mac[3]; 653*4882a593Smuzhiyun __le16 src_qp_low; 654*4882a593Smuzhiyun u8 cqe_type_toggle; 655*4882a593Smuzhiyun #define CQ_RES_UD_TOGGLE 0x1UL 656*4882a593Smuzhiyun #define CQ_RES_UD_CQE_TYPE_MASK 0x1eUL 657*4882a593Smuzhiyun #define CQ_RES_UD_CQE_TYPE_SFT 1 658*4882a593Smuzhiyun #define CQ_RES_UD_CQE_TYPE_RES_UD (0x2UL << 1) 659*4882a593Smuzhiyun u8 status; 660*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_OK 0x0UL 661*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_LOCAL_ACCESS_ERROR 0x1UL 662*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_HW_LOCAL_LENGTH_ERR 0x2UL 663*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_LOCAL_PROTECTION_ERR 0x3UL 664*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_LOCAL_QP_OPERATION_ERR 0x4UL 665*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_MEMORY_MGT_OPERATION_ERR 0x5UL 666*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_WORK_REQUEST_FLUSHED_ERR 0x7UL 667*4882a593Smuzhiyun #define CQ_RES_UD_STATUS_HW_FLUSH_ERR 0x8UL 668*4882a593Smuzhiyun __le16 flags; 669*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_SRQ 0x1UL 670*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_SRQ_RQ (0x0UL << 0) 671*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_SRQ_SRQ (0x1UL << 0) 672*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_SRQ_LAST CQ_RES_UD_FLAGS_SRQ_SRQ 673*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_IMM 0x2UL 674*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_UNUSED_MASK 0xcUL 675*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_UNUSED_SFT 2 676*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_ROCE_IP_VER_MASK 0x30UL 677*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_ROCE_IP_VER_SFT 4 678*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_ROCE_IP_VER_V1 (0x0UL << 4) 679*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_ROCE_IP_VER_V2IPV4 (0x2UL << 4) 680*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_ROCE_IP_VER_V2IPV6 (0x3UL << 4) 681*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_ROCE_IP_VER_LAST \ 682*4882a593Smuzhiyun CQ_RES_UD_FLAGS_ROCE_IP_VER_V2IPV6 683*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_MASK 0x3c0UL 684*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_SFT 6 685*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_NONE (0x0UL << 6) 686*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_VLAN (0x1UL << 6) 687*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_TUNNEL_ID (0x2UL << 6) 688*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_CHDR_DATA (0x3UL << 6) 689*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_HDR_OFFSET (0x4UL << 6) 690*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_META_FORMAT_LAST \ 691*4882a593Smuzhiyun CQ_RES_UD_FLAGS_META_FORMAT_HDR_OFFSET 692*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_EXT_META_FORMAT_MASK 0xc00UL 693*4882a593Smuzhiyun #define CQ_RES_UD_FLAGS_EXT_META_FORMAT_SFT 10 694*4882a593Smuzhiyun 695*4882a593Smuzhiyun __le32 src_qp_high_srq_or_rq_wr_id; 696*4882a593Smuzhiyun #define CQ_RES_UD_SRQ_OR_RQ_WR_ID_MASK 0xfffffUL 697*4882a593Smuzhiyun #define CQ_RES_UD_SRQ_OR_RQ_WR_ID_SFT 0 698*4882a593Smuzhiyun #define CQ_RES_UD_SRC_QP_HIGH_MASK 0xff000000UL 699*4882a593Smuzhiyun #define CQ_RES_UD_SRC_QP_HIGH_SFT 24 700*4882a593Smuzhiyun }; 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun /* Responder RawEth and QP1 CQE (32 bytes) */ 703*4882a593Smuzhiyun struct cq_res_raweth_qp1 { 704*4882a593Smuzhiyun __le16 length; 705*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_LENGTH_MASK 0x3fffUL 706*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_LENGTH_SFT 0 707*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED2_MASK 0xc000UL 708*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED2_SFT 14 709*4882a593Smuzhiyun __le16 raweth_qp1_flags; 710*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ERROR 0x1UL 711*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_RESERVED5_1_MASK 0x3eUL 712*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_RESERVED5_1_SFT 1 713*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_MASK 0x3c0UL 714*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_SFT 6 715*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_NOT_KNOWN (0x0UL << 6) 716*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_IP (0x1UL << 6) 717*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_TCP (0x2UL << 6) 718*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_UDP (0x3UL << 6) 719*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_FCOE (0x4UL << 6) 720*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_ROCE (0x5UL << 6) 721*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_ICMP (0x7UL << 6) 722*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_PTP_WO_TIMESTAMP \ 723*4882a593Smuzhiyun (0x8UL << 6) 724*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_PTP_W_TIMESTAMP \ 725*4882a593Smuzhiyun (0x9UL << 6) 726*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_LAST \ 727*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_PTP_W_TIMESTAMP 728*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_MASK 0x3ffUL 729*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_SFT 0 730*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED6_MASK 0xfc00UL 731*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED6_SFT 10 732*4882a593Smuzhiyun __le16 raweth_qp1_errors; 733*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_RESERVED4_MASK 0xfUL 734*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_RESERVED4_SFT 0 735*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_IP_CS_ERROR 0x10UL 736*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_L4_CS_ERROR 0x20UL 737*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_IP_CS_ERROR 0x40UL 738*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_L4_CS_ERROR 0x80UL 739*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_CRC_ERROR 0x100UL 740*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_MASK 0xe00UL 741*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_SFT 9 742*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_NO_ERROR \ 743*4882a593Smuzhiyun (0x0UL << 9) 744*4882a593Smuzhiyun #define \ 745*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \ 746*4882a593Smuzhiyun (0x1UL << 9) 747*4882a593Smuzhiyun #define \ 748*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \ 749*4882a593Smuzhiyun (0x2UL << 9) 750*4882a593Smuzhiyun #define \ 751*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR \ 752*4882a593Smuzhiyun (0x3UL << 9) 753*4882a593Smuzhiyun #define \ 754*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \ 755*4882a593Smuzhiyun (0x4UL << 9) 756*4882a593Smuzhiyun #define \ 757*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \ 758*4882a593Smuzhiyun (0x5UL << 9) 759*4882a593Smuzhiyun #define \ 760*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \ 761*4882a593Smuzhiyun (0x6UL << 9) 762*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_LAST \ 763*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL 764*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_MASK 0xf000UL 765*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_SFT 12 766*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_NO_ERROR \ 767*4882a593Smuzhiyun (0x0UL << 12) 768*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_L3_BAD_VERSION \ 769*4882a593Smuzhiyun (0x1UL << 12) 770*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \ 771*4882a593Smuzhiyun (0x2UL << 12) 772*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_L3_BAD_TTL \ 773*4882a593Smuzhiyun (0x3UL << 12) 774*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \ 775*4882a593Smuzhiyun (0x4UL << 12) 776*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \ 777*4882a593Smuzhiyun (0x5UL << 12) 778*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \ 779*4882a593Smuzhiyun (0x6UL << 12) 780*4882a593Smuzhiyun #define \ 781*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL\ 782*4882a593Smuzhiyun (0x7UL << 12) 783*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \ 784*4882a593Smuzhiyun (0x8UL << 12) 785*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_LAST \ 786*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN 787*4882a593Smuzhiyun __le16 raweth_qp1_cfa_code; 788*4882a593Smuzhiyun __le64 qp_handle; 789*4882a593Smuzhiyun __le32 raweth_qp1_flags2; 790*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_IP_CS_CALC 0x1UL 791*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_L4_CS_CALC 0x2UL 792*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_T_IP_CS_CALC 0x4UL 793*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_T_L4_CS_CALC 0x8UL 794*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_META_FORMAT_MASK 0xf0UL 795*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_META_FORMAT_SFT 4 796*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_META_FORMAT_NONE \ 797*4882a593Smuzhiyun (0x0UL << 4) 798*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_META_FORMAT_VLAN \ 799*4882a593Smuzhiyun (0x1UL << 4) 800*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_META_FORMAT_LAST\ 801*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_META_FORMAT_VLAN 802*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_IP_TYPE 0x100UL 803*4882a593Smuzhiyun __le32 raweth_qp1_metadata; 804*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_VID_MASK 0xfffUL 805*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_VID_SFT 0 806*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_DE 0x1000UL 807*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_PRI_MASK 0xe000UL 808*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_PRI_SFT 13 809*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_TPID_MASK 0xffff0000UL 810*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_TPID_SFT 16 811*4882a593Smuzhiyun u8 cqe_type_toggle; 812*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_TOGGLE 0x1UL 813*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_CQE_TYPE_MASK 0x1eUL 814*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_CQE_TYPE_SFT 1 815*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_CQE_TYPE_RES_RAWETH_QP1 (0x3UL << 1) 816*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED3_MASK 0xe0UL 817*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED3_SFT 5 818*4882a593Smuzhiyun u8 status; 819*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_OK 0x0UL 820*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_LOCAL_ACCESS_ERROR 0x1UL 821*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_HW_LOCAL_LENGTH_ERR 0x2UL 822*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_LOCAL_PROTECTION_ERR 0x3UL 823*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_LOCAL_QP_OPERATION_ERR 0x4UL 824*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_MEMORY_MGT_OPERATION_ERR 0x5UL 825*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_WORK_REQUEST_FLUSHED_ERR 0x7UL 826*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_STATUS_HW_FLUSH_ERR 0x8UL 827*4882a593Smuzhiyun __le16 flags; 828*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_FLAGS_SRQ 0x1UL 829*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_FLAGS_SRQ_RQ 0x0UL 830*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_FLAGS_SRQ_SRQ 0x1UL 831*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_FLAGS_SRQ_LAST \ 832*4882a593Smuzhiyun CQ_RES_RAWETH_QP1_FLAGS_SRQ_SRQ 833*4882a593Smuzhiyun __le32 raweth_qp1_payload_offset_srq_or_rq_wr_id; 834*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_SRQ_OR_RQ_WR_ID_MASK 0xfffffUL 835*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_SRQ_OR_RQ_WR_ID_SFT 0 836*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED4_MASK 0xf00000UL 837*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RESERVED4_SFT 20 838*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_PAYLOAD_OFFSET_MASK 0xff000000UL 839*4882a593Smuzhiyun #define CQ_RES_RAWETH_QP1_RAWETH_QP1_PAYLOAD_OFFSET_SFT 24 840*4882a593Smuzhiyun }; 841*4882a593Smuzhiyun 842*4882a593Smuzhiyun /* Terminal CQE (32 bytes) */ 843*4882a593Smuzhiyun struct cq_terminal { 844*4882a593Smuzhiyun __le64 qp_handle; 845*4882a593Smuzhiyun __le16 sq_cons_idx; 846*4882a593Smuzhiyun __le16 rq_cons_idx; 847*4882a593Smuzhiyun __le32 reserved32_1; 848*4882a593Smuzhiyun __le64 reserved64_3; 849*4882a593Smuzhiyun u8 cqe_type_toggle; 850*4882a593Smuzhiyun #define CQ_TERMINAL_TOGGLE 0x1UL 851*4882a593Smuzhiyun #define CQ_TERMINAL_CQE_TYPE_MASK 0x1eUL 852*4882a593Smuzhiyun #define CQ_TERMINAL_CQE_TYPE_SFT 1 853*4882a593Smuzhiyun #define CQ_TERMINAL_CQE_TYPE_TERMINAL (0xeUL << 1) 854*4882a593Smuzhiyun #define CQ_TERMINAL_RESERVED3_MASK 0xe0UL 855*4882a593Smuzhiyun #define CQ_TERMINAL_RESERVED3_SFT 5 856*4882a593Smuzhiyun u8 status; 857*4882a593Smuzhiyun #define CQ_TERMINAL_STATUS_OK 0x0UL 858*4882a593Smuzhiyun __le16 reserved16; 859*4882a593Smuzhiyun __le32 reserved32_2; 860*4882a593Smuzhiyun }; 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun /* Cutoff CQE (32 bytes) */ 863*4882a593Smuzhiyun struct cq_cutoff { 864*4882a593Smuzhiyun __le64 reserved64_1; 865*4882a593Smuzhiyun __le64 reserved64_2; 866*4882a593Smuzhiyun __le64 reserved64_3; 867*4882a593Smuzhiyun u8 cqe_type_toggle; 868*4882a593Smuzhiyun #define CQ_CUTOFF_TOGGLE 0x1UL 869*4882a593Smuzhiyun #define CQ_CUTOFF_CQE_TYPE_MASK 0x1eUL 870*4882a593Smuzhiyun #define CQ_CUTOFF_CQE_TYPE_SFT 1 871*4882a593Smuzhiyun #define CQ_CUTOFF_CQE_TYPE_CUT_OFF (0xfUL << 1) 872*4882a593Smuzhiyun #define CQ_CUTOFF_RESERVED3_MASK 0xe0UL 873*4882a593Smuzhiyun #define CQ_CUTOFF_RESERVED3_SFT 5 874*4882a593Smuzhiyun u8 status; 875*4882a593Smuzhiyun #define CQ_CUTOFF_STATUS_OK 0x0UL 876*4882a593Smuzhiyun __le16 reserved16; 877*4882a593Smuzhiyun __le32 reserved32; 878*4882a593Smuzhiyun }; 879*4882a593Smuzhiyun 880*4882a593Smuzhiyun /* Notification Queue (NQ) Structures */ 881*4882a593Smuzhiyun /* Base NQ Record (16 bytes) */ 882*4882a593Smuzhiyun struct nq_base { 883*4882a593Smuzhiyun __le16 info10_type; 884*4882a593Smuzhiyun #define NQ_BASE_TYPE_MASK 0x3fUL 885*4882a593Smuzhiyun #define NQ_BASE_TYPE_SFT 0 886*4882a593Smuzhiyun #define NQ_BASE_TYPE_CQ_NOTIFICATION 0x30UL 887*4882a593Smuzhiyun #define NQ_BASE_TYPE_SRQ_EVENT 0x32UL 888*4882a593Smuzhiyun #define NQ_BASE_TYPE_DBQ_EVENT 0x34UL 889*4882a593Smuzhiyun #define NQ_BASE_TYPE_QP_EVENT 0x38UL 890*4882a593Smuzhiyun #define NQ_BASE_TYPE_FUNC_EVENT 0x3aUL 891*4882a593Smuzhiyun #define NQ_BASE_INFO10_MASK 0xffc0UL 892*4882a593Smuzhiyun #define NQ_BASE_INFO10_SFT 6 893*4882a593Smuzhiyun __le16 info16; 894*4882a593Smuzhiyun __le32 info32; 895*4882a593Smuzhiyun __le32 info63_v[2]; 896*4882a593Smuzhiyun #define NQ_BASE_V 0x1UL 897*4882a593Smuzhiyun #define NQ_BASE_INFO63_MASK 0xfffffffeUL 898*4882a593Smuzhiyun #define NQ_BASE_INFO63_SFT 1 899*4882a593Smuzhiyun }; 900*4882a593Smuzhiyun 901*4882a593Smuzhiyun /* Completion Queue Notification (16 bytes) */ 902*4882a593Smuzhiyun struct nq_cn { 903*4882a593Smuzhiyun __le16 type; 904*4882a593Smuzhiyun #define NQ_CN_TYPE_MASK 0x3fUL 905*4882a593Smuzhiyun #define NQ_CN_TYPE_SFT 0 906*4882a593Smuzhiyun #define NQ_CN_TYPE_CQ_NOTIFICATION 0x30UL 907*4882a593Smuzhiyun #define NQ_CN_RESERVED9_MASK 0xffc0UL 908*4882a593Smuzhiyun #define NQ_CN_RESERVED9_SFT 6 909*4882a593Smuzhiyun __le16 reserved16; 910*4882a593Smuzhiyun __le32 cq_handle_low; 911*4882a593Smuzhiyun __le32 v; 912*4882a593Smuzhiyun #define NQ_CN_V 0x1UL 913*4882a593Smuzhiyun #define NQ_CN_RESERVED31_MASK 0xfffffffeUL 914*4882a593Smuzhiyun #define NQ_CN_RESERVED31_SFT 1 915*4882a593Smuzhiyun __le32 cq_handle_high; 916*4882a593Smuzhiyun }; 917*4882a593Smuzhiyun 918*4882a593Smuzhiyun /* SRQ Event Notification (16 bytes) */ 919*4882a593Smuzhiyun struct nq_srq_event { 920*4882a593Smuzhiyun u8 type; 921*4882a593Smuzhiyun #define NQ_SRQ_EVENT_TYPE_MASK 0x3fUL 922*4882a593Smuzhiyun #define NQ_SRQ_EVENT_TYPE_SFT 0 923*4882a593Smuzhiyun #define NQ_SRQ_EVENT_TYPE_SRQ_EVENT 0x32UL 924*4882a593Smuzhiyun #define NQ_SRQ_EVENT_RESERVED1_MASK 0xc0UL 925*4882a593Smuzhiyun #define NQ_SRQ_EVENT_RESERVED1_SFT 6 926*4882a593Smuzhiyun u8 event; 927*4882a593Smuzhiyun #define NQ_SRQ_EVENT_EVENT_SRQ_THRESHOLD_EVENT 0x1UL 928*4882a593Smuzhiyun __le16 reserved16; 929*4882a593Smuzhiyun __le32 srq_handle_low; 930*4882a593Smuzhiyun __le32 v; 931*4882a593Smuzhiyun #define NQ_SRQ_EVENT_V 0x1UL 932*4882a593Smuzhiyun #define NQ_SRQ_EVENT_RESERVED31_MASK 0xfffffffeUL 933*4882a593Smuzhiyun #define NQ_SRQ_EVENT_RESERVED31_SFT 1 934*4882a593Smuzhiyun __le32 srq_handle_high; 935*4882a593Smuzhiyun }; 936*4882a593Smuzhiyun 937*4882a593Smuzhiyun /* DBQ Async Event Notification (16 bytes) */ 938*4882a593Smuzhiyun struct nq_dbq_event { 939*4882a593Smuzhiyun u8 type; 940*4882a593Smuzhiyun #define NQ_DBQ_EVENT_TYPE_MASK 0x3fUL 941*4882a593Smuzhiyun #define NQ_DBQ_EVENT_TYPE_SFT 0 942*4882a593Smuzhiyun #define NQ_DBQ_EVENT_TYPE_DBQ_EVENT 0x34UL 943*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED1_MASK 0xc0UL 944*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED1_SFT 6 945*4882a593Smuzhiyun u8 event; 946*4882a593Smuzhiyun #define NQ_DBQ_EVENT_EVENT_DBQ_THRESHOLD_EVENT 0x1UL 947*4882a593Smuzhiyun __le16 db_pfid; 948*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_PFID_MASK 0xfUL 949*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_PFID_SFT 0 950*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED12_MASK 0xfff0UL 951*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED12_SFT 4 952*4882a593Smuzhiyun __le32 db_dpi; 953*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_DPI_MASK 0xfffffUL 954*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_DPI_SFT 0 955*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED12_2_MASK 0xfff00000UL 956*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED12_2_SFT 20 957*4882a593Smuzhiyun __le32 v; 958*4882a593Smuzhiyun #define NQ_DBQ_EVENT_V 0x1UL 959*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED32_MASK 0xfffffffeUL 960*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED32_SFT 1 961*4882a593Smuzhiyun __le32 db_type_db_xid; 962*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_XID_MASK 0xfffffUL 963*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_XID_SFT 0 964*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED8_MASK 0xff00000UL 965*4882a593Smuzhiyun #define NQ_DBQ_EVENT_RESERVED8_SFT 20 966*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_TYPE_MASK 0xf0000000UL 967*4882a593Smuzhiyun #define NQ_DBQ_EVENT_DB_TYPE_SFT 28 968*4882a593Smuzhiyun }; 969*4882a593Smuzhiyun 970*4882a593Smuzhiyun /* Read Request/Response Queue Structures */ 971*4882a593Smuzhiyun /* Input Read Request Queue (IRRQ) Message (32 bytes) */ 972*4882a593Smuzhiyun struct xrrq_irrq { 973*4882a593Smuzhiyun __le16 credits_type; 974*4882a593Smuzhiyun #define XRRQ_IRRQ_TYPE 0x1UL 975*4882a593Smuzhiyun #define XRRQ_IRRQ_TYPE_READ_REQ 0x0UL 976*4882a593Smuzhiyun #define XRRQ_IRRQ_TYPE_ATOMIC_REQ 0x1UL 977*4882a593Smuzhiyun #define XRRQ_IRRQ_RESERVED10_MASK 0x7feUL 978*4882a593Smuzhiyun #define XRRQ_IRRQ_RESERVED10_SFT 1 979*4882a593Smuzhiyun #define XRRQ_IRRQ_CREDITS_MASK 0xf800UL 980*4882a593Smuzhiyun #define XRRQ_IRRQ_CREDITS_SFT 11 981*4882a593Smuzhiyun __le16 reserved16; 982*4882a593Smuzhiyun __le32 reserved32; 983*4882a593Smuzhiyun __le32 psn; 984*4882a593Smuzhiyun #define XRRQ_IRRQ_PSN_MASK 0xffffffUL 985*4882a593Smuzhiyun #define XRRQ_IRRQ_PSN_SFT 0 986*4882a593Smuzhiyun #define XRRQ_IRRQ_RESERVED8_1_MASK 0xff000000UL 987*4882a593Smuzhiyun #define XRRQ_IRRQ_RESERVED8_1_SFT 24 988*4882a593Smuzhiyun __le32 msn; 989*4882a593Smuzhiyun #define XRRQ_IRRQ_MSN_MASK 0xffffffUL 990*4882a593Smuzhiyun #define XRRQ_IRRQ_MSN_SFT 0 991*4882a593Smuzhiyun #define XRRQ_IRRQ_RESERVED8_2_MASK 0xff000000UL 992*4882a593Smuzhiyun #define XRRQ_IRRQ_RESERVED8_2_SFT 24 993*4882a593Smuzhiyun __le64 va_or_atomic_result; 994*4882a593Smuzhiyun __le32 rdma_r_key; 995*4882a593Smuzhiyun __le32 length; 996*4882a593Smuzhiyun }; 997*4882a593Smuzhiyun 998*4882a593Smuzhiyun /* Output Read Request Queue (ORRQ) Message (32 bytes) */ 999*4882a593Smuzhiyun struct xrrq_orrq { 1000*4882a593Smuzhiyun __le16 num_sges_type; 1001*4882a593Smuzhiyun #define XRRQ_ORRQ_TYPE 0x1UL 1002*4882a593Smuzhiyun #define XRRQ_ORRQ_TYPE_READ_REQ 0x0UL 1003*4882a593Smuzhiyun #define XRRQ_ORRQ_TYPE_ATOMIC_REQ 0x1UL 1004*4882a593Smuzhiyun #define XRRQ_ORRQ_RESERVED10_MASK 0x7feUL 1005*4882a593Smuzhiyun #define XRRQ_ORRQ_RESERVED10_SFT 1 1006*4882a593Smuzhiyun #define XRRQ_ORRQ_NUM_SGES_MASK 0xf800UL 1007*4882a593Smuzhiyun #define XRRQ_ORRQ_NUM_SGES_SFT 11 1008*4882a593Smuzhiyun __le16 reserved16; 1009*4882a593Smuzhiyun __le32 length; 1010*4882a593Smuzhiyun __le32 psn; 1011*4882a593Smuzhiyun #define XRRQ_ORRQ_PSN_MASK 0xffffffUL 1012*4882a593Smuzhiyun #define XRRQ_ORRQ_PSN_SFT 0 1013*4882a593Smuzhiyun #define XRRQ_ORRQ_RESERVED8_1_MASK 0xff000000UL 1014*4882a593Smuzhiyun #define XRRQ_ORRQ_RESERVED8_1_SFT 24 1015*4882a593Smuzhiyun __le32 end_psn; 1016*4882a593Smuzhiyun #define XRRQ_ORRQ_END_PSN_MASK 0xffffffUL 1017*4882a593Smuzhiyun #define XRRQ_ORRQ_END_PSN_SFT 0 1018*4882a593Smuzhiyun #define XRRQ_ORRQ_RESERVED8_2_MASK 0xff000000UL 1019*4882a593Smuzhiyun #define XRRQ_ORRQ_RESERVED8_2_SFT 24 1020*4882a593Smuzhiyun __le64 first_sge_phy_or_sing_sge_va; 1021*4882a593Smuzhiyun __le32 single_sge_l_key; 1022*4882a593Smuzhiyun __le32 single_sge_size; 1023*4882a593Smuzhiyun }; 1024*4882a593Smuzhiyun 1025*4882a593Smuzhiyun /* Page Buffer List Memory Structures (PBL) */ 1026*4882a593Smuzhiyun /* Page Table Entry (PTE) (8 bytes) */ 1027*4882a593Smuzhiyun struct ptu_pte { 1028*4882a593Smuzhiyun __le32 page_next_to_last_last_valid[2]; 1029*4882a593Smuzhiyun #define PTU_PTE_VALID 0x1UL 1030*4882a593Smuzhiyun #define PTU_PTE_LAST 0x2UL 1031*4882a593Smuzhiyun #define PTU_PTE_NEXT_TO_LAST 0x4UL 1032*4882a593Smuzhiyun #define PTU_PTE_PAGE_MASK 0xfffff000UL 1033*4882a593Smuzhiyun #define PTU_PTE_PAGE_SFT 12 1034*4882a593Smuzhiyun }; 1035*4882a593Smuzhiyun 1036*4882a593Smuzhiyun /* Page Directory Entry (PDE) (8 bytes) */ 1037*4882a593Smuzhiyun struct ptu_pde { 1038*4882a593Smuzhiyun __le32 page_valid[2]; 1039*4882a593Smuzhiyun #define PTU_PDE_VALID 0x1UL 1040*4882a593Smuzhiyun #define PTU_PDE_PAGE_MASK 0xfffff000UL 1041*4882a593Smuzhiyun #define PTU_PDE_PAGE_SFT 12 1042*4882a593Smuzhiyun }; 1043*4882a593Smuzhiyun 1044*4882a593Smuzhiyun /* RoCE Fastpath Host Structures */ 1045*4882a593Smuzhiyun /* Command Queue (CMDQ) Interface */ 1046*4882a593Smuzhiyun /* Init CMDQ (16 bytes) */ 1047*4882a593Smuzhiyun struct cmdq_init { 1048*4882a593Smuzhiyun __le64 cmdq_pbl; 1049*4882a593Smuzhiyun __le16 cmdq_size_cmdq_lvl; 1050*4882a593Smuzhiyun #define CMDQ_INIT_CMDQ_LVL_MASK 0x3UL 1051*4882a593Smuzhiyun #define CMDQ_INIT_CMDQ_LVL_SFT 0 1052*4882a593Smuzhiyun #define CMDQ_INIT_CMDQ_SIZE_MASK 0xfffcUL 1053*4882a593Smuzhiyun #define CMDQ_INIT_CMDQ_SIZE_SFT 2 1054*4882a593Smuzhiyun __le16 creq_ring_id; 1055*4882a593Smuzhiyun __le32 prod_idx; 1056*4882a593Smuzhiyun }; 1057*4882a593Smuzhiyun 1058*4882a593Smuzhiyun /* Update CMDQ producer index (16 bytes) */ 1059*4882a593Smuzhiyun struct cmdq_update { 1060*4882a593Smuzhiyun __le64 reserved64; 1061*4882a593Smuzhiyun __le32 reserved32; 1062*4882a593Smuzhiyun __le32 prod_idx; 1063*4882a593Smuzhiyun }; 1064*4882a593Smuzhiyun 1065*4882a593Smuzhiyun /* CMDQ common header structure (16 bytes) */ 1066*4882a593Smuzhiyun struct cmdq_base { 1067*4882a593Smuzhiyun u8 opcode; 1068*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_CREATE_QP 0x1UL 1069*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DESTROY_QP 0x2UL 1070*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_MODIFY_QP 0x3UL 1071*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_QUERY_QP 0x4UL 1072*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_CREATE_SRQ 0x5UL 1073*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DESTROY_SRQ 0x6UL 1074*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_QUERY_SRQ 0x8UL 1075*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_CREATE_CQ 0x9UL 1076*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DESTROY_CQ 0xaUL 1077*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_RESIZE_CQ 0xcUL 1078*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_ALLOCATE_MRW 0xdUL 1079*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DEALLOCATE_KEY 0xeUL 1080*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_REGISTER_MR 0xfUL 1081*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DEREGISTER_MR 0x10UL 1082*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_ADD_GID 0x11UL 1083*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DELETE_GID 0x12UL 1084*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_MODIFY_GID 0x17UL 1085*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_QUERY_GID 0x18UL 1086*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_CREATE_QP1 0x13UL 1087*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DESTROY_QP1 0x14UL 1088*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_CREATE_AH 0x15UL 1089*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DESTROY_AH 0x16UL 1090*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_INITIALIZE_FW 0x80UL 1091*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_DEINITIALIZE_FW 0x81UL 1092*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_STOP_FUNC 0x82UL 1093*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_QUERY_FUNC 0x83UL 1094*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_SET_FUNC_RESOURCES 0x84UL 1095*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_READ_CONTEXT 0x85UL 1096*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_VF_BACKCHANNEL_REQUEST 0x86UL 1097*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_READ_VF_MEMORY 0x87UL 1098*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_COMPLETE_VF_REQUEST 0x88UL 1099*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_EXTEND_CONTEXT_ARRRAY 0x89UL 1100*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_MAP_TC_TO_COS 0x8aUL 1101*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_QUERY_VERSION 0x8bUL 1102*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_MODIFY_CC 0x8cUL 1103*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_QUERY_CC 0x8dUL 1104*4882a593Smuzhiyun #define CMDQ_BASE_OPCODE_QUERY_ROCE_STATS 0x8eUL 1105*4882a593Smuzhiyun u8 cmd_size; 1106*4882a593Smuzhiyun __le16 flags; 1107*4882a593Smuzhiyun __le16 cookie; 1108*4882a593Smuzhiyun u8 resp_size; 1109*4882a593Smuzhiyun u8 reserved8; 1110*4882a593Smuzhiyun __le64 resp_addr; 1111*4882a593Smuzhiyun }; 1112*4882a593Smuzhiyun 1113*4882a593Smuzhiyun /* Create QP command (96 bytes) */ 1114*4882a593Smuzhiyun struct cmdq_create_qp { 1115*4882a593Smuzhiyun u8 opcode; 1116*4882a593Smuzhiyun #define CMDQ_CREATE_QP_OPCODE_CREATE_QP 0x1UL 1117*4882a593Smuzhiyun u8 cmd_size; 1118*4882a593Smuzhiyun __le16 flags; 1119*4882a593Smuzhiyun __le16 cookie; 1120*4882a593Smuzhiyun u8 resp_size; 1121*4882a593Smuzhiyun u8 reserved8; 1122*4882a593Smuzhiyun __le64 resp_addr; 1123*4882a593Smuzhiyun __le64 qp_handle; 1124*4882a593Smuzhiyun __le32 qp_flags; 1125*4882a593Smuzhiyun #define CMDQ_CREATE_QP_QP_FLAGS_SRQ_USED 0x1UL 1126*4882a593Smuzhiyun #define CMDQ_CREATE_QP_QP_FLAGS_FORCE_COMPLETION 0x2UL 1127*4882a593Smuzhiyun #define CMDQ_CREATE_QP_QP_FLAGS_RESERVED_LKEY_ENABLE 0x4UL 1128*4882a593Smuzhiyun #define CMDQ_CREATE_QP_QP_FLAGS_FR_PMR_ENABLED 0x8UL 1129*4882a593Smuzhiyun #define CMDQ_CREATE_QP_QP_FLAGS_VARIABLE_SIZED_WQE_ENABLED 0x10UL 1130*4882a593Smuzhiyun u8 type; 1131*4882a593Smuzhiyun #define CMDQ_CREATE_QP_TYPE_RC 0x2UL 1132*4882a593Smuzhiyun #define CMDQ_CREATE_QP_TYPE_UD 0x4UL 1133*4882a593Smuzhiyun #define CMDQ_CREATE_QP_TYPE_RAW_ETHERTYPE 0x6UL 1134*4882a593Smuzhiyun #define CMDQ_CREATE_QP_TYPE_GSI 0x7UL 1135*4882a593Smuzhiyun u8 sq_pg_size_sq_lvl; 1136*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_LVL_MASK 0xfUL 1137*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_LVL_SFT 0 1138*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_LVL_LVL_0 0x0UL 1139*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_LVL_LVL_1 0x1UL 1140*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_LVL_LVL_2 0x2UL 1141*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_MASK 0xf0UL 1142*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_SFT 4 1143*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_PG_4K (0x0UL << 4) 1144*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_PG_8K (0x1UL << 4) 1145*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_PG_64K (0x2UL << 4) 1146*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_PG_2M (0x3UL << 4) 1147*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_PG_8M (0x4UL << 4) 1148*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_PG_SIZE_PG_1G (0x5UL << 4) 1149*4882a593Smuzhiyun u8 rq_pg_size_rq_lvl; 1150*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_LVL_MASK 0xfUL 1151*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_LVL_SFT 0 1152*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_LVL_LVL_0 0x0UL 1153*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_LVL_LVL_1 0x1UL 1154*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_LVL_LVL_2 0x2UL 1155*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_MASK 0xf0UL 1156*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_SFT 4 1157*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_PG_4K (0x0UL << 4) 1158*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_PG_8K (0x1UL << 4) 1159*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_PG_64K (0x2UL << 4) 1160*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_PG_2M (0x3UL << 4) 1161*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_PG_8M (0x4UL << 4) 1162*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_PG_SIZE_PG_1G (0x5UL << 4) 1163*4882a593Smuzhiyun u8 unused_0; 1164*4882a593Smuzhiyun __le32 dpi; 1165*4882a593Smuzhiyun __le32 sq_size; 1166*4882a593Smuzhiyun __le32 rq_size; 1167*4882a593Smuzhiyun __le16 sq_fwo_sq_sge; 1168*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_SGE_MASK 0xfUL 1169*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_SGE_SFT 0 1170*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_FWO_MASK 0xfff0UL 1171*4882a593Smuzhiyun #define CMDQ_CREATE_QP_SQ_FWO_SFT 4 1172*4882a593Smuzhiyun __le16 rq_fwo_rq_sge; 1173*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_SGE_MASK 0xfUL 1174*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_SGE_SFT 0 1175*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_FWO_MASK 0xfff0UL 1176*4882a593Smuzhiyun #define CMDQ_CREATE_QP_RQ_FWO_SFT 4 1177*4882a593Smuzhiyun __le32 scq_cid; 1178*4882a593Smuzhiyun __le32 rcq_cid; 1179*4882a593Smuzhiyun __le32 srq_cid; 1180*4882a593Smuzhiyun __le32 pd_id; 1181*4882a593Smuzhiyun __le64 sq_pbl; 1182*4882a593Smuzhiyun __le64 rq_pbl; 1183*4882a593Smuzhiyun __le64 irrq_addr; 1184*4882a593Smuzhiyun __le64 orrq_addr; 1185*4882a593Smuzhiyun }; 1186*4882a593Smuzhiyun 1187*4882a593Smuzhiyun /* Destroy QP command (24 bytes) */ 1188*4882a593Smuzhiyun struct cmdq_destroy_qp { 1189*4882a593Smuzhiyun u8 opcode; 1190*4882a593Smuzhiyun #define CMDQ_DESTROY_QP_OPCODE_DESTROY_QP 0x2UL 1191*4882a593Smuzhiyun u8 cmd_size; 1192*4882a593Smuzhiyun __le16 flags; 1193*4882a593Smuzhiyun __le16 cookie; 1194*4882a593Smuzhiyun u8 resp_size; 1195*4882a593Smuzhiyun u8 reserved8; 1196*4882a593Smuzhiyun __le64 resp_addr; 1197*4882a593Smuzhiyun __le32 qp_cid; 1198*4882a593Smuzhiyun __le32 unused_0; 1199*4882a593Smuzhiyun }; 1200*4882a593Smuzhiyun 1201*4882a593Smuzhiyun /* Modify QP command (112 bytes) */ 1202*4882a593Smuzhiyun struct cmdq_modify_qp { 1203*4882a593Smuzhiyun u8 opcode; 1204*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_OPCODE_MODIFY_QP 0x3UL 1205*4882a593Smuzhiyun u8 cmd_size; 1206*4882a593Smuzhiyun __le16 flags; 1207*4882a593Smuzhiyun __le16 cookie; 1208*4882a593Smuzhiyun u8 resp_size; 1209*4882a593Smuzhiyun u8 reserved8; 1210*4882a593Smuzhiyun __le64 resp_addr; 1211*4882a593Smuzhiyun __le32 modify_mask; 1212*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_STATE 0x1UL 1213*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_EN_SQD_ASYNC_NOTIFY 0x2UL 1214*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS 0x4UL 1215*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_PKEY 0x8UL 1216*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_QKEY 0x10UL 1217*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_DGID 0x20UL 1218*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_FLOW_LABEL 0x40UL 1219*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_SGID_INDEX 0x80UL 1220*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_HOP_LIMIT 0x100UL 1221*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_TRAFFIC_CLASS 0x200UL 1222*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_DEST_MAC 0x400UL 1223*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_PATH_MTU 0x1000UL 1224*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_TIMEOUT 0x2000UL 1225*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_RETRY_CNT 0x4000UL 1226*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_RNR_RETRY 0x8000UL 1227*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_RQ_PSN 0x10000UL 1228*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_MAX_RD_ATOMIC 0x20000UL 1229*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_MIN_RNR_TIMER 0x40000UL 1230*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_SQ_PSN 0x80000UL 1231*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_MAX_DEST_RD_ATOMIC 0x100000UL 1232*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_SQ_SIZE 0x200000UL 1233*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_RQ_SIZE 0x400000UL 1234*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_SQ_SGE 0x800000UL 1235*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_RQ_SGE 0x1000000UL 1236*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_MAX_INLINE_DATA 0x2000000UL 1237*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_DEST_QP_ID 0x4000000UL 1238*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_SRC_MAC 0x8000000UL 1239*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_VLAN_ID 0x10000000UL 1240*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_ENABLE_CC 0x20000000UL 1241*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_TOS_ECN 0x40000000UL 1242*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_MODIFY_MASK_TOS_DSCP 0x80000000UL 1243*4882a593Smuzhiyun __le32 qp_cid; 1244*4882a593Smuzhiyun u8 network_type_en_sqd_async_notify_new_state; 1245*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_MASK 0xfUL 1246*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_SFT 0 1247*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_RESET 0x0UL 1248*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_INIT 0x1UL 1249*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_RTR 0x2UL 1250*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_RTS 0x3UL 1251*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_SQD 0x4UL 1252*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_SQE 0x5UL 1253*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NEW_STATE_ERR 0x6UL 1254*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_EN_SQD_ASYNC_NOTIFY 0x10UL 1255*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NETWORK_TYPE_MASK 0xc0UL 1256*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NETWORK_TYPE_SFT 6 1257*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NETWORK_TYPE_ROCEV1 (0x0UL << 6) 1258*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NETWORK_TYPE_ROCEV2_IPV4 (0x2UL << 6) 1259*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_NETWORK_TYPE_ROCEV2_IPV6 (0x3UL << 6) 1260*4882a593Smuzhiyun u8 access; 1261*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE 0x1UL 1262*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE 0x2UL 1263*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_ACCESS_REMOTE_READ 0x4UL 1264*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC 0x8UL 1265*4882a593Smuzhiyun __le16 pkey; 1266*4882a593Smuzhiyun __le32 qkey; 1267*4882a593Smuzhiyun __le32 dgid[4]; 1268*4882a593Smuzhiyun __le32 flow_label; 1269*4882a593Smuzhiyun __le16 sgid_index; 1270*4882a593Smuzhiyun u8 hop_limit; 1271*4882a593Smuzhiyun u8 traffic_class; 1272*4882a593Smuzhiyun __le16 dest_mac[3]; 1273*4882a593Smuzhiyun u8 tos_dscp_tos_ecn; 1274*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_TOS_ECN_MASK 0x3UL 1275*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_TOS_ECN_SFT 0 1276*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_TOS_DSCP_MASK 0xfcUL 1277*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_TOS_DSCP_SFT 2 1278*4882a593Smuzhiyun u8 path_mtu; 1279*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_MASK 0xf0UL 1280*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_SFT 4 1281*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_MTU_256 (0x0UL << 4) 1282*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_MTU_512 (0x1UL << 4) 1283*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_MTU_1024 (0x2UL << 4) 1284*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_MTU_2048 (0x3UL << 4) 1285*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_MTU_4096 (0x4UL << 4) 1286*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_PATH_MTU_MTU_8192 (0x5UL << 4) 1287*4882a593Smuzhiyun u8 timeout; 1288*4882a593Smuzhiyun u8 retry_cnt; 1289*4882a593Smuzhiyun u8 rnr_retry; 1290*4882a593Smuzhiyun u8 min_rnr_timer; 1291*4882a593Smuzhiyun __le32 rq_psn; 1292*4882a593Smuzhiyun __le32 sq_psn; 1293*4882a593Smuzhiyun u8 max_rd_atomic; 1294*4882a593Smuzhiyun u8 max_dest_rd_atomic; 1295*4882a593Smuzhiyun __le16 enable_cc; 1296*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_ENABLE_CC 0x1UL 1297*4882a593Smuzhiyun __le32 sq_size; 1298*4882a593Smuzhiyun __le32 rq_size; 1299*4882a593Smuzhiyun __le16 sq_sge; 1300*4882a593Smuzhiyun __le16 rq_sge; 1301*4882a593Smuzhiyun __le32 max_inline_data; 1302*4882a593Smuzhiyun __le32 dest_qp_id; 1303*4882a593Smuzhiyun __le32 unused_3; 1304*4882a593Smuzhiyun __le16 src_mac[3]; 1305*4882a593Smuzhiyun __le16 vlan_pcp_vlan_dei_vlan_id; 1306*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_VLAN_ID_MASK 0xfffUL 1307*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_VLAN_ID_SFT 0 1308*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_VLAN_DEI 0x1000UL 1309*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_VLAN_PCP_MASK 0xe000UL 1310*4882a593Smuzhiyun #define CMDQ_MODIFY_QP_VLAN_PCP_SFT 13 1311*4882a593Smuzhiyun }; 1312*4882a593Smuzhiyun 1313*4882a593Smuzhiyun /* Query QP command (24 bytes) */ 1314*4882a593Smuzhiyun struct cmdq_query_qp { 1315*4882a593Smuzhiyun u8 opcode; 1316*4882a593Smuzhiyun #define CMDQ_QUERY_QP_OPCODE_QUERY_QP 0x4UL 1317*4882a593Smuzhiyun u8 cmd_size; 1318*4882a593Smuzhiyun __le16 flags; 1319*4882a593Smuzhiyun __le16 cookie; 1320*4882a593Smuzhiyun u8 resp_size; 1321*4882a593Smuzhiyun u8 reserved8; 1322*4882a593Smuzhiyun __le64 resp_addr; 1323*4882a593Smuzhiyun __le32 qp_cid; 1324*4882a593Smuzhiyun __le32 unused_0; 1325*4882a593Smuzhiyun }; 1326*4882a593Smuzhiyun 1327*4882a593Smuzhiyun /* Create SRQ command (48 bytes) */ 1328*4882a593Smuzhiyun struct cmdq_create_srq { 1329*4882a593Smuzhiyun u8 opcode; 1330*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_OPCODE_CREATE_SRQ 0x5UL 1331*4882a593Smuzhiyun u8 cmd_size; 1332*4882a593Smuzhiyun __le16 flags; 1333*4882a593Smuzhiyun __le16 cookie; 1334*4882a593Smuzhiyun u8 resp_size; 1335*4882a593Smuzhiyun u8 reserved8; 1336*4882a593Smuzhiyun __le64 resp_addr; 1337*4882a593Smuzhiyun __le64 srq_handle; 1338*4882a593Smuzhiyun __le16 pg_size_lvl; 1339*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_LVL_MASK 0x3UL 1340*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_LVL_SFT 0 1341*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_LVL_LVL_0 0x0UL 1342*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_LVL_LVL_1 0x1UL 1343*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_LVL_LVL_2 0x2UL 1344*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_MASK 0x1cUL 1345*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_SFT 2 1346*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_PG_4K (0x0UL << 2) 1347*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_PG_8K (0x1UL << 2) 1348*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_PG_64K (0x2UL << 2) 1349*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_PG_2M (0x3UL << 2) 1350*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_PG_8M (0x4UL << 2) 1351*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_PG_SIZE_PG_1G (0x5UL << 2) 1352*4882a593Smuzhiyun __le16 eventq_id; 1353*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_EVENTQ_ID_MASK 0xfffUL 1354*4882a593Smuzhiyun #define CMDQ_CREATE_SRQ_EVENTQ_ID_SFT 0 1355*4882a593Smuzhiyun __le16 srq_size; 1356*4882a593Smuzhiyun __le16 srq_fwo; 1357*4882a593Smuzhiyun __le32 dpi; 1358*4882a593Smuzhiyun __le32 pd_id; 1359*4882a593Smuzhiyun __le64 pbl; 1360*4882a593Smuzhiyun }; 1361*4882a593Smuzhiyun 1362*4882a593Smuzhiyun /* Destroy SRQ command (24 bytes) */ 1363*4882a593Smuzhiyun struct cmdq_destroy_srq { 1364*4882a593Smuzhiyun u8 opcode; 1365*4882a593Smuzhiyun #define CMDQ_DESTROY_SRQ_OPCODE_DESTROY_SRQ 0x6UL 1366*4882a593Smuzhiyun u8 cmd_size; 1367*4882a593Smuzhiyun __le16 flags; 1368*4882a593Smuzhiyun __le16 cookie; 1369*4882a593Smuzhiyun u8 resp_size; 1370*4882a593Smuzhiyun u8 reserved8; 1371*4882a593Smuzhiyun __le64 resp_addr; 1372*4882a593Smuzhiyun __le32 srq_cid; 1373*4882a593Smuzhiyun __le32 unused_0; 1374*4882a593Smuzhiyun }; 1375*4882a593Smuzhiyun 1376*4882a593Smuzhiyun /* Query SRQ command (24 bytes) */ 1377*4882a593Smuzhiyun struct cmdq_query_srq { 1378*4882a593Smuzhiyun u8 opcode; 1379*4882a593Smuzhiyun #define CMDQ_QUERY_SRQ_OPCODE_QUERY_SRQ 0x8UL 1380*4882a593Smuzhiyun u8 cmd_size; 1381*4882a593Smuzhiyun __le16 flags; 1382*4882a593Smuzhiyun __le16 cookie; 1383*4882a593Smuzhiyun u8 resp_size; 1384*4882a593Smuzhiyun u8 reserved8; 1385*4882a593Smuzhiyun __le64 resp_addr; 1386*4882a593Smuzhiyun __le32 srq_cid; 1387*4882a593Smuzhiyun __le32 unused_0; 1388*4882a593Smuzhiyun }; 1389*4882a593Smuzhiyun 1390*4882a593Smuzhiyun /* Create CQ command (48 bytes) */ 1391*4882a593Smuzhiyun struct cmdq_create_cq { 1392*4882a593Smuzhiyun u8 opcode; 1393*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_OPCODE_CREATE_CQ 0x9UL 1394*4882a593Smuzhiyun u8 cmd_size; 1395*4882a593Smuzhiyun __le16 flags; 1396*4882a593Smuzhiyun __le16 cookie; 1397*4882a593Smuzhiyun u8 resp_size; 1398*4882a593Smuzhiyun u8 reserved8; 1399*4882a593Smuzhiyun __le64 resp_addr; 1400*4882a593Smuzhiyun __le64 cq_handle; 1401*4882a593Smuzhiyun __le32 pg_size_lvl; 1402*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_LVL_MASK 0x3UL 1403*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_LVL_SFT 0 1404*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_LVL_LVL_0 0x0UL 1405*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_LVL_LVL_1 0x1UL 1406*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_LVL_LVL_2 0x2UL 1407*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_MASK 0x1cUL 1408*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_SFT 2 1409*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_PG_4K (0x0UL << 2) 1410*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_PG_8K (0x1UL << 2) 1411*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_PG_64K (0x2UL << 2) 1412*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_PG_2M (0x3UL << 2) 1413*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_PG_8M (0x4UL << 2) 1414*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_PG_SIZE_PG_1G (0x5UL << 2) 1415*4882a593Smuzhiyun __le32 cq_fco_cnq_id; 1416*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_CNQ_ID_MASK 0xfffUL 1417*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_CNQ_ID_SFT 0 1418*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_CQ_FCO_MASK 0xfffff000UL 1419*4882a593Smuzhiyun #define CMDQ_CREATE_CQ_CQ_FCO_SFT 12 1420*4882a593Smuzhiyun __le32 dpi; 1421*4882a593Smuzhiyun __le32 cq_size; 1422*4882a593Smuzhiyun __le64 pbl; 1423*4882a593Smuzhiyun }; 1424*4882a593Smuzhiyun 1425*4882a593Smuzhiyun /* Destroy CQ command (24 bytes) */ 1426*4882a593Smuzhiyun struct cmdq_destroy_cq { 1427*4882a593Smuzhiyun u8 opcode; 1428*4882a593Smuzhiyun #define CMDQ_DESTROY_CQ_OPCODE_DESTROY_CQ 0xaUL 1429*4882a593Smuzhiyun u8 cmd_size; 1430*4882a593Smuzhiyun __le16 flags; 1431*4882a593Smuzhiyun __le16 cookie; 1432*4882a593Smuzhiyun u8 resp_size; 1433*4882a593Smuzhiyun u8 reserved8; 1434*4882a593Smuzhiyun __le64 resp_addr; 1435*4882a593Smuzhiyun __le32 cq_cid; 1436*4882a593Smuzhiyun __le32 unused_0; 1437*4882a593Smuzhiyun }; 1438*4882a593Smuzhiyun 1439*4882a593Smuzhiyun /* Resize CQ command (40 bytes) */ 1440*4882a593Smuzhiyun struct cmdq_resize_cq { 1441*4882a593Smuzhiyun u8 opcode; 1442*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_OPCODE_RESIZE_CQ 0xcUL 1443*4882a593Smuzhiyun u8 cmd_size; 1444*4882a593Smuzhiyun __le16 flags; 1445*4882a593Smuzhiyun __le16 cookie; 1446*4882a593Smuzhiyun u8 resp_size; 1447*4882a593Smuzhiyun u8 reserved8; 1448*4882a593Smuzhiyun __le64 resp_addr; 1449*4882a593Smuzhiyun __le32 cq_cid; 1450*4882a593Smuzhiyun __le32 new_cq_size_pg_size_lvl; 1451*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_LVL_MASK 0x3UL 1452*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_LVL_SFT 0 1453*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_LVL_LVL_0 0x0UL 1454*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_LVL_LVL_1 0x1UL 1455*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_LVL_LVL_2 0x2UL 1456*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_MASK 0x1cUL 1457*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_SFT 2 1458*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_PG_4K (0x0UL << 2) 1459*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_PG_8K (0x1UL << 2) 1460*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_PG_64K (0x2UL << 2) 1461*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_PG_2M (0x3UL << 2) 1462*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_PG_8M (0x4UL << 2) 1463*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_PG_SIZE_PG_1G (0x5UL << 2) 1464*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_NEW_CQ_SIZE_MASK 0x1fffe0UL 1465*4882a593Smuzhiyun #define CMDQ_RESIZE_CQ_NEW_CQ_SIZE_SFT 5 1466*4882a593Smuzhiyun __le64 new_pbl; 1467*4882a593Smuzhiyun __le32 new_cq_fco; 1468*4882a593Smuzhiyun __le32 unused_2; 1469*4882a593Smuzhiyun }; 1470*4882a593Smuzhiyun 1471*4882a593Smuzhiyun /* Allocate MRW command (32 bytes) */ 1472*4882a593Smuzhiyun struct cmdq_allocate_mrw { 1473*4882a593Smuzhiyun u8 opcode; 1474*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_OPCODE_ALLOCATE_MRW 0xdUL 1475*4882a593Smuzhiyun u8 cmd_size; 1476*4882a593Smuzhiyun __le16 flags; 1477*4882a593Smuzhiyun __le16 cookie; 1478*4882a593Smuzhiyun u8 resp_size; 1479*4882a593Smuzhiyun u8 reserved8; 1480*4882a593Smuzhiyun __le64 resp_addr; 1481*4882a593Smuzhiyun __le64 mrw_handle; 1482*4882a593Smuzhiyun u8 mrw_flags; 1483*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_MRW_FLAGS_MASK 0xfUL 1484*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_MRW_FLAGS_SFT 0 1485*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_MRW_FLAGS_MR 0x0UL 1486*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_MRW_FLAGS_PMR 0x1UL 1487*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE1 0x2UL 1488*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE2A 0x3UL 1489*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_MRW_FLAGS_MW_TYPE2B 0x4UL 1490*4882a593Smuzhiyun u8 access; 1491*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_ACCESS_RESERVED_MASK 0x1fUL 1492*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_ACCESS_RESERVED_SFT 0 1493*4882a593Smuzhiyun #define CMDQ_ALLOCATE_MRW_ACCESS_CONSUMER_OWNED_KEY 0x20UL 1494*4882a593Smuzhiyun __le16 unused_1; 1495*4882a593Smuzhiyun __le32 pd_id; 1496*4882a593Smuzhiyun }; 1497*4882a593Smuzhiyun 1498*4882a593Smuzhiyun /* De-allocate key command (24 bytes) */ 1499*4882a593Smuzhiyun struct cmdq_deallocate_key { 1500*4882a593Smuzhiyun u8 opcode; 1501*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_OPCODE_DEALLOCATE_KEY 0xeUL 1502*4882a593Smuzhiyun u8 cmd_size; 1503*4882a593Smuzhiyun __le16 flags; 1504*4882a593Smuzhiyun __le16 cookie; 1505*4882a593Smuzhiyun u8 resp_size; 1506*4882a593Smuzhiyun u8 reserved8; 1507*4882a593Smuzhiyun __le64 resp_addr; 1508*4882a593Smuzhiyun u8 mrw_flags; 1509*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_MRW_FLAGS_MASK 0xfUL 1510*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_MRW_FLAGS_SFT 0 1511*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_MRW_FLAGS_MR 0x0UL 1512*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_MRW_FLAGS_PMR 0x1UL 1513*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_MRW_FLAGS_MW_TYPE1 0x2UL 1514*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_MRW_FLAGS_MW_TYPE2A 0x3UL 1515*4882a593Smuzhiyun #define CMDQ_DEALLOCATE_KEY_MRW_FLAGS_MW_TYPE2B 0x4UL 1516*4882a593Smuzhiyun u8 unused_1[3]; 1517*4882a593Smuzhiyun __le32 key; 1518*4882a593Smuzhiyun }; 1519*4882a593Smuzhiyun 1520*4882a593Smuzhiyun /* Register MR command (48 bytes) */ 1521*4882a593Smuzhiyun struct cmdq_register_mr { 1522*4882a593Smuzhiyun u8 opcode; 1523*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_OPCODE_REGISTER_MR 0xfUL 1524*4882a593Smuzhiyun u8 cmd_size; 1525*4882a593Smuzhiyun __le16 flags; 1526*4882a593Smuzhiyun __le16 cookie; 1527*4882a593Smuzhiyun u8 resp_size; 1528*4882a593Smuzhiyun u8 reserved8; 1529*4882a593Smuzhiyun __le64 resp_addr; 1530*4882a593Smuzhiyun u8 log2_pg_size_lvl; 1531*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LVL_MASK 0x3UL 1532*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LVL_SFT 0 1533*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LVL_LVL_0 0x0UL 1534*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LVL_LVL_1 0x1UL 1535*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LVL_LVL_2 0x2UL 1536*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LVL_LAST CMDQ_REGISTER_MR_LVL_LVL_2 1537*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_MASK 0x7cUL 1538*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_SFT 2 1539*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_4K (0xcUL << 2) 1540*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_8K (0xdUL << 2) 1541*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_64K (0x10UL << 2) 1542*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_256K (0x12UL << 2) 1543*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_1M (0x14UL << 2) 1544*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_2M (0x15UL << 2) 1545*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_4M (0x16UL << 2) 1546*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_1G (0x1eUL << 2) 1547*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PG_SIZE_LAST \ 1548*4882a593Smuzhiyun CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_1G 1549*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_UNUSED1 0x80UL 1550*4882a593Smuzhiyun u8 access; 1551*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_ACCESS_LOCAL_WRITE 0x1UL 1552*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_ACCESS_REMOTE_READ 0x2UL 1553*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_ACCESS_REMOTE_WRITE 0x4UL 1554*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_ACCESS_REMOTE_ATOMIC 0x8UL 1555*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_ACCESS_MW_BIND 0x10UL 1556*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_ACCESS_ZERO_BASED 0x20UL 1557*4882a593Smuzhiyun __le16 log2_pbl_pg_size; 1558*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_MASK 0x1fUL 1559*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_SFT 0 1560*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_4K 0xcUL 1561*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_8K 0xdUL 1562*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_64K 0x10UL 1563*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_256K 0x12UL 1564*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1M 0x14UL 1565*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_2M 0x15UL 1566*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_4M 0x16UL 1567*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1G 0x1eUL 1568*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_LAST \ 1569*4882a593Smuzhiyun CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1G 1570*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_UNUSED11_MASK 0xffe0UL 1571*4882a593Smuzhiyun #define CMDQ_REGISTER_MR_UNUSED11_SFT 5 1572*4882a593Smuzhiyun __le32 key; 1573*4882a593Smuzhiyun __le64 pbl; 1574*4882a593Smuzhiyun __le64 va; 1575*4882a593Smuzhiyun __le64 mr_size; 1576*4882a593Smuzhiyun }; 1577*4882a593Smuzhiyun 1578*4882a593Smuzhiyun /* Deregister MR command (24 bytes) */ 1579*4882a593Smuzhiyun struct cmdq_deregister_mr { 1580*4882a593Smuzhiyun u8 opcode; 1581*4882a593Smuzhiyun #define CMDQ_DEREGISTER_MR_OPCODE_DEREGISTER_MR 0x10UL 1582*4882a593Smuzhiyun u8 cmd_size; 1583*4882a593Smuzhiyun __le16 flags; 1584*4882a593Smuzhiyun __le16 cookie; 1585*4882a593Smuzhiyun u8 resp_size; 1586*4882a593Smuzhiyun u8 reserved8; 1587*4882a593Smuzhiyun __le64 resp_addr; 1588*4882a593Smuzhiyun __le32 lkey; 1589*4882a593Smuzhiyun __le32 unused_0; 1590*4882a593Smuzhiyun }; 1591*4882a593Smuzhiyun 1592*4882a593Smuzhiyun /* Add GID command (48 bytes) */ 1593*4882a593Smuzhiyun struct cmdq_add_gid { 1594*4882a593Smuzhiyun u8 opcode; 1595*4882a593Smuzhiyun #define CMDQ_ADD_GID_OPCODE_ADD_GID 0x11UL 1596*4882a593Smuzhiyun u8 cmd_size; 1597*4882a593Smuzhiyun __le16 flags; 1598*4882a593Smuzhiyun __le16 cookie; 1599*4882a593Smuzhiyun u8 resp_size; 1600*4882a593Smuzhiyun u8 reserved8; 1601*4882a593Smuzhiyun __le64 resp_addr; 1602*4882a593Smuzhiyun __be32 gid[4]; 1603*4882a593Smuzhiyun __be16 src_mac[3]; 1604*4882a593Smuzhiyun __le16 vlan; 1605*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_VLAN_ID_MASK 0xfffUL 1606*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_VLAN_ID_SFT 0 1607*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_MASK 0x7000UL 1608*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_SFT 12 1609*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_88A8 (0x0UL << 12) 1610*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_8100 (0x1UL << 12) 1611*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_9100 (0x2UL << 12) 1612*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_9200 (0x3UL << 12) 1613*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_9300 (0x4UL << 12) 1614*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_CFG1 (0x5UL << 12) 1615*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_CFG2 (0x6UL << 12) 1616*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_TPID_CFG3 (0x7UL << 12) 1617*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_TPID_LAST CMDQ_ADD_GID_VLAN_TPID_TPID_CFG3 1618*4882a593Smuzhiyun #define CMDQ_ADD_GID_VLAN_VLAN_EN 0x8000UL 1619*4882a593Smuzhiyun __le16 ipid; 1620*4882a593Smuzhiyun __le16 stats_ctx; 1621*4882a593Smuzhiyun #define CMDQ_ADD_GID_STATS_CTX_STATS_CTX_ID_MASK 0x7fffUL 1622*4882a593Smuzhiyun #define CMDQ_ADD_GID_STATS_CTX_STATS_CTX_ID_SFT 0 1623*4882a593Smuzhiyun #define CMDQ_ADD_GID_STATS_CTX_STATS_CTX_VALID 0x8000UL 1624*4882a593Smuzhiyun __le32 unused_0; 1625*4882a593Smuzhiyun }; 1626*4882a593Smuzhiyun 1627*4882a593Smuzhiyun /* Delete GID command (24 bytes) */ 1628*4882a593Smuzhiyun struct cmdq_delete_gid { 1629*4882a593Smuzhiyun u8 opcode; 1630*4882a593Smuzhiyun #define CMDQ_DELETE_GID_OPCODE_DELETE_GID 0x12UL 1631*4882a593Smuzhiyun u8 cmd_size; 1632*4882a593Smuzhiyun __le16 flags; 1633*4882a593Smuzhiyun __le16 cookie; 1634*4882a593Smuzhiyun u8 resp_size; 1635*4882a593Smuzhiyun u8 reserved8; 1636*4882a593Smuzhiyun __le64 resp_addr; 1637*4882a593Smuzhiyun __le16 gid_index; 1638*4882a593Smuzhiyun __le16 unused_0; 1639*4882a593Smuzhiyun __le32 unused_1; 1640*4882a593Smuzhiyun }; 1641*4882a593Smuzhiyun 1642*4882a593Smuzhiyun /* Modify GID command (48 bytes) */ 1643*4882a593Smuzhiyun struct cmdq_modify_gid { 1644*4882a593Smuzhiyun u8 opcode; 1645*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_OPCODE_MODIFY_GID 0x17UL 1646*4882a593Smuzhiyun u8 cmd_size; 1647*4882a593Smuzhiyun __le16 flags; 1648*4882a593Smuzhiyun __le16 cookie; 1649*4882a593Smuzhiyun u8 resp_size; 1650*4882a593Smuzhiyun u8 reserved8; 1651*4882a593Smuzhiyun __le64 resp_addr; 1652*4882a593Smuzhiyun __be32 gid[4]; 1653*4882a593Smuzhiyun __be16 src_mac[3]; 1654*4882a593Smuzhiyun __le16 vlan; 1655*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_VLAN_ID_MASK 0xfffUL 1656*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_VLAN_ID_SFT 0 1657*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_MASK 0x7000UL 1658*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_SFT 12 1659*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_88A8 (0x0UL << 12) 1660*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_8100 (0x1UL << 12) 1661*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_9100 (0x2UL << 12) 1662*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_9200 (0x3UL << 12) 1663*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_9300 (0x4UL << 12) 1664*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_CFG1 (0x5UL << 12) 1665*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_CFG2 (0x6UL << 12) 1666*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_TPID_CFG3 (0x7UL << 12) 1667*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_TPID_LAST \ 1668*4882a593Smuzhiyun CMDQ_MODIFY_GID_VLAN_TPID_TPID_CFG3 1669*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_VLAN_VLAN_EN 0x8000UL 1670*4882a593Smuzhiyun __le16 ipid; 1671*4882a593Smuzhiyun __le16 gid_index; 1672*4882a593Smuzhiyun __le16 stats_ctx; 1673*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_STATS_CTX_STATS_CTX_ID_MASK 0x7fffUL 1674*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_STATS_CTX_STATS_CTX_ID_SFT 0 1675*4882a593Smuzhiyun #define CMDQ_MODIFY_GID_STATS_CTX_STATS_CTX_VALID 0x8000UL 1676*4882a593Smuzhiyun __le16 unused_0; 1677*4882a593Smuzhiyun }; 1678*4882a593Smuzhiyun 1679*4882a593Smuzhiyun /* Query GID command (24 bytes) */ 1680*4882a593Smuzhiyun struct cmdq_query_gid { 1681*4882a593Smuzhiyun u8 opcode; 1682*4882a593Smuzhiyun #define CMDQ_QUERY_GID_OPCODE_QUERY_GID 0x18UL 1683*4882a593Smuzhiyun u8 cmd_size; 1684*4882a593Smuzhiyun __le16 flags; 1685*4882a593Smuzhiyun __le16 cookie; 1686*4882a593Smuzhiyun u8 resp_size; 1687*4882a593Smuzhiyun u8 reserved8; 1688*4882a593Smuzhiyun __le64 resp_addr; 1689*4882a593Smuzhiyun __le16 gid_index; 1690*4882a593Smuzhiyun __le16 unused_0; 1691*4882a593Smuzhiyun __le32 unused_1; 1692*4882a593Smuzhiyun }; 1693*4882a593Smuzhiyun 1694*4882a593Smuzhiyun /* Create QP1 command (80 bytes) */ 1695*4882a593Smuzhiyun struct cmdq_create_qp1 { 1696*4882a593Smuzhiyun u8 opcode; 1697*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_OPCODE_CREATE_QP1 0x13UL 1698*4882a593Smuzhiyun u8 cmd_size; 1699*4882a593Smuzhiyun __le16 flags; 1700*4882a593Smuzhiyun __le16 cookie; 1701*4882a593Smuzhiyun u8 resp_size; 1702*4882a593Smuzhiyun u8 reserved8; 1703*4882a593Smuzhiyun __le64 resp_addr; 1704*4882a593Smuzhiyun __le64 qp_handle; 1705*4882a593Smuzhiyun __le32 qp_flags; 1706*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_QP_FLAGS_SRQ_USED 0x1UL 1707*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_QP_FLAGS_FORCE_COMPLETION 0x2UL 1708*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_QP_FLAGS_RESERVED_LKEY_ENABLE 0x4UL 1709*4882a593Smuzhiyun u8 type; 1710*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_TYPE_GSI 0x1UL 1711*4882a593Smuzhiyun u8 sq_pg_size_sq_lvl; 1712*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_LVL_MASK 0xfUL 1713*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_LVL_SFT 0 1714*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_LVL_LVL_0 0x0UL 1715*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_LVL_LVL_1 0x1UL 1716*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_LVL_LVL_2 0x2UL 1717*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_MASK 0xf0UL 1718*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_SFT 4 1719*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_4K (0x0UL << 4) 1720*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_8K (0x1UL << 4) 1721*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_64K (0x2UL << 4) 1722*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_2M (0x3UL << 4) 1723*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_8M (0x4UL << 4) 1724*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_1G (0x5UL << 4) 1725*4882a593Smuzhiyun u8 rq_pg_size_rq_lvl; 1726*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_LVL_MASK 0xfUL 1727*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_LVL_SFT 0 1728*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_LVL_LVL_0 0x0UL 1729*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_LVL_LVL_1 0x1UL 1730*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_LVL_LVL_2 0x2UL 1731*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_MASK 0xf0UL 1732*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_SFT 4 1733*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_4K (0x0UL << 4) 1734*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_8K (0x1UL << 4) 1735*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_64K (0x2UL << 4) 1736*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_2M (0x3UL << 4) 1737*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_8M (0x4UL << 4) 1738*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_1G (0x5UL << 4) 1739*4882a593Smuzhiyun u8 unused_0; 1740*4882a593Smuzhiyun __le32 dpi; 1741*4882a593Smuzhiyun __le32 sq_size; 1742*4882a593Smuzhiyun __le32 rq_size; 1743*4882a593Smuzhiyun __le16 sq_fwo_sq_sge; 1744*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_SGE_MASK 0xfUL 1745*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_SGE_SFT 0 1746*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_FWO_MASK 0xfff0UL 1747*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_SQ_FWO_SFT 4 1748*4882a593Smuzhiyun __le16 rq_fwo_rq_sge; 1749*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_SGE_MASK 0xfUL 1750*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_SGE_SFT 0 1751*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_FWO_MASK 0xfff0UL 1752*4882a593Smuzhiyun #define CMDQ_CREATE_QP1_RQ_FWO_SFT 4 1753*4882a593Smuzhiyun __le32 scq_cid; 1754*4882a593Smuzhiyun __le32 rcq_cid; 1755*4882a593Smuzhiyun __le32 srq_cid; 1756*4882a593Smuzhiyun __le32 pd_id; 1757*4882a593Smuzhiyun __le64 sq_pbl; 1758*4882a593Smuzhiyun __le64 rq_pbl; 1759*4882a593Smuzhiyun }; 1760*4882a593Smuzhiyun 1761*4882a593Smuzhiyun /* Destroy QP1 command (24 bytes) */ 1762*4882a593Smuzhiyun struct cmdq_destroy_qp1 { 1763*4882a593Smuzhiyun u8 opcode; 1764*4882a593Smuzhiyun #define CMDQ_DESTROY_QP1_OPCODE_DESTROY_QP1 0x14UL 1765*4882a593Smuzhiyun u8 cmd_size; 1766*4882a593Smuzhiyun __le16 flags; 1767*4882a593Smuzhiyun __le16 cookie; 1768*4882a593Smuzhiyun u8 resp_size; 1769*4882a593Smuzhiyun u8 reserved8; 1770*4882a593Smuzhiyun __le64 resp_addr; 1771*4882a593Smuzhiyun __le32 qp1_cid; 1772*4882a593Smuzhiyun __le32 unused_0; 1773*4882a593Smuzhiyun }; 1774*4882a593Smuzhiyun 1775*4882a593Smuzhiyun /* Create AH command (64 bytes) */ 1776*4882a593Smuzhiyun struct cmdq_create_ah { 1777*4882a593Smuzhiyun u8 opcode; 1778*4882a593Smuzhiyun #define CMDQ_CREATE_AH_OPCODE_CREATE_AH 0x15UL 1779*4882a593Smuzhiyun u8 cmd_size; 1780*4882a593Smuzhiyun __le16 flags; 1781*4882a593Smuzhiyun __le16 cookie; 1782*4882a593Smuzhiyun u8 resp_size; 1783*4882a593Smuzhiyun u8 reserved8; 1784*4882a593Smuzhiyun __le64 resp_addr; 1785*4882a593Smuzhiyun __le64 ah_handle; 1786*4882a593Smuzhiyun __le32 dgid[4]; 1787*4882a593Smuzhiyun u8 type; 1788*4882a593Smuzhiyun #define CMDQ_CREATE_AH_TYPE_V1 0x0UL 1789*4882a593Smuzhiyun #define CMDQ_CREATE_AH_TYPE_V2IPV4 0x2UL 1790*4882a593Smuzhiyun #define CMDQ_CREATE_AH_TYPE_V2IPV6 0x3UL 1791*4882a593Smuzhiyun u8 hop_limit; 1792*4882a593Smuzhiyun __le16 sgid_index; 1793*4882a593Smuzhiyun __le32 dest_vlan_id_flow_label; 1794*4882a593Smuzhiyun #define CMDQ_CREATE_AH_FLOW_LABEL_MASK 0xfffffUL 1795*4882a593Smuzhiyun #define CMDQ_CREATE_AH_FLOW_LABEL_SFT 0 1796*4882a593Smuzhiyun #define CMDQ_CREATE_AH_DEST_VLAN_ID_MASK 0xfff00000UL 1797*4882a593Smuzhiyun #define CMDQ_CREATE_AH_DEST_VLAN_ID_SFT 20 1798*4882a593Smuzhiyun __le32 pd_id; 1799*4882a593Smuzhiyun __le32 unused_0; 1800*4882a593Smuzhiyun __le16 dest_mac[3]; 1801*4882a593Smuzhiyun u8 traffic_class; 1802*4882a593Smuzhiyun u8 unused_1; 1803*4882a593Smuzhiyun }; 1804*4882a593Smuzhiyun 1805*4882a593Smuzhiyun /* Destroy AH command (24 bytes) */ 1806*4882a593Smuzhiyun struct cmdq_destroy_ah { 1807*4882a593Smuzhiyun u8 opcode; 1808*4882a593Smuzhiyun #define CMDQ_DESTROY_AH_OPCODE_DESTROY_AH 0x16UL 1809*4882a593Smuzhiyun u8 cmd_size; 1810*4882a593Smuzhiyun __le16 flags; 1811*4882a593Smuzhiyun __le16 cookie; 1812*4882a593Smuzhiyun u8 resp_size; 1813*4882a593Smuzhiyun u8 reserved8; 1814*4882a593Smuzhiyun __le64 resp_addr; 1815*4882a593Smuzhiyun __le32 ah_cid; 1816*4882a593Smuzhiyun __le32 unused_0; 1817*4882a593Smuzhiyun }; 1818*4882a593Smuzhiyun 1819*4882a593Smuzhiyun /* Initialize Firmware command (112 bytes) */ 1820*4882a593Smuzhiyun struct cmdq_initialize_fw { 1821*4882a593Smuzhiyun u8 opcode; 1822*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_OPCODE_INITIALIZE_FW 0x80UL 1823*4882a593Smuzhiyun u8 cmd_size; 1824*4882a593Smuzhiyun __le16 flags; 1825*4882a593Smuzhiyun __le16 cookie; 1826*4882a593Smuzhiyun u8 resp_size; 1827*4882a593Smuzhiyun u8 reserved8; 1828*4882a593Smuzhiyun __le64 resp_addr; 1829*4882a593Smuzhiyun u8 qpc_pg_size_qpc_lvl; 1830*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_LVL_MASK 0xfUL 1831*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_LVL_SFT 0 1832*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_LVL_LVL_0 0x0UL 1833*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_LVL_LVL_1 0x1UL 1834*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_LVL_LVL_2 0x2UL 1835*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_MASK 0xf0UL 1836*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_SFT 4 1837*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_4K (0x0UL << 4) 1838*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_8K (0x1UL << 4) 1839*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_64K (0x2UL << 4) 1840*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_2M (0x3UL << 4) 1841*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_8M (0x4UL << 4) 1842*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_1G (0x5UL << 4) 1843*4882a593Smuzhiyun u8 mrw_pg_size_mrw_lvl; 1844*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_LVL_MASK 0xfUL 1845*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_LVL_SFT 0 1846*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_LVL_LVL_0 0x0UL 1847*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_LVL_LVL_1 0x1UL 1848*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_LVL_LVL_2 0x2UL 1849*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_MASK 0xf0UL 1850*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_SFT 4 1851*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_PG_4K (0x0UL << 4) 1852*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_PG_8K (0x1UL << 4) 1853*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_PG_64K (0x2UL << 4) 1854*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_PG_2M (0x3UL << 4) 1855*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_PG_8M (0x4UL << 4) 1856*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_MRW_PG_SIZE_PG_1G (0x5UL << 4) 1857*4882a593Smuzhiyun u8 srq_pg_size_srq_lvl; 1858*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_LVL_MASK 0xfUL 1859*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_LVL_SFT 0 1860*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_LVL_LVL_0 0x0UL 1861*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_LVL_LVL_1 0x1UL 1862*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_LVL_LVL_2 0x2UL 1863*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_MASK 0xf0UL 1864*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_SFT 4 1865*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_PG_4K (0x0UL << 4) 1866*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_PG_8K (0x1UL << 4) 1867*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_PG_64K (0x2UL << 4) 1868*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_PG_2M (0x3UL << 4) 1869*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_PG_8M (0x4UL << 4) 1870*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_SRQ_PG_SIZE_PG_1G (0x5UL << 4) 1871*4882a593Smuzhiyun u8 cq_pg_size_cq_lvl; 1872*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_LVL_MASK 0xfUL 1873*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_LVL_SFT 0 1874*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_LVL_LVL_0 0x0UL 1875*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_LVL_LVL_1 0x1UL 1876*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_LVL_LVL_2 0x2UL 1877*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_MASK 0xf0UL 1878*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_SFT 4 1879*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_PG_4K (0x0UL << 4) 1880*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_PG_8K (0x1UL << 4) 1881*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_PG_64K (0x2UL << 4) 1882*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_PG_2M (0x3UL << 4) 1883*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_PG_8M (0x4UL << 4) 1884*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_CQ_PG_SIZE_PG_1G (0x5UL << 4) 1885*4882a593Smuzhiyun u8 tqm_pg_size_tqm_lvl; 1886*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_LVL_MASK 0xfUL 1887*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_LVL_SFT 0 1888*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_LVL_LVL_0 0x0UL 1889*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_LVL_LVL_1 0x1UL 1890*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_LVL_LVL_2 0x2UL 1891*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_MASK 0xf0UL 1892*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_SFT 4 1893*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_PG_4K (0x0UL << 4) 1894*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_PG_8K (0x1UL << 4) 1895*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_PG_64K (0x2UL << 4) 1896*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_PG_2M (0x3UL << 4) 1897*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_PG_8M (0x4UL << 4) 1898*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TQM_PG_SIZE_PG_1G (0x5UL << 4) 1899*4882a593Smuzhiyun u8 tim_pg_size_tim_lvl; 1900*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_LVL_MASK 0xfUL 1901*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_LVL_SFT 0 1902*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_LVL_LVL_0 0x0UL 1903*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_LVL_LVL_1 0x1UL 1904*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_LVL_LVL_2 0x2UL 1905*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_MASK 0xf0UL 1906*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_SFT 4 1907*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_PG_4K (0x0UL << 4) 1908*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_PG_8K (0x1UL << 4) 1909*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_PG_64K (0x2UL << 4) 1910*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_PG_2M (0x3UL << 4) 1911*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_PG_8M (0x4UL << 4) 1912*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_TIM_PG_SIZE_PG_1G (0x5UL << 4) 1913*4882a593Smuzhiyun /* This value is (log-base-2-of-DBR-page-size - 12). 1914*4882a593Smuzhiyun * 0 for 4KB. HW supported values are enumerated below. 1915*4882a593Smuzhiyun */ 1916*4882a593Smuzhiyun __le16 log2_dbr_pg_size; 1917*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_MASK 0xfUL 1918*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_SFT 0 1919*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_4K 0x0UL 1920*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_8K 0x1UL 1921*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_16K 0x2UL 1922*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_32K 0x3UL 1923*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_64K 0x4UL 1924*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_128K 0x5UL 1925*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_256K 0x6UL 1926*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_512K 0x7UL 1927*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_1M 0x8UL 1928*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_2M 0x9UL 1929*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_4M 0xaUL 1930*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_8M 0xbUL 1931*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_16M 0xcUL 1932*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_32M 0xdUL 1933*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_64M 0xeUL 1934*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_128M 0xfUL 1935*4882a593Smuzhiyun #define CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_LAST \ 1936*4882a593Smuzhiyun CMDQ_INITIALIZE_FW_LOG2_DBR_PG_SIZE_PG_128M 1937*4882a593Smuzhiyun __le64 qpc_page_dir; 1938*4882a593Smuzhiyun __le64 mrw_page_dir; 1939*4882a593Smuzhiyun __le64 srq_page_dir; 1940*4882a593Smuzhiyun __le64 cq_page_dir; 1941*4882a593Smuzhiyun __le64 tqm_page_dir; 1942*4882a593Smuzhiyun __le64 tim_page_dir; 1943*4882a593Smuzhiyun __le32 number_of_qp; 1944*4882a593Smuzhiyun __le32 number_of_mrw; 1945*4882a593Smuzhiyun __le32 number_of_srq; 1946*4882a593Smuzhiyun __le32 number_of_cq; 1947*4882a593Smuzhiyun __le32 max_qp_per_vf; 1948*4882a593Smuzhiyun __le32 max_mrw_per_vf; 1949*4882a593Smuzhiyun __le32 max_srq_per_vf; 1950*4882a593Smuzhiyun __le32 max_cq_per_vf; 1951*4882a593Smuzhiyun __le32 max_gid_per_vf; 1952*4882a593Smuzhiyun __le32 stat_ctx_id; 1953*4882a593Smuzhiyun }; 1954*4882a593Smuzhiyun 1955*4882a593Smuzhiyun /* De-initialize Firmware command (16 bytes) */ 1956*4882a593Smuzhiyun struct cmdq_deinitialize_fw { 1957*4882a593Smuzhiyun u8 opcode; 1958*4882a593Smuzhiyun #define CMDQ_DEINITIALIZE_FW_OPCODE_DEINITIALIZE_FW 0x81UL 1959*4882a593Smuzhiyun u8 cmd_size; 1960*4882a593Smuzhiyun __le16 flags; 1961*4882a593Smuzhiyun __le16 cookie; 1962*4882a593Smuzhiyun u8 resp_size; 1963*4882a593Smuzhiyun u8 reserved8; 1964*4882a593Smuzhiyun __le64 resp_addr; 1965*4882a593Smuzhiyun }; 1966*4882a593Smuzhiyun 1967*4882a593Smuzhiyun /* Stop function command (16 bytes) */ 1968*4882a593Smuzhiyun struct cmdq_stop_func { 1969*4882a593Smuzhiyun u8 opcode; 1970*4882a593Smuzhiyun #define CMDQ_STOP_FUNC_OPCODE_STOP_FUNC 0x82UL 1971*4882a593Smuzhiyun u8 cmd_size; 1972*4882a593Smuzhiyun __le16 flags; 1973*4882a593Smuzhiyun __le16 cookie; 1974*4882a593Smuzhiyun u8 resp_size; 1975*4882a593Smuzhiyun u8 reserved8; 1976*4882a593Smuzhiyun __le64 resp_addr; 1977*4882a593Smuzhiyun }; 1978*4882a593Smuzhiyun 1979*4882a593Smuzhiyun /* Query function command (16 bytes) */ 1980*4882a593Smuzhiyun struct cmdq_query_func { 1981*4882a593Smuzhiyun u8 opcode; 1982*4882a593Smuzhiyun #define CMDQ_QUERY_FUNC_OPCODE_QUERY_FUNC 0x83UL 1983*4882a593Smuzhiyun u8 cmd_size; 1984*4882a593Smuzhiyun __le16 flags; 1985*4882a593Smuzhiyun __le16 cookie; 1986*4882a593Smuzhiyun u8 resp_size; 1987*4882a593Smuzhiyun u8 reserved8; 1988*4882a593Smuzhiyun __le64 resp_addr; 1989*4882a593Smuzhiyun }; 1990*4882a593Smuzhiyun 1991*4882a593Smuzhiyun /* Set function resources command (16 bytes) */ 1992*4882a593Smuzhiyun struct cmdq_set_func_resources { 1993*4882a593Smuzhiyun u8 opcode; 1994*4882a593Smuzhiyun #define CMDQ_SET_FUNC_RESOURCES_OPCODE_SET_FUNC_RESOURCES 0x84UL 1995*4882a593Smuzhiyun u8 cmd_size; 1996*4882a593Smuzhiyun __le16 flags; 1997*4882a593Smuzhiyun __le16 cookie; 1998*4882a593Smuzhiyun u8 resp_size; 1999*4882a593Smuzhiyun u8 reserved8; 2000*4882a593Smuzhiyun __le64 resp_addr; 2001*4882a593Smuzhiyun __le32 number_of_qp; 2002*4882a593Smuzhiyun __le32 number_of_mrw; 2003*4882a593Smuzhiyun __le32 number_of_srq; 2004*4882a593Smuzhiyun __le32 number_of_cq; 2005*4882a593Smuzhiyun __le32 max_qp_per_vf; 2006*4882a593Smuzhiyun __le32 max_mrw_per_vf; 2007*4882a593Smuzhiyun __le32 max_srq_per_vf; 2008*4882a593Smuzhiyun __le32 max_cq_per_vf; 2009*4882a593Smuzhiyun __le32 max_gid_per_vf; 2010*4882a593Smuzhiyun __le32 stat_ctx_id; 2011*4882a593Smuzhiyun }; 2012*4882a593Smuzhiyun 2013*4882a593Smuzhiyun /* Read hardware resource context command (24 bytes) */ 2014*4882a593Smuzhiyun struct cmdq_read_context { 2015*4882a593Smuzhiyun u8 opcode; 2016*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_OPCODE_READ_CONTEXT 0x85UL 2017*4882a593Smuzhiyun u8 cmd_size; 2018*4882a593Smuzhiyun __le16 flags; 2019*4882a593Smuzhiyun __le16 cookie; 2020*4882a593Smuzhiyun u8 resp_size; 2021*4882a593Smuzhiyun u8 reserved8; 2022*4882a593Smuzhiyun __le64 resp_addr; 2023*4882a593Smuzhiyun __le32 type_xid; 2024*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_XID_MASK 0xffffffUL 2025*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_XID_SFT 0 2026*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_TYPE_MASK 0xff000000UL 2027*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_TYPE_SFT 24 2028*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_TYPE_QPC (0x0UL << 24) 2029*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_TYPE_CQ (0x1UL << 24) 2030*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_TYPE_MRW (0x2UL << 24) 2031*4882a593Smuzhiyun #define CMDQ_READ_CONTEXT_TYPE_SRQ (0x3UL << 24) 2032*4882a593Smuzhiyun __le32 unused_0; 2033*4882a593Smuzhiyun }; 2034*4882a593Smuzhiyun 2035*4882a593Smuzhiyun /* Map TC to COS. Can only be issued from a PF (24 bytes) */ 2036*4882a593Smuzhiyun struct cmdq_map_tc_to_cos { 2037*4882a593Smuzhiyun u8 opcode; 2038*4882a593Smuzhiyun #define CMDQ_MAP_TC_TO_COS_OPCODE_MAP_TC_TO_COS 0x8aUL 2039*4882a593Smuzhiyun u8 cmd_size; 2040*4882a593Smuzhiyun __le16 flags; 2041*4882a593Smuzhiyun __le16 cookie; 2042*4882a593Smuzhiyun u8 resp_size; 2043*4882a593Smuzhiyun u8 reserved8; 2044*4882a593Smuzhiyun __le64 resp_addr; 2045*4882a593Smuzhiyun __le16 cos0; 2046*4882a593Smuzhiyun #define CMDQ_MAP_TC_TO_COS_COS0_NO_CHANGE 0xffffUL 2047*4882a593Smuzhiyun __le16 cos1; 2048*4882a593Smuzhiyun #define CMDQ_MAP_TC_TO_COS_COS1_DISABLE 0x8000UL 2049*4882a593Smuzhiyun #define CMDQ_MAP_TC_TO_COS_COS1_NO_CHANGE 0xffffUL 2050*4882a593Smuzhiyun __le32 unused_0; 2051*4882a593Smuzhiyun }; 2052*4882a593Smuzhiyun 2053*4882a593Smuzhiyun /* Query version command (16 bytes) */ 2054*4882a593Smuzhiyun struct cmdq_query_version { 2055*4882a593Smuzhiyun u8 opcode; 2056*4882a593Smuzhiyun #define CMDQ_QUERY_VERSION_OPCODE_QUERY_VERSION 0x8bUL 2057*4882a593Smuzhiyun u8 cmd_size; 2058*4882a593Smuzhiyun __le16 flags; 2059*4882a593Smuzhiyun __le16 cookie; 2060*4882a593Smuzhiyun u8 resp_size; 2061*4882a593Smuzhiyun u8 reserved8; 2062*4882a593Smuzhiyun __le64 resp_addr; 2063*4882a593Smuzhiyun }; 2064*4882a593Smuzhiyun 2065*4882a593Smuzhiyun /* Command-Response Event Queue (CREQ) Structures */ 2066*4882a593Smuzhiyun /* Base CREQ Record (16 bytes) */ 2067*4882a593Smuzhiyun struct creq_base { 2068*4882a593Smuzhiyun u8 type; 2069*4882a593Smuzhiyun #define CREQ_BASE_TYPE_MASK 0x3fUL 2070*4882a593Smuzhiyun #define CREQ_BASE_TYPE_SFT 0 2071*4882a593Smuzhiyun #define CREQ_BASE_TYPE_QP_EVENT 0x38UL 2072*4882a593Smuzhiyun #define CREQ_BASE_TYPE_FUNC_EVENT 0x3aUL 2073*4882a593Smuzhiyun #define CREQ_BASE_RESERVED2_MASK 0xc0UL 2074*4882a593Smuzhiyun #define CREQ_BASE_RESERVED2_SFT 6 2075*4882a593Smuzhiyun u8 reserved56[7]; 2076*4882a593Smuzhiyun u8 v; 2077*4882a593Smuzhiyun #define CREQ_BASE_V 0x1UL 2078*4882a593Smuzhiyun #define CREQ_BASE_RESERVED7_MASK 0xfeUL 2079*4882a593Smuzhiyun #define CREQ_BASE_RESERVED7_SFT 1 2080*4882a593Smuzhiyun u8 event; 2081*4882a593Smuzhiyun __le16 reserved48[3]; 2082*4882a593Smuzhiyun }; 2083*4882a593Smuzhiyun 2084*4882a593Smuzhiyun /* RoCE Function Async Event Notification (16 bytes) */ 2085*4882a593Smuzhiyun struct creq_func_event { 2086*4882a593Smuzhiyun u8 type; 2087*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_TYPE_MASK 0x3fUL 2088*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_TYPE_SFT 0 2089*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_TYPE_FUNC_EVENT 0x3aUL 2090*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_RESERVED2_MASK 0xc0UL 2091*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_RESERVED2_SFT 6 2092*4882a593Smuzhiyun u8 reserved56[7]; 2093*4882a593Smuzhiyun u8 v; 2094*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_V 0x1UL 2095*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_RESERVED7_MASK 0xfeUL 2096*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_RESERVED7_SFT 1 2097*4882a593Smuzhiyun u8 event; 2098*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_TX_WQE_ERROR 0x1UL 2099*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_TX_DATA_ERROR 0x2UL 2100*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_RX_WQE_ERROR 0x3UL 2101*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_RX_DATA_ERROR 0x4UL 2102*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_CQ_ERROR 0x5UL 2103*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_TQM_ERROR 0x6UL 2104*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_CFCQ_ERROR 0x7UL 2105*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_CFCS_ERROR 0x8UL 2106*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_CFCC_ERROR 0x9UL 2107*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_CFCM_ERROR 0xaUL 2108*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_TIM_ERROR 0xbUL 2109*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_VF_COMM_REQUEST 0x80UL 2110*4882a593Smuzhiyun #define CREQ_FUNC_EVENT_EVENT_RESOURCE_EXHAUSTED 0x81UL 2111*4882a593Smuzhiyun __le16 reserved48[3]; 2112*4882a593Smuzhiyun }; 2113*4882a593Smuzhiyun 2114*4882a593Smuzhiyun /* RoCE Slowpath Command Completion (16 bytes) */ 2115*4882a593Smuzhiyun struct creq_qp_event { 2116*4882a593Smuzhiyun u8 type; 2117*4882a593Smuzhiyun #define CREQ_QP_EVENT_TYPE_MASK 0x3fUL 2118*4882a593Smuzhiyun #define CREQ_QP_EVENT_TYPE_SFT 0 2119*4882a593Smuzhiyun #define CREQ_QP_EVENT_TYPE_QP_EVENT 0x38UL 2120*4882a593Smuzhiyun #define CREQ_QP_EVENT_RESERVED2_MASK 0xc0UL 2121*4882a593Smuzhiyun #define CREQ_QP_EVENT_RESERVED2_SFT 6 2122*4882a593Smuzhiyun u8 status; 2123*4882a593Smuzhiyun __le16 cookie; 2124*4882a593Smuzhiyun __le32 reserved32; 2125*4882a593Smuzhiyun u8 v; 2126*4882a593Smuzhiyun #define CREQ_QP_EVENT_V 0x1UL 2127*4882a593Smuzhiyun #define CREQ_QP_EVENT_RESERVED7_MASK 0xfeUL 2128*4882a593Smuzhiyun #define CREQ_QP_EVENT_RESERVED7_SFT 1 2129*4882a593Smuzhiyun u8 event; 2130*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_CREATE_QP 0x1UL 2131*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DESTROY_QP 0x2UL 2132*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_MODIFY_QP 0x3UL 2133*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_QUERY_QP 0x4UL 2134*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_CREATE_SRQ 0x5UL 2135*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DESTROY_SRQ 0x6UL 2136*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_QUERY_SRQ 0x8UL 2137*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_CREATE_CQ 0x9UL 2138*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DESTROY_CQ 0xaUL 2139*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_RESIZE_CQ 0xcUL 2140*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_ALLOCATE_MRW 0xdUL 2141*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DEALLOCATE_KEY 0xeUL 2142*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_REGISTER_MR 0xfUL 2143*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DEREGISTER_MR 0x10UL 2144*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_ADD_GID 0x11UL 2145*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DELETE_GID 0x12UL 2146*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_MODIFY_GID 0x17UL 2147*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_QUERY_GID 0x18UL 2148*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_CREATE_QP1 0x13UL 2149*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DESTROY_QP1 0x14UL 2150*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_CREATE_AH 0x15UL 2151*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DESTROY_AH 0x16UL 2152*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_INITIALIZE_FW 0x80UL 2153*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_DEINITIALIZE_FW 0x81UL 2154*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_STOP_FUNC 0x82UL 2155*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_QUERY_FUNC 0x83UL 2156*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_SET_FUNC_RESOURCES 0x84UL 2157*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_MAP_TC_TO_COS 0x8aUL 2158*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_QUERY_VERSION 0x8bUL 2159*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_MODIFY_CC 0x8cUL 2160*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_QUERY_CC 0x8dUL 2161*4882a593Smuzhiyun #define CREQ_QP_EVENT_EVENT_QP_ERROR_NOTIFICATION 0xc0UL 2162*4882a593Smuzhiyun __le16 reserved48[3]; 2163*4882a593Smuzhiyun }; 2164*4882a593Smuzhiyun 2165*4882a593Smuzhiyun /* Create QP command response (16 bytes) */ 2166*4882a593Smuzhiyun struct creq_create_qp_resp { 2167*4882a593Smuzhiyun u8 type; 2168*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_TYPE_MASK 0x3fUL 2169*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_TYPE_SFT 0 2170*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_TYPE_QP_EVENT 0x38UL 2171*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_RESERVED2_MASK 0xc0UL 2172*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_RESERVED2_SFT 6 2173*4882a593Smuzhiyun u8 status; 2174*4882a593Smuzhiyun __le16 cookie; 2175*4882a593Smuzhiyun __le32 xid; 2176*4882a593Smuzhiyun u8 v; 2177*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_V 0x1UL 2178*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_RESERVED7_MASK 0xfeUL 2179*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_RESERVED7_SFT 1 2180*4882a593Smuzhiyun u8 event; 2181*4882a593Smuzhiyun #define CREQ_CREATE_QP_RESP_EVENT_CREATE_QP 0x1UL 2182*4882a593Smuzhiyun __le16 reserved48[3]; 2183*4882a593Smuzhiyun }; 2184*4882a593Smuzhiyun 2185*4882a593Smuzhiyun /* Destroy QP command response (16 bytes) */ 2186*4882a593Smuzhiyun struct creq_destroy_qp_resp { 2187*4882a593Smuzhiyun u8 type; 2188*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_TYPE_MASK 0x3fUL 2189*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_TYPE_SFT 0 2190*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_TYPE_QP_EVENT 0x38UL 2191*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_RESERVED2_MASK 0xc0UL 2192*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_RESERVED2_SFT 6 2193*4882a593Smuzhiyun u8 status; 2194*4882a593Smuzhiyun __le16 cookie; 2195*4882a593Smuzhiyun __le32 xid; 2196*4882a593Smuzhiyun u8 v; 2197*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_V 0x1UL 2198*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_RESERVED7_MASK 0xfeUL 2199*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_RESERVED7_SFT 1 2200*4882a593Smuzhiyun u8 event; 2201*4882a593Smuzhiyun #define CREQ_DESTROY_QP_RESP_EVENT_DESTROY_QP 0x2UL 2202*4882a593Smuzhiyun __le16 reserved48[3]; 2203*4882a593Smuzhiyun }; 2204*4882a593Smuzhiyun 2205*4882a593Smuzhiyun /* Modify QP command response (16 bytes) */ 2206*4882a593Smuzhiyun struct creq_modify_qp_resp { 2207*4882a593Smuzhiyun u8 type; 2208*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_TYPE_MASK 0x3fUL 2209*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_TYPE_SFT 0 2210*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_TYPE_QP_EVENT 0x38UL 2211*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_RESERVED2_MASK 0xc0UL 2212*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_RESERVED2_SFT 6 2213*4882a593Smuzhiyun u8 status; 2214*4882a593Smuzhiyun __le16 cookie; 2215*4882a593Smuzhiyun __le32 xid; 2216*4882a593Smuzhiyun u8 v; 2217*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_V 0x1UL 2218*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_RESERVED7_MASK 0xfeUL 2219*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_RESERVED7_SFT 1 2220*4882a593Smuzhiyun u8 event; 2221*4882a593Smuzhiyun #define CREQ_MODIFY_QP_RESP_EVENT_MODIFY_QP 0x3UL 2222*4882a593Smuzhiyun __le16 reserved48[3]; 2223*4882a593Smuzhiyun }; 2224*4882a593Smuzhiyun 2225*4882a593Smuzhiyun /* cmdq_query_roce_stats (size:128b/16B) */ 2226*4882a593Smuzhiyun struct cmdq_query_roce_stats { 2227*4882a593Smuzhiyun u8 opcode; 2228*4882a593Smuzhiyun #define CMDQ_QUERY_ROCE_STATS_OPCODE_QUERY_ROCE_STATS 0x8eUL 2229*4882a593Smuzhiyun #define CMDQ_QUERY_ROCE_STATS_OPCODE_LAST \ 2230*4882a593Smuzhiyun CMDQ_QUERY_ROCE_STATS_OPCODE_QUERY_ROCE_STATS 2231*4882a593Smuzhiyun u8 cmd_size; 2232*4882a593Smuzhiyun __le16 flags; 2233*4882a593Smuzhiyun __le16 cookie; 2234*4882a593Smuzhiyun u8 resp_size; 2235*4882a593Smuzhiyun u8 reserved8; 2236*4882a593Smuzhiyun __le64 resp_addr; 2237*4882a593Smuzhiyun }; 2238*4882a593Smuzhiyun 2239*4882a593Smuzhiyun /* Query QP command response (16 bytes) */ 2240*4882a593Smuzhiyun struct creq_query_qp_resp { 2241*4882a593Smuzhiyun u8 type; 2242*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_TYPE_MASK 0x3fUL 2243*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_TYPE_SFT 0 2244*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_TYPE_QP_EVENT 0x38UL 2245*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_RESERVED2_MASK 0xc0UL 2246*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_RESERVED2_SFT 6 2247*4882a593Smuzhiyun u8 status; 2248*4882a593Smuzhiyun __le16 cookie; 2249*4882a593Smuzhiyun __le32 size; 2250*4882a593Smuzhiyun u8 v; 2251*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_V 0x1UL 2252*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_RESERVED7_MASK 0xfeUL 2253*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_RESERVED7_SFT 1 2254*4882a593Smuzhiyun u8 event; 2255*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_EVENT_QUERY_QP 0x4UL 2256*4882a593Smuzhiyun __le16 reserved48[3]; 2257*4882a593Smuzhiyun }; 2258*4882a593Smuzhiyun 2259*4882a593Smuzhiyun /* Query QP command response side buffer structure (104 bytes) */ 2260*4882a593Smuzhiyun struct creq_query_qp_resp_sb { 2261*4882a593Smuzhiyun u8 opcode; 2262*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_OPCODE_QUERY_QP 0x4UL 2263*4882a593Smuzhiyun u8 status; 2264*4882a593Smuzhiyun __le16 cookie; 2265*4882a593Smuzhiyun __le16 flags; 2266*4882a593Smuzhiyun u8 resp_size; 2267*4882a593Smuzhiyun u8 reserved8; 2268*4882a593Smuzhiyun __le32 xid; 2269*4882a593Smuzhiyun u8 en_sqd_async_notify_state; 2270*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_MASK 0xfUL 2271*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_SFT 0 2272*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_RESET 0x0UL 2273*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_INIT 0x1UL 2274*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_RTR 0x2UL 2275*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_RTS 0x3UL 2276*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_SQD 0x4UL 2277*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_SQE 0x5UL 2278*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_STATE_ERR 0x6UL 2279*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_EN_SQD_ASYNC_NOTIFY 0x10UL 2280*4882a593Smuzhiyun u8 access; 2281*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_ACCESS_LOCAL_WRITE 0x1UL 2282*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_ACCESS_REMOTE_WRITE 0x2UL 2283*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_ACCESS_REMOTE_READ 0x4UL 2284*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_ACCESS_REMOTE_ATOMIC 0x8UL 2285*4882a593Smuzhiyun __le16 pkey; 2286*4882a593Smuzhiyun __le32 qkey; 2287*4882a593Smuzhiyun __le32 reserved32; 2288*4882a593Smuzhiyun __le32 dgid[4]; 2289*4882a593Smuzhiyun __le32 flow_label; 2290*4882a593Smuzhiyun __le16 sgid_index; 2291*4882a593Smuzhiyun u8 hop_limit; 2292*4882a593Smuzhiyun u8 traffic_class; 2293*4882a593Smuzhiyun __le16 dest_mac[3]; 2294*4882a593Smuzhiyun __le16 path_mtu_dest_vlan_id; 2295*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_DEST_VLAN_ID_MASK 0xfffUL 2296*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_DEST_VLAN_ID_SFT 0 2297*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_MASK 0xf000UL 2298*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_SFT 12 2299*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_MTU_256 (0x0UL << 12) 2300*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_MTU_512 (0x1UL << 12) 2301*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_MTU_1024 (0x2UL << 12) 2302*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_MTU_2048 (0x3UL << 12) 2303*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_MTU_4096 (0x4UL << 12) 2304*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_PATH_MTU_MTU_8192 (0x5UL << 12) 2305*4882a593Smuzhiyun u8 timeout; 2306*4882a593Smuzhiyun u8 retry_cnt; 2307*4882a593Smuzhiyun u8 rnr_retry; 2308*4882a593Smuzhiyun u8 min_rnr_timer; 2309*4882a593Smuzhiyun __le32 rq_psn; 2310*4882a593Smuzhiyun __le32 sq_psn; 2311*4882a593Smuzhiyun u8 max_rd_atomic; 2312*4882a593Smuzhiyun u8 max_dest_rd_atomic; 2313*4882a593Smuzhiyun u8 tos_dscp_tos_ecn; 2314*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_TOS_ECN_MASK 0x3UL 2315*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_TOS_ECN_SFT 0 2316*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_TOS_DSCP_MASK 0xfcUL 2317*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_TOS_DSCP_SFT 2 2318*4882a593Smuzhiyun u8 enable_cc; 2319*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_ENABLE_CC 0x1UL 2320*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_RESERVED7_MASK 0xfeUL 2321*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_RESERVED7_SFT 1 2322*4882a593Smuzhiyun __le32 sq_size; 2323*4882a593Smuzhiyun __le32 rq_size; 2324*4882a593Smuzhiyun __le16 sq_sge; 2325*4882a593Smuzhiyun __le16 rq_sge; 2326*4882a593Smuzhiyun __le32 max_inline_data; 2327*4882a593Smuzhiyun __le32 dest_qp_id; 2328*4882a593Smuzhiyun __le32 unused_1; 2329*4882a593Smuzhiyun __le16 src_mac[3]; 2330*4882a593Smuzhiyun __le16 vlan_pcp_vlan_dei_vlan_id; 2331*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_VLAN_ID_MASK 0xfffUL 2332*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_VLAN_ID_SFT 0 2333*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_VLAN_DEI 0x1000UL 2334*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_VLAN_PCP_MASK 0xe000UL 2335*4882a593Smuzhiyun #define CREQ_QUERY_QP_RESP_SB_VLAN_PCP_SFT 13 2336*4882a593Smuzhiyun }; 2337*4882a593Smuzhiyun 2338*4882a593Smuzhiyun /* Create SRQ command response (16 bytes) */ 2339*4882a593Smuzhiyun struct creq_create_srq_resp { 2340*4882a593Smuzhiyun u8 type; 2341*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_TYPE_MASK 0x3fUL 2342*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_TYPE_SFT 0 2343*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_TYPE_QP_EVENT 0x38UL 2344*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_RESERVED2_MASK 0xc0UL 2345*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_RESERVED2_SFT 6 2346*4882a593Smuzhiyun u8 status; 2347*4882a593Smuzhiyun __le16 cookie; 2348*4882a593Smuzhiyun __le32 xid; 2349*4882a593Smuzhiyun u8 v; 2350*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_V 0x1UL 2351*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_RESERVED7_MASK 0xfeUL 2352*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_RESERVED7_SFT 1 2353*4882a593Smuzhiyun u8 event; 2354*4882a593Smuzhiyun #define CREQ_CREATE_SRQ_RESP_EVENT_CREATE_SRQ 0x5UL 2355*4882a593Smuzhiyun __le16 reserved48[3]; 2356*4882a593Smuzhiyun }; 2357*4882a593Smuzhiyun 2358*4882a593Smuzhiyun /* Destroy SRQ command response (16 bytes) */ 2359*4882a593Smuzhiyun struct creq_destroy_srq_resp { 2360*4882a593Smuzhiyun u8 type; 2361*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_TYPE_MASK 0x3fUL 2362*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_TYPE_SFT 0 2363*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_TYPE_QP_EVENT 0x38UL 2364*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_RESERVED2_MASK 0xc0UL 2365*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_RESERVED2_SFT 6 2366*4882a593Smuzhiyun u8 status; 2367*4882a593Smuzhiyun __le16 cookie; 2368*4882a593Smuzhiyun __le32 xid; 2369*4882a593Smuzhiyun u8 v; 2370*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_V 0x1UL 2371*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_RESERVED7_MASK 0xfeUL 2372*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_RESERVED7_SFT 1 2373*4882a593Smuzhiyun u8 event; 2374*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_EVENT_DESTROY_SRQ 0x6UL 2375*4882a593Smuzhiyun __le16 enable_for_arm[3]; 2376*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_ENABLE_FOR_ARM_MASK 0x30000UL 2377*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_ENABLE_FOR_ARM_SFT 16 2378*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_RESERVED46_MASK 0xfffc0000UL 2379*4882a593Smuzhiyun #define CREQ_DESTROY_SRQ_RESP_RESERVED46_SFT 18 2380*4882a593Smuzhiyun }; 2381*4882a593Smuzhiyun 2382*4882a593Smuzhiyun /* Query SRQ command response (16 bytes) */ 2383*4882a593Smuzhiyun struct creq_query_srq_resp { 2384*4882a593Smuzhiyun u8 type; 2385*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_TYPE_MASK 0x3fUL 2386*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_TYPE_SFT 0 2387*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_TYPE_QP_EVENT 0x38UL 2388*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_RESERVED2_MASK 0xc0UL 2389*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_RESERVED2_SFT 6 2390*4882a593Smuzhiyun u8 status; 2391*4882a593Smuzhiyun __le16 cookie; 2392*4882a593Smuzhiyun __le32 size; 2393*4882a593Smuzhiyun u8 v; 2394*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_V 0x1UL 2395*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_RESERVED7_MASK 0xfeUL 2396*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_RESERVED7_SFT 1 2397*4882a593Smuzhiyun u8 event; 2398*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_EVENT_QUERY_SRQ 0x8UL 2399*4882a593Smuzhiyun __le16 reserved48[3]; 2400*4882a593Smuzhiyun }; 2401*4882a593Smuzhiyun 2402*4882a593Smuzhiyun /* Query SRQ command response side buffer structure (24 bytes) */ 2403*4882a593Smuzhiyun struct creq_query_srq_resp_sb { 2404*4882a593Smuzhiyun u8 opcode; 2405*4882a593Smuzhiyun #define CREQ_QUERY_SRQ_RESP_SB_OPCODE_QUERY_SRQ 0x8UL 2406*4882a593Smuzhiyun u8 status; 2407*4882a593Smuzhiyun __le16 cookie; 2408*4882a593Smuzhiyun __le16 flags; 2409*4882a593Smuzhiyun u8 resp_size; 2410*4882a593Smuzhiyun u8 reserved8; 2411*4882a593Smuzhiyun __le32 xid; 2412*4882a593Smuzhiyun __le16 srq_limit; 2413*4882a593Smuzhiyun __le16 reserved16; 2414*4882a593Smuzhiyun __le32 data[4]; 2415*4882a593Smuzhiyun }; 2416*4882a593Smuzhiyun 2417*4882a593Smuzhiyun /* Create CQ command Response (16 bytes) */ 2418*4882a593Smuzhiyun struct creq_create_cq_resp { 2419*4882a593Smuzhiyun u8 type; 2420*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_TYPE_MASK 0x3fUL 2421*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_TYPE_SFT 0 2422*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_TYPE_QP_EVENT 0x38UL 2423*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_RESERVED2_MASK 0xc0UL 2424*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_RESERVED2_SFT 6 2425*4882a593Smuzhiyun u8 status; 2426*4882a593Smuzhiyun __le16 cookie; 2427*4882a593Smuzhiyun __le32 xid; 2428*4882a593Smuzhiyun u8 v; 2429*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_V 0x1UL 2430*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_RESERVED7_MASK 0xfeUL 2431*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_RESERVED7_SFT 1 2432*4882a593Smuzhiyun u8 event; 2433*4882a593Smuzhiyun #define CREQ_CREATE_CQ_RESP_EVENT_CREATE_CQ 0x9UL 2434*4882a593Smuzhiyun __le16 reserved48[3]; 2435*4882a593Smuzhiyun }; 2436*4882a593Smuzhiyun 2437*4882a593Smuzhiyun /* Destroy CQ command response (16 bytes) */ 2438*4882a593Smuzhiyun struct creq_destroy_cq_resp { 2439*4882a593Smuzhiyun u8 type; 2440*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_TYPE_MASK 0x3fUL 2441*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_TYPE_SFT 0 2442*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_TYPE_QP_EVENT 0x38UL 2443*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_RESERVED2_MASK 0xc0UL 2444*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_RESERVED2_SFT 6 2445*4882a593Smuzhiyun u8 status; 2446*4882a593Smuzhiyun __le16 cookie; 2447*4882a593Smuzhiyun __le32 xid; 2448*4882a593Smuzhiyun u8 v; 2449*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_V 0x1UL 2450*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_RESERVED7_MASK 0xfeUL 2451*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_RESERVED7_SFT 1 2452*4882a593Smuzhiyun u8 event; 2453*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_EVENT_DESTROY_CQ 0xaUL 2454*4882a593Smuzhiyun __le16 cq_arm_lvl; 2455*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_CQ_ARM_LVL_MASK 0x3UL 2456*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_CQ_ARM_LVL_SFT 0 2457*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_RESERVED14_MASK 0xfffcUL 2458*4882a593Smuzhiyun #define CREQ_DESTROY_CQ_RESP_RESERVED14_SFT 2 2459*4882a593Smuzhiyun __le16 total_cnq_events; 2460*4882a593Smuzhiyun __le16 reserved16; 2461*4882a593Smuzhiyun }; 2462*4882a593Smuzhiyun 2463*4882a593Smuzhiyun /* Resize CQ command response (16 bytes) */ 2464*4882a593Smuzhiyun struct creq_resize_cq_resp { 2465*4882a593Smuzhiyun u8 type; 2466*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_TYPE_MASK 0x3fUL 2467*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_TYPE_SFT 0 2468*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_TYPE_QP_EVENT 0x38UL 2469*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_RESERVED2_MASK 0xc0UL 2470*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_RESERVED2_SFT 6 2471*4882a593Smuzhiyun u8 status; 2472*4882a593Smuzhiyun __le16 cookie; 2473*4882a593Smuzhiyun __le32 xid; 2474*4882a593Smuzhiyun u8 v; 2475*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_V 0x1UL 2476*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_RESERVED7_MASK 0xfeUL 2477*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_RESERVED7_SFT 1 2478*4882a593Smuzhiyun u8 event; 2479*4882a593Smuzhiyun #define CREQ_RESIZE_CQ_RESP_EVENT_RESIZE_CQ 0xcUL 2480*4882a593Smuzhiyun __le16 reserved48[3]; 2481*4882a593Smuzhiyun }; 2482*4882a593Smuzhiyun 2483*4882a593Smuzhiyun /* Allocate MRW command response (16 bytes) */ 2484*4882a593Smuzhiyun struct creq_allocate_mrw_resp { 2485*4882a593Smuzhiyun u8 type; 2486*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_TYPE_MASK 0x3fUL 2487*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_TYPE_SFT 0 2488*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_TYPE_QP_EVENT 0x38UL 2489*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_RESERVED2_MASK 0xc0UL 2490*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_RESERVED2_SFT 6 2491*4882a593Smuzhiyun u8 status; 2492*4882a593Smuzhiyun __le16 cookie; 2493*4882a593Smuzhiyun __le32 xid; 2494*4882a593Smuzhiyun u8 v; 2495*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_V 0x1UL 2496*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_RESERVED7_MASK 0xfeUL 2497*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_RESERVED7_SFT 1 2498*4882a593Smuzhiyun u8 event; 2499*4882a593Smuzhiyun #define CREQ_ALLOCATE_MRW_RESP_EVENT_ALLOCATE_MRW 0xdUL 2500*4882a593Smuzhiyun __le16 reserved48[3]; 2501*4882a593Smuzhiyun }; 2502*4882a593Smuzhiyun 2503*4882a593Smuzhiyun /* De-allocate key command response (16 bytes) */ 2504*4882a593Smuzhiyun struct creq_deallocate_key_resp { 2505*4882a593Smuzhiyun u8 type; 2506*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_TYPE_MASK 0x3fUL 2507*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_TYPE_SFT 0 2508*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_TYPE_QP_EVENT 0x38UL 2509*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_RESERVED2_MASK 0xc0UL 2510*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_RESERVED2_SFT 6 2511*4882a593Smuzhiyun u8 status; 2512*4882a593Smuzhiyun __le16 cookie; 2513*4882a593Smuzhiyun __le32 xid; 2514*4882a593Smuzhiyun u8 v; 2515*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_V 0x1UL 2516*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_RESERVED7_MASK 0xfeUL 2517*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_RESERVED7_SFT 1 2518*4882a593Smuzhiyun u8 event; 2519*4882a593Smuzhiyun #define CREQ_DEALLOCATE_KEY_RESP_EVENT_DEALLOCATE_KEY 0xeUL 2520*4882a593Smuzhiyun __le16 reserved16; 2521*4882a593Smuzhiyun __le32 bound_window_info; 2522*4882a593Smuzhiyun }; 2523*4882a593Smuzhiyun 2524*4882a593Smuzhiyun /* Register MR command response (16 bytes) */ 2525*4882a593Smuzhiyun struct creq_register_mr_resp { 2526*4882a593Smuzhiyun u8 type; 2527*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_TYPE_MASK 0x3fUL 2528*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_TYPE_SFT 0 2529*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_TYPE_QP_EVENT 0x38UL 2530*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_RESERVED2_MASK 0xc0UL 2531*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_RESERVED2_SFT 6 2532*4882a593Smuzhiyun u8 status; 2533*4882a593Smuzhiyun __le16 cookie; 2534*4882a593Smuzhiyun __le32 xid; 2535*4882a593Smuzhiyun u8 v; 2536*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_V 0x1UL 2537*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_RESERVED7_MASK 0xfeUL 2538*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_RESERVED7_SFT 1 2539*4882a593Smuzhiyun u8 event; 2540*4882a593Smuzhiyun #define CREQ_REGISTER_MR_RESP_EVENT_REGISTER_MR 0xfUL 2541*4882a593Smuzhiyun __le16 reserved48[3]; 2542*4882a593Smuzhiyun }; 2543*4882a593Smuzhiyun 2544*4882a593Smuzhiyun /* Deregister MR command response (16 bytes) */ 2545*4882a593Smuzhiyun struct creq_deregister_mr_resp { 2546*4882a593Smuzhiyun u8 type; 2547*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_TYPE_MASK 0x3fUL 2548*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_TYPE_SFT 0 2549*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_TYPE_QP_EVENT 0x38UL 2550*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_RESERVED2_MASK 0xc0UL 2551*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_RESERVED2_SFT 6 2552*4882a593Smuzhiyun u8 status; 2553*4882a593Smuzhiyun __le16 cookie; 2554*4882a593Smuzhiyun __le32 xid; 2555*4882a593Smuzhiyun u8 v; 2556*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_V 0x1UL 2557*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_RESERVED7_MASK 0xfeUL 2558*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_RESERVED7_SFT 1 2559*4882a593Smuzhiyun u8 event; 2560*4882a593Smuzhiyun #define CREQ_DEREGISTER_MR_RESP_EVENT_DEREGISTER_MR 0x10UL 2561*4882a593Smuzhiyun __le16 reserved16; 2562*4882a593Smuzhiyun __le32 bound_windows; 2563*4882a593Smuzhiyun }; 2564*4882a593Smuzhiyun 2565*4882a593Smuzhiyun /* Add GID command response (16 bytes) */ 2566*4882a593Smuzhiyun struct creq_add_gid_resp { 2567*4882a593Smuzhiyun u8 type; 2568*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_TYPE_MASK 0x3fUL 2569*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_TYPE_SFT 0 2570*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_TYPE_QP_EVENT 0x38UL 2571*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_RESERVED2_MASK 0xc0UL 2572*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_RESERVED2_SFT 6 2573*4882a593Smuzhiyun u8 status; 2574*4882a593Smuzhiyun __le16 cookie; 2575*4882a593Smuzhiyun __le32 xid; 2576*4882a593Smuzhiyun u8 v; 2577*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_V 0x1UL 2578*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_RESERVED7_MASK 0xfeUL 2579*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_RESERVED7_SFT 1 2580*4882a593Smuzhiyun u8 event; 2581*4882a593Smuzhiyun #define CREQ_ADD_GID_RESP_EVENT_ADD_GID 0x11UL 2582*4882a593Smuzhiyun __le16 reserved48[3]; 2583*4882a593Smuzhiyun }; 2584*4882a593Smuzhiyun 2585*4882a593Smuzhiyun /* Delete GID command response (16 bytes) */ 2586*4882a593Smuzhiyun struct creq_delete_gid_resp { 2587*4882a593Smuzhiyun u8 type; 2588*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_TYPE_MASK 0x3fUL 2589*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_TYPE_SFT 0 2590*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_TYPE_QP_EVENT 0x38UL 2591*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_RESERVED2_MASK 0xc0UL 2592*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_RESERVED2_SFT 6 2593*4882a593Smuzhiyun u8 status; 2594*4882a593Smuzhiyun __le16 cookie; 2595*4882a593Smuzhiyun __le32 xid; 2596*4882a593Smuzhiyun u8 v; 2597*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_V 0x1UL 2598*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_RESERVED7_MASK 0xfeUL 2599*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_RESERVED7_SFT 1 2600*4882a593Smuzhiyun u8 event; 2601*4882a593Smuzhiyun #define CREQ_DELETE_GID_RESP_EVENT_DELETE_GID 0x12UL 2602*4882a593Smuzhiyun __le16 reserved48[3]; 2603*4882a593Smuzhiyun }; 2604*4882a593Smuzhiyun 2605*4882a593Smuzhiyun /* Modify GID command response (16 bytes) */ 2606*4882a593Smuzhiyun struct creq_modify_gid_resp { 2607*4882a593Smuzhiyun u8 type; 2608*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_TYPE_MASK 0x3fUL 2609*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_TYPE_SFT 0 2610*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_TYPE_QP_EVENT 0x38UL 2611*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_RESERVED2_MASK 0xc0UL 2612*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_RESERVED2_SFT 6 2613*4882a593Smuzhiyun u8 status; 2614*4882a593Smuzhiyun __le16 cookie; 2615*4882a593Smuzhiyun __le32 xid; 2616*4882a593Smuzhiyun u8 v; 2617*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_V 0x1UL 2618*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_RESERVED7_MASK 0xfeUL 2619*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_RESERVED7_SFT 1 2620*4882a593Smuzhiyun u8 event; 2621*4882a593Smuzhiyun #define CREQ_MODIFY_GID_RESP_EVENT_ADD_GID 0x11UL 2622*4882a593Smuzhiyun __le16 reserved48[3]; 2623*4882a593Smuzhiyun }; 2624*4882a593Smuzhiyun 2625*4882a593Smuzhiyun /* Query GID command response (16 bytes) */ 2626*4882a593Smuzhiyun struct creq_query_gid_resp { 2627*4882a593Smuzhiyun u8 type; 2628*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_TYPE_MASK 0x3fUL 2629*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_TYPE_SFT 0 2630*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_TYPE_QP_EVENT 0x38UL 2631*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_RESERVED2_MASK 0xc0UL 2632*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_RESERVED2_SFT 6 2633*4882a593Smuzhiyun u8 status; 2634*4882a593Smuzhiyun __le16 cookie; 2635*4882a593Smuzhiyun __le32 size; 2636*4882a593Smuzhiyun u8 v; 2637*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_V 0x1UL 2638*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_RESERVED7_MASK 0xfeUL 2639*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_RESERVED7_SFT 1 2640*4882a593Smuzhiyun u8 event; 2641*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_EVENT_QUERY_GID 0x18UL 2642*4882a593Smuzhiyun __le16 reserved48[3]; 2643*4882a593Smuzhiyun }; 2644*4882a593Smuzhiyun 2645*4882a593Smuzhiyun /* Query GID command response side buffer structure (40 bytes) */ 2646*4882a593Smuzhiyun struct creq_query_gid_resp_sb { 2647*4882a593Smuzhiyun u8 opcode; 2648*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_OPCODE_QUERY_GID 0x18UL 2649*4882a593Smuzhiyun u8 status; 2650*4882a593Smuzhiyun __le16 cookie; 2651*4882a593Smuzhiyun __le16 flags; 2652*4882a593Smuzhiyun u8 resp_size; 2653*4882a593Smuzhiyun u8 reserved8; 2654*4882a593Smuzhiyun __le32 gid[4]; 2655*4882a593Smuzhiyun __le16 src_mac[3]; 2656*4882a593Smuzhiyun __le16 vlan; 2657*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_VLAN_ID_MASK 0xfffUL 2658*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_VLAN_ID_SFT 0 2659*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_MASK 0x7000UL 2660*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_SFT 12 2661*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_88A8 (0x0UL << 12) 2662*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_8100 (0x1UL << 12) 2663*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_9100 (0x2UL << 12) 2664*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_9200 (0x3UL << 12) 2665*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_9300 (0x4UL << 12) 2666*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_CFG1 (0x5UL << 12) 2667*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_CFG2 (0x6UL << 12) 2668*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_CFG3 (0x7UL << 12) 2669*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_TPID_LAST \ 2670*4882a593Smuzhiyun CREQ_QUERY_GID_RESP_SB_VLAN_TPID_TPID_CFG3 2671*4882a593Smuzhiyun #define CREQ_QUERY_GID_RESP_SB_VLAN_VLAN_EN 0x8000UL 2672*4882a593Smuzhiyun __le16 ipid; 2673*4882a593Smuzhiyun __le16 gid_index; 2674*4882a593Smuzhiyun __le32 unused_0; 2675*4882a593Smuzhiyun }; 2676*4882a593Smuzhiyun 2677*4882a593Smuzhiyun /* Create QP1 command response (16 bytes) */ 2678*4882a593Smuzhiyun struct creq_create_qp1_resp { 2679*4882a593Smuzhiyun u8 type; 2680*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_TYPE_MASK 0x3fUL 2681*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_TYPE_SFT 0 2682*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_TYPE_QP_EVENT 0x38UL 2683*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_RESERVED2_MASK 0xc0UL 2684*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_RESERVED2_SFT 6 2685*4882a593Smuzhiyun u8 status; 2686*4882a593Smuzhiyun __le16 cookie; 2687*4882a593Smuzhiyun __le32 xid; 2688*4882a593Smuzhiyun u8 v; 2689*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_V 0x1UL 2690*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_RESERVED7_MASK 0xfeUL 2691*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_RESERVED7_SFT 1 2692*4882a593Smuzhiyun u8 event; 2693*4882a593Smuzhiyun #define CREQ_CREATE_QP1_RESP_EVENT_CREATE_QP1 0x13UL 2694*4882a593Smuzhiyun __le16 reserved48[3]; 2695*4882a593Smuzhiyun }; 2696*4882a593Smuzhiyun 2697*4882a593Smuzhiyun /* Destroy QP1 command response (16 bytes) */ 2698*4882a593Smuzhiyun struct creq_destroy_qp1_resp { 2699*4882a593Smuzhiyun u8 type; 2700*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_TYPE_MASK 0x3fUL 2701*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_TYPE_SFT 0 2702*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_TYPE_QP_EVENT 0x38UL 2703*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_RESERVED2_MASK 0xc0UL 2704*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_RESERVED2_SFT 6 2705*4882a593Smuzhiyun u8 status; 2706*4882a593Smuzhiyun __le16 cookie; 2707*4882a593Smuzhiyun __le32 xid; 2708*4882a593Smuzhiyun u8 v; 2709*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_V 0x1UL 2710*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_RESERVED7_MASK 0xfeUL 2711*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_RESERVED7_SFT 1 2712*4882a593Smuzhiyun u8 event; 2713*4882a593Smuzhiyun #define CREQ_DESTROY_QP1_RESP_EVENT_DESTROY_QP1 0x14UL 2714*4882a593Smuzhiyun __le16 reserved48[3]; 2715*4882a593Smuzhiyun }; 2716*4882a593Smuzhiyun 2717*4882a593Smuzhiyun /* Create AH command response (16 bytes) */ 2718*4882a593Smuzhiyun struct creq_create_ah_resp { 2719*4882a593Smuzhiyun u8 type; 2720*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_TYPE_MASK 0x3fUL 2721*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_TYPE_SFT 0 2722*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_TYPE_QP_EVENT 0x38UL 2723*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_RESERVED2_MASK 0xc0UL 2724*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_RESERVED2_SFT 6 2725*4882a593Smuzhiyun u8 status; 2726*4882a593Smuzhiyun __le16 cookie; 2727*4882a593Smuzhiyun __le32 xid; 2728*4882a593Smuzhiyun u8 v; 2729*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_V 0x1UL 2730*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_RESERVED7_MASK 0xfeUL 2731*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_RESERVED7_SFT 1 2732*4882a593Smuzhiyun u8 event; 2733*4882a593Smuzhiyun #define CREQ_CREATE_AH_RESP_EVENT_CREATE_AH 0x15UL 2734*4882a593Smuzhiyun __le16 reserved48[3]; 2735*4882a593Smuzhiyun }; 2736*4882a593Smuzhiyun 2737*4882a593Smuzhiyun /* Destroy AH command response (16 bytes) */ 2738*4882a593Smuzhiyun struct creq_destroy_ah_resp { 2739*4882a593Smuzhiyun u8 type; 2740*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_TYPE_MASK 0x3fUL 2741*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_TYPE_SFT 0 2742*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_TYPE_QP_EVENT 0x38UL 2743*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_RESERVED2_MASK 0xc0UL 2744*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_RESERVED2_SFT 6 2745*4882a593Smuzhiyun u8 status; 2746*4882a593Smuzhiyun __le16 cookie; 2747*4882a593Smuzhiyun __le32 xid; 2748*4882a593Smuzhiyun u8 v; 2749*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_V 0x1UL 2750*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_RESERVED7_MASK 0xfeUL 2751*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_RESERVED7_SFT 1 2752*4882a593Smuzhiyun u8 event; 2753*4882a593Smuzhiyun #define CREQ_DESTROY_AH_RESP_EVENT_DESTROY_AH 0x16UL 2754*4882a593Smuzhiyun __le16 reserved48[3]; 2755*4882a593Smuzhiyun }; 2756*4882a593Smuzhiyun 2757*4882a593Smuzhiyun /* Initialize Firmware command response (16 bytes) */ 2758*4882a593Smuzhiyun struct creq_initialize_fw_resp { 2759*4882a593Smuzhiyun u8 type; 2760*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_TYPE_MASK 0x3fUL 2761*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_TYPE_SFT 0 2762*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_TYPE_QP_EVENT 0x38UL 2763*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_RESERVED2_MASK 0xc0UL 2764*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_RESERVED2_SFT 6 2765*4882a593Smuzhiyun u8 status; 2766*4882a593Smuzhiyun __le16 cookie; 2767*4882a593Smuzhiyun __le32 reserved32; 2768*4882a593Smuzhiyun u8 v; 2769*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_V 0x1UL 2770*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_RESERVED7_MASK 0xfeUL 2771*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_RESERVED7_SFT 1 2772*4882a593Smuzhiyun u8 event; 2773*4882a593Smuzhiyun #define CREQ_INITIALIZE_FW_RESP_EVENT_INITIALIZE_FW 0x80UL 2774*4882a593Smuzhiyun __le16 reserved48[3]; 2775*4882a593Smuzhiyun }; 2776*4882a593Smuzhiyun 2777*4882a593Smuzhiyun /* De-initialize Firmware command response (16 bytes) */ 2778*4882a593Smuzhiyun struct creq_deinitialize_fw_resp { 2779*4882a593Smuzhiyun u8 type; 2780*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_TYPE_MASK 0x3fUL 2781*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_TYPE_SFT 0 2782*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_TYPE_QP_EVENT 0x38UL 2783*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_RESERVED2_MASK 0xc0UL 2784*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_RESERVED2_SFT 6 2785*4882a593Smuzhiyun u8 status; 2786*4882a593Smuzhiyun __le16 cookie; 2787*4882a593Smuzhiyun __le32 reserved32; 2788*4882a593Smuzhiyun u8 v; 2789*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_V 0x1UL 2790*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_RESERVED7_MASK 0xfeUL 2791*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_RESERVED7_SFT 1 2792*4882a593Smuzhiyun u8 event; 2793*4882a593Smuzhiyun #define CREQ_DEINITIALIZE_FW_RESP_EVENT_DEINITIALIZE_FW 0x81UL 2794*4882a593Smuzhiyun __le16 reserved48[3]; 2795*4882a593Smuzhiyun }; 2796*4882a593Smuzhiyun 2797*4882a593Smuzhiyun /* Stop function command response (16 bytes) */ 2798*4882a593Smuzhiyun struct creq_stop_func_resp { 2799*4882a593Smuzhiyun u8 type; 2800*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_TYPE_MASK 0x3fUL 2801*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_TYPE_SFT 0 2802*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_TYPE_QP_EVENT 0x38UL 2803*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_RESERVED2_MASK 0xc0UL 2804*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_RESERVED2_SFT 6 2805*4882a593Smuzhiyun u8 status; 2806*4882a593Smuzhiyun __le16 cookie; 2807*4882a593Smuzhiyun __le32 reserved32; 2808*4882a593Smuzhiyun u8 v; 2809*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_V 0x1UL 2810*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_RESERVED7_MASK 0xfeUL 2811*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_RESERVED7_SFT 1 2812*4882a593Smuzhiyun u8 event; 2813*4882a593Smuzhiyun #define CREQ_STOP_FUNC_RESP_EVENT_STOP_FUNC 0x82UL 2814*4882a593Smuzhiyun __le16 reserved48[3]; 2815*4882a593Smuzhiyun }; 2816*4882a593Smuzhiyun 2817*4882a593Smuzhiyun /* Query function command response (16 bytes) */ 2818*4882a593Smuzhiyun struct creq_query_func_resp { 2819*4882a593Smuzhiyun u8 type; 2820*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_TYPE_MASK 0x3fUL 2821*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_TYPE_SFT 0 2822*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_TYPE_QP_EVENT 0x38UL 2823*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_RESERVED2_MASK 0xc0UL 2824*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_RESERVED2_SFT 6 2825*4882a593Smuzhiyun u8 status; 2826*4882a593Smuzhiyun __le16 cookie; 2827*4882a593Smuzhiyun __le32 size; 2828*4882a593Smuzhiyun u8 v; 2829*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_V 0x1UL 2830*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_RESERVED7_MASK 0xfeUL 2831*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_RESERVED7_SFT 1 2832*4882a593Smuzhiyun u8 event; 2833*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_EVENT_QUERY_FUNC 0x83UL 2834*4882a593Smuzhiyun __le16 reserved48[3]; 2835*4882a593Smuzhiyun }; 2836*4882a593Smuzhiyun 2837*4882a593Smuzhiyun /* Query function command response side buffer structure (88 bytes) */ 2838*4882a593Smuzhiyun struct creq_query_func_resp_sb { 2839*4882a593Smuzhiyun u8 opcode; 2840*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_SB_OPCODE_QUERY_FUNC 0x83UL 2841*4882a593Smuzhiyun u8 status; 2842*4882a593Smuzhiyun __le16 cookie; 2843*4882a593Smuzhiyun __le16 flags; 2844*4882a593Smuzhiyun u8 resp_size; 2845*4882a593Smuzhiyun u8 reserved8; 2846*4882a593Smuzhiyun __le64 max_mr_size; 2847*4882a593Smuzhiyun __le32 max_qp; 2848*4882a593Smuzhiyun __le16 max_qp_wr; 2849*4882a593Smuzhiyun __le16 dev_cap_flags; 2850*4882a593Smuzhiyun #define CREQ_QUERY_FUNC_RESP_SB_DEV_CAP_FLAGS_RESIZE_QP 0x1UL 2851*4882a593Smuzhiyun __le32 max_cq; 2852*4882a593Smuzhiyun __le32 max_cqe; 2853*4882a593Smuzhiyun __le32 max_pd; 2854*4882a593Smuzhiyun u8 max_sge; 2855*4882a593Smuzhiyun u8 max_srq_sge; 2856*4882a593Smuzhiyun u8 max_qp_rd_atom; 2857*4882a593Smuzhiyun u8 max_qp_init_rd_atom; 2858*4882a593Smuzhiyun __le32 max_mr; 2859*4882a593Smuzhiyun __le32 max_mw; 2860*4882a593Smuzhiyun __le32 max_raw_eth_qp; 2861*4882a593Smuzhiyun __le32 max_ah; 2862*4882a593Smuzhiyun __le32 max_fmr; 2863*4882a593Smuzhiyun __le32 max_srq_wr; 2864*4882a593Smuzhiyun __le32 max_pkeys; 2865*4882a593Smuzhiyun __le32 max_inline_data; 2866*4882a593Smuzhiyun u8 max_map_per_fmr; 2867*4882a593Smuzhiyun u8 l2_db_space_size; 2868*4882a593Smuzhiyun __le16 max_srq; 2869*4882a593Smuzhiyun __le32 max_gid; 2870*4882a593Smuzhiyun __le32 tqm_alloc_reqs[12]; 2871*4882a593Smuzhiyun __le32 max_dpi; 2872*4882a593Smuzhiyun __le32 reserved_32; 2873*4882a593Smuzhiyun }; 2874*4882a593Smuzhiyun 2875*4882a593Smuzhiyun /* Set resources command response (16 bytes) */ 2876*4882a593Smuzhiyun struct creq_set_func_resources_resp { 2877*4882a593Smuzhiyun u8 type; 2878*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_TYPE_MASK 0x3fUL 2879*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_TYPE_SFT 0 2880*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_TYPE_QP_EVENT 0x38UL 2881*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_RESERVED2_MASK 0xc0UL 2882*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_RESERVED2_SFT 6 2883*4882a593Smuzhiyun u8 status; 2884*4882a593Smuzhiyun __le16 cookie; 2885*4882a593Smuzhiyun __le32 reserved32; 2886*4882a593Smuzhiyun u8 v; 2887*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_V 0x1UL 2888*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_RESERVED7_MASK 0xfeUL 2889*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_RESERVED7_SFT 1 2890*4882a593Smuzhiyun u8 event; 2891*4882a593Smuzhiyun #define CREQ_SET_FUNC_RESOURCES_RESP_EVENT_SET_FUNC_RESOURCES 0x84UL 2892*4882a593Smuzhiyun __le16 reserved48[3]; 2893*4882a593Smuzhiyun }; 2894*4882a593Smuzhiyun 2895*4882a593Smuzhiyun /* Map TC to COS response (16 bytes) */ 2896*4882a593Smuzhiyun struct creq_map_tc_to_cos_resp { 2897*4882a593Smuzhiyun u8 type; 2898*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_TYPE_MASK 0x3fUL 2899*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_TYPE_SFT 0 2900*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_TYPE_QP_EVENT 0x38UL 2901*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_RESERVED2_MASK 0xc0UL 2902*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_RESERVED2_SFT 6 2903*4882a593Smuzhiyun u8 status; 2904*4882a593Smuzhiyun __le16 cookie; 2905*4882a593Smuzhiyun __le32 reserved32; 2906*4882a593Smuzhiyun u8 v; 2907*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_V 0x1UL 2908*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_RESERVED7_MASK 0xfeUL 2909*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_RESERVED7_SFT 1 2910*4882a593Smuzhiyun u8 event; 2911*4882a593Smuzhiyun #define CREQ_MAP_TC_TO_COS_RESP_EVENT_MAP_TC_TO_COS 0x8aUL 2912*4882a593Smuzhiyun __le16 reserved48[3]; 2913*4882a593Smuzhiyun }; 2914*4882a593Smuzhiyun 2915*4882a593Smuzhiyun /* Query version response (16 bytes) */ 2916*4882a593Smuzhiyun struct creq_query_version_resp { 2917*4882a593Smuzhiyun u8 type; 2918*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_TYPE_MASK 0x3fUL 2919*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_TYPE_SFT 0 2920*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_TYPE_QP_EVENT 0x38UL 2921*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_RESERVED2_MASK 0xc0UL 2922*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_RESERVED2_SFT 6 2923*4882a593Smuzhiyun u8 status; 2924*4882a593Smuzhiyun __le16 cookie; 2925*4882a593Smuzhiyun u8 fw_maj; 2926*4882a593Smuzhiyun u8 fw_minor; 2927*4882a593Smuzhiyun u8 fw_bld; 2928*4882a593Smuzhiyun u8 fw_rsvd; 2929*4882a593Smuzhiyun u8 v; 2930*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_V 0x1UL 2931*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_RESERVED7_MASK 0xfeUL 2932*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_RESERVED7_SFT 1 2933*4882a593Smuzhiyun u8 event; 2934*4882a593Smuzhiyun #define CREQ_QUERY_VERSION_RESP_EVENT_QUERY_VERSION 0x8bUL 2935*4882a593Smuzhiyun __le16 reserved16; 2936*4882a593Smuzhiyun u8 intf_maj; 2937*4882a593Smuzhiyun u8 intf_minor; 2938*4882a593Smuzhiyun u8 intf_bld; 2939*4882a593Smuzhiyun u8 intf_rsvd; 2940*4882a593Smuzhiyun }; 2941*4882a593Smuzhiyun 2942*4882a593Smuzhiyun /* Modify congestion control command response (16 bytes) */ 2943*4882a593Smuzhiyun struct creq_modify_cc_resp { 2944*4882a593Smuzhiyun u8 type; 2945*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_TYPE_MASK 0x3fUL 2946*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_TYPE_SFT 0 2947*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_TYPE_QP_EVENT 0x38UL 2948*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_RESERVED2_MASK 0xc0UL 2949*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_RESERVED2_SFT 6 2950*4882a593Smuzhiyun u8 status; 2951*4882a593Smuzhiyun __le16 cookie; 2952*4882a593Smuzhiyun __le32 reserved32; 2953*4882a593Smuzhiyun u8 v; 2954*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_V 0x1UL 2955*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_RESERVED7_MASK 0xfeUL 2956*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_RESERVED7_SFT 1 2957*4882a593Smuzhiyun u8 event; 2958*4882a593Smuzhiyun #define CREQ_MODIFY_CC_RESP_EVENT_MODIFY_CC 0x8cUL 2959*4882a593Smuzhiyun __le16 reserved48[3]; 2960*4882a593Smuzhiyun }; 2961*4882a593Smuzhiyun 2962*4882a593Smuzhiyun /* Query congestion control command response (16 bytes) */ 2963*4882a593Smuzhiyun struct creq_query_cc_resp { 2964*4882a593Smuzhiyun u8 type; 2965*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_TYPE_MASK 0x3fUL 2966*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_TYPE_SFT 0 2967*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_TYPE_QP_EVENT 0x38UL 2968*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_RESERVED2_MASK 0xc0UL 2969*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_RESERVED2_SFT 6 2970*4882a593Smuzhiyun u8 status; 2971*4882a593Smuzhiyun __le16 cookie; 2972*4882a593Smuzhiyun __le32 size; 2973*4882a593Smuzhiyun u8 v; 2974*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_V 0x1UL 2975*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_RESERVED7_MASK 0xfeUL 2976*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_RESERVED7_SFT 1 2977*4882a593Smuzhiyun u8 event; 2978*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_EVENT_QUERY_CC 0x8dUL 2979*4882a593Smuzhiyun __le16 reserved48[3]; 2980*4882a593Smuzhiyun }; 2981*4882a593Smuzhiyun 2982*4882a593Smuzhiyun /* Query congestion control command response side buffer structure (32 bytes) */ 2983*4882a593Smuzhiyun struct creq_query_cc_resp_sb { 2984*4882a593Smuzhiyun u8 opcode; 2985*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_OPCODE_QUERY_CC 0x8dUL 2986*4882a593Smuzhiyun u8 status; 2987*4882a593Smuzhiyun __le16 cookie; 2988*4882a593Smuzhiyun __le16 flags; 2989*4882a593Smuzhiyun u8 resp_size; 2990*4882a593Smuzhiyun u8 reserved8; 2991*4882a593Smuzhiyun u8 enable_cc; 2992*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_ENABLE_CC 0x1UL 2993*4882a593Smuzhiyun u8 g; 2994*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_G_MASK 0x7UL 2995*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_G_SFT 0 2996*4882a593Smuzhiyun u8 num_phases_per_state; 2997*4882a593Smuzhiyun __le16 init_cr; 2998*4882a593Smuzhiyun u8 unused_2; 2999*4882a593Smuzhiyun __le16 unused_3; 3000*4882a593Smuzhiyun u8 unused_4; 3001*4882a593Smuzhiyun __le16 init_tr; 3002*4882a593Smuzhiyun u8 tos_dscp_tos_ecn; 3003*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_TOS_ECN_MASK 0x3UL 3004*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_TOS_ECN_SFT 0 3005*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_TOS_DSCP_MASK 0xfcUL 3006*4882a593Smuzhiyun #define CREQ_QUERY_CC_RESP_SB_TOS_DSCP_SFT 2 3007*4882a593Smuzhiyun __le64 reserved64; 3008*4882a593Smuzhiyun __le64 reserved64_1; 3009*4882a593Smuzhiyun }; 3010*4882a593Smuzhiyun 3011*4882a593Smuzhiyun /* creq_query_roce_stats_resp (size:128b/16B) */ 3012*4882a593Smuzhiyun struct creq_query_roce_stats_resp { 3013*4882a593Smuzhiyun u8 type; 3014*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_TYPE_MASK 0x3fUL 3015*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_TYPE_SFT 0 3016*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_TYPE_QP_EVENT 0x38UL 3017*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_TYPE_LAST \ 3018*4882a593Smuzhiyun CREQ_QUERY_ROCE_STATS_RESP_TYPE_QP_EVENT 3019*4882a593Smuzhiyun u8 status; 3020*4882a593Smuzhiyun __le16 cookie; 3021*4882a593Smuzhiyun __le32 size; 3022*4882a593Smuzhiyun u8 v; 3023*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_V 0x1UL 3024*4882a593Smuzhiyun u8 event; 3025*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_EVENT_QUERY_ROCE_STATS 0x8eUL 3026*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_EVENT_LAST \ 3027*4882a593Smuzhiyun CREQ_QUERY_ROCE_STATS_RESP_EVENT_QUERY_ROCE_STATS 3028*4882a593Smuzhiyun u8 reserved48[6]; 3029*4882a593Smuzhiyun }; 3030*4882a593Smuzhiyun 3031*4882a593Smuzhiyun /* creq_query_roce_stats_resp_sb (size:2624b/328B) */ 3032*4882a593Smuzhiyun struct creq_query_roce_stats_resp_sb { 3033*4882a593Smuzhiyun u8 opcode; 3034*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_SB_OPCODE_QUERY_ROCE_STATS 0x8eUL 3035*4882a593Smuzhiyun #define CREQ_QUERY_ROCE_STATS_RESP_SB_OPCODE_LAST \ 3036*4882a593Smuzhiyun CREQ_QUERY_ROCE_STATS_RESP_SB_OPCODE_QUERY_ROCE_STATS 3037*4882a593Smuzhiyun u8 status; 3038*4882a593Smuzhiyun __le16 cookie; 3039*4882a593Smuzhiyun __le16 flags; 3040*4882a593Smuzhiyun u8 resp_size; 3041*4882a593Smuzhiyun u8 rsvd; 3042*4882a593Smuzhiyun __le32 num_counters; 3043*4882a593Smuzhiyun __le32 rsvd1; 3044*4882a593Smuzhiyun __le64 to_retransmits; 3045*4882a593Smuzhiyun __le64 seq_err_naks_rcvd; 3046*4882a593Smuzhiyun __le64 max_retry_exceeded; 3047*4882a593Smuzhiyun __le64 rnr_naks_rcvd; 3048*4882a593Smuzhiyun __le64 missing_resp; 3049*4882a593Smuzhiyun __le64 unrecoverable_err; 3050*4882a593Smuzhiyun __le64 bad_resp_err; 3051*4882a593Smuzhiyun __le64 local_qp_op_err; 3052*4882a593Smuzhiyun __le64 local_protection_err; 3053*4882a593Smuzhiyun __le64 mem_mgmt_op_err; 3054*4882a593Smuzhiyun __le64 remote_invalid_req_err; 3055*4882a593Smuzhiyun __le64 remote_access_err; 3056*4882a593Smuzhiyun __le64 remote_op_err; 3057*4882a593Smuzhiyun __le64 dup_req; 3058*4882a593Smuzhiyun __le64 res_exceed_max; 3059*4882a593Smuzhiyun __le64 res_length_mismatch; 3060*4882a593Smuzhiyun __le64 res_exceeds_wqe; 3061*4882a593Smuzhiyun __le64 res_opcode_err; 3062*4882a593Smuzhiyun __le64 res_rx_invalid_rkey; 3063*4882a593Smuzhiyun __le64 res_rx_domain_err; 3064*4882a593Smuzhiyun __le64 res_rx_no_perm; 3065*4882a593Smuzhiyun __le64 res_rx_range_err; 3066*4882a593Smuzhiyun __le64 res_tx_invalid_rkey; 3067*4882a593Smuzhiyun __le64 res_tx_domain_err; 3068*4882a593Smuzhiyun __le64 res_tx_no_perm; 3069*4882a593Smuzhiyun __le64 res_tx_range_err; 3070*4882a593Smuzhiyun __le64 res_irrq_oflow; 3071*4882a593Smuzhiyun __le64 res_unsup_opcode; 3072*4882a593Smuzhiyun __le64 res_unaligned_atomic; 3073*4882a593Smuzhiyun __le64 res_rem_inv_err; 3074*4882a593Smuzhiyun __le64 res_mem_error; 3075*4882a593Smuzhiyun __le64 res_srq_err; 3076*4882a593Smuzhiyun __le64 res_cmp_err; 3077*4882a593Smuzhiyun __le64 res_invalid_dup_rkey; 3078*4882a593Smuzhiyun __le64 res_wqe_format_err; 3079*4882a593Smuzhiyun __le64 res_cq_load_err; 3080*4882a593Smuzhiyun __le64 res_srq_load_err; 3081*4882a593Smuzhiyun __le64 res_tx_pci_err; 3082*4882a593Smuzhiyun __le64 res_rx_pci_err; 3083*4882a593Smuzhiyun __le64 res_oos_drop_count; 3084*4882a593Smuzhiyun __le64 active_qp_count_p0; 3085*4882a593Smuzhiyun __le64 active_qp_count_p1; 3086*4882a593Smuzhiyun __le64 active_qp_count_p2; 3087*4882a593Smuzhiyun __le64 active_qp_count_p3; 3088*4882a593Smuzhiyun }; 3089*4882a593Smuzhiyun 3090*4882a593Smuzhiyun /* QP error notification event (16 bytes) */ 3091*4882a593Smuzhiyun struct creq_qp_error_notification { 3092*4882a593Smuzhiyun u8 type; 3093*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_TYPE_MASK 0x3fUL 3094*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_TYPE_SFT 0 3095*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_TYPE_QP_EVENT 0x38UL 3096*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_RESERVED2_MASK 0xc0UL 3097*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_RESERVED2_SFT 6 3098*4882a593Smuzhiyun u8 status; 3099*4882a593Smuzhiyun u8 req_slow_path_state; 3100*4882a593Smuzhiyun u8 req_err_state_reason; 3101*4882a593Smuzhiyun __le32 xid; 3102*4882a593Smuzhiyun u8 v; 3103*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_V 0x1UL 3104*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_RESERVED7_MASK 0xfeUL 3105*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_RESERVED7_SFT 1 3106*4882a593Smuzhiyun u8 event; 3107*4882a593Smuzhiyun #define CREQ_QP_ERROR_NOTIFICATION_EVENT_QP_ERROR_NOTIFICATION 0xc0UL 3108*4882a593Smuzhiyun u8 res_slow_path_state; 3109*4882a593Smuzhiyun u8 res_err_state_reason; 3110*4882a593Smuzhiyun __le16 sq_cons_idx; 3111*4882a593Smuzhiyun __le16 rq_cons_idx; 3112*4882a593Smuzhiyun }; 3113*4882a593Smuzhiyun 3114*4882a593Smuzhiyun /* RoCE Slowpath HSI Specification 1.6.0 */ 3115*4882a593Smuzhiyun #define ROCE_SP_HSI_VERSION_MAJOR 1 3116*4882a593Smuzhiyun #define ROCE_SP_HSI_VERSION_MINOR 6 3117*4882a593Smuzhiyun #define ROCE_SP_HSI_VERSION_UPDATE 0 3118*4882a593Smuzhiyun 3119*4882a593Smuzhiyun #define ROCE_SP_HSI_VERSION_STR "1.6.0" 3120*4882a593Smuzhiyun /* 3121*4882a593Smuzhiyun * Following is the signature for ROCE_SP_HSI message field that indicates not 3122*4882a593Smuzhiyun * applicable (All F's). Need to cast it the size of the field if needed. 3123*4882a593Smuzhiyun */ 3124*4882a593Smuzhiyun #define ROCE_SP_HSI_NA_SIGNATURE ((__le32)(-1)) 3125*4882a593Smuzhiyun #endif /* __BNXT_RE_HSI_H__ */ 3126