Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
0002 /* QLogic qed NIC Driver
0003  * Copyright (c) 2015 QLogic Corporation
0004  * Copyright (c) 2019-2020 Marvell International Ltd.
0005  */
0006 
0007 #ifndef __FCOE_COMMON__
0008 #define __FCOE_COMMON__
0009 
0010 /*********************/
0011 /* FCOE FW CONSTANTS */
0012 /*********************/
0013 
0014 #define FC_ABTS_REPLY_MAX_PAYLOAD_LEN   12
0015 
0016 /* The fcoe storm task context protection-information of Ystorm */
0017 struct protection_info_ctx {
0018     __le16 flags;
0019 #define PROTECTION_INFO_CTX_HOST_INTERFACE_MASK     0x3
0020 #define PROTECTION_INFO_CTX_HOST_INTERFACE_SHIFT    0
0021 #define PROTECTION_INFO_CTX_DIF_TO_PEER_MASK        0x1
0022 #define PROTECTION_INFO_CTX_DIF_TO_PEER_SHIFT       2
0023 #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_MASK   0x1
0024 #define PROTECTION_INFO_CTX_VALIDATE_DIX_APP_TAG_SHIFT  3
0025 #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_MASK  0xF
0026 #define PROTECTION_INFO_CTX_INTERVAL_SIZE_LOG_SHIFT 4
0027 #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_MASK   0x1
0028 #define PROTECTION_INFO_CTX_VALIDATE_DIX_REF_TAG_SHIFT  8
0029 #define PROTECTION_INFO_CTX_RESERVED0_MASK      0x7F
0030 #define PROTECTION_INFO_CTX_RESERVED0_SHIFT     9
0031     u8 dix_block_size;
0032     u8 dst_size;
0033 };
0034 
0035 /* The fcoe storm task context protection-information of Ystorm */
0036 union protection_info_union_ctx {
0037     struct protection_info_ctx info;
0038     __le32 value;
0039 };
0040 
0041 /* FCP CMD payload */
0042 struct fcoe_fcp_cmd_payload {
0043     __le32 opaque[8];
0044 };
0045 
0046 /* FCP RSP payload */
0047 struct fcoe_fcp_rsp_payload {
0048     __le32 opaque[6];
0049 };
0050 
0051 /* FCP RSP payload */
0052 struct fcp_rsp_payload_padded {
0053     struct fcoe_fcp_rsp_payload rsp_payload;
0054     __le32 reserved[2];
0055 };
0056 
0057 /* FCP RSP payload */
0058 struct fcoe_fcp_xfer_payload {
0059     __le32 opaque[3];
0060 };
0061 
0062 /* FCP RSP payload */
0063 struct fcp_xfer_payload_padded {
0064     struct fcoe_fcp_xfer_payload xfer_payload;
0065     __le32 reserved[5];
0066 };
0067 
0068 /* Task params */
0069 struct fcoe_tx_data_params {
0070     __le32 data_offset;
0071     __le32 offset_in_io;
0072     u8 flags;
0073 #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_MASK 0x1
0074 #define FCOE_TX_DATA_PARAMS_OFFSET_IN_IO_VALID_SHIFT    0
0075 #define FCOE_TX_DATA_PARAMS_DROP_DATA_MASK      0x1
0076 #define FCOE_TX_DATA_PARAMS_DROP_DATA_SHIFT     1
0077 #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_MASK      0x1
0078 #define FCOE_TX_DATA_PARAMS_AFTER_SEQ_REC_SHIFT     2
0079 #define FCOE_TX_DATA_PARAMS_RESERVED0_MASK      0x1F
0080 #define FCOE_TX_DATA_PARAMS_RESERVED0_SHIFT     3
0081     u8 dif_residual;
0082     __le16 seq_cnt;
0083     __le16 single_sge_saved_offset;
0084     __le16 next_dif_offset;
0085     __le16 seq_id;
0086     __le16 reserved3;
0087 };
0088 
0089 /* Middle path parameters: FC header fields provided by the driver */
0090 struct fcoe_tx_mid_path_params {
0091     __le32 parameter;
0092     u8 r_ctl;
0093     u8 type;
0094     u8 cs_ctl;
0095     u8 df_ctl;
0096     __le16 rx_id;
0097     __le16 ox_id;
0098 };
0099 
0100 /* Task params */
0101 struct fcoe_tx_params {
0102     struct fcoe_tx_data_params data;
0103     struct fcoe_tx_mid_path_params mid_path;
0104 };
0105 
0106 /* Union of FCP CMD payload \ TX params \ ABTS \ Cleanup */
0107 union fcoe_tx_info_union_ctx {
0108     struct fcoe_fcp_cmd_payload fcp_cmd_payload;
0109     struct fcp_rsp_payload_padded fcp_rsp_payload;
0110     struct fcp_xfer_payload_padded fcp_xfer_payload;
0111     struct fcoe_tx_params tx_params;
0112 };
0113 
0114 /* Data sgl */
0115 struct fcoe_slow_sgl_ctx {
0116     struct regpair base_sgl_addr;
0117     __le16 curr_sge_off;
0118     __le16 remainder_num_sges;
0119     __le16 curr_sgl_index;
0120     __le16 reserved;
0121 };
0122 
0123 /* Union of DIX SGL \ cached DIX sges */
0124 union fcoe_dix_desc_ctx {
0125     struct fcoe_slow_sgl_ctx dix_sgl;
0126     struct scsi_sge cached_dix_sge;
0127 };
0128 
0129 /* The fcoe storm task context of Ystorm */
0130 struct ystorm_fcoe_task_st_ctx {
0131     u8 task_type;
0132     u8 sgl_mode;
0133 #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK    0x1
0134 #define YSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT   0
0135 #define YSTORM_FCOE_TASK_ST_CTX_RSRV_MASK       0x7F
0136 #define YSTORM_FCOE_TASK_ST_CTX_RSRV_SHIFT      1
0137     u8 cached_dix_sge;
0138     u8 expect_first_xfer;
0139     __le32 num_pbf_zero_write;
0140     union protection_info_union_ctx protection_info_union;
0141     __le32 data_2_trns_rem;
0142     struct scsi_sgl_params sgl_params;
0143     u8 reserved1[12];
0144     union fcoe_tx_info_union_ctx tx_info_union;
0145     union fcoe_dix_desc_ctx dix_desc;
0146     struct scsi_cached_sges data_desc;
0147     __le16 ox_id;
0148     __le16 rx_id;
0149     __le32 task_rety_identifier;
0150     u8 reserved2[8];
0151 };
0152 
0153 struct ystorm_fcoe_task_ag_ctx {
0154     u8 byte0;
0155     u8 byte1;
0156     __le16 word0;
0157     u8 flags0;
0158 #define YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_MASK        0xF
0159 #define YSTORM_FCOE_TASK_AG_CTX_NIBBLE0_SHIFT   0
0160 #define YSTORM_FCOE_TASK_AG_CTX_BIT0_MASK       0x1
0161 #define YSTORM_FCOE_TASK_AG_CTX_BIT0_SHIFT      4
0162 #define YSTORM_FCOE_TASK_AG_CTX_BIT1_MASK       0x1
0163 #define YSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT      5
0164 #define YSTORM_FCOE_TASK_AG_CTX_BIT2_MASK       0x1
0165 #define YSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT      6
0166 #define YSTORM_FCOE_TASK_AG_CTX_BIT3_MASK       0x1
0167 #define YSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT      7
0168     u8 flags1;
0169 #define YSTORM_FCOE_TASK_AG_CTX_CF0_MASK        0x3
0170 #define YSTORM_FCOE_TASK_AG_CTX_CF0_SHIFT       0
0171 #define YSTORM_FCOE_TASK_AG_CTX_CF1_MASK        0x3
0172 #define YSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT       2
0173 #define YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_MASK 0x3
0174 #define YSTORM_FCOE_TASK_AG_CTX_CF2SPECIAL_SHIFT    4
0175 #define YSTORM_FCOE_TASK_AG_CTX_CF0EN_MASK      0x1
0176 #define YSTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT     6
0177 #define YSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK      0x1
0178 #define YSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT     7
0179     u8 flags2;
0180 #define YSTORM_FCOE_TASK_AG_CTX_BIT4_MASK       0x1
0181 #define YSTORM_FCOE_TASK_AG_CTX_BIT4_SHIFT      0
0182 #define YSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK        0x1
0183 #define YSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT   1
0184 #define YSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK        0x1
0185 #define YSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT   2
0186 #define YSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK        0x1
0187 #define YSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT   3
0188 #define YSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK        0x1
0189 #define YSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT   4
0190 #define YSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK        0x1
0191 #define YSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT   5
0192 #define YSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK        0x1
0193 #define YSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT   6
0194 #define YSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK        0x1
0195 #define YSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT   7
0196     u8 byte2;
0197     __le32 reg0;
0198     u8 byte3;
0199     u8 byte4;
0200     __le16 rx_id;
0201     __le16 word2;
0202     __le16 word3;
0203     __le16 word4;
0204     __le16 word5;
0205     __le32 reg1;
0206     __le32 reg2;
0207 };
0208 
0209 struct tstorm_fcoe_task_ag_ctx {
0210     u8 reserved;
0211     u8 byte1;
0212     __le16 icid;
0213     u8 flags0;
0214 #define TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK        0xF
0215 #define TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT   0
0216 #define TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK       0x1
0217 #define TSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT      4
0218 #define TSTORM_FCOE_TASK_AG_CTX_BIT1_MASK           0x1
0219 #define TSTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT          5
0220 #define TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_MASK        0x1
0221 #define TSTORM_FCOE_TASK_AG_CTX_WAIT_ABTS_RSP_F_SHIFT   6
0222 #define TSTORM_FCOE_TASK_AG_CTX_VALID_MASK          0x1
0223 #define TSTORM_FCOE_TASK_AG_CTX_VALID_SHIFT         7
0224     u8 flags1;
0225 #define TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_MASK   0x1
0226 #define TSTORM_FCOE_TASK_AG_CTX_FALSE_RR_TOV_SHIFT  0
0227 #define TSTORM_FCOE_TASK_AG_CTX_BIT5_MASK       0x1
0228 #define TSTORM_FCOE_TASK_AG_CTX_BIT5_SHIFT      1
0229 #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_MASK  0x3
0230 #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_SHIFT 2
0231 #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_MASK  0x3
0232 #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_SHIFT 4
0233 #define TSTORM_FCOE_TASK_AG_CTX_CF2_MASK        0x3
0234 #define TSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT       6
0235     u8 flags2;
0236 #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_MASK     0x3
0237 #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_SHIFT        0
0238 #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK      0x3
0239 #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT     2
0240 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_MASK        0x3
0241 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_SHIFT       4
0242 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_MASK        0x3
0243 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_SHIFT   6
0244     u8 flags3;
0245 #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_MASK      0x3
0246 #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_SHIFT     0
0247 #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_MASK   0x1
0248 #define TSTORM_FCOE_TASK_AG_CTX_REC_RR_TOV_CF_EN_SHIFT  2
0249 #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_MASK       0x1
0250 #define TSTORM_FCOE_TASK_AG_CTX_ED_TOV_CF_EN_SHIFT      3
0251 #define TSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK          0x1
0252 #define TSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT         4
0253 #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_MASK  0x1
0254 #define TSTORM_FCOE_TASK_AG_CTX_TIMER_STOP_ALL_EN_SHIFT 5
0255 #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK   0x1
0256 #define TSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT  6
0257 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_MASK     0x1
0258 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_INIT_CF_EN_SHIFT        7
0259     u8 flags4;
0260 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_MASK 0x1
0261 #define TSTORM_FCOE_TASK_AG_CTX_SEQ_RECOVERY_CF_EN_SHIFT    0
0262 #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_MASK   0x1
0263 #define TSTORM_FCOE_TASK_AG_CTX_UNSOL_COMP_CF_EN_SHIFT  1
0264 #define TSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK            0x1
0265 #define TSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT       2
0266 #define TSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK            0x1
0267 #define TSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT       3
0268 #define TSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK            0x1
0269 #define TSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT       4
0270 #define TSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK            0x1
0271 #define TSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT       5
0272 #define TSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK            0x1
0273 #define TSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT       6
0274 #define TSTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK            0x1
0275 #define TSTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT       7
0276     u8 cleanup_state;
0277     __le16 last_sent_tid;
0278     __le32 rec_rr_tov_exp_timeout;
0279     u8 byte3;
0280     u8 byte4;
0281     __le16 word2;
0282     __le16 word3;
0283     __le16 word4;
0284     __le32 data_offset_end_of_seq;
0285     __le32 data_offset_next;
0286 };
0287 
0288 /* Cached data sges */
0289 struct fcoe_exp_ro {
0290     __le32 data_offset;
0291     __le32 reserved;
0292 };
0293 
0294 /* Union of Cleanup address \ expected relative offsets */
0295 union fcoe_cleanup_addr_exp_ro_union {
0296     struct regpair abts_rsp_fc_payload_hi;
0297     struct fcoe_exp_ro exp_ro;
0298 };
0299 
0300 /* Fields coppied from ABTSrsp pckt */
0301 struct fcoe_abts_pkt {
0302     __le32 abts_rsp_fc_payload_lo;
0303     __le16 abts_rsp_rx_id;
0304     u8 abts_rsp_rctl;
0305     u8 reserved2;
0306 };
0307 
0308 /* FW read- write (modifyable) part The fcoe task storm context of Tstorm */
0309 struct fcoe_tstorm_fcoe_task_st_ctx_read_write {
0310     union fcoe_cleanup_addr_exp_ro_union cleanup_addr_exp_ro_union;
0311     __le16 flags;
0312 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_MASK    0x1
0313 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RX_SGL_MODE_SHIFT   0
0314 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_MASK    0x1
0315 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_EXP_FIRST_FRAME_SHIFT   1
0316 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_MASK     0x1
0317 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_ACTIVE_SHIFT    2
0318 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_MASK    0x1
0319 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SEQ_TIMEOUT_SHIFT   3
0320 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_MASK   0x1
0321 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_SINGLE_PKT_IN_EX_SHIFT  4
0322 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_MASK    0x1
0323 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_OOO_RX_SEQ_STAT_SHIFT   5
0324 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_MASK     0x3
0325 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_CQ_ADD_ADV_SHIFT    6
0326 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_MASK      0xFF
0327 #define FCOE_TSTORM_FCOE_TASK_ST_CTX_READ_WRITE_RSRV1_SHIFT     8
0328     __le16 seq_cnt;
0329     u8 seq_id;
0330     u8 ooo_rx_seq_id;
0331     __le16 rx_id;
0332     struct fcoe_abts_pkt abts_data;
0333     __le32 e_d_tov_exp_timeout_val;
0334     __le16 ooo_rx_seq_cnt;
0335     __le16 reserved1;
0336 };
0337 
0338 /* FW read only part The fcoe task storm context of Tstorm */
0339 struct fcoe_tstorm_fcoe_task_st_ctx_read_only {
0340     u8 task_type;
0341     u8 dev_type;
0342     u8 conf_supported;
0343     u8 glbl_q_num;
0344     __le32 cid;
0345     __le32 fcp_cmd_trns_size;
0346     __le32 rsrv;
0347 };
0348 
0349 /** The fcoe task storm context of Tstorm */
0350 struct tstorm_fcoe_task_st_ctx {
0351     struct fcoe_tstorm_fcoe_task_st_ctx_read_write read_write;
0352     struct fcoe_tstorm_fcoe_task_st_ctx_read_only read_only;
0353 };
0354 
0355 struct mstorm_fcoe_task_ag_ctx {
0356     u8 byte0;
0357     u8 byte1;
0358     __le16 icid;
0359     u8 flags0;
0360 #define MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK        0xF
0361 #define MSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT   0
0362 #define MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK       0x1
0363 #define MSTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT      4
0364 #define MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_MASK     0x1
0365 #define MSTORM_FCOE_TASK_AG_CTX_CQE_PLACED_SHIFT        5
0366 #define MSTORM_FCOE_TASK_AG_CTX_BIT2_MASK           0x1
0367 #define MSTORM_FCOE_TASK_AG_CTX_BIT2_SHIFT          6
0368 #define MSTORM_FCOE_TASK_AG_CTX_BIT3_MASK           0x1
0369 #define MSTORM_FCOE_TASK_AG_CTX_BIT3_SHIFT          7
0370     u8 flags1;
0371 #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_MASK      0x3
0372 #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_SHIFT     0
0373 #define MSTORM_FCOE_TASK_AG_CTX_CF1_MASK            0x3
0374 #define MSTORM_FCOE_TASK_AG_CTX_CF1_SHIFT           2
0375 #define MSTORM_FCOE_TASK_AG_CTX_CF2_MASK            0x3
0376 #define MSTORM_FCOE_TASK_AG_CTX_CF2_SHIFT           4
0377 #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_MASK   0x1
0378 #define MSTORM_FCOE_TASK_AG_CTX_EX_CLEANUP_CF_EN_SHIFT  6
0379 #define MSTORM_FCOE_TASK_AG_CTX_CF1EN_MASK          0x1
0380 #define MSTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT         7
0381     u8 flags2;
0382 #define MSTORM_FCOE_TASK_AG_CTX_CF2EN_MASK          0x1
0383 #define MSTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT         0
0384 #define MSTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK            0x1
0385 #define MSTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT       1
0386 #define MSTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK            0x1
0387 #define MSTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT       2
0388 #define MSTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK            0x1
0389 #define MSTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT       3
0390 #define MSTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK            0x1
0391 #define MSTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT       4
0392 #define MSTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK            0x1
0393 #define MSTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT       5
0394 #define MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_MASK  0x1
0395 #define MSTORM_FCOE_TASK_AG_CTX_XFER_PLACEMENT_EN_SHIFT 6
0396 #define MSTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK            0x1
0397 #define MSTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT       7
0398     u8 cleanup_state;
0399     __le32 received_bytes;
0400     u8 byte3;
0401     u8 glbl_q_num;
0402     __le16 word1;
0403     __le16 tid_to_xfer;
0404     __le16 word3;
0405     __le16 word4;
0406     __le16 word5;
0407     __le32 expected_bytes;
0408     __le32 reg2;
0409 };
0410 
0411 /* The fcoe task storm context of Mstorm */
0412 struct mstorm_fcoe_task_st_ctx {
0413     struct regpair rsp_buf_addr;
0414     __le32 rsrv[2];
0415     struct scsi_sgl_params sgl_params;
0416     __le32 data_2_trns_rem;
0417     __le32 data_buffer_offset;
0418     __le16 parent_id;
0419     __le16 flags;
0420 #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_MASK      0xF
0421 #define MSTORM_FCOE_TASK_ST_CTX_INTERVAL_SIZE_LOG_SHIFT     0
0422 #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_MASK     0x3
0423 #define MSTORM_FCOE_TASK_ST_CTX_HOST_INTERFACE_SHIFT        4
0424 #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_MASK        0x1
0425 #define MSTORM_FCOE_TASK_ST_CTX_DIF_TO_PEER_SHIFT       6
0426 #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_MASK   0x1
0427 #define MSTORM_FCOE_TASK_ST_CTX_MP_INCLUDE_FC_HEADER_SHIFT  7
0428 #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_MASK     0x3
0429 #define MSTORM_FCOE_TASK_ST_CTX_DIX_BLOCK_SIZE_SHIFT        8
0430 #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_MASK   0x1
0431 #define MSTORM_FCOE_TASK_ST_CTX_VALIDATE_DIX_REF_TAG_SHIFT  10
0432 #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_MASK     0x1
0433 #define MSTORM_FCOE_TASK_ST_CTX_DIX_CACHED_SGE_FLG_SHIFT    11
0434 #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_MASK      0x1
0435 #define MSTORM_FCOE_TASK_ST_CTX_DIF_SUPPORTED_SHIFT     12
0436 #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_MASK        0x1
0437 #define MSTORM_FCOE_TASK_ST_CTX_TX_SGL_MODE_SHIFT       13
0438 #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_MASK           0x3
0439 #define MSTORM_FCOE_TASK_ST_CTX_RESERVED_SHIFT          14
0440     struct scsi_cached_sges data_desc;
0441 };
0442 
0443 struct ustorm_fcoe_task_ag_ctx {
0444     u8 reserved;
0445     u8 byte1;
0446     __le16 icid;
0447     u8 flags0;
0448 #define USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_MASK        0xF
0449 #define USTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE_SHIFT   0
0450 #define USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_MASK       0x1
0451 #define USTORM_FCOE_TASK_AG_CTX_EXIST_IN_QM0_SHIFT      4
0452 #define USTORM_FCOE_TASK_AG_CTX_BIT1_MASK           0x1
0453 #define USTORM_FCOE_TASK_AG_CTX_BIT1_SHIFT          5
0454 #define USTORM_FCOE_TASK_AG_CTX_CF0_MASK            0x3
0455 #define USTORM_FCOE_TASK_AG_CTX_CF0_SHIFT           6
0456     u8 flags1;
0457 #define USTORM_FCOE_TASK_AG_CTX_CF1_MASK        0x3
0458 #define USTORM_FCOE_TASK_AG_CTX_CF1_SHIFT       0
0459 #define USTORM_FCOE_TASK_AG_CTX_CF2_MASK        0x3
0460 #define USTORM_FCOE_TASK_AG_CTX_CF2_SHIFT       2
0461 #define USTORM_FCOE_TASK_AG_CTX_CF3_MASK        0x3
0462 #define USTORM_FCOE_TASK_AG_CTX_CF3_SHIFT       4
0463 #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_MASK   0x3
0464 #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_SHIFT  6
0465     u8 flags2;
0466 #define USTORM_FCOE_TASK_AG_CTX_CF0EN_MASK          0x1
0467 #define USTORM_FCOE_TASK_AG_CTX_CF0EN_SHIFT         0
0468 #define USTORM_FCOE_TASK_AG_CTX_CF1EN_MASK          0x1
0469 #define USTORM_FCOE_TASK_AG_CTX_CF1EN_SHIFT         1
0470 #define USTORM_FCOE_TASK_AG_CTX_CF2EN_MASK          0x1
0471 #define USTORM_FCOE_TASK_AG_CTX_CF2EN_SHIFT         2
0472 #define USTORM_FCOE_TASK_AG_CTX_CF3EN_MASK          0x1
0473 #define USTORM_FCOE_TASK_AG_CTX_CF3EN_SHIFT         3
0474 #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK        0x1
0475 #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT   4
0476 #define USTORM_FCOE_TASK_AG_CTX_RULE0EN_MASK            0x1
0477 #define USTORM_FCOE_TASK_AG_CTX_RULE0EN_SHIFT       5
0478 #define USTORM_FCOE_TASK_AG_CTX_RULE1EN_MASK            0x1
0479 #define USTORM_FCOE_TASK_AG_CTX_RULE1EN_SHIFT       6
0480 #define USTORM_FCOE_TASK_AG_CTX_RULE2EN_MASK            0x1
0481 #define USTORM_FCOE_TASK_AG_CTX_RULE2EN_SHIFT       7
0482     u8 flags3;
0483 #define USTORM_FCOE_TASK_AG_CTX_RULE3EN_MASK        0x1
0484 #define USTORM_FCOE_TASK_AG_CTX_RULE3EN_SHIFT   0
0485 #define USTORM_FCOE_TASK_AG_CTX_RULE4EN_MASK        0x1
0486 #define USTORM_FCOE_TASK_AG_CTX_RULE4EN_SHIFT   1
0487 #define USTORM_FCOE_TASK_AG_CTX_RULE5EN_MASK        0x1
0488 #define USTORM_FCOE_TASK_AG_CTX_RULE5EN_SHIFT   2
0489 #define USTORM_FCOE_TASK_AG_CTX_RULE6EN_MASK        0x1
0490 #define USTORM_FCOE_TASK_AG_CTX_RULE6EN_SHIFT   3
0491 #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF
0492 #define USTORM_FCOE_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT    4
0493     __le32 dif_err_intervals;
0494     __le32 dif_error_1st_interval;
0495     __le32 global_cq_num;
0496     __le32 reg3;
0497     __le32 reg4;
0498     __le32 reg5;
0499 };
0500 
0501 /* FCoE task context */
0502 struct fcoe_task_context {
0503     struct ystorm_fcoe_task_st_ctx ystorm_st_context;
0504     struct regpair ystorm_st_padding[2];
0505     struct tdif_task_context tdif_context;
0506     struct ystorm_fcoe_task_ag_ctx ystorm_ag_context;
0507     struct tstorm_fcoe_task_ag_ctx tstorm_ag_context;
0508     struct timers_context timer_context;
0509     struct tstorm_fcoe_task_st_ctx tstorm_st_context;
0510     struct regpair tstorm_st_padding[2];
0511     struct mstorm_fcoe_task_ag_ctx mstorm_ag_context;
0512     struct mstorm_fcoe_task_st_ctx mstorm_st_context;
0513     struct ustorm_fcoe_task_ag_ctx ustorm_ag_context;
0514     struct rdif_task_context rdif_context;
0515 };
0516 
0517 /* FCoE additional WQE (Sq/XferQ) information */
0518 union fcoe_additional_info_union {
0519     __le32 previous_tid;
0520     __le32 parent_tid;
0521     __le32 burst_length;
0522     __le32 seq_rec_updated_offset;
0523 };
0524 
0525 /* FCoE Ramrod Command IDs */
0526 enum fcoe_completion_status {
0527     FCOE_COMPLETION_STATUS_SUCCESS,
0528     FCOE_COMPLETION_STATUS_FCOE_VER_ERR,
0529     FCOE_COMPLETION_STATUS_SRC_MAC_ADD_ARR_ERR,
0530     MAX_FCOE_COMPLETION_STATUS
0531 };
0532 
0533 /* FC address (SID/DID) network presentation */
0534 struct fc_addr_nw {
0535     u8 addr_lo;
0536     u8 addr_mid;
0537     u8 addr_hi;
0538 };
0539 
0540 /* FCoE connection offload */
0541 struct fcoe_conn_offload_ramrod_data {
0542     struct regpair sq_pbl_addr;
0543     struct regpair sq_curr_page_addr;
0544     struct regpair sq_next_page_addr;
0545     struct regpair xferq_pbl_addr;
0546     struct regpair xferq_curr_page_addr;
0547     struct regpair xferq_next_page_addr;
0548     struct regpair respq_pbl_addr;
0549     struct regpair respq_curr_page_addr;
0550     struct regpair respq_next_page_addr;
0551     __le16 dst_mac_addr_lo;
0552     __le16 dst_mac_addr_mid;
0553     __le16 dst_mac_addr_hi;
0554     __le16 src_mac_addr_lo;
0555     __le16 src_mac_addr_mid;
0556     __le16 src_mac_addr_hi;
0557     __le16 tx_max_fc_pay_len;
0558     __le16 e_d_tov_timer_val;
0559     __le16 rx_max_fc_pay_len;
0560     __le16 vlan_tag;
0561 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_MASK  0xFFF
0562 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_VLAN_ID_SHIFT 0
0563 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_MASK      0x1
0564 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_CFI_SHIFT     12
0565 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_MASK 0x7
0566 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_SHIFT    13
0567     __le16 physical_q0;
0568     __le16 rec_rr_tov_timer_val;
0569     struct fc_addr_nw s_id;
0570     u8 max_conc_seqs_c3;
0571     struct fc_addr_nw d_id;
0572     u8 flags;
0573 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_MASK  0x1
0574 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONT_INCR_SEQ_CNT_SHIFT 0
0575 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_MASK       0x1
0576 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_CONF_REQ_SHIFT      1
0577 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_MASK      0x1
0578 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_REC_VALID_SHIFT     2
0579 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_MASK      0x1
0580 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_VLAN_FLAG_SHIFT     3
0581 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_MASK    0x1
0582 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN_SHIFT   4
0583 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_MASK         0x3
0584 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_MODE_SHIFT        5
0585 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_MASK        0x1
0586 #define FCOE_CONN_OFFLOAD_RAMROD_DATA_RESERVED0_SHIFT       7
0587     __le16 conn_id;
0588     u8 def_q_idx;
0589     u8 reserved[5];
0590 };
0591 
0592 /* FCoE terminate connection request */
0593 struct fcoe_conn_terminate_ramrod_data {
0594     struct regpair terminate_params_addr;
0595 };
0596 
0597 /* FCoE device type */
0598 enum fcoe_device_type {
0599     FCOE_TASK_DEV_TYPE_DISK,
0600     FCOE_TASK_DEV_TYPE_TAPE,
0601     MAX_FCOE_DEVICE_TYPE
0602 };
0603 
0604 /* Data sgl */
0605 struct fcoe_fast_sgl_ctx {
0606     struct regpair sgl_start_addr;
0607     __le32 sgl_byte_offset;
0608     __le16 task_reuse_cnt;
0609     __le16 init_offset_in_first_sge;
0610 };
0611 
0612 /* FCoE firmware function init */
0613 struct fcoe_init_func_ramrod_data {
0614     struct scsi_init_func_params func_params;
0615     struct scsi_init_func_queues q_params;
0616     __le16 mtu;
0617     __le16 sq_num_pages_in_pbl;
0618     __le32 reserved[3];
0619 };
0620 
0621 /* FCoE: Mode of the connection: Target or Initiator or both */
0622 enum fcoe_mode_type {
0623     FCOE_INITIATOR_MODE = 0x0,
0624     FCOE_TARGET_MODE = 0x1,
0625     FCOE_BOTH_OR_NOT_CHOSEN = 0x3,
0626     MAX_FCOE_MODE_TYPE
0627 };
0628 
0629 /* Per PF FCoE receive path statistics - tStorm RAM structure */
0630 struct fcoe_rx_stat {
0631     struct regpair fcoe_rx_byte_cnt;
0632     struct regpair fcoe_rx_data_pkt_cnt;
0633     struct regpair fcoe_rx_xfer_pkt_cnt;
0634     struct regpair fcoe_rx_other_pkt_cnt;
0635     __le32 fcoe_silent_drop_pkt_cmdq_full_cnt;
0636     __le32 fcoe_silent_drop_pkt_rq_full_cnt;
0637     __le32 fcoe_silent_drop_pkt_crc_error_cnt;
0638     __le32 fcoe_silent_drop_pkt_task_invalid_cnt;
0639     __le32 fcoe_silent_drop_total_pkt_cnt;
0640     __le32 rsrv;
0641 };
0642 
0643 /* FCoE SQE request type */
0644 enum fcoe_sqe_request_type {
0645     SEND_FCOE_CMD,
0646     SEND_FCOE_MIDPATH,
0647     SEND_FCOE_ABTS_REQUEST,
0648     FCOE_EXCHANGE_CLEANUP,
0649     FCOE_SEQUENCE_RECOVERY,
0650     SEND_FCOE_XFER_RDY,
0651     SEND_FCOE_RSP,
0652     SEND_FCOE_RSP_WITH_SENSE_DATA,
0653     SEND_FCOE_TARGET_DATA,
0654     SEND_FCOE_INITIATOR_DATA,
0655     SEND_FCOE_XFER_CONTINUATION_RDY,
0656     SEND_FCOE_TARGET_ABTS_RSP,
0657     MAX_FCOE_SQE_REQUEST_TYPE
0658 };
0659 
0660 /* FCoe statistics request */
0661 struct fcoe_stat_ramrod_data {
0662     struct regpair stat_params_addr;
0663 };
0664 
0665 /* FCoE task type */
0666 enum fcoe_task_type {
0667     FCOE_TASK_TYPE_WRITE_INITIATOR,
0668     FCOE_TASK_TYPE_READ_INITIATOR,
0669     FCOE_TASK_TYPE_MIDPATH,
0670     FCOE_TASK_TYPE_UNSOLICITED,
0671     FCOE_TASK_TYPE_ABTS,
0672     FCOE_TASK_TYPE_EXCHANGE_CLEANUP,
0673     FCOE_TASK_TYPE_SEQUENCE_CLEANUP,
0674     FCOE_TASK_TYPE_WRITE_TARGET,
0675     FCOE_TASK_TYPE_READ_TARGET,
0676     FCOE_TASK_TYPE_RSP,
0677     FCOE_TASK_TYPE_RSP_SENSE_DATA,
0678     FCOE_TASK_TYPE_ABTS_TARGET,
0679     FCOE_TASK_TYPE_ENUM_SIZE,
0680     MAX_FCOE_TASK_TYPE
0681 };
0682 
0683 /* Per PF FCoE transmit path statistics - pStorm RAM structure */
0684 struct fcoe_tx_stat {
0685     struct regpair fcoe_tx_byte_cnt;
0686     struct regpair fcoe_tx_data_pkt_cnt;
0687     struct regpair fcoe_tx_xfer_pkt_cnt;
0688     struct regpair fcoe_tx_other_pkt_cnt;
0689 };
0690 
0691 /* FCoE SQ/XferQ element */
0692 struct fcoe_wqe {
0693     __le16 task_id;
0694     __le16 flags;
0695 #define FCOE_WQE_REQ_TYPE_MASK      0xF
0696 #define FCOE_WQE_REQ_TYPE_SHIFT     0
0697 #define FCOE_WQE_SGL_MODE_MASK      0x1
0698 #define FCOE_WQE_SGL_MODE_SHIFT     4
0699 #define FCOE_WQE_CONTINUATION_MASK  0x1
0700 #define FCOE_WQE_CONTINUATION_SHIFT 5
0701 #define FCOE_WQE_SEND_AUTO_RSP_MASK 0x1
0702 #define FCOE_WQE_SEND_AUTO_RSP_SHIFT    6
0703 #define FCOE_WQE_RESERVED_MASK      0x1
0704 #define FCOE_WQE_RESERVED_SHIFT     7
0705 #define FCOE_WQE_NUM_SGES_MASK      0xF
0706 #define FCOE_WQE_NUM_SGES_SHIFT     8
0707 #define FCOE_WQE_RESERVED1_MASK     0xF
0708 #define FCOE_WQE_RESERVED1_SHIFT    12
0709     union fcoe_additional_info_union additional_info_union;
0710 };
0711 
0712 /* FCoE XFRQ element */
0713 struct xfrqe_prot_flags {
0714     u8 flags;
0715 #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK    0xF
0716 #define XFRQE_PROT_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT   0
0717 #define XFRQE_PROT_FLAGS_DIF_TO_PEER_MASK       0x1
0718 #define XFRQE_PROT_FLAGS_DIF_TO_PEER_SHIFT      4
0719 #define XFRQE_PROT_FLAGS_HOST_INTERFACE_MASK        0x3
0720 #define XFRQE_PROT_FLAGS_HOST_INTERFACE_SHIFT       5
0721 #define XFRQE_PROT_FLAGS_RESERVED_MASK          0x1
0722 #define XFRQE_PROT_FLAGS_RESERVED_SHIFT         7
0723 };
0724 
0725 /* FCoE doorbell data */
0726 struct fcoe_db_data {
0727     u8 params;
0728 #define FCOE_DB_DATA_DEST_MASK      0x3
0729 #define FCOE_DB_DATA_DEST_SHIFT     0
0730 #define FCOE_DB_DATA_AGG_CMD_MASK   0x3
0731 #define FCOE_DB_DATA_AGG_CMD_SHIFT  2
0732 #define FCOE_DB_DATA_BYPASS_EN_MASK 0x1
0733 #define FCOE_DB_DATA_BYPASS_EN_SHIFT    4
0734 #define FCOE_DB_DATA_RESERVED_MASK  0x1
0735 #define FCOE_DB_DATA_RESERVED_SHIFT 5
0736 #define FCOE_DB_DATA_AGG_VAL_SEL_MASK   0x3
0737 #define FCOE_DB_DATA_AGG_VAL_SEL_SHIFT  6
0738     u8 agg_flags;
0739     __le16 sq_prod;
0740 };
0741 
0742 #endif /* __FCOE_COMMON__ */