1*14b24e2bSVaishali Kulkarni /* 2*14b24e2bSVaishali Kulkarni * CDDL HEADER START 3*14b24e2bSVaishali Kulkarni * 4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the 5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1, (the "License"). 6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 7*14b24e2bSVaishali Kulkarni * 8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0. 10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions 11*14b24e2bSVaishali Kulkarni * and limitations under the License. 12*14b24e2bSVaishali Kulkarni * 13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each 14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the 16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying 17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner] 18*14b24e2bSVaishali Kulkarni * 19*14b24e2bSVaishali Kulkarni * CDDL HEADER END 20*14b24e2bSVaishali Kulkarni */ 21*14b24e2bSVaishali Kulkarni 22*14b24e2bSVaishali Kulkarni /* 23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc. 24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development 25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1, (the "License"). 26*14b24e2bSVaishali Kulkarni 27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 28*14b24e2bSVaishali Kulkarni 29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available 30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0 31*14b24e2bSVaishali Kulkarni 32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and 33*14b24e2bSVaishali Kulkarni * limitations under the License. 34*14b24e2bSVaishali Kulkarni */ 35*14b24e2bSVaishali Kulkarni 36*14b24e2bSVaishali Kulkarni #ifndef __QEDF_HSI__ 37*14b24e2bSVaishali Kulkarni #define __QEDF_HSI__ 38*14b24e2bSVaishali Kulkarni /********************************/ 39*14b24e2bSVaishali Kulkarni /* Add include to common target */ 40*14b24e2bSVaishali Kulkarni /********************************/ 41*14b24e2bSVaishali Kulkarni #include "common_hsi.h" 42*14b24e2bSVaishali Kulkarni 43*14b24e2bSVaishali Kulkarni /********************************************************/ 44*14b24e2bSVaishali Kulkarni /* Add include to common storage target for upper driver*/ 45*14b24e2bSVaishali Kulkarni /*******************************************************/ 46*14b24e2bSVaishali Kulkarni #include "qeds_hsi.h" 47*14b24e2bSVaishali Kulkarni 48*14b24e2bSVaishali Kulkarni /****************************************/ 49*14b24e2bSVaishali Kulkarni /* Add include to common storage target */ 50*14b24e2bSVaishali Kulkarni /****************************************/ 51*14b24e2bSVaishali Kulkarni #include "storage_common.h" 52*14b24e2bSVaishali Kulkarni 53*14b24e2bSVaishali Kulkarni /************************************************************************/ 54*14b24e2bSVaishali Kulkarni /* Add include to common fcoe target for both eCore and protocol driver */ 55*14b24e2bSVaishali Kulkarni /************************************************************************/ 56*14b24e2bSVaishali Kulkarni #include "fcoe_common.h" 57*14b24e2bSVaishali Kulkarni 58*14b24e2bSVaishali Kulkarni 59*14b24e2bSVaishali Kulkarni /* 60*14b24e2bSVaishali Kulkarni * FCoE CQ element ABTS information 61*14b24e2bSVaishali Kulkarni */ 62*14b24e2bSVaishali Kulkarni struct fcoe_abts_info 63*14b24e2bSVaishali Kulkarni { 64*14b24e2bSVaishali Kulkarni u8 r_ctl /* R_CTL in the ABTS response frame */; 65*14b24e2bSVaishali Kulkarni u8 reserved0; 66*14b24e2bSVaishali Kulkarni __le16 rx_id; 67*14b24e2bSVaishali Kulkarni __le32 reserved2[2]; 68*14b24e2bSVaishali Kulkarni __le32 fc_payload[3] /* ABTS FC payload response frame */; 69*14b24e2bSVaishali Kulkarni }; 70*14b24e2bSVaishali Kulkarni 71*14b24e2bSVaishali Kulkarni 72*14b24e2bSVaishali Kulkarni /* 73*14b24e2bSVaishali Kulkarni * FCoE class type 74*14b24e2bSVaishali Kulkarni */ 75*14b24e2bSVaishali Kulkarni enum fcoe_class_type 76*14b24e2bSVaishali Kulkarni { 77*14b24e2bSVaishali Kulkarni FCOE_TASK_CLASS_TYPE_3, 78*14b24e2bSVaishali Kulkarni FCOE_TASK_CLASS_TYPE_2, 79*14b24e2bSVaishali Kulkarni MAX_FCOE_CLASS_TYPE 80*14b24e2bSVaishali Kulkarni }; 81*14b24e2bSVaishali Kulkarni 82*14b24e2bSVaishali Kulkarni 83*14b24e2bSVaishali Kulkarni /* 84*14b24e2bSVaishali Kulkarni * FCoE CMDQ element control information 85*14b24e2bSVaishali Kulkarni */ 86*14b24e2bSVaishali Kulkarni struct fcoe_cmdqe_control 87*14b24e2bSVaishali Kulkarni { 88*14b24e2bSVaishali Kulkarni __le16 conn_id; 89*14b24e2bSVaishali Kulkarni u8 num_additional_cmdqes; 90*14b24e2bSVaishali Kulkarni u8 cmdType; 91*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_ABTSREQCMD_MASK 0x1 /* true for ABTS request cmdqe. used in Target mode */ 92*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 0 93*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_RESERVED1_MASK 0x7F 94*14b24e2bSVaishali Kulkarni #define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT 1 95*14b24e2bSVaishali Kulkarni u8 reserved2[4]; 96*14b24e2bSVaishali Kulkarni }; 97*14b24e2bSVaishali Kulkarni 98*14b24e2bSVaishali Kulkarni /* 99*14b24e2bSVaishali Kulkarni * FCoE control + payload CMDQ element 100*14b24e2bSVaishali Kulkarni */ 101*14b24e2bSVaishali Kulkarni struct fcoe_cmdqe 102*14b24e2bSVaishali Kulkarni { 103*14b24e2bSVaishali Kulkarni struct fcoe_cmdqe_control hdr; 104*14b24e2bSVaishali Kulkarni u8 fc_header[24]; 105*14b24e2bSVaishali Kulkarni __le32 fcp_cmd_payload[8]; 106*14b24e2bSVaishali Kulkarni }; 107*14b24e2bSVaishali Kulkarni 108*14b24e2bSVaishali Kulkarni 109*14b24e2bSVaishali Kulkarni 110*14b24e2bSVaishali Kulkarni /* 111*14b24e2bSVaishali Kulkarni * FCP RSP flags 112*14b24e2bSVaishali Kulkarni */ 113*14b24e2bSVaishali Kulkarni struct fcoe_fcp_rsp_flags 114*14b24e2bSVaishali Kulkarni { 115*14b24e2bSVaishali Kulkarni u8 flags; 116*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK 0x1 117*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0 118*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK 0x1 119*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1 120*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK 0x1 121*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2 122*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK 0x1 123*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3 124*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK 0x1 125*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4 126*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK 0x7 127*14b24e2bSVaishali Kulkarni #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5 128*14b24e2bSVaishali Kulkarni }; 129*14b24e2bSVaishali Kulkarni 130*14b24e2bSVaishali Kulkarni /* 131*14b24e2bSVaishali Kulkarni * FCoE CQ element response information 132*14b24e2bSVaishali Kulkarni */ 133*14b24e2bSVaishali Kulkarni struct fcoe_cqe_rsp_info 134*14b24e2bSVaishali Kulkarni { 135*14b24e2bSVaishali Kulkarni struct fcoe_fcp_rsp_flags rsp_flags; 136*14b24e2bSVaishali Kulkarni u8 scsi_status_code; 137*14b24e2bSVaishali Kulkarni __le16 retry_delay_timer; 138*14b24e2bSVaishali Kulkarni __le32 fcp_resid; 139*14b24e2bSVaishali Kulkarni __le32 fcp_sns_len; 140*14b24e2bSVaishali Kulkarni __le32 fcp_rsp_len; 141*14b24e2bSVaishali Kulkarni __le16 rx_id; 142*14b24e2bSVaishali Kulkarni u8 fw_error_flags; 143*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_MASK 0x1 /* FW detected underrun */ 144*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_FW_UNDERRUN_SHIFT 0 145*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_RESREVED_MASK 0x7F 146*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RSP_INFO_RESREVED_SHIFT 1 147*14b24e2bSVaishali Kulkarni u8 reserved; 148*14b24e2bSVaishali Kulkarni __le32 fw_residual /* Residual bytes calculated by FW */; 149*14b24e2bSVaishali Kulkarni }; 150*14b24e2bSVaishali Kulkarni 151*14b24e2bSVaishali Kulkarni /* 152*14b24e2bSVaishali Kulkarni * FCoE CQ element Target completion information 153*14b24e2bSVaishali Kulkarni */ 154*14b24e2bSVaishali Kulkarni struct fcoe_cqe_target_info 155*14b24e2bSVaishali Kulkarni { 156*14b24e2bSVaishali Kulkarni __le16 rx_id; 157*14b24e2bSVaishali Kulkarni __le16 reserved0; 158*14b24e2bSVaishali Kulkarni __le32 reserved1[5]; 159*14b24e2bSVaishali Kulkarni }; 160*14b24e2bSVaishali Kulkarni 161*14b24e2bSVaishali Kulkarni /* 162*14b24e2bSVaishali Kulkarni * FCoE error/warning reporting entry 163*14b24e2bSVaishali Kulkarni */ 164*14b24e2bSVaishali Kulkarni struct fcoe_err_report_entry 165*14b24e2bSVaishali Kulkarni { 166*14b24e2bSVaishali Kulkarni __le32 err_warn_bitmap_lo /* Error bitmap lower 32 bits */; 167*14b24e2bSVaishali Kulkarni __le32 err_warn_bitmap_hi /* Error bitmap higher 32 bits */; 168*14b24e2bSVaishali Kulkarni __le32 tx_buf_off /* Buffer offset the beginning of the Sequence last transmitted */; 169*14b24e2bSVaishali Kulkarni __le32 rx_buf_off /* Buffer offset from the beginning of the Sequence last received */; 170*14b24e2bSVaishali Kulkarni __le16 rx_id /* RX_ID of the associated task */; 171*14b24e2bSVaishali Kulkarni __le16 reserved1; 172*14b24e2bSVaishali Kulkarni __le32 reserved2; 173*14b24e2bSVaishali Kulkarni }; 174*14b24e2bSVaishali Kulkarni 175*14b24e2bSVaishali Kulkarni /* 176*14b24e2bSVaishali Kulkarni * FCoE CQ element middle path information 177*14b24e2bSVaishali Kulkarni */ 178*14b24e2bSVaishali Kulkarni struct fcoe_cqe_midpath_info 179*14b24e2bSVaishali Kulkarni { 180*14b24e2bSVaishali Kulkarni __le32 data_placement_size; 181*14b24e2bSVaishali Kulkarni __le16 rx_id; 182*14b24e2bSVaishali Kulkarni __le16 reserved0; 183*14b24e2bSVaishali Kulkarni __le32 reserved1[4]; 184*14b24e2bSVaishali Kulkarni }; 185*14b24e2bSVaishali Kulkarni 186*14b24e2bSVaishali Kulkarni /* 187*14b24e2bSVaishali Kulkarni * FCoE CQ element unsolicited information 188*14b24e2bSVaishali Kulkarni */ 189*14b24e2bSVaishali Kulkarni struct fcoe_unsolic_info 190*14b24e2bSVaishali Kulkarni { 191*14b24e2bSVaishali Kulkarni struct scsi_bd bd_info /* BD information: Physical address and opaque data */; 192*14b24e2bSVaishali Kulkarni __le16 conn_id /* Connection ID the frame is associated to */; 193*14b24e2bSVaishali Kulkarni __le16 pkt_len /* Packet length */; 194*14b24e2bSVaishali Kulkarni u8 reserved1[4]; 195*14b24e2bSVaishali Kulkarni }; 196*14b24e2bSVaishali Kulkarni 197*14b24e2bSVaishali Kulkarni /* 198*14b24e2bSVaishali Kulkarni * FCoE warning reporting entry 199*14b24e2bSVaishali Kulkarni */ 200*14b24e2bSVaishali Kulkarni struct fcoe_warning_report_entry 201*14b24e2bSVaishali Kulkarni { 202*14b24e2bSVaishali Kulkarni struct scsi_bd bd_info /* BD information: Physical address and opaque data */; 203*14b24e2bSVaishali Kulkarni __le32 buf_off /* Buffer offset the beginning of the Sequence last transmitted */; 204*14b24e2bSVaishali Kulkarni __le16 rx_id /* RX_ID of the associated task */; 205*14b24e2bSVaishali Kulkarni __le16 reserved1; 206*14b24e2bSVaishali Kulkarni }; 207*14b24e2bSVaishali Kulkarni 208*14b24e2bSVaishali Kulkarni /* 209*14b24e2bSVaishali Kulkarni * FCoE CQ element information 210*14b24e2bSVaishali Kulkarni */ 211*14b24e2bSVaishali Kulkarni union fcoe_cqe_info 212*14b24e2bSVaishali Kulkarni { 213*14b24e2bSVaishali Kulkarni struct fcoe_cqe_rsp_info rsp_info /* Response completion information */; 214*14b24e2bSVaishali Kulkarni struct fcoe_cqe_target_info target_info /* Target completion information */; 215*14b24e2bSVaishali Kulkarni struct fcoe_err_report_entry err_info /* Error completion information */; 216*14b24e2bSVaishali Kulkarni struct fcoe_abts_info abts_info /* ABTS completion information */; 217*14b24e2bSVaishali Kulkarni struct fcoe_cqe_midpath_info midpath_info /* Middle path completion information */; 218*14b24e2bSVaishali Kulkarni struct fcoe_unsolic_info unsolic_info /* Unsolicited packet completion information */; 219*14b24e2bSVaishali Kulkarni struct fcoe_warning_report_entry warn_info /* Warning completion information (Rec Tov expiration) */; 220*14b24e2bSVaishali Kulkarni }; 221*14b24e2bSVaishali Kulkarni 222*14b24e2bSVaishali Kulkarni /* 223*14b24e2bSVaishali Kulkarni * FCoE CQ element 224*14b24e2bSVaishali Kulkarni */ 225*14b24e2bSVaishali Kulkarni struct fcoe_cqe 226*14b24e2bSVaishali Kulkarni { 227*14b24e2bSVaishali Kulkarni __le32 cqe_data; 228*14b24e2bSVaishali Kulkarni #define FCOE_CQE_TASK_ID_MASK 0xFFFF /* The task identifier (OX_ID) to be completed */ 229*14b24e2bSVaishali Kulkarni #define FCOE_CQE_TASK_ID_SHIFT 0 230*14b24e2bSVaishali Kulkarni #define FCOE_CQE_CQE_TYPE_MASK 0xF /* The CQE type: 0x0 Indicating on a pending work request completion. 0x1 - Indicating on an unsolicited event notification. use enum fcoe_cqe_type (use enum fcoe_cqe_type) */ 231*14b24e2bSVaishali Kulkarni #define FCOE_CQE_CQE_TYPE_SHIFT 16 232*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RESERVED0_MASK 0xFFF 233*14b24e2bSVaishali Kulkarni #define FCOE_CQE_RESERVED0_SHIFT 20 234*14b24e2bSVaishali Kulkarni __le16 reserved1; 235*14b24e2bSVaishali Kulkarni __le16 fw_cq_prod; 236*14b24e2bSVaishali Kulkarni union fcoe_cqe_info cqe_info; 237*14b24e2bSVaishali Kulkarni }; 238*14b24e2bSVaishali Kulkarni 239*14b24e2bSVaishali Kulkarni 240*14b24e2bSVaishali Kulkarni 241*14b24e2bSVaishali Kulkarni 242*14b24e2bSVaishali Kulkarni 243*14b24e2bSVaishali Kulkarni 244*14b24e2bSVaishali Kulkarni /* 245*14b24e2bSVaishali Kulkarni * FCoE CQE type 246*14b24e2bSVaishali Kulkarni */ 247*14b24e2bSVaishali Kulkarni enum fcoe_cqe_type 248*14b24e2bSVaishali Kulkarni { 249*14b24e2bSVaishali Kulkarni FCOE_GOOD_COMPLETION_CQE_TYPE /* solicited response on a R/W or middle-path SQE */, 250*14b24e2bSVaishali Kulkarni FCOE_UNSOLIC_CQE_TYPE /* unsolicited packet, RQ consumed */, 251*14b24e2bSVaishali Kulkarni FCOE_ERROR_DETECTION_CQE_TYPE /* timer expiration, validation error */, 252*14b24e2bSVaishali Kulkarni FCOE_WARNING_CQE_TYPE /* rec_tov or rr_tov timer expiration */, 253*14b24e2bSVaishali Kulkarni FCOE_EXCH_CLEANUP_CQE_TYPE /* task cleanup completed */, 254*14b24e2bSVaishali Kulkarni FCOE_ABTS_CQE_TYPE /* ABTS received and task cleaned */, 255*14b24e2bSVaishali Kulkarni FCOE_DUMMY_CQE_TYPE /* just increment SQ CONS */, 256*14b24e2bSVaishali Kulkarni FCOE_LOCAL_COMP_CQE_TYPE /* Task was completed wight after sending a pkt to the target */, 257*14b24e2bSVaishali Kulkarni MAX_FCOE_CQE_TYPE 258*14b24e2bSVaishali Kulkarni }; 259*14b24e2bSVaishali Kulkarni 260*14b24e2bSVaishali Kulkarni 261*14b24e2bSVaishali Kulkarni /* 262*14b24e2bSVaishali Kulkarni * FCoE device type 263*14b24e2bSVaishali Kulkarni */ 264*14b24e2bSVaishali Kulkarni enum fcoe_device_type 265*14b24e2bSVaishali Kulkarni { 266*14b24e2bSVaishali Kulkarni FCOE_TASK_DEV_TYPE_DISK, 267*14b24e2bSVaishali Kulkarni FCOE_TASK_DEV_TYPE_TAPE, 268*14b24e2bSVaishali Kulkarni MAX_FCOE_DEVICE_TYPE 269*14b24e2bSVaishali Kulkarni }; 270*14b24e2bSVaishali Kulkarni 271*14b24e2bSVaishali Kulkarni 272*14b24e2bSVaishali Kulkarni 273*14b24e2bSVaishali Kulkarni 274*14b24e2bSVaishali Kulkarni /* 275*14b24e2bSVaishali Kulkarni * FCoE fast path error codes 276*14b24e2bSVaishali Kulkarni */ 277*14b24e2bSVaishali Kulkarni enum fcoe_fp_error_warning_code 278*14b24e2bSVaishali Kulkarni { 279*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_OOO_RO /* XFER error codes */, 280*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_RO_NOT_ALIGNED, 281*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_NULL_BURST_LEN, 282*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_RO_GREATER_THAN_DATA2TRNS, 283*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_INVALID_PAYLOAD_SIZE, 284*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_TASK_TYPE_NOT_WRITE, 285*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_PEND_XFER_SET, 286*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_OPENED_SEQ, 287*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_XFER_FCTL, 288*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_BIDI_FLAGS_SET /* FCP RSP error codes */, 289*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_INVALID_LENGTH_FIELD, 290*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_INVALID_SNS_FIELD, 291*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_INVALID_PAYLOAD_SIZE, 292*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_PEND_XFER_SET, 293*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_OPENED_SEQ, 294*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_FCTL, 295*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_LAST_SEQ_RESET, 296*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_FCP_RSP_CONF_REQ_NOT_SUPPORTED_YET, 297*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_OOO_RO /* FCP DATA error codes */, 298*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_EXCEEDS_DEFINED_MAX_FRAME_SIZE, 299*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_EXCEEDS_DATA2TRNS, 300*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_SOFI3_SEQ_ACTIVE_SET, 301*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_SOFN_SEQ_ACTIVE_RESET, 302*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_EOFN_END_SEQ_SET, 303*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_EOFT_END_SEQ_RESET, 304*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_TASK_TYPE_NOT_READ, 305*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_FCTL_INITIATIR, 306*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_INVALID_TYPE /* Middle path error codes */, 307*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_SOFI3_SEQ_ACTIVE_SET, 308*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_SOFN_SEQ_ACTIVE_RESET, 309*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_EOFN_END_SEQ_SET, 310*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_EOFT_END_SEQ_RESET, 311*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_REPLY_FCTL, 312*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_INVALID_REPLY, 313*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_MIDPATH_ELS_REPLY_RCTL, 314*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_MIDDLE_FRAME_WITH_PAD /* Common error codes */, 315*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_SEQ_INIT_IN_TCE, 316*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_FC_HDR_RX_ID_MISMATCH, 317*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_INCORRECT_SEQ_CNT, 318*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_DATA_FC_HDR_FCP_TYPE_MISMATCH, 319*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_DATA_NO_MORE_SGES, 320*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_OPTIONAL_FC_HDR, 321*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_READ_TCE_OX_ID_TOO_BIG, 322*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_DATA_WAS_NOT_TRANSMITTED, 323*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_TASK_DDF_RCTL_INFO_FIELD, 324*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_TASK_INVALID_RCTL, 325*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_COMMON_TASK_RCTL_GENERAL_MISMATCH, 326*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_E_D_TOV_TIMER_EXPIRATION /* Timer error codes */, 327*14b24e2bSVaishali Kulkarni FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION /* Timer error codes */, 328*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_RR_TOV_TIMER_EXPIRATION /* Timer error codes */, 329*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_ABTS_REPLY_UNEXPECTED /* ABTSrsp pckt arrived unexpected */, 330*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_TARGET_MODE_FCP_RSP, 331*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_TARGET_MODE_FCP_XFER, 332*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_TARGET_MODE_DATA_TASK_TYPE_NOT_WRITE, 333*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_DATA_FCTL_TARGET, 334*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_TARGET_DATA_SIZE_NO_MATCH_XFER, 335*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_TARGET_DIF_CRC_CHECKSUM_ERROR, 336*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_TARGET_DIF_REF_TAG_ERROR, 337*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_TARGET_DIF_APP_TAG_ERROR, 338*14b24e2bSVaishali Kulkarni MAX_FCOE_FP_ERROR_WARNING_CODE 339*14b24e2bSVaishali Kulkarni }; 340*14b24e2bSVaishali Kulkarni 341*14b24e2bSVaishali Kulkarni 342*14b24e2bSVaishali Kulkarni /* 343*14b24e2bSVaishali Kulkarni * FCoE RESPQ element 344*14b24e2bSVaishali Kulkarni */ 345*14b24e2bSVaishali Kulkarni struct fcoe_respqe 346*14b24e2bSVaishali Kulkarni { 347*14b24e2bSVaishali Kulkarni __le16 ox_id /* OX_ID that is located in the FCP_RSP FC header */; 348*14b24e2bSVaishali Kulkarni __le16 rx_id /* RX_ID that is located in the FCP_RSP FC header */; 349*14b24e2bSVaishali Kulkarni __le32 additional_info; 350*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_PARAM_MASK 0xFFFFFF /* PARAM that is located in the FCP_RSP FC header */ 351*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_PARAM_SHIFT 0 352*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_TARGET_AUTO_RSP_MASK 0xFF /* Indication whther its Target-auto-rsp mode or not */ 353*14b24e2bSVaishali Kulkarni #define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24 354*14b24e2bSVaishali Kulkarni }; 355*14b24e2bSVaishali Kulkarni 356*14b24e2bSVaishali Kulkarni 357*14b24e2bSVaishali Kulkarni /* 358*14b24e2bSVaishali Kulkarni * FCoE slow path error codes 359*14b24e2bSVaishali Kulkarni */ 360*14b24e2bSVaishali Kulkarni enum fcoe_sp_error_code 361*14b24e2bSVaishali Kulkarni { 362*14b24e2bSVaishali Kulkarni FCOE_ERROR_CODE_SLOW_PATH_TOO_MANY_FUNCS /* Error codes for Error Reporting in slow path flows */, 363*14b24e2bSVaishali Kulkarni FCOE_ERROR_SLOW_PATH_CODE_NO_LICENSE, 364*14b24e2bSVaishali Kulkarni MAX_FCOE_SP_ERROR_CODE 365*14b24e2bSVaishali Kulkarni }; 366*14b24e2bSVaishali Kulkarni 367*14b24e2bSVaishali Kulkarni 368*14b24e2bSVaishali Kulkarni /* 369*14b24e2bSVaishali Kulkarni * FCoE SQE request type 370*14b24e2bSVaishali Kulkarni */ 371*14b24e2bSVaishali Kulkarni enum fcoe_sqe_request_type 372*14b24e2bSVaishali Kulkarni { 373*14b24e2bSVaishali Kulkarni SEND_FCOE_CMD, 374*14b24e2bSVaishali Kulkarni SEND_FCOE_MIDPATH, 375*14b24e2bSVaishali Kulkarni SEND_FCOE_ABTS_REQUEST, 376*14b24e2bSVaishali Kulkarni FCOE_EXCHANGE_CLEANUP, 377*14b24e2bSVaishali Kulkarni FCOE_SEQUENCE_RECOVERY, 378*14b24e2bSVaishali Kulkarni SEND_FCOE_XFER_RDY, 379*14b24e2bSVaishali Kulkarni SEND_FCOE_RSP, 380*14b24e2bSVaishali Kulkarni SEND_FCOE_RSP_WITH_SENSE_DATA, 381*14b24e2bSVaishali Kulkarni SEND_FCOE_TARGET_DATA, 382*14b24e2bSVaishali Kulkarni SEND_FCOE_INITIATOR_DATA, 383*14b24e2bSVaishali Kulkarni SEND_FCOE_XFER_CONTINUATION_RDY /* Xfer Continuation (==1) ready to be sent. Previous XFERs data received successfully. */, 384*14b24e2bSVaishali Kulkarni SEND_FCOE_TARGET_ABTS_RSP, 385*14b24e2bSVaishali Kulkarni MAX_FCOE_SQE_REQUEST_TYPE 386*14b24e2bSVaishali Kulkarni }; 387*14b24e2bSVaishali Kulkarni 388*14b24e2bSVaishali Kulkarni 389*14b24e2bSVaishali Kulkarni /* 390*14b24e2bSVaishali Kulkarni * FCoE task TX state 391*14b24e2bSVaishali Kulkarni */ 392*14b24e2bSVaishali Kulkarni enum fcoe_task_tx_state 393*14b24e2bSVaishali Kulkarni { 394*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_NORMAL /* Initiate state after driver has initialized the task */, 395*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_UNSOLICITED_COMPLETED /* Updated by TX path after complete transmitting unsolicited packet */, 396*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_CLEAN_REQ /* Updated by TX path after start processing the task requesting the cleanup/abort operation */, 397*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_ABTS /* Updated by TX path during abort procedure */, 398*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_EXCLEANUP /* Updated by TX path during exchange cleanup procedure */, 399*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_CONT /* Updated by TX path during exchange cleanup continuation task procedure */, 400*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE /* Updated by TX path during exchange cleanup first xfer procedure */, 401*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_READ_OR_RSP /* Updated by TX path during exchange cleanup read task in Target */, 402*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_LAST_CYCLE /* Updated by TX path during target exchange cleanup procedure */, 403*14b24e2bSVaishali Kulkarni FCOE_TASK_TX_STATE_SEQRECOVERY /* Updated by TX path during sequence recovery procedure */, 404*14b24e2bSVaishali Kulkarni MAX_FCOE_TASK_TX_STATE 405*14b24e2bSVaishali Kulkarni }; 406*14b24e2bSVaishali Kulkarni 407*14b24e2bSVaishali Kulkarni 408*14b24e2bSVaishali Kulkarni /* 409*14b24e2bSVaishali Kulkarni * FCoE task type 410*14b24e2bSVaishali Kulkarni */ 411*14b24e2bSVaishali Kulkarni enum fcoe_task_type 412*14b24e2bSVaishali Kulkarni { 413*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_WRITE_INITIATOR, 414*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_READ_INITIATOR, 415*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_MIDPATH, 416*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_UNSOLICITED, 417*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_ABTS, 418*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_EXCHANGE_CLEANUP, 419*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_SEQUENCE_CLEANUP, 420*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_WRITE_TARGET, 421*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_READ_TARGET, 422*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_RSP, 423*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_RSP_SENSE_DATA, 424*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_ABTS_TARGET, 425*14b24e2bSVaishali Kulkarni FCOE_TASK_TYPE_ENUM_SIZE, 426*14b24e2bSVaishali Kulkarni MAX_FCOE_TASK_TYPE 427*14b24e2bSVaishali Kulkarni }; 428*14b24e2bSVaishali Kulkarni 429*14b24e2bSVaishali Kulkarni 430*14b24e2bSVaishali Kulkarni 431*14b24e2bSVaishali Kulkarni #endif /* __QEDF_HSI__ */ 432