1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2*4882a593Smuzhiyun /* QLogic qed NIC Driver 3*4882a593Smuzhiyun * Copyright (c) 2015 QLogic Corporation 4*4882a593Smuzhiyun * Copyright (c) 2019-2020 Marvell International Ltd. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __FCOE_COMMON__ 8*4882a593Smuzhiyun #define __FCOE_COMMON__ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /*********************/ 11*4882a593Smuzhiyun /* FCOE FW CONSTANTS */ 12*4882a593Smuzhiyun /*********************/ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define FC_ABTS_REPLY_MAX_PAYLOAD_LEN 12 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* The fcoe storm task context protection-information of Ystorm */ 17*4882a593Smuzhiyun struct protection_info_ctx { 18*4882a593Smuzhiyun __le16 flags; 19*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_HOST_INTERFACE_MASK 0x3 20*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_HOST_INTERFACE_SHIFT 0 21*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_DIF_TO_PEER_MASK 0x1 22*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_DIF_TO_PEER_SHIFT 2 23*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_MASK 0x1 24*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_SHIFT 3 25*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_MASK 0xF 26*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_SHIFT 4 27*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_MASK 0x1 28*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_SHIFT 8 29*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_RESERVED0_MASK 0x7F 30*4882a593Smuzhiyun #define PROTECTION_INFO_CTX_RESERVED0_SHIFT 9 31*4882a593Smuzhiyun u8 dix_block_size; 32*4882a593Smuzhiyun u8 dst_size; 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* The fcoe storm task context protection-information of Ystorm */ 36*4882a593Smuzhiyun union protection_info_union_ctx { 37*4882a593Smuzhiyun struct protection_info_ctx info; 38*4882a593Smuzhiyun __le32 value; 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* FCP CMD payload */ 42*4882a593Smuzhiyun struct fcoe_fcp_cmd_payload { 43*4882a593Smuzhiyun __le32 opaque[8]; 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* FCP RSP payload */ 47*4882a593Smuzhiyun struct fcoe_fcp_rsp_payload { 48*4882a593Smuzhiyun __le32 opaque[6]; 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* FCP RSP payload */ 52*4882a593Smuzhiyun struct fcp_rsp_payload_padded { 53*4882a593Smuzhiyun struct fcoe_fcp_rsp_payload rsp_payload; 54*4882a593Smuzhiyun __le32 reserved[2]; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* FCP RSP payload */ 58*4882a593Smuzhiyun struct fcoe_fcp_xfer_payload { 59*4882a593Smuzhiyun __le32 opaque[3]; 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /* FCP RSP payload */ 63*4882a593Smuzhiyun struct fcp_xfer_payload_padded { 64*4882a593Smuzhiyun struct fcoe_fcp_xfer_payload xfer_payload; 65*4882a593Smuzhiyun __le32 reserved[5]; 66*4882a593Smuzhiyun }; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* Task params */ 69*4882a593Smuzhiyun struct fcoe_tx_data_params { 70*4882a593Smuzhiyun __le32 data_offset; 71*4882a593Smuzhiyun __le32 offset_in_io; 72*4882a593Smuzhiyun u8 flags; 73*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_MASK 0x1 74*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_SHIFT 0 75*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_DROP_DATA_MASK 0x1 76*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_DROP_DATA_SHIFT 1 77*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_MASK 0x1 78*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_SHIFT 2 79*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_RESERVED0_MASK 0x1F 80*4882a593Smuzhiyun #define FCOE_TX_DATA_PARAMS_RESERVED0_SHIFT 3 81*4882a593Smuzhiyun u8 dif_residual; 82*4882a593Smuzhiyun __le16 seq_cnt; 83*4882a593Smuzhiyun __le16 single_sge_saved_offset; 84*4882a593Smuzhiyun __le16 next_dif_offset; 85*4882a593Smuzhiyun __le16 seq_id; 86*4882a593Smuzhiyun __le16 reserved3; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* Middle path parameters: FC header fields provided by the driver */ 90*4882a593Smuzhiyun struct fcoe_tx_mid_path_params { 91*4882a593Smuzhiyun __le32 parameter; 92*4882a593Smuzhiyun u8 r_ctl; 93*4882a593Smuzhiyun u8 type; 94*4882a593Smuzhiyun u8 cs_ctl; 95*4882a593Smuzhiyun u8 df_ctl; 96*4882a593Smuzhiyun __le16 rx_id; 97*4882a593Smuzhiyun __le16 ox_id; 98*4882a593Smuzhiyun }; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* Task params */ 101*4882a593Smuzhiyun struct fcoe_tx_params { 102*4882a593Smuzhiyun struct fcoe_tx_data_params data; 103*4882a593Smuzhiyun struct fcoe_tx_mid_path_params mid_path; 104*4882a593Smuzhiyun }; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* Union of FCP CMD payload \ TX params \ ABTS \ Cleanup */ 107*4882a593Smuzhiyun union fcoe_tx_info_union_ctx { 108*4882a593Smuzhiyun struct fcoe_fcp_cmd_payload fcp_cmd_payload; 109*4882a593Smuzhiyun struct fcp_rsp_payload_padded fcp_rsp_payload; 110*4882a593Smuzhiyun struct fcp_xfer_payload_padded fcp_xfer_payload; 111*4882a593Smuzhiyun struct fcoe_tx_params tx_params; 112*4882a593Smuzhiyun }; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun /* Data sgl */ 115*4882a593Smuzhiyun struct fcoe_slow_sgl_ctx { 116*4882a593Smuzhiyun struct regpair base_sgl_addr; 117*4882a593Smuzhiyun __le16 curr_sge_off; 118*4882a593Smuzhiyun __le16 remainder_num_sges; 119*4882a593Smuzhiyun __le16 curr_sgl_index; 120*4882a593Smuzhiyun __le16 reserved; 121*4882a593Smuzhiyun }; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun /* Union of DIX SGL \ cached DIX sges */ 124*4882a593Smuzhiyun union fcoe_dix_desc_ctx { 125*4882a593Smuzhiyun struct fcoe_slow_sgl_ctx dix_sgl; 126*4882a593Smuzhiyun struct scsi_sge cached_dix_sge; 127*4882a593Smuzhiyun }; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun /* The fcoe storm task context of Ystorm */ 130*4882a593Smuzhiyun struct ystorm_fcoe_task_st_ctx { 131*4882a593Smuzhiyun u8 task_type; 132*4882a593Smuzhiyun u8 sgl_mode; 133*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK 0x1 134*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT 0 135*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_RSRV_MASK 0x7F 136*4882a593Smuzhiyun #define YSTORM_FCOE_TASK_ST_CTX_RSRV_SHIFT 1 137*4882a593Smuzhiyun u8 cached_dix_sge; 138*4882a593Smuzhiyun u8 expect_first_xfer; 139*4882a593Smuzhiyun __le32 num_pbf_zero_write; 140*4882a593Smuzhiyun union protection_info_union_ctx protection_info_union; 141*4882a593Smuzhiyun __le32 data_2_trns_rem; 142*4882a593Smuzhiyun struct scsi_sgl_params sgl_params; 143*4882a593Smuzhiyun u8 reserved1[12]; 144*4882a593Smuzhiyun union fcoe_tx_info_union_ctx tx_info_union; 145*4882a593Smuzhiyun union fcoe_dix_desc_ctx dix_desc; 146*4882a593Smuzhiyun struct scsi_cached_sges data_desc; 147*4882a593Smuzhiyun __le16 ox_id; 148*4882a593Smuzhiyun __le16 rx_id; 149*4882a593Smuzhiyun __le32 task_rety_identifier; 150*4882a593Smuzhiyun u8 reserved2[8]; 151*4882a593Smuzhiyun }; 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun struct e4_ystorm_fcoe_task_ag_ctx { 154*4882a593Smuzhiyun u8 byte0; 155*4882a593Smuzhiyun u8 byte1; 156*4882a593Smuzhiyun __le16 word0; 157*4882a593Smuzhiyun u8 flags0; 158*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_MASK 0xF 159*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_SHIFT 0 160*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT0_MASK 0x1 161*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT0_SHIFT 4 162*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT1_MASK 0x1 163*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT 5 164*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT2_MASK 0x1 165*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT 6 166*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT3_MASK 0x1 167*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT 7 168*4882a593Smuzhiyun u8 flags1; 169*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0_MASK 0x3 170*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0_SHIFT 0 171*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1_MASK 0x3 172*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT 2 173*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_MASK 0x3 174*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_SHIFT 4 175*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0EN_MASK 0x1 176*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT 6 177*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK 0x1 178*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT 7 179*4882a593Smuzhiyun u8 flags2; 180*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT4_MASK 0x1 181*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_BIT4_SHIFT 0 182*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1 183*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 1 184*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1 185*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 2 186*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1 187*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 3 188*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1 189*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 4 190*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1 191*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 5 192*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK 0x1 193*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT 6 194*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK 0x1 195*4882a593Smuzhiyun #define E4_YSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT 7 196*4882a593Smuzhiyun u8 byte2; 197*4882a593Smuzhiyun __le32 reg0; 198*4882a593Smuzhiyun u8 byte3; 199*4882a593Smuzhiyun u8 byte4; 200*4882a593Smuzhiyun __le16 rx_id; 201*4882a593Smuzhiyun __le16 word2; 202*4882a593Smuzhiyun __le16 word3; 203*4882a593Smuzhiyun __le16 word4; 204*4882a593Smuzhiyun __le16 word5; 205*4882a593Smuzhiyun __le32 reg1; 206*4882a593Smuzhiyun __le32 reg2; 207*4882a593Smuzhiyun }; 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun struct e4_tstorm_fcoe_task_ag_ctx { 210*4882a593Smuzhiyun u8 reserved; 211*4882a593Smuzhiyun u8 byte1; 212*4882a593Smuzhiyun __le16 icid; 213*4882a593Smuzhiyun u8 flags0; 214*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF 215*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0 216*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1 217*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4 218*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT1_MASK 0x1 219*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT 5 220*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_MASK 0x1 221*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_SHIFT 6 222*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_VALID_MASK 0x1 223*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_VALID_SHIFT 7 224*4882a593Smuzhiyun u8 flags1; 225*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_MASK 0x1 226*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_SHIFT 0 227*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT5_MASK 0x1 228*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_BIT5_SHIFT 1 229*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_MASK 0x3 230*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_SHIFT 2 231*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_MASK 0x3 232*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_SHIFT 4 233*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2_MASK 0x3 234*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT 6 235*4882a593Smuzhiyun u8 flags2; 236*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_MASK 0x3 237*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_SHIFT 0 238*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK 0x3 239*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT 2 240*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_MASK 0x3 241*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_SHIFT 4 242*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_MASK 0x3 243*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_SHIFT 6 244*4882a593Smuzhiyun u8 flags3; 245*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_MASK 0x3 246*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_SHIFT 0 247*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_MASK 0x1 248*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_SHIFT 2 249*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_MASK 0x1 250*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_SHIFT 3 251*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK 0x1 252*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT 4 253*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_MASK 0x1 254*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_SHIFT 5 255*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK 0x1 256*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT 6 257*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_MASK 0x1 258*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_SHIFT 7 259*4882a593Smuzhiyun u8 flags4; 260*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_MASK 0x1 261*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_SHIFT 0 262*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_MASK 0x1 263*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_SHIFT 1 264*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1 265*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 2 266*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1 267*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 3 268*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1 269*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 4 270*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1 271*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 5 272*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1 273*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 6 274*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK 0x1 275*4882a593Smuzhiyun #define E4_TSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT 7 276*4882a593Smuzhiyun u8 cleanup_state; 277*4882a593Smuzhiyun __le16 last_sent_tid; 278*4882a593Smuzhiyun __le32 rec_rr_tov_exp_timeout; 279*4882a593Smuzhiyun u8 byte3; 280*4882a593Smuzhiyun u8 byte4; 281*4882a593Smuzhiyun __le16 word2; 282*4882a593Smuzhiyun __le16 word3; 283*4882a593Smuzhiyun __le16 word4; 284*4882a593Smuzhiyun __le32 data_offset_end_of_seq; 285*4882a593Smuzhiyun __le32 data_offset_next; 286*4882a593Smuzhiyun }; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /* Cached data sges */ 289*4882a593Smuzhiyun struct fcoe_exp_ro { 290*4882a593Smuzhiyun __le32 data_offset; 291*4882a593Smuzhiyun __le32 reserved; 292*4882a593Smuzhiyun }; 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun /* Union of Cleanup address \ expected relative offsets */ 295*4882a593Smuzhiyun union fcoe_cleanup_addr_exp_ro_union { 296*4882a593Smuzhiyun struct regpair abts_rsp_fc_payload_hi; 297*4882a593Smuzhiyun struct fcoe_exp_ro exp_ro; 298*4882a593Smuzhiyun }; 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun /* Fields coppied from ABTSrsp pckt */ 301*4882a593Smuzhiyun struct fcoe_abts_pkt { 302*4882a593Smuzhiyun __le32 abts_rsp_fc_payload_lo; 303*4882a593Smuzhiyun __le16 abts_rsp_rx_id; 304*4882a593Smuzhiyun u8 abts_rsp_rctl; 305*4882a593Smuzhiyun u8 reserved2; 306*4882a593Smuzhiyun }; 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun /* FW read- write (modifyable) part The fcoe task storm context of Tstorm */ 309*4882a593Smuzhiyun struct fcoe_tstorm_fcoe_task_st_ctx_read_write { 310*4882a593Smuzhiyun union fcoe_cleanup_addr_exp_ro_union cleanup_addr_exp_ro_union; 311*4882a593Smuzhiyun __le16 flags; 312*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_MASK 0x1 313*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_SHIFT 0 314*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_MASK 0x1 315*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_SHIFT 1 316*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_MASK 0x1 317*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_SHIFT 2 318*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_MASK 0x1 319*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_SHIFT 3 320*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_MASK 0x1 321*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_SHIFT 4 322*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_MASK 0x1 323*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_SHIFT 5 324*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_MASK 0x3 325*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_SHIFT 6 326*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_MASK 0xFF 327*4882a593Smuzhiyun #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_SHIFT 8 328*4882a593Smuzhiyun __le16 seq_cnt; 329*4882a593Smuzhiyun u8 seq_id; 330*4882a593Smuzhiyun u8 ooo_rx_seq_id; 331*4882a593Smuzhiyun __le16 rx_id; 332*4882a593Smuzhiyun struct fcoe_abts_pkt abts_data; 333*4882a593Smuzhiyun __le32 e_d_tov_exp_timeout_val; 334*4882a593Smuzhiyun __le16 ooo_rx_seq_cnt; 335*4882a593Smuzhiyun __le16 reserved1; 336*4882a593Smuzhiyun }; 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun /* FW read only part The fcoe task storm context of Tstorm */ 339*4882a593Smuzhiyun struct fcoe_tstorm_fcoe_task_st_ctx_read_only { 340*4882a593Smuzhiyun u8 task_type; 341*4882a593Smuzhiyun u8 dev_type; 342*4882a593Smuzhiyun u8 conf_supported; 343*4882a593Smuzhiyun u8 glbl_q_num; 344*4882a593Smuzhiyun __le32 cid; 345*4882a593Smuzhiyun __le32 fcp_cmd_trns_size; 346*4882a593Smuzhiyun __le32 rsrv; 347*4882a593Smuzhiyun }; 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun /** The fcoe task storm context of Tstorm */ 350*4882a593Smuzhiyun struct tstorm_fcoe_task_st_ctx { 351*4882a593Smuzhiyun struct fcoe_tstorm_fcoe_task_st_ctx_read_write read_write; 352*4882a593Smuzhiyun struct fcoe_tstorm_fcoe_task_st_ctx_read_only read_only; 353*4882a593Smuzhiyun }; 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun struct e4_mstorm_fcoe_task_ag_ctx { 356*4882a593Smuzhiyun u8 byte0; 357*4882a593Smuzhiyun u8 byte1; 358*4882a593Smuzhiyun __le16 icid; 359*4882a593Smuzhiyun u8 flags0; 360*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF 361*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0 362*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1 363*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4 364*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_MASK 0x1 365*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_SHIFT 5 366*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT2_MASK 0x1 367*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT 6 368*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT3_MASK 0x1 369*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT 7 370*4882a593Smuzhiyun u8 flags1; 371*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK 0x3 372*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT 0 373*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1_MASK 0x3 374*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT 2 375*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2_MASK 0x3 376*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT 4 377*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK 0x1 378*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT 6 379*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK 0x1 380*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT 7 381*4882a593Smuzhiyun u8 flags2; 382*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK 0x1 383*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT 0 384*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1 385*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 1 386*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1 387*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 2 388*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1 389*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 3 390*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1 391*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 4 392*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1 393*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 5 394*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_MASK 0x1 395*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_SHIFT 6 396*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK 0x1 397*4882a593Smuzhiyun #define E4_MSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT 7 398*4882a593Smuzhiyun u8 cleanup_state; 399*4882a593Smuzhiyun __le32 received_bytes; 400*4882a593Smuzhiyun u8 byte3; 401*4882a593Smuzhiyun u8 glbl_q_num; 402*4882a593Smuzhiyun __le16 word1; 403*4882a593Smuzhiyun __le16 tid_to_xfer; 404*4882a593Smuzhiyun __le16 word3; 405*4882a593Smuzhiyun __le16 word4; 406*4882a593Smuzhiyun __le16 word5; 407*4882a593Smuzhiyun __le32 expected_bytes; 408*4882a593Smuzhiyun __le32 reg2; 409*4882a593Smuzhiyun }; 410*4882a593Smuzhiyun 411*4882a593Smuzhiyun /* The fcoe task storm context of Mstorm */ 412*4882a593Smuzhiyun struct mstorm_fcoe_task_st_ctx { 413*4882a593Smuzhiyun struct regpair rsp_buf_addr; 414*4882a593Smuzhiyun __le32 rsrv[2]; 415*4882a593Smuzhiyun struct scsi_sgl_params sgl_params; 416*4882a593Smuzhiyun __le32 data_2_trns_rem; 417*4882a593Smuzhiyun __le32 data_buffer_offset; 418*4882a593Smuzhiyun __le16 parent_id; 419*4882a593Smuzhiyun __le16 flags; 420*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_MASK 0xF 421*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_SHIFT 0 422*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_MASK 0x3 423*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_SHIFT 4 424*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_MASK 0x1 425*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_SHIFT 6 426*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_MASK 0x1 427*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_SHIFT 7 428*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_MASK 0x3 429*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_SHIFT 8 430*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_MASK 0x1 431*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_SHIFT 10 432*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_MASK 0x1 433*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_SHIFT 11 434*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_MASK 0x1 435*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_SHIFT 12 436*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK 0x1 437*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT 13 438*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_MASK 0x3 439*4882a593Smuzhiyun #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_SHIFT 14 440*4882a593Smuzhiyun struct scsi_cached_sges data_desc; 441*4882a593Smuzhiyun }; 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun struct e4_ustorm_fcoe_task_ag_ctx { 444*4882a593Smuzhiyun u8 reserved; 445*4882a593Smuzhiyun u8 byte1; 446*4882a593Smuzhiyun __le16 icid; 447*4882a593Smuzhiyun u8 flags0; 448*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF 449*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0 450*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1 451*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4 452*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_BIT1_MASK 0x1 453*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT 5 454*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0_MASK 0x3 455*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0_SHIFT 6 456*4882a593Smuzhiyun u8 flags1; 457*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1_MASK 0x3 458*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1_SHIFT 0 459*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2_MASK 0x3 460*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2_SHIFT 2 461*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3_MASK 0x3 462*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3_SHIFT 4 463*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_MASK 0x3 464*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_SHIFT 6 465*4882a593Smuzhiyun u8 flags2; 466*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0EN_MASK 0x1 467*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT 0 468*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1EN_MASK 0x1 469*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT 1 470*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2EN_MASK 0x1 471*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT 2 472*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3EN_MASK 0x1 473*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_CF3EN_SHIFT 3 474*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK 0x1 475*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT 4 476*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK 0x1 477*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT 5 478*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK 0x1 479*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT 6 480*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK 0x1 481*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT 7 482*4882a593Smuzhiyun u8 flags3; 483*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK 0x1 484*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT 0 485*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK 0x1 486*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT 1 487*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK 0x1 488*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT 2 489*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK 0x1 490*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT 3 491*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF 492*4882a593Smuzhiyun #define E4_USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT 4 493*4882a593Smuzhiyun __le32 dif_err_intervals; 494*4882a593Smuzhiyun __le32 dif_error_1st_interval; 495*4882a593Smuzhiyun __le32 global_cq_num; 496*4882a593Smuzhiyun __le32 reg3; 497*4882a593Smuzhiyun __le32 reg4; 498*4882a593Smuzhiyun __le32 reg5; 499*4882a593Smuzhiyun }; 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun /* FCoE task context */ 502*4882a593Smuzhiyun struct e4_fcoe_task_context { 503*4882a593Smuzhiyun struct ystorm_fcoe_task_st_ctx ystorm_st_context; 504*4882a593Smuzhiyun struct regpair ystorm_st_padding[2]; 505*4882a593Smuzhiyun struct tdif_task_context tdif_context; 506*4882a593Smuzhiyun struct e4_ystorm_fcoe_task_ag_ctx ystorm_ag_context; 507*4882a593Smuzhiyun struct e4_tstorm_fcoe_task_ag_ctx tstorm_ag_context; 508*4882a593Smuzhiyun struct timers_context timer_context; 509*4882a593Smuzhiyun struct tstorm_fcoe_task_st_ctx tstorm_st_context; 510*4882a593Smuzhiyun struct regpair tstorm_st_padding[2]; 511*4882a593Smuzhiyun struct e4_mstorm_fcoe_task_ag_ctx mstorm_ag_context; 512*4882a593Smuzhiyun struct mstorm_fcoe_task_st_ctx mstorm_st_context; 513*4882a593Smuzhiyun struct e4_ustorm_fcoe_task_ag_ctx ustorm_ag_context; 514*4882a593Smuzhiyun struct rdif_task_context rdif_context; 515*4882a593Smuzhiyun }; 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun /* FCoE additional WQE (Sq/XferQ) information */ 518*4882a593Smuzhiyun union fcoe_additional_info_union { 519*4882a593Smuzhiyun __le32 previous_tid; 520*4882a593Smuzhiyun __le32 parent_tid; 521*4882a593Smuzhiyun __le32 burst_length; 522*4882a593Smuzhiyun __le32 seq_rec_updated_offset; 523*4882a593Smuzhiyun }; 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun /* FCoE Ramrod Command IDs */ 526*4882a593Smuzhiyun enum fcoe_completion_status { 527*4882a593Smuzhiyun FCOE_COMPLETION_STATUS_SUCCESS, 528*4882a593Smuzhiyun FCOE_COMPLETION_STATUS_FCOE_VER_ERR, 529*4882a593Smuzhiyun FCOE_COMPLETION_STATUS_SRC_MAC_ADD_ARR_ERR, 530*4882a593Smuzhiyun MAX_FCOE_COMPLETION_STATUS 531*4882a593Smuzhiyun }; 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun /* FC address (SID/DID) network presentation */ 534*4882a593Smuzhiyun struct fc_addr_nw { 535*4882a593Smuzhiyun u8 addr_lo; 536*4882a593Smuzhiyun u8 addr_mid; 537*4882a593Smuzhiyun u8 addr_hi; 538*4882a593Smuzhiyun }; 539*4882a593Smuzhiyun 540*4882a593Smuzhiyun /* FCoE connection offload */ 541*4882a593Smuzhiyun struct fcoe_conn_offload_ramrod_data { 542*4882a593Smuzhiyun struct regpair sq_pbl_addr; 543*4882a593Smuzhiyun struct regpair sq_curr_page_addr; 544*4882a593Smuzhiyun struct regpair sq_next_page_addr; 545*4882a593Smuzhiyun struct regpair xferq_pbl_addr; 546*4882a593Smuzhiyun struct regpair xferq_curr_page_addr; 547*4882a593Smuzhiyun struct regpair xferq_next_page_addr; 548*4882a593Smuzhiyun struct regpair respq_pbl_addr; 549*4882a593Smuzhiyun struct regpair respq_curr_page_addr; 550*4882a593Smuzhiyun struct regpair respq_next_page_addr; 551*4882a593Smuzhiyun __le16 dst_mac_addr_lo; 552*4882a593Smuzhiyun __le16 dst_mac_addr_mid; 553*4882a593Smuzhiyun __le16 dst_mac_addr_hi; 554*4882a593Smuzhiyun __le16 src_mac_addr_lo; 555*4882a593Smuzhiyun __le16 src_mac_addr_mid; 556*4882a593Smuzhiyun __le16 src_mac_addr_hi; 557*4882a593Smuzhiyun __le16 tx_max_fc_pay_len; 558*4882a593Smuzhiyun __le16 e_d_tov_timer_val; 559*4882a593Smuzhiyun __le16 rx_max_fc_pay_len; 560*4882a593Smuzhiyun __le16 vlan_tag; 561*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_MASK 0xFFF 562*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_SHIFT 0 563*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_MASK 0x1 564*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_SHIFT 12 565*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_MASK 0x7 566*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_SHIFT 13 567*4882a593Smuzhiyun __le16 physical_q0; 568*4882a593Smuzhiyun __le16 rec_rr_tov_timer_val; 569*4882a593Smuzhiyun struct fc_addr_nw s_id; 570*4882a593Smuzhiyun u8 max_conc_seqs_c3; 571*4882a593Smuzhiyun struct fc_addr_nw d_id; 572*4882a593Smuzhiyun u8 flags; 573*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_MASK 0x1 574*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_SHIFT 0 575*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_MASK 0x1 576*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_SHIFT 1 577*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_MASK 0x1 578*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_SHIFT 2 579*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_MASK 0x1 580*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_SHIFT 3 581*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_MASK 0x1 582*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_SHIFT 4 583*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_MASK 0x3 584*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_SHIFT 5 585*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_MASK 0x1 586*4882a593Smuzhiyun #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_SHIFT 7 587*4882a593Smuzhiyun __le16 conn_id; 588*4882a593Smuzhiyun u8 def_q_idx; 589*4882a593Smuzhiyun u8 reserved[5]; 590*4882a593Smuzhiyun }; 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun /* FCoE terminate connection request */ 593*4882a593Smuzhiyun struct fcoe_conn_terminate_ramrod_data { 594*4882a593Smuzhiyun struct regpair terminate_params_addr; 595*4882a593Smuzhiyun }; 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun /* FCoE device type */ 598*4882a593Smuzhiyun enum fcoe_device_type { 599*4882a593Smuzhiyun FCOE_TASK_DEV_TYPE_DISK, 600*4882a593Smuzhiyun FCOE_TASK_DEV_TYPE_TAPE, 601*4882a593Smuzhiyun MAX_FCOE_DEVICE_TYPE 602*4882a593Smuzhiyun }; 603*4882a593Smuzhiyun 604*4882a593Smuzhiyun /* Data sgl */ 605*4882a593Smuzhiyun struct fcoe_fast_sgl_ctx { 606*4882a593Smuzhiyun struct regpair sgl_start_addr; 607*4882a593Smuzhiyun __le32 sgl_byte_offset; 608*4882a593Smuzhiyun __le16 task_reuse_cnt; 609*4882a593Smuzhiyun __le16 init_offset_in_first_sge; 610*4882a593Smuzhiyun }; 611*4882a593Smuzhiyun 612*4882a593Smuzhiyun /* FCoE firmware function init */ 613*4882a593Smuzhiyun struct fcoe_init_func_ramrod_data { 614*4882a593Smuzhiyun struct scsi_init_func_params func_params; 615*4882a593Smuzhiyun struct scsi_init_func_queues q_params; 616*4882a593Smuzhiyun __le16 mtu; 617*4882a593Smuzhiyun __le16 sq_num_pages_in_pbl; 618*4882a593Smuzhiyun __le32 reserved[3]; 619*4882a593Smuzhiyun }; 620*4882a593Smuzhiyun 621*4882a593Smuzhiyun /* FCoE: Mode of the connection: Target or Initiator or both */ 622*4882a593Smuzhiyun enum fcoe_mode_type { 623*4882a593Smuzhiyun FCOE_INITIATOR_MODE = 0x0, 624*4882a593Smuzhiyun FCOE_TARGET_MODE = 0x1, 625*4882a593Smuzhiyun FCOE_BOTH_OR_NOT_CHOSEN = 0x3, 626*4882a593Smuzhiyun MAX_FCOE_MODE_TYPE 627*4882a593Smuzhiyun }; 628*4882a593Smuzhiyun 629*4882a593Smuzhiyun /* Per PF FCoE receive path statistics - tStorm RAM structure */ 630*4882a593Smuzhiyun struct fcoe_rx_stat { 631*4882a593Smuzhiyun struct regpair fcoe_rx_byte_cnt; 632*4882a593Smuzhiyun struct regpair fcoe_rx_data_pkt_cnt; 633*4882a593Smuzhiyun struct regpair fcoe_rx_xfer_pkt_cnt; 634*4882a593Smuzhiyun struct regpair fcoe_rx_other_pkt_cnt; 635*4882a593Smuzhiyun __le32 fcoe_silent_drop_pkt_cmdq_full_cnt; 636*4882a593Smuzhiyun __le32 fcoe_silent_drop_pkt_rq_full_cnt; 637*4882a593Smuzhiyun __le32 fcoe_silent_drop_pkt_crc_error_cnt; 638*4882a593Smuzhiyun __le32 fcoe_silent_drop_pkt_task_invalid_cnt; 639*4882a593Smuzhiyun __le32 fcoe_silent_drop_total_pkt_cnt; 640*4882a593Smuzhiyun __le32 rsrv; 641*4882a593Smuzhiyun }; 642*4882a593Smuzhiyun 643*4882a593Smuzhiyun /* FCoE SQE request type */ 644*4882a593Smuzhiyun enum fcoe_sqe_request_type { 645*4882a593Smuzhiyun SEND_FCOE_CMD, 646*4882a593Smuzhiyun SEND_FCOE_MIDPATH, 647*4882a593Smuzhiyun SEND_FCOE_ABTS_REQUEST, 648*4882a593Smuzhiyun FCOE_EXCHANGE_CLEANUP, 649*4882a593Smuzhiyun FCOE_SEQUENCE_RECOVERY, 650*4882a593Smuzhiyun SEND_FCOE_XFER_RDY, 651*4882a593Smuzhiyun SEND_FCOE_RSP, 652*4882a593Smuzhiyun SEND_FCOE_RSP_WITH_SENSE_DATA, 653*4882a593Smuzhiyun SEND_FCOE_TARGET_DATA, 654*4882a593Smuzhiyun SEND_FCOE_INITIATOR_DATA, 655*4882a593Smuzhiyun SEND_FCOE_XFER_CONTINUATION_RDY, 656*4882a593Smuzhiyun SEND_FCOE_TARGET_ABTS_RSP, 657*4882a593Smuzhiyun MAX_FCOE_SQE_REQUEST_TYPE 658*4882a593Smuzhiyun }; 659*4882a593Smuzhiyun 660*4882a593Smuzhiyun /* FCoe statistics request */ 661*4882a593Smuzhiyun struct fcoe_stat_ramrod_data { 662*4882a593Smuzhiyun struct regpair stat_params_addr; 663*4882a593Smuzhiyun }; 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun /* FCoE task type */ 666*4882a593Smuzhiyun enum fcoe_task_type { 667*4882a593Smuzhiyun FCOE_TASK_TYPE_WRITE_INITIATOR, 668*4882a593Smuzhiyun FCOE_TASK_TYPE_READ_INITIATOR, 669*4882a593Smuzhiyun FCOE_TASK_TYPE_MIDPATH, 670*4882a593Smuzhiyun FCOE_TASK_TYPE_UNSOLICITED, 671*4882a593Smuzhiyun FCOE_TASK_TYPE_ABTS, 672*4882a593Smuzhiyun FCOE_TASK_TYPE_EXCHANGE_CLEANUP, 673*4882a593Smuzhiyun FCOE_TASK_TYPE_SEQUENCE_CLEANUP, 674*4882a593Smuzhiyun FCOE_TASK_TYPE_WRITE_TARGET, 675*4882a593Smuzhiyun FCOE_TASK_TYPE_READ_TARGET, 676*4882a593Smuzhiyun FCOE_TASK_TYPE_RSP, 677*4882a593Smuzhiyun FCOE_TASK_TYPE_RSP_SENSE_DATA, 678*4882a593Smuzhiyun FCOE_TASK_TYPE_ABTS_TARGET, 679*4882a593Smuzhiyun FCOE_TASK_TYPE_ENUM_SIZE, 680*4882a593Smuzhiyun MAX_FCOE_TASK_TYPE 681*4882a593Smuzhiyun }; 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun /* Per PF FCoE transmit path statistics - pStorm RAM structure */ 684*4882a593Smuzhiyun struct fcoe_tx_stat { 685*4882a593Smuzhiyun struct regpair fcoe_tx_byte_cnt; 686*4882a593Smuzhiyun struct regpair fcoe_tx_data_pkt_cnt; 687*4882a593Smuzhiyun struct regpair fcoe_tx_xfer_pkt_cnt; 688*4882a593Smuzhiyun struct regpair fcoe_tx_other_pkt_cnt; 689*4882a593Smuzhiyun }; 690*4882a593Smuzhiyun 691*4882a593Smuzhiyun /* FCoE SQ/XferQ element */ 692*4882a593Smuzhiyun struct fcoe_wqe { 693*4882a593Smuzhiyun __le16 task_id; 694*4882a593Smuzhiyun __le16 flags; 695*4882a593Smuzhiyun #define FCOE_WQE_REQ_TYPE_MASK 0xF 696*4882a593Smuzhiyun #define FCOE_WQE_REQ_TYPE_SHIFT 0 697*4882a593Smuzhiyun #define FCOE_WQE_SGL_MODE_MASK 0x1 698*4882a593Smuzhiyun #define FCOE_WQE_SGL_MODE_SHIFT 4 699*4882a593Smuzhiyun #define FCOE_WQE_CONTINUATION_MASK 0x1 700*4882a593Smuzhiyun #define FCOE_WQE_CONTINUATION_SHIFT 5 701*4882a593Smuzhiyun #define FCOE_WQE_SEND_AUTO_RSP_MASK 0x1 702*4882a593Smuzhiyun #define FCOE_WQE_SEND_AUTO_RSP_SHIFT 6 703*4882a593Smuzhiyun #define FCOE_WQE_RESERVED_MASK 0x1 704*4882a593Smuzhiyun #define FCOE_WQE_RESERVED_SHIFT 7 705*4882a593Smuzhiyun #define FCOE_WQE_NUM_SGES_MASK 0xF 706*4882a593Smuzhiyun #define FCOE_WQE_NUM_SGES_SHIFT 8 707*4882a593Smuzhiyun #define FCOE_WQE_RESERVED1_MASK 0xF 708*4882a593Smuzhiyun #define FCOE_WQE_RESERVED1_SHIFT 12 709*4882a593Smuzhiyun union fcoe_additional_info_union additional_info_union; 710*4882a593Smuzhiyun }; 711*4882a593Smuzhiyun 712*4882a593Smuzhiyun /* FCoE XFRQ element */ 713*4882a593Smuzhiyun struct xfrqe_prot_flags { 714*4882a593Smuzhiyun u8 flags; 715*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK 0xF 716*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT 0 717*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_DIF_TO_PEER_MASK 0x1 718*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_DIF_TO_PEER_SHIFT 4 719*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_HOST_INTERFACE_MASK 0x3 720*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_HOST_INTERFACE_SHIFT 5 721*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_RESERVED_MASK 0x1 722*4882a593Smuzhiyun #define XFRQE_PROT_FLAGS_RESERVED_SHIFT 7 723*4882a593Smuzhiyun }; 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun /* FCoE doorbell data */ 726*4882a593Smuzhiyun struct fcoe_db_data { 727*4882a593Smuzhiyun u8 params; 728*4882a593Smuzhiyun #define FCOE_DB_DATA_DEST_MASK 0x3 729*4882a593Smuzhiyun #define FCOE_DB_DATA_DEST_SHIFT 0 730*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_CMD_MASK 0x3 731*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_CMD_SHIFT 2 732*4882a593Smuzhiyun #define FCOE_DB_DATA_BYPASS_EN_MASK 0x1 733*4882a593Smuzhiyun #define FCOE_DB_DATA_BYPASS_EN_SHIFT 4 734*4882a593Smuzhiyun #define FCOE_DB_DATA_RESERVED_MASK 0x1 735*4882a593Smuzhiyun #define FCOE_DB_DATA_RESERVED_SHIFT 5 736*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_VAL_SEL_MASK 0x3 737*4882a593Smuzhiyun #define FCOE_DB_DATA_AGG_VAL_SEL_SHIFT 6 738*4882a593Smuzhiyun u8 agg_flags; 739*4882a593Smuzhiyun __le16 sq_prod; 740*4882a593Smuzhiyun }; 741*4882a593Smuzhiyun 742*4882a593Smuzhiyun #endif /* __FCOE_COMMON__ */ 743