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