0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #ifndef __QED_HSI_RDMA__
0033 #define __QED_HSI_RDMA__
0034
0035 #include <linux/qed/rdma_common.h>
0036
0037
0038 struct rdma_cnqe {
0039 struct regpair cq_handle;
0040 };
0041
0042 struct rdma_cqe_responder {
0043 struct regpair srq_wr_id;
0044 struct regpair qp_handle;
0045 __le32 imm_data_or_inv_r_Key;
0046 __le32 length;
0047 __le32 imm_data_hi;
0048 __le16 rq_cons_or_srq_id;
0049 u8 flags;
0050 #define RDMA_CQE_RESPONDER_TOGGLE_BIT_MASK 0x1
0051 #define RDMA_CQE_RESPONDER_TOGGLE_BIT_SHIFT 0
0052 #define RDMA_CQE_RESPONDER_TYPE_MASK 0x3
0053 #define RDMA_CQE_RESPONDER_TYPE_SHIFT 1
0054 #define RDMA_CQE_RESPONDER_INV_FLG_MASK 0x1
0055 #define RDMA_CQE_RESPONDER_INV_FLG_SHIFT 3
0056 #define RDMA_CQE_RESPONDER_IMM_FLG_MASK 0x1
0057 #define RDMA_CQE_RESPONDER_IMM_FLG_SHIFT 4
0058 #define RDMA_CQE_RESPONDER_RDMA_FLG_MASK 0x1
0059 #define RDMA_CQE_RESPONDER_RDMA_FLG_SHIFT 5
0060 #define RDMA_CQE_RESPONDER_RESERVED2_MASK 0x3
0061 #define RDMA_CQE_RESPONDER_RESERVED2_SHIFT 6
0062 u8 status;
0063 };
0064
0065 struct rdma_cqe_requester {
0066 __le16 sq_cons;
0067 __le16 reserved0;
0068 __le32 reserved1;
0069 struct regpair qp_handle;
0070 struct regpair reserved2;
0071 __le32 reserved3;
0072 __le16 reserved4;
0073 u8 flags;
0074 #define RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK 0x1
0075 #define RDMA_CQE_REQUESTER_TOGGLE_BIT_SHIFT 0
0076 #define RDMA_CQE_REQUESTER_TYPE_MASK 0x3
0077 #define RDMA_CQE_REQUESTER_TYPE_SHIFT 1
0078 #define RDMA_CQE_REQUESTER_RESERVED5_MASK 0x1F
0079 #define RDMA_CQE_REQUESTER_RESERVED5_SHIFT 3
0080 u8 status;
0081 };
0082
0083 struct rdma_cqe_common {
0084 struct regpair reserved0;
0085 struct regpair qp_handle;
0086 __le16 reserved1[7];
0087 u8 flags;
0088 #define RDMA_CQE_COMMON_TOGGLE_BIT_MASK 0x1
0089 #define RDMA_CQE_COMMON_TOGGLE_BIT_SHIFT 0
0090 #define RDMA_CQE_COMMON_TYPE_MASK 0x3
0091 #define RDMA_CQE_COMMON_TYPE_SHIFT 1
0092 #define RDMA_CQE_COMMON_RESERVED2_MASK 0x1F
0093 #define RDMA_CQE_COMMON_RESERVED2_SHIFT 3
0094 u8 status;
0095 };
0096
0097
0098 union rdma_cqe {
0099 struct rdma_cqe_responder resp;
0100 struct rdma_cqe_requester req;
0101 struct rdma_cqe_common cmn;
0102 };
0103
0104
0105 enum rdma_cqe_requester_status_enum {
0106 RDMA_CQE_REQ_STS_OK,
0107 RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR,
0108 RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR,
0109 RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR,
0110 RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR,
0111 RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR,
0112 RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR,
0113 RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR,
0114 RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR,
0115 RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR,
0116 RDMA_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR,
0117 RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR,
0118 RDMA_CQE_REQ_STS_XRC_VOILATION_ERR,
0119 RDMA_CQE_REQ_STS_SIG_ERR,
0120 MAX_RDMA_CQE_REQUESTER_STATUS_ENUM
0121 };
0122
0123
0124 enum rdma_cqe_responder_status_enum {
0125 RDMA_CQE_RESP_STS_OK,
0126 RDMA_CQE_RESP_STS_LOCAL_ACCESS_ERR,
0127 RDMA_CQE_RESP_STS_LOCAL_LENGTH_ERR,
0128 RDMA_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR,
0129 RDMA_CQE_RESP_STS_LOCAL_PROTECTION_ERR,
0130 RDMA_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR,
0131 RDMA_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR,
0132 RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR,
0133 MAX_RDMA_CQE_RESPONDER_STATUS_ENUM
0134 };
0135
0136
0137 enum rdma_cqe_type {
0138 RDMA_CQE_TYPE_REQUESTER,
0139 RDMA_CQE_TYPE_RESPONDER_RQ,
0140 RDMA_CQE_TYPE_RESPONDER_SRQ,
0141 RDMA_CQE_TYPE_RESPONDER_XRC_SRQ,
0142 RDMA_CQE_TYPE_INVALID,
0143 MAX_RDMA_CQE_TYPE
0144 };
0145
0146 struct rdma_sq_sge {
0147 __le32 length;
0148 struct regpair addr;
0149 __le32 l_key;
0150 };
0151
0152 struct rdma_rq_sge {
0153 struct regpair addr;
0154 __le32 length;
0155 __le32 flags;
0156 #define RDMA_RQ_SGE_L_KEY_LO_MASK 0x3FFFFFF
0157 #define RDMA_RQ_SGE_L_KEY_LO_SHIFT 0
0158 #define RDMA_RQ_SGE_NUM_SGES_MASK 0x7
0159 #define RDMA_RQ_SGE_NUM_SGES_SHIFT 26
0160 #define RDMA_RQ_SGE_L_KEY_HI_MASK 0x7
0161 #define RDMA_RQ_SGE_L_KEY_HI_SHIFT 29
0162 };
0163
0164 struct rdma_srq_wqe_header {
0165 struct regpair wr_id;
0166 u8 num_sges ;
0167 u8 reserved2[7];
0168 };
0169
0170 struct rdma_srq_sge {
0171 struct regpair addr;
0172 __le32 length;
0173 __le32 l_key;
0174 };
0175
0176 union rdma_srq_elm {
0177 struct rdma_srq_wqe_header header;
0178 struct rdma_srq_sge sge;
0179 };
0180
0181
0182 struct rdma_pwm_flags_data {
0183 __le16 icid;
0184 u8 agg_flags;
0185 u8 reserved;
0186 };
0187
0188
0189 struct rdma_pwm_val16_data {
0190 __le16 icid;
0191 __le16 value;
0192 };
0193
0194 union rdma_pwm_val16_data_union {
0195 struct rdma_pwm_val16_data as_struct;
0196 __le32 as_dword;
0197 };
0198
0199
0200 struct rdma_pwm_val32_data {
0201 __le16 icid;
0202 u8 agg_flags;
0203 u8 params;
0204 #define RDMA_PWM_VAL32_DATA_AGG_CMD_MASK 0x3
0205 #define RDMA_PWM_VAL32_DATA_AGG_CMD_SHIFT 0
0206 #define RDMA_PWM_VAL32_DATA_BYPASS_EN_MASK 0x1
0207 #define RDMA_PWM_VAL32_DATA_BYPASS_EN_SHIFT 2
0208 #define RDMA_PWM_VAL32_DATA_CONN_TYPE_IS_IWARP_MASK 0x1
0209 #define RDMA_PWM_VAL32_DATA_CONN_TYPE_IS_IWARP_SHIFT 3
0210 #define RDMA_PWM_VAL32_DATA_SET_16B_VAL_MASK 0x1
0211 #define RDMA_PWM_VAL32_DATA_SET_16B_VAL_SHIFT 4
0212 #define RDMA_PWM_VAL32_DATA_RESERVED_MASK 0x7
0213 #define RDMA_PWM_VAL32_DATA_RESERVED_SHIFT 5
0214 __le32 value;
0215 };
0216
0217
0218 enum rdma_dif_block_size {
0219 RDMA_DIF_BLOCK_512 = 0,
0220 RDMA_DIF_BLOCK_4096 = 1,
0221 MAX_RDMA_DIF_BLOCK_SIZE
0222 };
0223
0224
0225 enum rdma_dif_crc_seed {
0226 RDMA_DIF_CRC_SEED_0000 = 0,
0227 RDMA_DIF_CRC_SEED_FFFF = 1,
0228 MAX_RDMA_DIF_CRC_SEED
0229 };
0230
0231
0232 struct rdma_dif_error_result {
0233 __le32 error_intervals;
0234 __le32 dif_error_1st_interval;
0235 u8 flags;
0236 #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_CRC_MASK 0x1
0237 #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_CRC_SHIFT 0
0238 #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_APP_TAG_MASK 0x1
0239 #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_APP_TAG_SHIFT 1
0240 #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_REF_TAG_MASK 0x1
0241 #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_REF_TAG_SHIFT 2
0242 #define RDMA_DIF_ERROR_RESULT_RESERVED0_MASK 0xF
0243 #define RDMA_DIF_ERROR_RESULT_RESERVED0_SHIFT 3
0244 #define RDMA_DIF_ERROR_RESULT_TOGGLE_BIT_MASK 0x1
0245 #define RDMA_DIF_ERROR_RESULT_TOGGLE_BIT_SHIFT 7
0246 u8 reserved1[55];
0247 };
0248
0249
0250 enum rdma_dif_io_direction_flg {
0251 RDMA_DIF_DIR_RX = 0,
0252 RDMA_DIF_DIR_TX = 1,
0253 MAX_RDMA_DIF_IO_DIRECTION_FLG
0254 };
0255
0256 struct rdma_dif_params {
0257 __le32 base_ref_tag;
0258 __le16 app_tag;
0259 __le16 app_tag_mask;
0260 __le16 runt_crc_value;
0261 __le16 flags;
0262 #define RDMA_DIF_PARAMS_IO_DIRECTION_FLG_MASK 0x1
0263 #define RDMA_DIF_PARAMS_IO_DIRECTION_FLG_SHIFT 0
0264 #define RDMA_DIF_PARAMS_BLOCK_SIZE_MASK 0x1
0265 #define RDMA_DIF_PARAMS_BLOCK_SIZE_SHIFT 1
0266 #define RDMA_DIF_PARAMS_RUNT_VALID_FLG_MASK 0x1
0267 #define RDMA_DIF_PARAMS_RUNT_VALID_FLG_SHIFT 2
0268 #define RDMA_DIF_PARAMS_VALIDATE_CRC_GUARD_MASK 0x1
0269 #define RDMA_DIF_PARAMS_VALIDATE_CRC_GUARD_SHIFT 3
0270 #define RDMA_DIF_PARAMS_VALIDATE_REF_TAG_MASK 0x1
0271 #define RDMA_DIF_PARAMS_VALIDATE_REF_TAG_SHIFT 4
0272 #define RDMA_DIF_PARAMS_VALIDATE_APP_TAG_MASK 0x1
0273 #define RDMA_DIF_PARAMS_VALIDATE_APP_TAG_SHIFT 5
0274 #define RDMA_DIF_PARAMS_CRC_SEED_MASK 0x1
0275 #define RDMA_DIF_PARAMS_CRC_SEED_SHIFT 6
0276 #define RDMA_DIF_PARAMS_RX_REF_TAG_CONST_MASK 0x1
0277 #define RDMA_DIF_PARAMS_RX_REF_TAG_CONST_SHIFT 7
0278 #define RDMA_DIF_PARAMS_BLOCK_GUARD_TYPE_MASK 0x1
0279 #define RDMA_DIF_PARAMS_BLOCK_GUARD_TYPE_SHIFT 8
0280 #define RDMA_DIF_PARAMS_APP_ESCAPE_MASK 0x1
0281 #define RDMA_DIF_PARAMS_APP_ESCAPE_SHIFT 9
0282 #define RDMA_DIF_PARAMS_REF_ESCAPE_MASK 0x1
0283 #define RDMA_DIF_PARAMS_REF_ESCAPE_SHIFT 10
0284 #define RDMA_DIF_PARAMS_RESERVED4_MASK 0x1F
0285 #define RDMA_DIF_PARAMS_RESERVED4_SHIFT 11
0286 __le32 reserved5;
0287 };
0288
0289
0290 struct rdma_sq_atomic_wqe {
0291 __le32 reserved1;
0292 __le32 length;
0293 __le32 xrc_srq;
0294 u8 req_type;
0295 u8 flags;
0296 #define RDMA_SQ_ATOMIC_WQE_COMP_FLG_MASK 0x1
0297 #define RDMA_SQ_ATOMIC_WQE_COMP_FLG_SHIFT 0
0298 #define RDMA_SQ_ATOMIC_WQE_RD_FENCE_FLG_MASK 0x1
0299 #define RDMA_SQ_ATOMIC_WQE_RD_FENCE_FLG_SHIFT 1
0300 #define RDMA_SQ_ATOMIC_WQE_INV_FENCE_FLG_MASK 0x1
0301 #define RDMA_SQ_ATOMIC_WQE_INV_FENCE_FLG_SHIFT 2
0302 #define RDMA_SQ_ATOMIC_WQE_SE_FLG_MASK 0x1
0303 #define RDMA_SQ_ATOMIC_WQE_SE_FLG_SHIFT 3
0304 #define RDMA_SQ_ATOMIC_WQE_INLINE_FLG_MASK 0x1
0305 #define RDMA_SQ_ATOMIC_WQE_INLINE_FLG_SHIFT 4
0306 #define RDMA_SQ_ATOMIC_WQE_DIF_ON_HOST_FLG_MASK 0x1
0307 #define RDMA_SQ_ATOMIC_WQE_DIF_ON_HOST_FLG_SHIFT 5
0308 #define RDMA_SQ_ATOMIC_WQE_RESERVED0_MASK 0x3
0309 #define RDMA_SQ_ATOMIC_WQE_RESERVED0_SHIFT 6
0310 u8 wqe_size;
0311 u8 prev_wqe_size;
0312 struct regpair remote_va;
0313 __le32 r_key;
0314 __le32 reserved2;
0315 struct regpair cmp_data;
0316 struct regpair swap_data;
0317 };
0318
0319
0320 struct rdma_sq_atomic_wqe_1st {
0321 __le32 reserved1;
0322 __le32 length;
0323 __le32 xrc_srq;
0324 u8 req_type;
0325 u8 flags;
0326 #define RDMA_SQ_ATOMIC_WQE_1ST_COMP_FLG_MASK 0x1
0327 #define RDMA_SQ_ATOMIC_WQE_1ST_COMP_FLG_SHIFT 0
0328 #define RDMA_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_MASK 0x1
0329 #define RDMA_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_SHIFT 1
0330 #define RDMA_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_MASK 0x1
0331 #define RDMA_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_SHIFT 2
0332 #define RDMA_SQ_ATOMIC_WQE_1ST_SE_FLG_MASK 0x1
0333 #define RDMA_SQ_ATOMIC_WQE_1ST_SE_FLG_SHIFT 3
0334 #define RDMA_SQ_ATOMIC_WQE_1ST_INLINE_FLG_MASK 0x1
0335 #define RDMA_SQ_ATOMIC_WQE_1ST_INLINE_FLG_SHIFT 4
0336 #define RDMA_SQ_ATOMIC_WQE_1ST_RESERVED0_MASK 0x7
0337 #define RDMA_SQ_ATOMIC_WQE_1ST_RESERVED0_SHIFT 5
0338 u8 wqe_size;
0339 u8 prev_wqe_size;
0340 };
0341
0342
0343 struct rdma_sq_atomic_wqe_2nd {
0344 struct regpair remote_va;
0345 __le32 r_key;
0346 __le32 reserved2;
0347 };
0348
0349
0350 struct rdma_sq_atomic_wqe_3rd {
0351 struct regpair cmp_data;
0352 struct regpair swap_data;
0353 };
0354
0355 struct rdma_sq_bind_wqe {
0356 struct regpair addr;
0357 __le32 l_key;
0358 u8 req_type;
0359 u8 flags;
0360 #define RDMA_SQ_BIND_WQE_COMP_FLG_MASK 0x1
0361 #define RDMA_SQ_BIND_WQE_COMP_FLG_SHIFT 0
0362 #define RDMA_SQ_BIND_WQE_RD_FENCE_FLG_MASK 0x1
0363 #define RDMA_SQ_BIND_WQE_RD_FENCE_FLG_SHIFT 1
0364 #define RDMA_SQ_BIND_WQE_INV_FENCE_FLG_MASK 0x1
0365 #define RDMA_SQ_BIND_WQE_INV_FENCE_FLG_SHIFT 2
0366 #define RDMA_SQ_BIND_WQE_SE_FLG_MASK 0x1
0367 #define RDMA_SQ_BIND_WQE_SE_FLG_SHIFT 3
0368 #define RDMA_SQ_BIND_WQE_INLINE_FLG_MASK 0x1
0369 #define RDMA_SQ_BIND_WQE_INLINE_FLG_SHIFT 4
0370 #define RDMA_SQ_BIND_WQE_DIF_ON_HOST_FLG_MASK 0x1
0371 #define RDMA_SQ_BIND_WQE_DIF_ON_HOST_FLG_SHIFT 5
0372 #define RDMA_SQ_BIND_WQE_RESERVED0_MASK 0x3
0373 #define RDMA_SQ_BIND_WQE_RESERVED0_SHIFT 6
0374 u8 wqe_size;
0375 u8 prev_wqe_size;
0376 u8 bind_ctrl;
0377 #define RDMA_SQ_BIND_WQE_ZERO_BASED_MASK 0x1
0378 #define RDMA_SQ_BIND_WQE_ZERO_BASED_SHIFT 0
0379 #define RDMA_SQ_BIND_WQE_RESERVED1_MASK 0x7F
0380 #define RDMA_SQ_BIND_WQE_RESERVED1_SHIFT 1
0381 u8 access_ctrl;
0382 #define RDMA_SQ_BIND_WQE_REMOTE_READ_MASK 0x1
0383 #define RDMA_SQ_BIND_WQE_REMOTE_READ_SHIFT 0
0384 #define RDMA_SQ_BIND_WQE_REMOTE_WRITE_MASK 0x1
0385 #define RDMA_SQ_BIND_WQE_REMOTE_WRITE_SHIFT 1
0386 #define RDMA_SQ_BIND_WQE_ENABLE_ATOMIC_MASK 0x1
0387 #define RDMA_SQ_BIND_WQE_ENABLE_ATOMIC_SHIFT 2
0388 #define RDMA_SQ_BIND_WQE_LOCAL_READ_MASK 0x1
0389 #define RDMA_SQ_BIND_WQE_LOCAL_READ_SHIFT 3
0390 #define RDMA_SQ_BIND_WQE_LOCAL_WRITE_MASK 0x1
0391 #define RDMA_SQ_BIND_WQE_LOCAL_WRITE_SHIFT 4
0392 #define RDMA_SQ_BIND_WQE_RESERVED2_MASK 0x7
0393 #define RDMA_SQ_BIND_WQE_RESERVED2_SHIFT 5
0394 u8 reserved3;
0395 u8 length_hi;
0396 __le32 length_lo;
0397 __le32 parent_l_key;
0398 __le32 reserved4;
0399 struct rdma_dif_params dif_params;
0400 };
0401
0402
0403 struct rdma_sq_bind_wqe_1st {
0404 struct regpair addr;
0405 __le32 l_key;
0406 u8 req_type;
0407 u8 flags;
0408 #define RDMA_SQ_BIND_WQE_1ST_COMP_FLG_MASK 0x1
0409 #define RDMA_SQ_BIND_WQE_1ST_COMP_FLG_SHIFT 0
0410 #define RDMA_SQ_BIND_WQE_1ST_RD_FENCE_FLG_MASK 0x1
0411 #define RDMA_SQ_BIND_WQE_1ST_RD_FENCE_FLG_SHIFT 1
0412 #define RDMA_SQ_BIND_WQE_1ST_INV_FENCE_FLG_MASK 0x1
0413 #define RDMA_SQ_BIND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
0414 #define RDMA_SQ_BIND_WQE_1ST_SE_FLG_MASK 0x1
0415 #define RDMA_SQ_BIND_WQE_1ST_SE_FLG_SHIFT 3
0416 #define RDMA_SQ_BIND_WQE_1ST_INLINE_FLG_MASK 0x1
0417 #define RDMA_SQ_BIND_WQE_1ST_INLINE_FLG_SHIFT 4
0418 #define RDMA_SQ_BIND_WQE_1ST_RESERVED0_MASK 0x7
0419 #define RDMA_SQ_BIND_WQE_1ST_RESERVED0_SHIFT 5
0420 u8 wqe_size;
0421 u8 prev_wqe_size;
0422 };
0423
0424
0425 struct rdma_sq_bind_wqe_2nd {
0426 u8 bind_ctrl;
0427 #define RDMA_SQ_BIND_WQE_2ND_ZERO_BASED_MASK 0x1
0428 #define RDMA_SQ_BIND_WQE_2ND_ZERO_BASED_SHIFT 0
0429 #define RDMA_SQ_BIND_WQE_2ND_RESERVED1_MASK 0x7F
0430 #define RDMA_SQ_BIND_WQE_2ND_RESERVED1_SHIFT 1
0431 u8 access_ctrl;
0432 #define RDMA_SQ_BIND_WQE_2ND_REMOTE_READ_MASK 0x1
0433 #define RDMA_SQ_BIND_WQE_2ND_REMOTE_READ_SHIFT 0
0434 #define RDMA_SQ_BIND_WQE_2ND_REMOTE_WRITE_MASK 0x1
0435 #define RDMA_SQ_BIND_WQE_2ND_REMOTE_WRITE_SHIFT 1
0436 #define RDMA_SQ_BIND_WQE_2ND_ENABLE_ATOMIC_MASK 0x1
0437 #define RDMA_SQ_BIND_WQE_2ND_ENABLE_ATOMIC_SHIFT 2
0438 #define RDMA_SQ_BIND_WQE_2ND_LOCAL_READ_MASK 0x1
0439 #define RDMA_SQ_BIND_WQE_2ND_LOCAL_READ_SHIFT 3
0440 #define RDMA_SQ_BIND_WQE_2ND_LOCAL_WRITE_MASK 0x1
0441 #define RDMA_SQ_BIND_WQE_2ND_LOCAL_WRITE_SHIFT 4
0442 #define RDMA_SQ_BIND_WQE_2ND_RESERVED2_MASK 0x7
0443 #define RDMA_SQ_BIND_WQE_2ND_RESERVED2_SHIFT 5
0444 u8 reserved3;
0445 u8 length_hi;
0446 __le32 length_lo;
0447 __le32 parent_l_key;
0448 __le32 reserved4;
0449 };
0450
0451
0452 struct rdma_sq_bind_wqe_3rd {
0453 struct rdma_dif_params dif_params;
0454 };
0455
0456
0457
0458
0459 struct rdma_sq_common_wqe {
0460 __le32 reserved1[3];
0461 u8 req_type;
0462 u8 flags;
0463 #define RDMA_SQ_COMMON_WQE_COMP_FLG_MASK 0x1
0464 #define RDMA_SQ_COMMON_WQE_COMP_FLG_SHIFT 0
0465 #define RDMA_SQ_COMMON_WQE_RD_FENCE_FLG_MASK 0x1
0466 #define RDMA_SQ_COMMON_WQE_RD_FENCE_FLG_SHIFT 1
0467 #define RDMA_SQ_COMMON_WQE_INV_FENCE_FLG_MASK 0x1
0468 #define RDMA_SQ_COMMON_WQE_INV_FENCE_FLG_SHIFT 2
0469 #define RDMA_SQ_COMMON_WQE_SE_FLG_MASK 0x1
0470 #define RDMA_SQ_COMMON_WQE_SE_FLG_SHIFT 3
0471 #define RDMA_SQ_COMMON_WQE_INLINE_FLG_MASK 0x1
0472 #define RDMA_SQ_COMMON_WQE_INLINE_FLG_SHIFT 4
0473 #define RDMA_SQ_COMMON_WQE_RESERVED0_MASK 0x7
0474 #define RDMA_SQ_COMMON_WQE_RESERVED0_SHIFT 5
0475 u8 wqe_size;
0476 u8 prev_wqe_size;
0477 };
0478
0479 struct rdma_sq_fmr_wqe {
0480 struct regpair addr;
0481 __le32 l_key;
0482 u8 req_type;
0483 u8 flags;
0484 #define RDMA_SQ_FMR_WQE_COMP_FLG_MASK 0x1
0485 #define RDMA_SQ_FMR_WQE_COMP_FLG_SHIFT 0
0486 #define RDMA_SQ_FMR_WQE_RD_FENCE_FLG_MASK 0x1
0487 #define RDMA_SQ_FMR_WQE_RD_FENCE_FLG_SHIFT 1
0488 #define RDMA_SQ_FMR_WQE_INV_FENCE_FLG_MASK 0x1
0489 #define RDMA_SQ_FMR_WQE_INV_FENCE_FLG_SHIFT 2
0490 #define RDMA_SQ_FMR_WQE_SE_FLG_MASK 0x1
0491 #define RDMA_SQ_FMR_WQE_SE_FLG_SHIFT 3
0492 #define RDMA_SQ_FMR_WQE_INLINE_FLG_MASK 0x1
0493 #define RDMA_SQ_FMR_WQE_INLINE_FLG_SHIFT 4
0494 #define RDMA_SQ_FMR_WQE_DIF_ON_HOST_FLG_MASK 0x1
0495 #define RDMA_SQ_FMR_WQE_DIF_ON_HOST_FLG_SHIFT 5
0496 #define RDMA_SQ_FMR_WQE_RESERVED0_MASK 0x3
0497 #define RDMA_SQ_FMR_WQE_RESERVED0_SHIFT 6
0498 u8 wqe_size;
0499 u8 prev_wqe_size;
0500 u8 fmr_ctrl;
0501 #define RDMA_SQ_FMR_WQE_PAGE_SIZE_LOG_MASK 0x1F
0502 #define RDMA_SQ_FMR_WQE_PAGE_SIZE_LOG_SHIFT 0
0503 #define RDMA_SQ_FMR_WQE_ZERO_BASED_MASK 0x1
0504 #define RDMA_SQ_FMR_WQE_ZERO_BASED_SHIFT 5
0505 #define RDMA_SQ_FMR_WQE_BIND_EN_MASK 0x1
0506 #define RDMA_SQ_FMR_WQE_BIND_EN_SHIFT 6
0507 #define RDMA_SQ_FMR_WQE_RESERVED1_MASK 0x1
0508 #define RDMA_SQ_FMR_WQE_RESERVED1_SHIFT 7
0509 u8 access_ctrl;
0510 #define RDMA_SQ_FMR_WQE_REMOTE_READ_MASK 0x1
0511 #define RDMA_SQ_FMR_WQE_REMOTE_READ_SHIFT 0
0512 #define RDMA_SQ_FMR_WQE_REMOTE_WRITE_MASK 0x1
0513 #define RDMA_SQ_FMR_WQE_REMOTE_WRITE_SHIFT 1
0514 #define RDMA_SQ_FMR_WQE_ENABLE_ATOMIC_MASK 0x1
0515 #define RDMA_SQ_FMR_WQE_ENABLE_ATOMIC_SHIFT 2
0516 #define RDMA_SQ_FMR_WQE_LOCAL_READ_MASK 0x1
0517 #define RDMA_SQ_FMR_WQE_LOCAL_READ_SHIFT 3
0518 #define RDMA_SQ_FMR_WQE_LOCAL_WRITE_MASK 0x1
0519 #define RDMA_SQ_FMR_WQE_LOCAL_WRITE_SHIFT 4
0520 #define RDMA_SQ_FMR_WQE_RESERVED2_MASK 0x7
0521 #define RDMA_SQ_FMR_WQE_RESERVED2_SHIFT 5
0522 u8 reserved3;
0523 u8 length_hi;
0524 __le32 length_lo;
0525 struct regpair pbl_addr;
0526 };
0527
0528
0529 struct rdma_sq_fmr_wqe_1st {
0530 struct regpair addr;
0531 __le32 l_key;
0532 u8 req_type;
0533 u8 flags;
0534 #define RDMA_SQ_FMR_WQE_1ST_COMP_FLG_MASK 0x1
0535 #define RDMA_SQ_FMR_WQE_1ST_COMP_FLG_SHIFT 0
0536 #define RDMA_SQ_FMR_WQE_1ST_RD_FENCE_FLG_MASK 0x1
0537 #define RDMA_SQ_FMR_WQE_1ST_RD_FENCE_FLG_SHIFT 1
0538 #define RDMA_SQ_FMR_WQE_1ST_INV_FENCE_FLG_MASK 0x1
0539 #define RDMA_SQ_FMR_WQE_1ST_INV_FENCE_FLG_SHIFT 2
0540 #define RDMA_SQ_FMR_WQE_1ST_SE_FLG_MASK 0x1
0541 #define RDMA_SQ_FMR_WQE_1ST_SE_FLG_SHIFT 3
0542 #define RDMA_SQ_FMR_WQE_1ST_INLINE_FLG_MASK 0x1
0543 #define RDMA_SQ_FMR_WQE_1ST_INLINE_FLG_SHIFT 4
0544 #define RDMA_SQ_FMR_WQE_1ST_DIF_ON_HOST_FLG_MASK 0x1
0545 #define RDMA_SQ_FMR_WQE_1ST_DIF_ON_HOST_FLG_SHIFT 5
0546 #define RDMA_SQ_FMR_WQE_1ST_RESERVED0_MASK 0x3
0547 #define RDMA_SQ_FMR_WQE_1ST_RESERVED0_SHIFT 6
0548 u8 wqe_size;
0549 u8 prev_wqe_size;
0550 };
0551
0552
0553 struct rdma_sq_fmr_wqe_2nd {
0554 u8 fmr_ctrl;
0555 #define RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_MASK 0x1F
0556 #define RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_SHIFT 0
0557 #define RDMA_SQ_FMR_WQE_2ND_ZERO_BASED_MASK 0x1
0558 #define RDMA_SQ_FMR_WQE_2ND_ZERO_BASED_SHIFT 5
0559 #define RDMA_SQ_FMR_WQE_2ND_BIND_EN_MASK 0x1
0560 #define RDMA_SQ_FMR_WQE_2ND_BIND_EN_SHIFT 6
0561 #define RDMA_SQ_FMR_WQE_2ND_RESERVED1_MASK 0x1
0562 #define RDMA_SQ_FMR_WQE_2ND_RESERVED1_SHIFT 7
0563 u8 access_ctrl;
0564 #define RDMA_SQ_FMR_WQE_2ND_REMOTE_READ_MASK 0x1
0565 #define RDMA_SQ_FMR_WQE_2ND_REMOTE_READ_SHIFT 0
0566 #define RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE_MASK 0x1
0567 #define RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE_SHIFT 1
0568 #define RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC_MASK 0x1
0569 #define RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC_SHIFT 2
0570 #define RDMA_SQ_FMR_WQE_2ND_LOCAL_READ_MASK 0x1
0571 #define RDMA_SQ_FMR_WQE_2ND_LOCAL_READ_SHIFT 3
0572 #define RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE_MASK 0x1
0573 #define RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE_SHIFT 4
0574 #define RDMA_SQ_FMR_WQE_2ND_RESERVED2_MASK 0x7
0575 #define RDMA_SQ_FMR_WQE_2ND_RESERVED2_SHIFT 5
0576 u8 reserved3;
0577 u8 length_hi;
0578 __le32 length_lo;
0579 struct regpair pbl_addr;
0580 };
0581
0582
0583 struct rdma_sq_local_inv_wqe {
0584 struct regpair reserved;
0585 __le32 inv_l_key;
0586 u8 req_type;
0587 u8 flags;
0588 #define RDMA_SQ_LOCAL_INV_WQE_COMP_FLG_MASK 0x1
0589 #define RDMA_SQ_LOCAL_INV_WQE_COMP_FLG_SHIFT 0
0590 #define RDMA_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_MASK 0x1
0591 #define RDMA_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_SHIFT 1
0592 #define RDMA_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_MASK 0x1
0593 #define RDMA_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_SHIFT 2
0594 #define RDMA_SQ_LOCAL_INV_WQE_SE_FLG_MASK 0x1
0595 #define RDMA_SQ_LOCAL_INV_WQE_SE_FLG_SHIFT 3
0596 #define RDMA_SQ_LOCAL_INV_WQE_INLINE_FLG_MASK 0x1
0597 #define RDMA_SQ_LOCAL_INV_WQE_INLINE_FLG_SHIFT 4
0598 #define RDMA_SQ_LOCAL_INV_WQE_DIF_ON_HOST_FLG_MASK 0x1
0599 #define RDMA_SQ_LOCAL_INV_WQE_DIF_ON_HOST_FLG_SHIFT 5
0600 #define RDMA_SQ_LOCAL_INV_WQE_RESERVED0_MASK 0x3
0601 #define RDMA_SQ_LOCAL_INV_WQE_RESERVED0_SHIFT 6
0602 u8 wqe_size;
0603 u8 prev_wqe_size;
0604 };
0605
0606 struct rdma_sq_rdma_wqe {
0607 __le32 imm_data;
0608 __le32 length;
0609 __le32 xrc_srq;
0610 u8 req_type;
0611 u8 flags;
0612 #define RDMA_SQ_RDMA_WQE_COMP_FLG_MASK 0x1
0613 #define RDMA_SQ_RDMA_WQE_COMP_FLG_SHIFT 0
0614 #define RDMA_SQ_RDMA_WQE_RD_FENCE_FLG_MASK 0x1
0615 #define RDMA_SQ_RDMA_WQE_RD_FENCE_FLG_SHIFT 1
0616 #define RDMA_SQ_RDMA_WQE_INV_FENCE_FLG_MASK 0x1
0617 #define RDMA_SQ_RDMA_WQE_INV_FENCE_FLG_SHIFT 2
0618 #define RDMA_SQ_RDMA_WQE_SE_FLG_MASK 0x1
0619 #define RDMA_SQ_RDMA_WQE_SE_FLG_SHIFT 3
0620 #define RDMA_SQ_RDMA_WQE_INLINE_FLG_MASK 0x1
0621 #define RDMA_SQ_RDMA_WQE_INLINE_FLG_SHIFT 4
0622 #define RDMA_SQ_RDMA_WQE_DIF_ON_HOST_FLG_MASK 0x1
0623 #define RDMA_SQ_RDMA_WQE_DIF_ON_HOST_FLG_SHIFT 5
0624 #define RDMA_SQ_RDMA_WQE_READ_INV_FLG_MASK 0x1
0625 #define RDMA_SQ_RDMA_WQE_READ_INV_FLG_SHIFT 6
0626 #define RDMA_SQ_RDMA_WQE_RESERVED1_MASK 0x1
0627 #define RDMA_SQ_RDMA_WQE_RESERVED1_SHIFT 7
0628 u8 wqe_size;
0629 u8 prev_wqe_size;
0630 struct regpair remote_va;
0631 __le32 r_key;
0632 u8 dif_flags;
0633 #define RDMA_SQ_RDMA_WQE_DIF_BLOCK_SIZE_MASK 0x1
0634 #define RDMA_SQ_RDMA_WQE_DIF_BLOCK_SIZE_SHIFT 0
0635 #define RDMA_SQ_RDMA_WQE_RESERVED2_MASK 0x7F
0636 #define RDMA_SQ_RDMA_WQE_RESERVED2_SHIFT 1
0637 u8 reserved3[3];
0638 };
0639
0640
0641 struct rdma_sq_rdma_wqe_1st {
0642 __le32 imm_data;
0643 __le32 length;
0644 __le32 xrc_srq;
0645 u8 req_type;
0646 u8 flags;
0647 #define RDMA_SQ_RDMA_WQE_1ST_COMP_FLG_MASK 0x1
0648 #define RDMA_SQ_RDMA_WQE_1ST_COMP_FLG_SHIFT 0
0649 #define RDMA_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_MASK 0x1
0650 #define RDMA_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_SHIFT 1
0651 #define RDMA_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_MASK 0x1
0652 #define RDMA_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_SHIFT 2
0653 #define RDMA_SQ_RDMA_WQE_1ST_SE_FLG_MASK 0x1
0654 #define RDMA_SQ_RDMA_WQE_1ST_SE_FLG_SHIFT 3
0655 #define RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG_MASK 0x1
0656 #define RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG_SHIFT 4
0657 #define RDMA_SQ_RDMA_WQE_1ST_DIF_ON_HOST_FLG_MASK 0x1
0658 #define RDMA_SQ_RDMA_WQE_1ST_DIF_ON_HOST_FLG_SHIFT 5
0659 #define RDMA_SQ_RDMA_WQE_1ST_READ_INV_FLG_MASK 0x1
0660 #define RDMA_SQ_RDMA_WQE_1ST_READ_INV_FLG_SHIFT 6
0661 #define RDMA_SQ_RDMA_WQE_1ST_RESERVED0_MASK 0x1
0662 #define RDMA_SQ_RDMA_WQE_1ST_RESERVED0_SHIFT 7
0663 u8 wqe_size;
0664 u8 prev_wqe_size;
0665 };
0666
0667
0668 struct rdma_sq_rdma_wqe_2nd {
0669 struct regpair remote_va;
0670 __le32 r_key;
0671 u8 dif_flags;
0672 #define RDMA_SQ_RDMA_WQE_2ND_DIF_BLOCK_SIZE_MASK 0x1
0673 #define RDMA_SQ_RDMA_WQE_2ND_DIF_BLOCK_SIZE_SHIFT 0
0674 #define RDMA_SQ_RDMA_WQE_2ND_DIF_FIRST_SEGMENT_FLG_MASK 0x1
0675 #define RDMA_SQ_RDMA_WQE_2ND_DIF_FIRST_SEGMENT_FLG_SHIFT 1
0676 #define RDMA_SQ_RDMA_WQE_2ND_DIF_LAST_SEGMENT_FLG_MASK 0x1
0677 #define RDMA_SQ_RDMA_WQE_2ND_DIF_LAST_SEGMENT_FLG_SHIFT 2
0678 #define RDMA_SQ_RDMA_WQE_2ND_RESERVED1_MASK 0x1F
0679 #define RDMA_SQ_RDMA_WQE_2ND_RESERVED1_SHIFT 3
0680 u8 reserved2[3];
0681 };
0682
0683
0684 enum rdma_sq_req_type {
0685 RDMA_SQ_REQ_TYPE_SEND,
0686 RDMA_SQ_REQ_TYPE_SEND_WITH_IMM,
0687 RDMA_SQ_REQ_TYPE_SEND_WITH_INVALIDATE,
0688 RDMA_SQ_REQ_TYPE_RDMA_WR,
0689 RDMA_SQ_REQ_TYPE_RDMA_WR_WITH_IMM,
0690 RDMA_SQ_REQ_TYPE_RDMA_RD,
0691 RDMA_SQ_REQ_TYPE_ATOMIC_CMP_AND_SWAP,
0692 RDMA_SQ_REQ_TYPE_ATOMIC_ADD,
0693 RDMA_SQ_REQ_TYPE_LOCAL_INVALIDATE,
0694 RDMA_SQ_REQ_TYPE_FAST_MR,
0695 RDMA_SQ_REQ_TYPE_BIND,
0696 RDMA_SQ_REQ_TYPE_INVALID,
0697 MAX_RDMA_SQ_REQ_TYPE
0698 };
0699
0700 struct rdma_sq_send_wqe {
0701 __le32 inv_key_or_imm_data;
0702 __le32 length;
0703 __le32 xrc_srq;
0704 u8 req_type;
0705 u8 flags;
0706 #define RDMA_SQ_SEND_WQE_COMP_FLG_MASK 0x1
0707 #define RDMA_SQ_SEND_WQE_COMP_FLG_SHIFT 0
0708 #define RDMA_SQ_SEND_WQE_RD_FENCE_FLG_MASK 0x1
0709 #define RDMA_SQ_SEND_WQE_RD_FENCE_FLG_SHIFT 1
0710 #define RDMA_SQ_SEND_WQE_INV_FENCE_FLG_MASK 0x1
0711 #define RDMA_SQ_SEND_WQE_INV_FENCE_FLG_SHIFT 2
0712 #define RDMA_SQ_SEND_WQE_SE_FLG_MASK 0x1
0713 #define RDMA_SQ_SEND_WQE_SE_FLG_SHIFT 3
0714 #define RDMA_SQ_SEND_WQE_INLINE_FLG_MASK 0x1
0715 #define RDMA_SQ_SEND_WQE_INLINE_FLG_SHIFT 4
0716 #define RDMA_SQ_SEND_WQE_DIF_ON_HOST_FLG_MASK 0x1
0717 #define RDMA_SQ_SEND_WQE_DIF_ON_HOST_FLG_SHIFT 5
0718 #define RDMA_SQ_SEND_WQE_RESERVED0_MASK 0x3
0719 #define RDMA_SQ_SEND_WQE_RESERVED0_SHIFT 6
0720 u8 wqe_size;
0721 u8 prev_wqe_size;
0722 __le32 reserved1[4];
0723 };
0724
0725 struct rdma_sq_send_wqe_1st {
0726 __le32 inv_key_or_imm_data;
0727 __le32 length;
0728 __le32 xrc_srq;
0729 u8 req_type;
0730 u8 flags;
0731 #define RDMA_SQ_SEND_WQE_1ST_COMP_FLG_MASK 0x1
0732 #define RDMA_SQ_SEND_WQE_1ST_COMP_FLG_SHIFT 0
0733 #define RDMA_SQ_SEND_WQE_1ST_RD_FENCE_FLG_MASK 0x1
0734 #define RDMA_SQ_SEND_WQE_1ST_RD_FENCE_FLG_SHIFT 1
0735 #define RDMA_SQ_SEND_WQE_1ST_INV_FENCE_FLG_MASK 0x1
0736 #define RDMA_SQ_SEND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
0737 #define RDMA_SQ_SEND_WQE_1ST_SE_FLG_MASK 0x1
0738 #define RDMA_SQ_SEND_WQE_1ST_SE_FLG_SHIFT 3
0739 #define RDMA_SQ_SEND_WQE_1ST_INLINE_FLG_MASK 0x1
0740 #define RDMA_SQ_SEND_WQE_1ST_INLINE_FLG_SHIFT 4
0741 #define RDMA_SQ_SEND_WQE_1ST_RESERVED0_MASK 0x7
0742 #define RDMA_SQ_SEND_WQE_1ST_RESERVED0_SHIFT 5
0743 u8 wqe_size;
0744 u8 prev_wqe_size;
0745 };
0746
0747 struct rdma_sq_send_wqe_2st {
0748 __le32 reserved1[4];
0749 };
0750
0751 #endif