The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/qlnx/qlnxr/qlnxr_roce.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2018-2019 Cavium, Inc.
    3  * All rights reserved.
    4  *
    5  *  Redistribution and use in source and binary forms, with or without
    6  *  modification, are permitted provided that the following conditions
    7  *  are met:
    8  *
    9  *  1. Redistributions of source code must retain the above copyright
   10  *     notice, this list of conditions and the following disclaimer.
   11  *  2. Redistributions in binary form must reproduce the above copyright
   12  *     notice, this list of conditions and the following disclaimer in the
   13  *     documentation and/or other materials provided with the distribution.
   14  *
   15  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   16  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   19  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   20  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   21  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   22  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   23  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   24  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   25  *  POSSIBILITY OF SUCH DAMAGE.
   26  *
   27  * $FreeBSD$
   28  *
   29  */
   30 
   31 #ifndef __QLNXR_ROCE_H__
   32 #define __QLNXR_ROCE_H__ 
   33 
   34 /*
   35  * roce completion notification queue element
   36  */
   37 struct roce_cnqe {
   38         struct regpair cq_handle;
   39 };
   40 
   41 struct roce_cqe_responder {
   42         struct regpair srq_wr_id;
   43         struct regpair qp_handle;
   44         __le32 imm_data_or_inv_r_Key;
   45         __le32 length;
   46         __le32 reserved0;
   47         __le16 rq_cons;
   48         u8 flags;
   49 #define ROCE_CQE_RESPONDER_TOGGLE_BIT_MASK  0x1
   50 #define ROCE_CQE_RESPONDER_TOGGLE_BIT_SHIFT 0
   51 #define ROCE_CQE_RESPONDER_TYPE_MASK        0x3
   52 #define ROCE_CQE_RESPONDER_TYPE_SHIFT       1
   53 #define ROCE_CQE_RESPONDER_INV_FLG_MASK     0x1
   54 #define ROCE_CQE_RESPONDER_INV_FLG_SHIFT    3
   55 #define ROCE_CQE_RESPONDER_IMM_FLG_MASK     0x1
   56 #define ROCE_CQE_RESPONDER_IMM_FLG_SHIFT    4
   57 #define ROCE_CQE_RESPONDER_RDMA_FLG_MASK    0x1
   58 #define ROCE_CQE_RESPONDER_RDMA_FLG_SHIFT   5
   59 #define ROCE_CQE_RESPONDER_RESERVED2_MASK   0x3
   60 #define ROCE_CQE_RESPONDER_RESERVED2_SHIFT  6
   61         u8 status;
   62 };
   63 
   64 struct roce_cqe_requester {
   65         __le16 sq_cons;
   66         __le16 reserved0;
   67         __le32 reserved1;
   68         struct regpair qp_handle;
   69         struct regpair reserved2;
   70         __le32 reserved3;
   71         __le16 reserved4;
   72         u8 flags;
   73 #define ROCE_CQE_REQUESTER_TOGGLE_BIT_MASK  0x1
   74 #define ROCE_CQE_REQUESTER_TOGGLE_BIT_SHIFT 0
   75 #define ROCE_CQE_REQUESTER_TYPE_MASK        0x3
   76 #define ROCE_CQE_REQUESTER_TYPE_SHIFT       1
   77 #define ROCE_CQE_REQUESTER_RESERVED5_MASK   0x1F
   78 #define ROCE_CQE_REQUESTER_RESERVED5_SHIFT  3
   79         u8 status;
   80 };
   81 
   82 struct roce_cqe_common {
   83         struct regpair reserved0;
   84         struct regpair qp_handle;
   85         __le16 reserved1[7];
   86         u8 flags;
   87 #define ROCE_CQE_COMMON_TOGGLE_BIT_MASK  0x1
   88 #define ROCE_CQE_COMMON_TOGGLE_BIT_SHIFT 0
   89 #define ROCE_CQE_COMMON_TYPE_MASK        0x3
   90 #define ROCE_CQE_COMMON_TYPE_SHIFT       1
   91 #define ROCE_CQE_COMMON_RESERVED2_MASK   0x1F
   92 #define ROCE_CQE_COMMON_RESERVED2_SHIFT  3
   93         u8 status;
   94 };
   95 
   96 /*
   97  * roce completion queue element
   98  */
   99 union roce_cqe {
  100         struct roce_cqe_responder resp;
  101         struct roce_cqe_requester req;
  102         struct roce_cqe_common cmn;
  103 };
  104 
  105 /*
  106  * CQE requester status enumeration
  107  */
  108 enum roce_cqe_requester_status_enum {
  109         ROCE_CQE_REQ_STS_OK,
  110         ROCE_CQE_REQ_STS_BAD_RESPONSE_ERR,
  111         ROCE_CQE_REQ_STS_LOCAL_LENGTH_ERR,
  112         ROCE_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR,
  113         ROCE_CQE_REQ_STS_LOCAL_PROTECTION_ERR,
  114         ROCE_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR,
  115         ROCE_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR,
  116         ROCE_CQE_REQ_STS_REMOTE_ACCESS_ERR,
  117         ROCE_CQE_REQ_STS_REMOTE_OPERATION_ERR,
  118         ROCE_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR,
  119         ROCE_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR,
  120         ROCE_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR,
  121         MAX_ROCE_CQE_REQUESTER_STATUS_ENUM
  122 };
  123 
  124 /*
  125  * CQE responder status enumeration
  126  */
  127 enum roce_cqe_responder_status_enum {
  128         ROCE_CQE_RESP_STS_OK,
  129         ROCE_CQE_RESP_STS_LOCAL_ACCESS_ERR,
  130         ROCE_CQE_RESP_STS_LOCAL_LENGTH_ERR,
  131         ROCE_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR,
  132         ROCE_CQE_RESP_STS_LOCAL_PROTECTION_ERR,
  133         ROCE_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR,
  134         ROCE_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR,
  135         ROCE_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR,
  136         MAX_ROCE_CQE_RESPONDER_STATUS_ENUM
  137 };
  138 
  139 /*
  140  * CQE type enumeration
  141  */
  142 enum roce_cqe_type {
  143         ROCE_CQE_TYPE_REQUESTER,
  144         ROCE_CQE_TYPE_RESPONDER_RQ,
  145         ROCE_CQE_TYPE_RESPONDER_SRQ,
  146         ROCE_CQE_TYPE_INVALID,
  147         MAX_ROCE_CQE_TYPE
  148 };
  149 
  150 /*
  151  * memory window type enumeration
  152  */
  153 enum roce_mw_type {
  154         ROCE_MW_TYPE_1,
  155         ROCE_MW_TYPE_2A,
  156         MAX_ROCE_MW_TYPE
  157 };
  158 
  159 struct roce_rq_sge {
  160         struct regpair addr;
  161         __le32 length;
  162         __le32 flags;
  163 #define ROCE_RQ_SGE_L_KEY_MASK      0x3FFFFFF
  164 #define ROCE_RQ_SGE_L_KEY_SHIFT     0
  165 #define ROCE_RQ_SGE_NUM_SGES_MASK   0x7
  166 #define ROCE_RQ_SGE_NUM_SGES_SHIFT  26
  167 #define ROCE_RQ_SGE_RESERVED0_MASK  0x7
  168 #define ROCE_RQ_SGE_RESERVED0_SHIFT 29
  169 };
  170 
  171 struct roce_sq_atomic_wqe {
  172         struct regpair remote_va;
  173         __le32 xrc_srq;
  174         u8 req_type;
  175         u8 flags;
  176 #define ROCE_SQ_ATOMIC_WQE_COMP_FLG_MASK       0x1
  177 #define ROCE_SQ_ATOMIC_WQE_COMP_FLG_SHIFT      0
  178 #define ROCE_SQ_ATOMIC_WQE_RD_FENCE_FLG_MASK   0x1
  179 #define ROCE_SQ_ATOMIC_WQE_RD_FENCE_FLG_SHIFT  1
  180 #define ROCE_SQ_ATOMIC_WQE_INV_FENCE_FLG_MASK  0x1
  181 #define ROCE_SQ_ATOMIC_WQE_INV_FENCE_FLG_SHIFT 2
  182 #define ROCE_SQ_ATOMIC_WQE_SE_FLG_MASK         0x1
  183 #define ROCE_SQ_ATOMIC_WQE_SE_FLG_SHIFT        3
  184 #define ROCE_SQ_ATOMIC_WQE_INLINE_FLG_MASK     0x1
  185 #define ROCE_SQ_ATOMIC_WQE_INLINE_FLG_SHIFT    4
  186 #define ROCE_SQ_ATOMIC_WQE_RESERVED0_MASK      0x7
  187 #define ROCE_SQ_ATOMIC_WQE_RESERVED0_SHIFT     5
  188         u8 reserved1;
  189         u8 prev_wqe_size;
  190         struct regpair swap_data;
  191         __le32 r_key;
  192         __le32 reserved2;
  193         struct regpair cmp_data;
  194         struct regpair reserved3;
  195 };
  196 
  197 /*
  198  * First element (16 bytes) of atomic wqe
  199  */
  200 struct roce_sq_atomic_wqe_1st {
  201         struct regpair remote_va;
  202         __le32 xrc_srq;
  203         u8 req_type;
  204         u8 flags;
  205 #define ROCE_SQ_ATOMIC_WQE_1ST_COMP_FLG_MASK       0x1
  206 #define ROCE_SQ_ATOMIC_WQE_1ST_COMP_FLG_SHIFT      0
  207 #define ROCE_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_MASK   0x1
  208 #define ROCE_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_SHIFT  1
  209 #define ROCE_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_MASK  0x1
  210 #define ROCE_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  211 #define ROCE_SQ_ATOMIC_WQE_1ST_SE_FLG_MASK         0x1
  212 #define ROCE_SQ_ATOMIC_WQE_1ST_SE_FLG_SHIFT        3
  213 #define ROCE_SQ_ATOMIC_WQE_1ST_INLINE_FLG_MASK     0x1
  214 #define ROCE_SQ_ATOMIC_WQE_1ST_INLINE_FLG_SHIFT    4
  215 #define ROCE_SQ_ATOMIC_WQE_1ST_RESERVED0_MASK      0x7
  216 #define ROCE_SQ_ATOMIC_WQE_1ST_RESERVED0_SHIFT     5
  217         u8 reserved1;
  218         u8 prev_wqe_size;
  219 };
  220 
  221 /*
  222  * Second element (16 bytes) of atomic wqe
  223  */
  224 struct roce_sq_atomic_wqe_2nd {
  225         struct regpair swap_data;
  226         __le32 r_key;
  227         __le32 reserved2;
  228 };
  229 
  230 /*
  231  * Third element (16 bytes) of atomic wqe
  232  */
  233 struct roce_sq_atomic_wqe_3rd {
  234         struct regpair cmp_data;
  235         struct regpair reserved3;
  236 };
  237 
  238 struct roce_sq_bind_wqe {
  239         struct regpair addr;
  240         __le32 l_key;
  241         u8 req_type;
  242         u8 flags;
  243 #define ROCE_SQ_BIND_WQE_COMP_FLG_MASK       0x1
  244 #define ROCE_SQ_BIND_WQE_COMP_FLG_SHIFT      0
  245 #define ROCE_SQ_BIND_WQE_RD_FENCE_FLG_MASK   0x1
  246 #define ROCE_SQ_BIND_WQE_RD_FENCE_FLG_SHIFT  1
  247 #define ROCE_SQ_BIND_WQE_INV_FENCE_FLG_MASK  0x1
  248 #define ROCE_SQ_BIND_WQE_INV_FENCE_FLG_SHIFT 2
  249 #define ROCE_SQ_BIND_WQE_SE_FLG_MASK         0x1
  250 #define ROCE_SQ_BIND_WQE_SE_FLG_SHIFT        3
  251 #define ROCE_SQ_BIND_WQE_INLINE_FLG_MASK     0x1
  252 #define ROCE_SQ_BIND_WQE_INLINE_FLG_SHIFT    4
  253 #define ROCE_SQ_BIND_WQE_RESERVED0_MASK      0x7
  254 #define ROCE_SQ_BIND_WQE_RESERVED0_SHIFT     5
  255         u8 access_ctrl;
  256 #define ROCE_SQ_BIND_WQE_REMOTE_READ_MASK    0x1
  257 #define ROCE_SQ_BIND_WQE_REMOTE_READ_SHIFT   0
  258 #define ROCE_SQ_BIND_WQE_REMOTE_WRITE_MASK   0x1
  259 #define ROCE_SQ_BIND_WQE_REMOTE_WRITE_SHIFT  1
  260 #define ROCE_SQ_BIND_WQE_ENABLE_ATOMIC_MASK  0x1
  261 #define ROCE_SQ_BIND_WQE_ENABLE_ATOMIC_SHIFT 2
  262 #define ROCE_SQ_BIND_WQE_LOCAL_READ_MASK     0x1
  263 #define ROCE_SQ_BIND_WQE_LOCAL_READ_SHIFT    3
  264 #define ROCE_SQ_BIND_WQE_LOCAL_WRITE_MASK    0x1
  265 #define ROCE_SQ_BIND_WQE_LOCAL_WRITE_SHIFT   4
  266 #define ROCE_SQ_BIND_WQE_RESERVED1_MASK      0x7
  267 #define ROCE_SQ_BIND_WQE_RESERVED1_SHIFT     5
  268         u8 prev_wqe_size;
  269         u8 bind_ctrl;
  270 #define ROCE_SQ_BIND_WQE_ZERO_BASED_MASK     0x1
  271 #define ROCE_SQ_BIND_WQE_ZERO_BASED_SHIFT    0
  272 #define ROCE_SQ_BIND_WQE_MW_TYPE_MASK        0x1
  273 #define ROCE_SQ_BIND_WQE_MW_TYPE_SHIFT       1
  274 #define ROCE_SQ_BIND_WQE_RESERVED2_MASK      0x3F
  275 #define ROCE_SQ_BIND_WQE_RESERVED2_SHIFT     2
  276         u8 reserved3[2];
  277         u8 length_hi;
  278         __le32 length_lo;
  279         __le32 parent_l_key;
  280         __le32 reserved6;
  281 };
  282 
  283 /*
  284  * First element (16 bytes) of bind wqe
  285  */
  286 struct roce_sq_bind_wqe_1st {
  287         struct regpair addr;
  288         __le32 l_key;
  289         u8 req_type;
  290         u8 flags;
  291 #define ROCE_SQ_BIND_WQE_1ST_COMP_FLG_MASK       0x1
  292 #define ROCE_SQ_BIND_WQE_1ST_COMP_FLG_SHIFT      0
  293 #define ROCE_SQ_BIND_WQE_1ST_RD_FENCE_FLG_MASK   0x1
  294 #define ROCE_SQ_BIND_WQE_1ST_RD_FENCE_FLG_SHIFT  1
  295 #define ROCE_SQ_BIND_WQE_1ST_INV_FENCE_FLG_MASK  0x1
  296 #define ROCE_SQ_BIND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  297 #define ROCE_SQ_BIND_WQE_1ST_SE_FLG_MASK         0x1
  298 #define ROCE_SQ_BIND_WQE_1ST_SE_FLG_SHIFT        3
  299 #define ROCE_SQ_BIND_WQE_1ST_INLINE_FLG_MASK     0x1
  300 #define ROCE_SQ_BIND_WQE_1ST_INLINE_FLG_SHIFT    4
  301 #define ROCE_SQ_BIND_WQE_1ST_RESERVED0_MASK      0x7
  302 #define ROCE_SQ_BIND_WQE_1ST_RESERVED0_SHIFT     5
  303         u8 access_ctrl;
  304 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_READ_MASK    0x1
  305 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_READ_SHIFT   0
  306 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_WRITE_MASK   0x1
  307 #define ROCE_SQ_BIND_WQE_1ST_REMOTE_WRITE_SHIFT  1
  308 #define ROCE_SQ_BIND_WQE_1ST_ENABLE_ATOMIC_MASK  0x1
  309 #define ROCE_SQ_BIND_WQE_1ST_ENABLE_ATOMIC_SHIFT 2
  310 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_READ_MASK     0x1
  311 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_READ_SHIFT    3
  312 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_WRITE_MASK    0x1
  313 #define ROCE_SQ_BIND_WQE_1ST_LOCAL_WRITE_SHIFT   4
  314 #define ROCE_SQ_BIND_WQE_1ST_RESERVED1_MASK      0x7
  315 #define ROCE_SQ_BIND_WQE_1ST_RESERVED1_SHIFT     5
  316         u8 prev_wqe_size;
  317 };
  318 
  319 /*
  320  * Second element (16 bytes) of bind wqe
  321  */
  322 struct roce_sq_bind_wqe_2nd {
  323         u8 bind_ctrl;
  324 #define ROCE_SQ_BIND_WQE_2ND_ZERO_BASED_MASK  0x1
  325 #define ROCE_SQ_BIND_WQE_2ND_ZERO_BASED_SHIFT 0
  326 #define ROCE_SQ_BIND_WQE_2ND_MW_TYPE_MASK     0x1
  327 #define ROCE_SQ_BIND_WQE_2ND_MW_TYPE_SHIFT    1
  328 #define ROCE_SQ_BIND_WQE_2ND_RESERVED2_MASK   0x3F
  329 #define ROCE_SQ_BIND_WQE_2ND_RESERVED2_SHIFT  2
  330         u8 reserved3[2];
  331         u8 length_hi;
  332         __le32 length_lo;
  333         __le32 parent_l_key;
  334         __le32 reserved6;
  335 };
  336 
  337 /*
  338  * Structure with only the SQ WQE common fields. Size is of one SQ element (16B)
  339  */
  340 struct roce_sq_common_wqe {
  341         __le32 reserved1[3];
  342         u8 req_type;
  343         u8 flags;
  344 #define ROCE_SQ_COMMON_WQE_COMP_FLG_MASK       0x1
  345 #define ROCE_SQ_COMMON_WQE_COMP_FLG_SHIFT      0
  346 #define ROCE_SQ_COMMON_WQE_RD_FENCE_FLG_MASK   0x1
  347 #define ROCE_SQ_COMMON_WQE_RD_FENCE_FLG_SHIFT  1
  348 #define ROCE_SQ_COMMON_WQE_INV_FENCE_FLG_MASK  0x1
  349 #define ROCE_SQ_COMMON_WQE_INV_FENCE_FLG_SHIFT 2
  350 #define ROCE_SQ_COMMON_WQE_SE_FLG_MASK         0x1
  351 #define ROCE_SQ_COMMON_WQE_SE_FLG_SHIFT        3
  352 #define ROCE_SQ_COMMON_WQE_INLINE_FLG_MASK     0x1
  353 #define ROCE_SQ_COMMON_WQE_INLINE_FLG_SHIFT    4
  354 #define ROCE_SQ_COMMON_WQE_RESERVED0_MASK      0x7
  355 #define ROCE_SQ_COMMON_WQE_RESERVED0_SHIFT     5
  356         u8 reserved2;
  357         u8 prev_wqe_size;
  358 };
  359 
  360 struct roce_sq_fmr_wqe {
  361         struct regpair addr;
  362         __le32 l_key;
  363         u8 req_type;
  364         u8 flags;
  365 #define ROCE_SQ_FMR_WQE_COMP_FLG_MASK       0x1
  366 #define ROCE_SQ_FMR_WQE_COMP_FLG_SHIFT      0
  367 #define ROCE_SQ_FMR_WQE_RD_FENCE_FLG_MASK   0x1
  368 #define ROCE_SQ_FMR_WQE_RD_FENCE_FLG_SHIFT  1
  369 #define ROCE_SQ_FMR_WQE_INV_FENCE_FLG_MASK  0x1
  370 #define ROCE_SQ_FMR_WQE_INV_FENCE_FLG_SHIFT 2
  371 #define ROCE_SQ_FMR_WQE_SE_FLG_MASK         0x1
  372 #define ROCE_SQ_FMR_WQE_SE_FLG_SHIFT        3
  373 #define ROCE_SQ_FMR_WQE_INLINE_FLG_MASK     0x1
  374 #define ROCE_SQ_FMR_WQE_INLINE_FLG_SHIFT    4
  375 #define ROCE_SQ_FMR_WQE_RESERVED0_MASK      0x7
  376 #define ROCE_SQ_FMR_WQE_RESERVED0_SHIFT     5
  377         u8 access_ctrl;
  378 #define ROCE_SQ_FMR_WQE_REMOTE_READ_MASK    0x1
  379 #define ROCE_SQ_FMR_WQE_REMOTE_READ_SHIFT   0
  380 #define ROCE_SQ_FMR_WQE_REMOTE_WRITE_MASK   0x1
  381 #define ROCE_SQ_FMR_WQE_REMOTE_WRITE_SHIFT  1
  382 #define ROCE_SQ_FMR_WQE_ENABLE_ATOMIC_MASK  0x1
  383 #define ROCE_SQ_FMR_WQE_ENABLE_ATOMIC_SHIFT 2
  384 #define ROCE_SQ_FMR_WQE_LOCAL_READ_MASK     0x1
  385 #define ROCE_SQ_FMR_WQE_LOCAL_READ_SHIFT    3
  386 #define ROCE_SQ_FMR_WQE_LOCAL_WRITE_MASK    0x1
  387 #define ROCE_SQ_FMR_WQE_LOCAL_WRITE_SHIFT   4
  388 #define ROCE_SQ_FMR_WQE_RESERVED1_MASK      0x7
  389 #define ROCE_SQ_FMR_WQE_RESERVED1_SHIFT     5
  390         u8 prev_wqe_size;
  391         u8 fmr_ctrl;
  392 #define ROCE_SQ_FMR_WQE_PAGE_SIZE_LOG_MASK  0x1F
  393 #define ROCE_SQ_FMR_WQE_PAGE_SIZE_LOG_SHIFT 0
  394 #define ROCE_SQ_FMR_WQE_ZERO_BASED_MASK     0x1
  395 #define ROCE_SQ_FMR_WQE_ZERO_BASED_SHIFT    5
  396 #define ROCE_SQ_FMR_WQE_BIND_EN_MASK        0x1
  397 #define ROCE_SQ_FMR_WQE_BIND_EN_SHIFT       6
  398 #define ROCE_SQ_FMR_WQE_RESERVED2_MASK      0x1
  399 #define ROCE_SQ_FMR_WQE_RESERVED2_SHIFT     7
  400         u8 reserved3[2];
  401         u8 length_hi;
  402         __le32 length_lo;
  403         struct regpair pbl_addr;
  404 };
  405 
  406 /*
  407  * First element (16 bytes) of fmr wqe
  408  */
  409 struct roce_sq_fmr_wqe_1st {
  410         struct regpair addr;
  411         __le32 l_key;
  412         u8 req_type;
  413         u8 flags;
  414 #define ROCE_SQ_FMR_WQE_1ST_COMP_FLG_MASK       0x1
  415 #define ROCE_SQ_FMR_WQE_1ST_COMP_FLG_SHIFT      0
  416 #define ROCE_SQ_FMR_WQE_1ST_RD_FENCE_FLG_MASK   0x1
  417 #define ROCE_SQ_FMR_WQE_1ST_RD_FENCE_FLG_SHIFT  1
  418 #define ROCE_SQ_FMR_WQE_1ST_INV_FENCE_FLG_MASK  0x1
  419 #define ROCE_SQ_FMR_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  420 #define ROCE_SQ_FMR_WQE_1ST_SE_FLG_MASK         0x1
  421 #define ROCE_SQ_FMR_WQE_1ST_SE_FLG_SHIFT        3
  422 #define ROCE_SQ_FMR_WQE_1ST_INLINE_FLG_MASK     0x1
  423 #define ROCE_SQ_FMR_WQE_1ST_INLINE_FLG_SHIFT    4
  424 #define ROCE_SQ_FMR_WQE_1ST_RESERVED0_MASK      0x7
  425 #define ROCE_SQ_FMR_WQE_1ST_RESERVED0_SHIFT     5
  426         u8 access_ctrl;
  427 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_READ_MASK    0x1
  428 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_READ_SHIFT   0
  429 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_WRITE_MASK   0x1
  430 #define ROCE_SQ_FMR_WQE_1ST_REMOTE_WRITE_SHIFT  1
  431 #define ROCE_SQ_FMR_WQE_1ST_ENABLE_ATOMIC_MASK  0x1
  432 #define ROCE_SQ_FMR_WQE_1ST_ENABLE_ATOMIC_SHIFT 2
  433 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_READ_MASK     0x1
  434 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_READ_SHIFT    3
  435 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_WRITE_MASK    0x1
  436 #define ROCE_SQ_FMR_WQE_1ST_LOCAL_WRITE_SHIFT   4
  437 #define ROCE_SQ_FMR_WQE_1ST_RESERVED1_MASK      0x7
  438 #define ROCE_SQ_FMR_WQE_1ST_RESERVED1_SHIFT     5
  439         u8 prev_wqe_size;
  440 };
  441 
  442 /*
  443  * Second element (16 bytes) of fmr wqe
  444  */
  445 struct roce_sq_fmr_wqe_2nd {
  446         u8 fmr_ctrl;
  447 #define ROCE_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_MASK  0x1F
  448 #define ROCE_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_SHIFT 0
  449 #define ROCE_SQ_FMR_WQE_2ND_ZERO_BASED_MASK     0x1
  450 #define ROCE_SQ_FMR_WQE_2ND_ZERO_BASED_SHIFT    5
  451 #define ROCE_SQ_FMR_WQE_2ND_BIND_EN_MASK        0x1
  452 #define ROCE_SQ_FMR_WQE_2ND_BIND_EN_SHIFT       6
  453 #define ROCE_SQ_FMR_WQE_2ND_RESERVED2_MASK      0x1
  454 #define ROCE_SQ_FMR_WQE_2ND_RESERVED2_SHIFT     7
  455         u8 reserved3[2];
  456         u8 length_hi;
  457         __le32 length_lo;
  458         struct regpair pbl_addr;
  459 };
  460 
  461 struct roce_sq_local_inv_wqe {
  462         struct regpair reserved;
  463         __le32 inv_l_key;
  464         u8 req_type;
  465         u8 flags;
  466 #define ROCE_SQ_LOCAL_INV_WQE_COMP_FLG_MASK       0x1
  467 #define ROCE_SQ_LOCAL_INV_WQE_COMP_FLG_SHIFT      0
  468 #define ROCE_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_MASK   0x1
  469 #define ROCE_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_SHIFT  1
  470 #define ROCE_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_MASK  0x1
  471 #define ROCE_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_SHIFT 2
  472 #define ROCE_SQ_LOCAL_INV_WQE_SE_FLG_MASK         0x1
  473 #define ROCE_SQ_LOCAL_INV_WQE_SE_FLG_SHIFT        3
  474 #define ROCE_SQ_LOCAL_INV_WQE_INLINE_FLG_MASK     0x1
  475 #define ROCE_SQ_LOCAL_INV_WQE_INLINE_FLG_SHIFT    4
  476 #define ROCE_SQ_LOCAL_INV_WQE_RESERVED0_MASK      0x7
  477 #define ROCE_SQ_LOCAL_INV_WQE_RESERVED0_SHIFT     5
  478         u8 reserved1;
  479         u8 prev_wqe_size;
  480 };
  481 
  482 struct roce_sq_rdma_wqe {
  483         __le32 imm_data;
  484         __le32 length;
  485         __le32 xrc_srq;
  486         u8 req_type;
  487         u8 flags;
  488 #define ROCE_SQ_RDMA_WQE_COMP_FLG_MASK       0x1
  489 #define ROCE_SQ_RDMA_WQE_COMP_FLG_SHIFT      0
  490 #define ROCE_SQ_RDMA_WQE_RD_FENCE_FLG_MASK   0x1
  491 #define ROCE_SQ_RDMA_WQE_RD_FENCE_FLG_SHIFT  1
  492 #define ROCE_SQ_RDMA_WQE_INV_FENCE_FLG_MASK  0x1
  493 #define ROCE_SQ_RDMA_WQE_INV_FENCE_FLG_SHIFT 2
  494 #define ROCE_SQ_RDMA_WQE_SE_FLG_MASK         0x1
  495 #define ROCE_SQ_RDMA_WQE_SE_FLG_SHIFT        3
  496 #define ROCE_SQ_RDMA_WQE_INLINE_FLG_MASK     0x1
  497 #define ROCE_SQ_RDMA_WQE_INLINE_FLG_SHIFT    4
  498 #define ROCE_SQ_RDMA_WQE_RESERVED0_MASK      0x7
  499 #define ROCE_SQ_RDMA_WQE_RESERVED0_SHIFT     5
  500         u8 wqe_size;
  501         u8 prev_wqe_size;
  502         struct regpair remote_va;
  503         __le32 r_key;
  504         __le32 reserved1;
  505 };
  506 
  507 /*
  508  * First element (16 bytes) of rdma wqe
  509  */
  510 struct roce_sq_rdma_wqe_1st {
  511         __le32 imm_data;
  512         __le32 length;
  513         __le32 xrc_srq;
  514         u8 req_type;
  515         u8 flags;
  516 #define ROCE_SQ_RDMA_WQE_1ST_COMP_FLG_MASK       0x1
  517 #define ROCE_SQ_RDMA_WQE_1ST_COMP_FLG_SHIFT      0
  518 #define ROCE_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_MASK   0x1
  519 #define ROCE_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_SHIFT  1
  520 #define ROCE_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_MASK  0x1
  521 #define ROCE_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  522 #define ROCE_SQ_RDMA_WQE_1ST_SE_FLG_MASK         0x1
  523 #define ROCE_SQ_RDMA_WQE_1ST_SE_FLG_SHIFT        3
  524 #define ROCE_SQ_RDMA_WQE_1ST_INLINE_FLG_MASK     0x1
  525 #define ROCE_SQ_RDMA_WQE_1ST_INLINE_FLG_SHIFT    4
  526 #define ROCE_SQ_RDMA_WQE_1ST_RESERVED0_MASK      0x7
  527 #define ROCE_SQ_RDMA_WQE_1ST_RESERVED0_SHIFT     5
  528         u8 wqe_size;
  529         u8 prev_wqe_size;
  530 };
  531 
  532 /*
  533  * Second element (16 bytes) of rdma wqe
  534  */
  535 struct roce_sq_rdma_wqe_2nd {
  536         struct regpair remote_va;
  537         __le32 r_key;
  538         __le32 reserved1;
  539 };
  540 
  541 /*
  542  * SQ WQE req type enumeration
  543  */
  544 enum roce_sq_req_type {
  545         ROCE_SQ_REQ_TYPE_SEND,
  546         ROCE_SQ_REQ_TYPE_SEND_WITH_IMM,
  547         ROCE_SQ_REQ_TYPE_SEND_WITH_INVALIDATE,
  548         ROCE_SQ_REQ_TYPE_RDMA_WR,
  549         ROCE_SQ_REQ_TYPE_RDMA_WR_WITH_IMM,
  550         ROCE_SQ_REQ_TYPE_RDMA_RD,
  551         ROCE_SQ_REQ_TYPE_ATOMIC_CMP_AND_SWAP,
  552         ROCE_SQ_REQ_TYPE_ATOMIC_ADD,
  553         ROCE_SQ_REQ_TYPE_LOCAL_INVALIDATE,
  554         ROCE_SQ_REQ_TYPE_FAST_MR,
  555         ROCE_SQ_REQ_TYPE_BIND,
  556         ROCE_SQ_REQ_TYPE_INVALID,
  557         MAX_ROCE_SQ_REQ_TYPE
  558 };
  559 
  560 struct roce_sq_send_wqe {
  561         __le32 inv_key_or_imm_data;
  562         __le32 length;
  563         __le32 xrc_srq;
  564         u8 req_type;
  565         u8 flags;
  566 #define ROCE_SQ_SEND_WQE_COMP_FLG_MASK       0x1
  567 #define ROCE_SQ_SEND_WQE_COMP_FLG_SHIFT      0
  568 #define ROCE_SQ_SEND_WQE_RD_FENCE_FLG_MASK   0x1
  569 #define ROCE_SQ_SEND_WQE_RD_FENCE_FLG_SHIFT  1
  570 #define ROCE_SQ_SEND_WQE_INV_FENCE_FLG_MASK  0x1
  571 #define ROCE_SQ_SEND_WQE_INV_FENCE_FLG_SHIFT 2
  572 #define ROCE_SQ_SEND_WQE_SE_FLG_MASK         0x1
  573 #define ROCE_SQ_SEND_WQE_SE_FLG_SHIFT        3
  574 #define ROCE_SQ_SEND_WQE_INLINE_FLG_MASK     0x1
  575 #define ROCE_SQ_SEND_WQE_INLINE_FLG_SHIFT    4
  576 #define ROCE_SQ_SEND_WQE_RESERVED0_MASK      0x7
  577 #define ROCE_SQ_SEND_WQE_RESERVED0_SHIFT     5
  578         u8 wqe_size;
  579         u8 prev_wqe_size;
  580 };
  581 
  582 struct roce_sq_sge {
  583         __le32 length;
  584         struct regpair addr;
  585         __le32 l_key;
  586 };
  587 
  588 struct roce_srq_prod {
  589         __le16 prod;
  590 };
  591 
  592 struct roce_srq_sge {
  593         struct regpair addr;
  594         __le32 length;
  595         __le32 l_key;
  596         struct regpair wr_id;
  597         u8 flags;
  598 #define ROCE_SRQ_SGE_NUM_SGES_MASK   0x3
  599 #define ROCE_SRQ_SGE_NUM_SGES_SHIFT  0
  600 #define ROCE_SRQ_SGE_RESERVED0_MASK  0x3F
  601 #define ROCE_SRQ_SGE_RESERVED0_SHIFT 2
  602         u8 reserved1;
  603         __le16 reserved2;
  604         __le32 reserved3;
  605 };
  606 
  607 /*
  608  * RoCE doorbell data for SQ and RQ
  609  */
  610 struct roce_pwm_val16_data {
  611         __le16 icid;
  612         __le16 prod_val;
  613 };
  614 
  615 union roce_pwm_val16_data_union {
  616         struct roce_pwm_val16_data as_struct;
  617         __le32 as_dword;
  618 };
  619 
  620 /*
  621  * RoCE doorbell data for CQ
  622  */
  623 struct roce_pwm_val32_data {
  624         __le16 icid;
  625         u8 agg_flags;
  626         u8 params;
  627 #define ROCE_PWM_VAL32_DATA_AGG_CMD_MASK    0x3
  628 #define ROCE_PWM_VAL32_DATA_AGG_CMD_SHIFT   0
  629 #define ROCE_PWM_VAL32_DATA_BYPASS_EN_MASK  0x1
  630 #define ROCE_PWM_VAL32_DATA_BYPASS_EN_SHIFT 2
  631 #define ROCE_PWM_VAL32_DATA_RESERVED_MASK   0x1F
  632 #define ROCE_PWM_VAL32_DATA_RESERVED_SHIFT  3
  633         __le32 cq_cons_val;
  634 };
  635 
  636 union roce_pwm_val32_data_union {
  637         struct roce_pwm_val32_data as_struct;
  638         struct regpair as_repair;
  639 };
  640 
  641 #endif /* __QLNXR_ROCE_H__ */

Cache object: 82dc20bbe5e68c7528c32fa46129d7d9


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.