0001
0002
0003
0004
0005
0006 #ifndef __QEDF_HSI__
0007 #define __QEDF_HSI__
0008
0009
0010
0011 #include <linux/qed/common_hsi.h>
0012
0013
0014
0015
0016 #include <linux/qed/storage_common.h>
0017
0018
0019
0020
0021 #include <linux/qed/fcoe_common.h>
0022
0023
0024
0025
0026
0027 struct fcoe_abts_info {
0028 u8 r_ctl ;
0029 u8 reserved0;
0030 __le16 rx_id;
0031 __le32 reserved2[2];
0032 __le32 fc_payload[3] ;
0033 };
0034
0035
0036
0037
0038
0039 enum fcoe_class_type {
0040 FCOE_TASK_CLASS_TYPE_3,
0041 FCOE_TASK_CLASS_TYPE_2,
0042 MAX_FCOE_CLASS_TYPE
0043 };
0044
0045
0046
0047
0048
0049 struct fcoe_cmdqe_control {
0050 __le16 conn_id;
0051 u8 num_additional_cmdqes;
0052 u8 cmdType;
0053
0054 #define FCOE_CMDQE_CONTROL_ABTSREQCMD_MASK 0x1
0055 #define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 0
0056 #define FCOE_CMDQE_CONTROL_RESERVED1_MASK 0x7F
0057 #define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT 1
0058 u8 reserved2[4];
0059 };
0060
0061
0062
0063
0064 struct fcoe_cmdqe {
0065 struct fcoe_cmdqe_control hdr;
0066 u8 fc_header[24];
0067 __le32 fcp_cmd_payload[8];
0068 };
0069
0070
0071
0072
0073
0074
0075 struct fcoe_fcp_rsp_flags {
0076 u8 flags;
0077 #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK 0x1
0078 #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
0079 #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK 0x1
0080 #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
0081 #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK 0x1
0082 #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2
0083 #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK 0x1
0084 #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3
0085 #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK 0x1
0086 #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4
0087 #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK 0x7
0088 #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5
0089 };
0090
0091
0092
0093
0094 struct fcoe_cqe_rsp_info {
0095 struct fcoe_fcp_rsp_flags rsp_flags;
0096 u8 scsi_status_code;
0097 __le16 retry_delay_timer;
0098 __le32 fcp_resid;
0099 __le32 fcp_sns_len;
0100 __le32 fcp_rsp_len;
0101 __le16 rx_id;
0102 u8 fw_error_flags;
0103 #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_MASK 0x1
0104 #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_SHIFT 0
0105 #define FCOE_CQE_RSP_INFO_RESREVED_MASK 0x7F
0106 #define FCOE_CQE_RSP_INFO_RESREVED_SHIFT 1
0107 u8 reserved;
0108 __le32 fw_residual ;
0109 };
0110
0111
0112
0113
0114 struct fcoe_cqe_target_info {
0115 __le16 rx_id;
0116 __le16 reserved0;
0117 __le32 reserved1[5];
0118 };
0119
0120
0121
0122
0123 struct fcoe_err_report_entry {
0124 __le32 err_warn_bitmap_lo ;
0125 __le32 err_warn_bitmap_hi ;
0126
0127 __le32 tx_buf_off;
0128
0129 __le32 rx_buf_off;
0130 __le16 rx_id ;
0131 __le16 reserved1;
0132 __le32 reserved2;
0133 };
0134
0135
0136
0137
0138 struct fcoe_cqe_midpath_info {
0139 __le32 data_placement_size;
0140 __le16 rx_id;
0141 __le16 reserved0;
0142 __le32 reserved1[4];
0143 };
0144
0145
0146
0147
0148 struct fcoe_unsolic_info {
0149
0150 struct scsi_bd bd_info;
0151 __le16 conn_id ;
0152 __le16 pkt_len ;
0153 u8 reserved1[4];
0154 };
0155
0156
0157
0158
0159 struct fcoe_warning_report_entry {
0160
0161 struct scsi_bd bd_info;
0162
0163 __le32 buf_off;
0164 __le16 rx_id ;
0165 __le16 reserved1;
0166 };
0167
0168
0169
0170
0171 union fcoe_cqe_info {
0172 struct fcoe_cqe_rsp_info rsp_info ;
0173
0174 struct fcoe_cqe_target_info target_info;
0175
0176 struct fcoe_err_report_entry err_info;
0177 struct fcoe_abts_info abts_info ;
0178
0179 struct fcoe_cqe_midpath_info midpath_info;
0180
0181 struct fcoe_unsolic_info unsolic_info;
0182
0183 struct fcoe_warning_report_entry warn_info;
0184 };
0185
0186
0187
0188
0189 struct fcoe_cqe {
0190 __le32 cqe_data;
0191
0192 #define FCOE_CQE_TASK_ID_MASK 0xFFFF
0193 #define FCOE_CQE_TASK_ID_SHIFT 0
0194
0195
0196
0197
0198
0199 #define FCOE_CQE_CQE_TYPE_MASK 0xF
0200 #define FCOE_CQE_CQE_TYPE_SHIFT 16
0201 #define FCOE_CQE_RESERVED0_MASK 0xFFF
0202 #define FCOE_CQE_RESERVED0_SHIFT 20
0203 __le16 reserved1;
0204 __le16 fw_cq_prod;
0205 union fcoe_cqe_info cqe_info;
0206 };
0207
0208
0209
0210
0211 enum fcoe_cqe_type {
0212
0213 FCOE_GOOD_COMPLETION_CQE_TYPE,
0214 FCOE_UNSOLIC_CQE_TYPE ,
0215 FCOE_ERROR_DETECTION_CQE_TYPE ,
0216 FCOE_WARNING_CQE_TYPE ,
0217 FCOE_EXCH_CLEANUP_CQE_TYPE ,
0218 FCOE_ABTS_CQE_TYPE ,
0219 FCOE_DUMMY_CQE_TYPE ,
0220
0221 FCOE_LOCAL_COMP_CQE_TYPE,
0222 MAX_FCOE_CQE_TYPE
0223 };
0224
0225
0226
0227
0228 enum fcoe_fp_error_warning_code {
0229 FCOE_ERROR_CODE_XFER_OOO_RO ,
0230 FCOE_ERROR_CODE_XFER_RO_NOT_ALIGNED,
0231 FCOE_ERROR_CODE_XFER_NULL_BURST_LEN,
0232 FCOE_ERROR_CODE_XFER_RO_GREATER_THAN_DATA2TRNS,
0233 FCOE_ERROR_CODE_XFER_INVALID_PAYLOAD_SIZE,
0234 FCOE_ERROR_CODE_XFER_TASK_TYPE_NOT_WRITE,
0235 FCOE_ERROR_CODE_XFER_PEND_XFER_SET,
0236 FCOE_ERROR_CODE_XFER_OPENED_SEQ,
0237 FCOE_ERROR_CODE_XFER_FCTL,
0238 FCOE_ERROR_CODE_FCP_RSP_BIDI_FLAGS_SET ,
0239 FCOE_ERROR_CODE_FCP_RSP_INVALID_LENGTH_FIELD,
0240 FCOE_ERROR_CODE_FCP_RSP_INVALID_SNS_FIELD,
0241 FCOE_ERROR_CODE_FCP_RSP_INVALID_PAYLOAD_SIZE,
0242 FCOE_ERROR_CODE_FCP_RSP_PEND_XFER_SET,
0243 FCOE_ERROR_CODE_FCP_RSP_OPENED_SEQ,
0244 FCOE_ERROR_CODE_FCP_RSP_FCTL,
0245 FCOE_ERROR_CODE_FCP_RSP_LAST_SEQ_RESET,
0246 FCOE_ERROR_CODE_FCP_RSP_CONF_REQ_NOT_SUPPORTED_YET,
0247 FCOE_ERROR_CODE_DATA_OOO_RO ,
0248 FCOE_ERROR_CODE_DATA_EXCEEDS_DEFINED_MAX_FRAME_SIZE,
0249 FCOE_ERROR_CODE_DATA_EXCEEDS_DATA2TRNS,
0250 FCOE_ERROR_CODE_DATA_SOFI3_SEQ_ACTIVE_SET,
0251 FCOE_ERROR_CODE_DATA_SOFN_SEQ_ACTIVE_RESET,
0252 FCOE_ERROR_CODE_DATA_EOFN_END_SEQ_SET,
0253 FCOE_ERROR_CODE_DATA_EOFT_END_SEQ_RESET,
0254 FCOE_ERROR_CODE_DATA_TASK_TYPE_NOT_READ,
0255 FCOE_ERROR_CODE_DATA_FCTL_INITIATIR,
0256 FCOE_ERROR_CODE_MIDPATH_INVALID_TYPE ,
0257 FCOE_ERROR_CODE_MIDPATH_SOFI3_SEQ_ACTIVE_SET,
0258 FCOE_ERROR_CODE_MIDPATH_SOFN_SEQ_ACTIVE_RESET,
0259 FCOE_ERROR_CODE_MIDPATH_EOFN_END_SEQ_SET,
0260 FCOE_ERROR_CODE_MIDPATH_EOFT_END_SEQ_RESET,
0261 FCOE_ERROR_CODE_MIDPATH_REPLY_FCTL,
0262 FCOE_ERROR_CODE_MIDPATH_INVALID_REPLY,
0263 FCOE_ERROR_CODE_MIDPATH_ELS_REPLY_RCTL,
0264 FCOE_ERROR_CODE_COMMON_MIDDLE_FRAME_WITH_PAD ,
0265 FCOE_ERROR_CODE_COMMON_SEQ_INIT_IN_TCE,
0266 FCOE_ERROR_CODE_COMMON_FC_HDR_RX_ID_MISMATCH,
0267 FCOE_ERROR_CODE_COMMON_INCORRECT_SEQ_CNT,
0268 FCOE_ERROR_CODE_COMMON_DATA_FC_HDR_FCP_TYPE_MISMATCH,
0269 FCOE_ERROR_CODE_COMMON_DATA_NO_MORE_SGES,
0270 FCOE_ERROR_CODE_COMMON_OPTIONAL_FC_HDR,
0271 FCOE_ERROR_CODE_COMMON_READ_TCE_OX_ID_TOO_BIG,
0272 FCOE_ERROR_CODE_COMMON_DATA_WAS_NOT_TRANSMITTED,
0273 FCOE_ERROR_CODE_COMMON_TASK_DDF_RCTL_INFO_FIELD,
0274 FCOE_ERROR_CODE_COMMON_TASK_INVALID_RCTL,
0275 FCOE_ERROR_CODE_COMMON_TASK_RCTL_GENERAL_MISMATCH,
0276 FCOE_ERROR_CODE_E_D_TOV_TIMER_EXPIRATION ,
0277 FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION ,
0278 FCOE_ERROR_CODE_RR_TOV_TIMER_EXPIRATION ,
0279
0280 FCOE_ERROR_CODE_ABTS_REPLY_UNEXPECTED,
0281 FCOE_ERROR_CODE_TARGET_MODE_FCP_RSP,
0282 FCOE_ERROR_CODE_TARGET_MODE_FCP_XFER,
0283 FCOE_ERROR_CODE_TARGET_MODE_DATA_TASK_TYPE_NOT_WRITE,
0284 FCOE_ERROR_CODE_DATA_FCTL_TARGET,
0285 FCOE_ERROR_CODE_TARGET_DATA_SIZE_NO_MATCH_XFER,
0286 FCOE_ERROR_CODE_TARGET_DIF_CRC_CHECKSUM_ERROR,
0287 FCOE_ERROR_CODE_TARGET_DIF_REF_TAG_ERROR,
0288 FCOE_ERROR_CODE_TARGET_DIF_APP_TAG_ERROR,
0289 MAX_FCOE_FP_ERROR_WARNING_CODE
0290 };
0291
0292
0293
0294
0295
0296 struct fcoe_respqe {
0297 __le16 ox_id ;
0298 __le16 rx_id ;
0299 __le32 additional_info;
0300
0301 #define FCOE_RESPQE_PARAM_MASK 0xFFFFFF
0302 #define FCOE_RESPQE_PARAM_SHIFT 0
0303
0304 #define FCOE_RESPQE_TARGET_AUTO_RSP_MASK 0xFF
0305 #define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24
0306 };
0307
0308
0309
0310
0311
0312 enum fcoe_sp_error_code {
0313
0314 FCOE_ERROR_CODE_SLOW_PATH_TOO_MANY_FUNCS,
0315 FCOE_ERROR_SLOW_PATH_CODE_NO_LICENSE,
0316 MAX_FCOE_SP_ERROR_CODE
0317 };
0318
0319
0320
0321
0322 enum fcoe_task_tx_state {
0323
0324 FCOE_TASK_TX_STATE_NORMAL,
0325
0326 FCOE_TASK_TX_STATE_UNSOLICITED_COMPLETED,
0327
0328
0329
0330
0331 FCOE_TASK_TX_STATE_CLEAN_REQ,
0332 FCOE_TASK_TX_STATE_ABTS ,
0333
0334 FCOE_TASK_TX_STATE_EXCLEANUP,
0335
0336
0337
0338
0339 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_CONT,
0340
0341 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE,
0342
0343 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_READ_OR_RSP,
0344
0345 FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_LAST_CYCLE,
0346
0347 FCOE_TASK_TX_STATE_SEQRECOVERY,
0348 MAX_FCOE_TASK_TX_STATE
0349 };
0350
0351 #endif