1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * QLogic FCoE Offload Driver 4*4882a593Smuzhiyun * Copyright (c) 2016-2018 Cavium Inc. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #ifndef __QEDF_HSI__ 7*4882a593Smuzhiyun #define __QEDF_HSI__ 8*4882a593Smuzhiyun /* 9*4882a593Smuzhiyun * Add include to common target 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun #include <linux/qed/common_hsi.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* 14*4882a593Smuzhiyun * Add include to common storage target 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun #include <linux/qed/storage_common.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* 19*4882a593Smuzhiyun * Add include to common fcoe target for both eCore and protocol driver 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun #include <linux/qed/fcoe_common.h> 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* 25*4882a593Smuzhiyun * FCoE CQ element ABTS information 26*4882a593Smuzhiyun */ 27*4882a593Smuzhiyun struct fcoe_abts_info { 28*4882a593Smuzhiyun u8 r_ctl /* R_CTL in the ABTS response frame */; 29*4882a593Smuzhiyun u8 reserved0; 30*4882a593Smuzhiyun __le16 rx_id; 31*4882a593Smuzhiyun __le32 reserved2[2]; 32*4882a593Smuzhiyun __le32 fc_payload[3] /* ABTS FC payload response frame */; 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* 37*4882a593Smuzhiyun * FCoE class type 38*4882a593Smuzhiyun */ 39*4882a593Smuzhiyun enum fcoe_class_type { 40*4882a593Smuzhiyun FCOE_TASK_CLASS_TYPE_3, 41*4882a593Smuzhiyun FCOE_TASK_CLASS_TYPE_2, 42*4882a593Smuzhiyun MAX_FCOE_CLASS_TYPE 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* 47*4882a593Smuzhiyun * FCoE CMDQ element control information 48*4882a593Smuzhiyun */ 49*4882a593Smuzhiyun struct fcoe_cmdqe_control { 50*4882a593Smuzhiyun __le16 conn_id; 51*4882a593Smuzhiyun u8 num_additional_cmdqes; 52*4882a593Smuzhiyun u8 cmdType; 53*4882a593Smuzhiyun /* true for ABTS request cmdqe. used in Target mode */ 54*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_ABTSREQCMD_MASK 0x1 55*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 0 56*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_RESERVED1_MASK 0x7F 57*4882a593Smuzhiyun #define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT 1 58*4882a593Smuzhiyun u8 reserved2[4]; 59*4882a593Smuzhiyun }; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* 62*4882a593Smuzhiyun * FCoE control + payload CMDQ element 63*4882a593Smuzhiyun */ 64*4882a593Smuzhiyun struct fcoe_cmdqe { 65*4882a593Smuzhiyun struct fcoe_cmdqe_control hdr; 66*4882a593Smuzhiyun u8 fc_header[24]; 67*4882a593Smuzhiyun __le32 fcp_cmd_payload[8]; 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* 73*4882a593Smuzhiyun * FCP RSP flags 74*4882a593Smuzhiyun */ 75*4882a593Smuzhiyun struct fcoe_fcp_rsp_flags { 76*4882a593Smuzhiyun u8 flags; 77*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK 0x1 78*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0 79*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK 0x1 80*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1 81*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK 0x1 82*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2 83*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK 0x1 84*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3 85*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK 0x1 86*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4 87*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK 0x7 88*4882a593Smuzhiyun #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5 89*4882a593Smuzhiyun }; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /* 92*4882a593Smuzhiyun * FCoE CQ element response information 93*4882a593Smuzhiyun */ 94*4882a593Smuzhiyun struct fcoe_cqe_rsp_info { 95*4882a593Smuzhiyun struct fcoe_fcp_rsp_flags rsp_flags; 96*4882a593Smuzhiyun u8 scsi_status_code; 97*4882a593Smuzhiyun __le16 retry_delay_timer; 98*4882a593Smuzhiyun __le32 fcp_resid; 99*4882a593Smuzhiyun __le32 fcp_sns_len; 100*4882a593Smuzhiyun __le32 fcp_rsp_len; 101*4882a593Smuzhiyun __le16 rx_id; 102*4882a593Smuzhiyun u8 fw_error_flags; 103*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_MASK 0x1 /* FW detected underrun */ 104*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_SHIFT 0 105*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_RESREVED_MASK 0x7F 106*4882a593Smuzhiyun #define FCOE_CQE_RSP_INFO_RESREVED_SHIFT 1 107*4882a593Smuzhiyun u8 reserved; 108*4882a593Smuzhiyun __le32 fw_residual /* Residual bytes calculated by FW */; 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* 112*4882a593Smuzhiyun * FCoE CQ element Target completion information 113*4882a593Smuzhiyun */ 114*4882a593Smuzhiyun struct fcoe_cqe_target_info { 115*4882a593Smuzhiyun __le16 rx_id; 116*4882a593Smuzhiyun __le16 reserved0; 117*4882a593Smuzhiyun __le32 reserved1[5]; 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /* 121*4882a593Smuzhiyun * FCoE error/warning reporting entry 122*4882a593Smuzhiyun */ 123*4882a593Smuzhiyun struct fcoe_err_report_entry { 124*4882a593Smuzhiyun __le32 err_warn_bitmap_lo /* Error bitmap lower 32 bits */; 125*4882a593Smuzhiyun __le32 err_warn_bitmap_hi /* Error bitmap higher 32 bits */; 126*4882a593Smuzhiyun /* Buffer offset the beginning of the Sequence last transmitted */ 127*4882a593Smuzhiyun __le32 tx_buf_off; 128*4882a593Smuzhiyun /* Buffer offset from the beginning of the Sequence last received */ 129*4882a593Smuzhiyun __le32 rx_buf_off; 130*4882a593Smuzhiyun __le16 rx_id /* RX_ID of the associated task */; 131*4882a593Smuzhiyun __le16 reserved1; 132*4882a593Smuzhiyun __le32 reserved2; 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun /* 136*4882a593Smuzhiyun * FCoE CQ element middle path information 137*4882a593Smuzhiyun */ 138*4882a593Smuzhiyun struct fcoe_cqe_midpath_info { 139*4882a593Smuzhiyun __le32 data_placement_size; 140*4882a593Smuzhiyun __le16 rx_id; 141*4882a593Smuzhiyun __le16 reserved0; 142*4882a593Smuzhiyun __le32 reserved1[4]; 143*4882a593Smuzhiyun }; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* 146*4882a593Smuzhiyun * FCoE CQ element unsolicited information 147*4882a593Smuzhiyun */ 148*4882a593Smuzhiyun struct fcoe_unsolic_info { 149*4882a593Smuzhiyun /* BD information: Physical address and opaque data */ 150*4882a593Smuzhiyun struct scsi_bd bd_info; 151*4882a593Smuzhiyun __le16 conn_id /* Connection ID the frame is associated to */; 152*4882a593Smuzhiyun __le16 pkt_len /* Packet length */; 153*4882a593Smuzhiyun u8 reserved1[4]; 154*4882a593Smuzhiyun }; 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun /* 157*4882a593Smuzhiyun * FCoE warning reporting entry 158*4882a593Smuzhiyun */ 159*4882a593Smuzhiyun struct fcoe_warning_report_entry { 160*4882a593Smuzhiyun /* BD information: Physical address and opaque data */ 161*4882a593Smuzhiyun struct scsi_bd bd_info; 162*4882a593Smuzhiyun /* Buffer offset the beginning of the Sequence last transmitted */ 163*4882a593Smuzhiyun __le32 buf_off; 164*4882a593Smuzhiyun __le16 rx_id /* RX_ID of the associated task */; 165*4882a593Smuzhiyun __le16 reserved1; 166*4882a593Smuzhiyun }; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun /* 169*4882a593Smuzhiyun * FCoE CQ element information 170*4882a593Smuzhiyun */ 171*4882a593Smuzhiyun union fcoe_cqe_info { 172*4882a593Smuzhiyun struct fcoe_cqe_rsp_info rsp_info /* Response completion information */; 173*4882a593Smuzhiyun /* Target completion information */ 174*4882a593Smuzhiyun struct fcoe_cqe_target_info target_info; 175*4882a593Smuzhiyun /* Error completion information */ 176*4882a593Smuzhiyun struct fcoe_err_report_entry err_info; 177*4882a593Smuzhiyun struct fcoe_abts_info abts_info /* ABTS completion information */; 178*4882a593Smuzhiyun /* Middle path completion information */ 179*4882a593Smuzhiyun struct fcoe_cqe_midpath_info midpath_info; 180*4882a593Smuzhiyun /* Unsolicited packet completion information */ 181*4882a593Smuzhiyun struct fcoe_unsolic_info unsolic_info; 182*4882a593Smuzhiyun /* Warning completion information (Rec Tov expiration) */ 183*4882a593Smuzhiyun struct fcoe_warning_report_entry warn_info; 184*4882a593Smuzhiyun }; 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun /* 187*4882a593Smuzhiyun * FCoE CQ element 188*4882a593Smuzhiyun */ 189*4882a593Smuzhiyun struct fcoe_cqe { 190*4882a593Smuzhiyun __le32 cqe_data; 191*4882a593Smuzhiyun /* The task identifier (OX_ID) to be completed */ 192*4882a593Smuzhiyun #define FCOE_CQE_TASK_ID_MASK 0xFFFF 193*4882a593Smuzhiyun #define FCOE_CQE_TASK_ID_SHIFT 0 194*4882a593Smuzhiyun /* 195*4882a593Smuzhiyun * The CQE type: 0x0 Indicating on a pending work request completion. 196*4882a593Smuzhiyun * 0x1 - Indicating on an unsolicited event notification. use enum 197*4882a593Smuzhiyun * fcoe_cqe_type (use enum fcoe_cqe_type) 198*4882a593Smuzhiyun */ 199*4882a593Smuzhiyun #define FCOE_CQE_CQE_TYPE_MASK 0xF 200*4882a593Smuzhiyun #define FCOE_CQE_CQE_TYPE_SHIFT 16 201*4882a593Smuzhiyun #define FCOE_CQE_RESERVED0_MASK 0xFFF 202*4882a593Smuzhiyun #define FCOE_CQE_RESERVED0_SHIFT 20 203*4882a593Smuzhiyun __le16 reserved1; 204*4882a593Smuzhiyun __le16 fw_cq_prod; 205*4882a593Smuzhiyun union fcoe_cqe_info cqe_info; 206*4882a593Smuzhiyun }; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* 209*4882a593Smuzhiyun * FCoE CQE type 210*4882a593Smuzhiyun */ 211*4882a593Smuzhiyun enum fcoe_cqe_type { 212*4882a593Smuzhiyun /* solicited response on a R/W or middle-path SQE */ 213*4882a593Smuzhiyun FCOE_GOOD_COMPLETION_CQE_TYPE, 214*4882a593Smuzhiyun FCOE_UNSOLIC_CQE_TYPE /* unsolicited packet, RQ consumed */, 215*4882a593Smuzhiyun FCOE_ERROR_DETECTION_CQE_TYPE /* timer expiration, validation error */, 216*4882a593Smuzhiyun FCOE_WARNING_CQE_TYPE /* rec_tov or rr_tov timer expiration */, 217*4882a593Smuzhiyun FCOE_EXCH_CLEANUP_CQE_TYPE /* task cleanup completed */, 218*4882a593Smuzhiyun FCOE_ABTS_CQE_TYPE /* ABTS received and task cleaned */, 219*4882a593Smuzhiyun FCOE_DUMMY_CQE_TYPE /* just increment SQ CONS */, 220*4882a593Smuzhiyun /* Task was completed wight after sending a pkt to the target */ 221*4882a593Smuzhiyun FCOE_LOCAL_COMP_CQE_TYPE, 222*4882a593Smuzhiyun MAX_FCOE_CQE_TYPE 223*4882a593Smuzhiyun }; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun /* 226*4882a593Smuzhiyun * FCoE fast path error codes 227*4882a593Smuzhiyun */ 228*4882a593Smuzhiyun enum fcoe_fp_error_warning_code { 229*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_OOO_RO /* XFER error codes */, 230*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_RO_NOT_ALIGNED, 231*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_NULL_BURST_LEN, 232*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_RO_GREATER_THAN_DATA2TRNS, 233*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_INVALID_PAYLOAD_SIZE, 234*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_TASK_TYPE_NOT_WRITE, 235*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_PEND_XFER_SET, 236*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_OPENED_SEQ, 237*4882a593Smuzhiyun FCOE_ERROR_CODE_XFER_FCTL, 238*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_BIDI_FLAGS_SET /* FCP RSP error codes */, 239*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_INVALID_LENGTH_FIELD, 240*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_INVALID_SNS_FIELD, 241*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_INVALID_PAYLOAD_SIZE, 242*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_PEND_XFER_SET, 243*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_OPENED_SEQ, 244*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_FCTL, 245*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_LAST_SEQ_RESET, 246*4882a593Smuzhiyun FCOE_ERROR_CODE_FCP_RSP_CONF_REQ_NOT_SUPPORTED_YET, 247*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_OOO_RO /* FCP DATA error codes */, 248*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_EXCEEDS_DEFINED_MAX_FRAME_SIZE, 249*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_EXCEEDS_DATA2TRNS, 250*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_SOFI3_SEQ_ACTIVE_SET, 251*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_SOFN_SEQ_ACTIVE_RESET, 252*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_EOFN_END_SEQ_SET, 253*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_EOFT_END_SEQ_RESET, 254*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_TASK_TYPE_NOT_READ, 255*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_FCTL_INITIATIR, 256*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_INVALID_TYPE /* Middle path error codes */, 257*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_SOFI3_SEQ_ACTIVE_SET, 258*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_SOFN_SEQ_ACTIVE_RESET, 259*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_EOFN_END_SEQ_SET, 260*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_EOFT_END_SEQ_RESET, 261*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_REPLY_FCTL, 262*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_INVALID_REPLY, 263*4882a593Smuzhiyun FCOE_ERROR_CODE_MIDPATH_ELS_REPLY_RCTL, 264*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_MIDDLE_FRAME_WITH_PAD /* Common error codes */, 265*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_SEQ_INIT_IN_TCE, 266*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_FC_HDR_RX_ID_MISMATCH, 267*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_INCORRECT_SEQ_CNT, 268*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_DATA_FC_HDR_FCP_TYPE_MISMATCH, 269*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_DATA_NO_MORE_SGES, 270*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_OPTIONAL_FC_HDR, 271*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_READ_TCE_OX_ID_TOO_BIG, 272*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_DATA_WAS_NOT_TRANSMITTED, 273*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_TASK_DDF_RCTL_INFO_FIELD, 274*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_TASK_INVALID_RCTL, 275*4882a593Smuzhiyun FCOE_ERROR_CODE_COMMON_TASK_RCTL_GENERAL_MISMATCH, 276*4882a593Smuzhiyun FCOE_ERROR_CODE_E_D_TOV_TIMER_EXPIRATION /* Timer error codes */, 277*4882a593Smuzhiyun FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION /* Timer error codes */, 278*4882a593Smuzhiyun FCOE_ERROR_CODE_RR_TOV_TIMER_EXPIRATION /* Timer error codes */, 279*4882a593Smuzhiyun /* ABTSrsp pckt arrived unexpected */ 280*4882a593Smuzhiyun FCOE_ERROR_CODE_ABTS_REPLY_UNEXPECTED, 281*4882a593Smuzhiyun FCOE_ERROR_CODE_TARGET_MODE_FCP_RSP, 282*4882a593Smuzhiyun FCOE_ERROR_CODE_TARGET_MODE_FCP_XFER, 283*4882a593Smuzhiyun FCOE_ERROR_CODE_TARGET_MODE_DATA_TASK_TYPE_NOT_WRITE, 284*4882a593Smuzhiyun FCOE_ERROR_CODE_DATA_FCTL_TARGET, 285*4882a593Smuzhiyun FCOE_ERROR_CODE_TARGET_DATA_SIZE_NO_MATCH_XFER, 286*4882a593Smuzhiyun FCOE_ERROR_CODE_TARGET_DIF_CRC_CHECKSUM_ERROR, 287*4882a593Smuzhiyun FCOE_ERROR_CODE_TARGET_DIF_REF_TAG_ERROR, 288*4882a593Smuzhiyun FCOE_ERROR_CODE_TARGET_DIF_APP_TAG_ERROR, 289*4882a593Smuzhiyun MAX_FCOE_FP_ERROR_WARNING_CODE 290*4882a593Smuzhiyun }; 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun /* 294*4882a593Smuzhiyun * FCoE RESPQ element 295*4882a593Smuzhiyun */ 296*4882a593Smuzhiyun struct fcoe_respqe { 297*4882a593Smuzhiyun __le16 ox_id /* OX_ID that is located in the FCP_RSP FC header */; 298*4882a593Smuzhiyun __le16 rx_id /* RX_ID that is located in the FCP_RSP FC header */; 299*4882a593Smuzhiyun __le32 additional_info; 300*4882a593Smuzhiyun /* PARAM that is located in the FCP_RSP FC header */ 301*4882a593Smuzhiyun #define FCOE_RESPQE_PARAM_MASK 0xFFFFFF 302*4882a593Smuzhiyun #define FCOE_RESPQE_PARAM_SHIFT 0 303*4882a593Smuzhiyun /* Indication whther its Target-auto-rsp mode or not */ 304*4882a593Smuzhiyun #define FCOE_RESPQE_TARGET_AUTO_RSP_MASK 0xFF 305*4882a593Smuzhiyun #define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24 306*4882a593Smuzhiyun }; 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun /* 310*4882a593Smuzhiyun * FCoE slow path error codes 311*4882a593Smuzhiyun */ 312*4882a593Smuzhiyun enum fcoe_sp_error_code { 313*4882a593Smuzhiyun /* Error codes for Error Reporting in slow path flows */ 314*4882a593Smuzhiyun FCOE_ERROR_CODE_SLOW_PATH_TOO_MANY_FUNCS, 315*4882a593Smuzhiyun FCOE_ERROR_SLOW_PATH_CODE_NO_LICENSE, 316*4882a593Smuzhiyun MAX_FCOE_SP_ERROR_CODE 317*4882a593Smuzhiyun }; 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun /* 320*4882a593Smuzhiyun * FCoE task TX state 321*4882a593Smuzhiyun */ 322*4882a593Smuzhiyun enum fcoe_task_tx_state { 323*4882a593Smuzhiyun /* Initiate state after driver has initialized the task */ 324*4882a593Smuzhiyun FCOE_TASK_TX_STATE_NORMAL, 325*4882a593Smuzhiyun /* Updated by TX path after complete transmitting unsolicited packet */ 326*4882a593Smuzhiyun FCOE_TASK_TX_STATE_UNSOLICITED_COMPLETED, 327*4882a593Smuzhiyun /* 328*4882a593Smuzhiyun * Updated by TX path after start processing the task requesting the 329*4882a593Smuzhiyun * cleanup/abort operation 330*4882a593Smuzhiyun */ 331*4882a593Smuzhiyun FCOE_TASK_TX_STATE_CLEAN_REQ, 332*4882a593Smuzhiyun FCOE_TASK_TX_STATE_ABTS /* Updated by TX path during abort procedure */, 333*4882a593Smuzhiyun /* Updated by TX path during exchange cleanup procedure */ 334*4882a593Smuzhiyun FCOE_TASK_TX_STATE_EXCLEANUP, 335*4882a593Smuzhiyun /* 336*4882a593Smuzhiyun * Updated by TX path during exchange cleanup continuation task 337*4882a593Smuzhiyun * procedure 338*4882a593Smuzhiyun */ 339*4882a593Smuzhiyun FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_CONT, 340*4882a593Smuzhiyun /* Updated by TX path during exchange cleanup first xfer procedure */ 341*4882a593Smuzhiyun FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE, 342*4882a593Smuzhiyun /* Updated by TX path during exchange cleanup read task in Target */ 343*4882a593Smuzhiyun FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_READ_OR_RSP, 344*4882a593Smuzhiyun /* Updated by TX path during target exchange cleanup procedure */ 345*4882a593Smuzhiyun FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_LAST_CYCLE, 346*4882a593Smuzhiyun /* Updated by TX path during sequence recovery procedure */ 347*4882a593Smuzhiyun FCOE_TASK_TX_STATE_SEQRECOVERY, 348*4882a593Smuzhiyun MAX_FCOE_TASK_TX_STATE 349*4882a593Smuzhiyun }; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun #endif /* __QEDF_HSI__ */ 352