2019-06-01 10:08:54 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2017-02-15 06:28:23 -08:00
/*
* QLogic FCoE Offload Driver
2018-04-25 06:09:04 -07:00
* Copyright ( c ) 2016 - 2018 Cavium Inc .
2017-02-15 06:28:23 -08:00
*/
# ifndef __QEDF_HSI__
# define __QEDF_HSI__
/*
* Add include to common target
*/
# include <linux/qed/common_hsi.h>
/*
* Add include to common storage target
*/
# include <linux/qed/storage_common.h>
/*
* Add include to common fcoe target for both eCore and protocol driver
*/
# include <linux/qed/fcoe_common.h>
/*
* FCoE CQ element ABTS information
*/
struct fcoe_abts_info {
u8 r_ctl /* R_CTL in the ABTS response frame */ ;
u8 reserved0 ;
__le16 rx_id ;
__le32 reserved2 [ 2 ] ;
__le32 fc_payload [ 3 ] /* ABTS FC payload response frame */ ;
} ;
/*
* FCoE class type
*/
enum fcoe_class_type {
FCOE_TASK_CLASS_TYPE_3 ,
FCOE_TASK_CLASS_TYPE_2 ,
MAX_FCOE_CLASS_TYPE
} ;
/*
* FCoE CMDQ element control information
*/
struct fcoe_cmdqe_control {
__le16 conn_id ;
u8 num_additional_cmdqes ;
u8 cmdType ;
/* true for ABTS request cmdqe. used in Target mode */
# define FCOE_CMDQE_CONTROL_ABTSREQCMD_MASK 0x1
# define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 0
# define FCOE_CMDQE_CONTROL_RESERVED1_MASK 0x7F
# define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT 1
u8 reserved2 [ 4 ] ;
} ;
/*
* FCoE control + payload CMDQ element
*/
struct fcoe_cmdqe {
struct fcoe_cmdqe_control hdr ;
u8 fc_header [ 24 ] ;
__le32 fcp_cmd_payload [ 8 ] ;
} ;
/*
* FCP RSP flags
*/
struct fcoe_fcp_rsp_flags {
u8 flags ;
# define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK 0x1
# define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
# define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK 0x1
# define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
# define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK 0x1
# define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2
# define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK 0x1
# define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3
# define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK 0x1
# define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4
# define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK 0x7
# define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5
} ;
/*
* FCoE CQ element response information
*/
struct fcoe_cqe_rsp_info {
struct fcoe_fcp_rsp_flags rsp_flags ;
u8 scsi_status_code ;
__le16 retry_delay_timer ;
__le32 fcp_resid ;
__le32 fcp_sns_len ;
__le32 fcp_rsp_len ;
__le16 rx_id ;
u8 fw_error_flags ;
# define FCOE_CQE_RSP_INFO_FW_UNDERRUN_MASK 0x1 /* FW detected underrun */
# define FCOE_CQE_RSP_INFO_FW_UNDERRUN_SHIFT 0
# define FCOE_CQE_RSP_INFO_RESREVED_MASK 0x7F
# define FCOE_CQE_RSP_INFO_RESREVED_SHIFT 1
u8 reserved ;
__le32 fw_residual /* Residual bytes calculated by FW */ ;
} ;
/*
* FCoE CQ element Target completion information
*/
struct fcoe_cqe_target_info {
__le16 rx_id ;
__le16 reserved0 ;
__le32 reserved1 [ 5 ] ;
} ;
/*
* FCoE error / warning reporting entry
*/
struct fcoe_err_report_entry {
__le32 err_warn_bitmap_lo /* Error bitmap lower 32 bits */ ;
__le32 err_warn_bitmap_hi /* Error bitmap higher 32 bits */ ;
/* Buffer offset the beginning of the Sequence last transmitted */
__le32 tx_buf_off ;
/* Buffer offset from the beginning of the Sequence last received */
__le32 rx_buf_off ;
__le16 rx_id /* RX_ID of the associated task */ ;
__le16 reserved1 ;
__le32 reserved2 ;
} ;
/*
* FCoE CQ element middle path information
*/
struct fcoe_cqe_midpath_info {
__le32 data_placement_size ;
__le16 rx_id ;
__le16 reserved0 ;
__le32 reserved1 [ 4 ] ;
} ;
/*
* FCoE CQ element unsolicited information
*/
struct fcoe_unsolic_info {
/* BD information: Physical address and opaque data */
struct scsi_bd bd_info ;
__le16 conn_id /* Connection ID the frame is associated to */ ;
__le16 pkt_len /* Packet length */ ;
u8 reserved1 [ 4 ] ;
} ;
/*
* FCoE warning reporting entry
*/
struct fcoe_warning_report_entry {
/* BD information: Physical address and opaque data */
struct scsi_bd bd_info ;
/* Buffer offset the beginning of the Sequence last transmitted */
__le32 buf_off ;
__le16 rx_id /* RX_ID of the associated task */ ;
__le16 reserved1 ;
} ;
/*
* FCoE CQ element information
*/
union fcoe_cqe_info {
struct fcoe_cqe_rsp_info rsp_info /* Response completion information */ ;
/* Target completion information */
struct fcoe_cqe_target_info target_info ;
/* Error completion information */
struct fcoe_err_report_entry err_info ;
struct fcoe_abts_info abts_info /* ABTS completion information */ ;
/* Middle path completion information */
struct fcoe_cqe_midpath_info midpath_info ;
/* Unsolicited packet completion information */
struct fcoe_unsolic_info unsolic_info ;
/* Warning completion information (Rec Tov expiration) */
struct fcoe_warning_report_entry warn_info ;
} ;
/*
* FCoE CQ element
*/
struct fcoe_cqe {
__le32 cqe_data ;
/* The task identifier (OX_ID) to be completed */
# define FCOE_CQE_TASK_ID_MASK 0xFFFF
# define FCOE_CQE_TASK_ID_SHIFT 0
/*
* 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 )
*/
# define FCOE_CQE_CQE_TYPE_MASK 0xF
# define FCOE_CQE_CQE_TYPE_SHIFT 16
# define FCOE_CQE_RESERVED0_MASK 0xFFF
# define FCOE_CQE_RESERVED0_SHIFT 20
__le16 reserved1 ;
__le16 fw_cq_prod ;
union fcoe_cqe_info cqe_info ;
} ;
/*
* FCoE CQE type
*/
enum fcoe_cqe_type {
/* solicited response on a R/W or middle-path SQE */
FCOE_GOOD_COMPLETION_CQE_TYPE ,
FCOE_UNSOLIC_CQE_TYPE /* unsolicited packet, RQ consumed */ ,
FCOE_ERROR_DETECTION_CQE_TYPE /* timer expiration, validation error */ ,
FCOE_WARNING_CQE_TYPE /* rec_tov or rr_tov timer expiration */ ,
FCOE_EXCH_CLEANUP_CQE_TYPE /* task cleanup completed */ ,
FCOE_ABTS_CQE_TYPE /* ABTS received and task cleaned */ ,
FCOE_DUMMY_CQE_TYPE /* just increment SQ CONS */ ,
/* Task was completed wight after sending a pkt to the target */
FCOE_LOCAL_COMP_CQE_TYPE ,
MAX_FCOE_CQE_TYPE
} ;
/*
* FCoE fast path error codes
*/
enum fcoe_fp_error_warning_code {
FCOE_ERROR_CODE_XFER_OOO_RO /* XFER error codes */ ,
FCOE_ERROR_CODE_XFER_RO_NOT_ALIGNED ,
FCOE_ERROR_CODE_XFER_NULL_BURST_LEN ,
FCOE_ERROR_CODE_XFER_RO_GREATER_THAN_DATA2TRNS ,
FCOE_ERROR_CODE_XFER_INVALID_PAYLOAD_SIZE ,
FCOE_ERROR_CODE_XFER_TASK_TYPE_NOT_WRITE ,
FCOE_ERROR_CODE_XFER_PEND_XFER_SET ,
FCOE_ERROR_CODE_XFER_OPENED_SEQ ,
FCOE_ERROR_CODE_XFER_FCTL ,
FCOE_ERROR_CODE_FCP_RSP_BIDI_FLAGS_SET /* FCP RSP error codes */ ,
FCOE_ERROR_CODE_FCP_RSP_INVALID_LENGTH_FIELD ,
FCOE_ERROR_CODE_FCP_RSP_INVALID_SNS_FIELD ,
FCOE_ERROR_CODE_FCP_RSP_INVALID_PAYLOAD_SIZE ,
FCOE_ERROR_CODE_FCP_RSP_PEND_XFER_SET ,
FCOE_ERROR_CODE_FCP_RSP_OPENED_SEQ ,
FCOE_ERROR_CODE_FCP_RSP_FCTL ,
FCOE_ERROR_CODE_FCP_RSP_LAST_SEQ_RESET ,
FCOE_ERROR_CODE_FCP_RSP_CONF_REQ_NOT_SUPPORTED_YET ,
FCOE_ERROR_CODE_DATA_OOO_RO /* FCP DATA error codes */ ,
FCOE_ERROR_CODE_DATA_EXCEEDS_DEFINED_MAX_FRAME_SIZE ,
FCOE_ERROR_CODE_DATA_EXCEEDS_DATA2TRNS ,
FCOE_ERROR_CODE_DATA_SOFI3_SEQ_ACTIVE_SET ,
FCOE_ERROR_CODE_DATA_SOFN_SEQ_ACTIVE_RESET ,
FCOE_ERROR_CODE_DATA_EOFN_END_SEQ_SET ,
FCOE_ERROR_CODE_DATA_EOFT_END_SEQ_RESET ,
FCOE_ERROR_CODE_DATA_TASK_TYPE_NOT_READ ,
FCOE_ERROR_CODE_DATA_FCTL_INITIATIR ,
FCOE_ERROR_CODE_MIDPATH_INVALID_TYPE /* Middle path error codes */ ,
FCOE_ERROR_CODE_MIDPATH_SOFI3_SEQ_ACTIVE_SET ,
FCOE_ERROR_CODE_MIDPATH_SOFN_SEQ_ACTIVE_RESET ,
FCOE_ERROR_CODE_MIDPATH_EOFN_END_SEQ_SET ,
FCOE_ERROR_CODE_MIDPATH_EOFT_END_SEQ_RESET ,
FCOE_ERROR_CODE_MIDPATH_REPLY_FCTL ,
FCOE_ERROR_CODE_MIDPATH_INVALID_REPLY ,
FCOE_ERROR_CODE_MIDPATH_ELS_REPLY_RCTL ,
FCOE_ERROR_CODE_COMMON_MIDDLE_FRAME_WITH_PAD /* Common error codes */ ,
FCOE_ERROR_CODE_COMMON_SEQ_INIT_IN_TCE ,
FCOE_ERROR_CODE_COMMON_FC_HDR_RX_ID_MISMATCH ,
FCOE_ERROR_CODE_COMMON_INCORRECT_SEQ_CNT ,
FCOE_ERROR_CODE_COMMON_DATA_FC_HDR_FCP_TYPE_MISMATCH ,
FCOE_ERROR_CODE_COMMON_DATA_NO_MORE_SGES ,
FCOE_ERROR_CODE_COMMON_OPTIONAL_FC_HDR ,
FCOE_ERROR_CODE_COMMON_READ_TCE_OX_ID_TOO_BIG ,
FCOE_ERROR_CODE_COMMON_DATA_WAS_NOT_TRANSMITTED ,
FCOE_ERROR_CODE_COMMON_TASK_DDF_RCTL_INFO_FIELD ,
FCOE_ERROR_CODE_COMMON_TASK_INVALID_RCTL ,
FCOE_ERROR_CODE_COMMON_TASK_RCTL_GENERAL_MISMATCH ,
FCOE_ERROR_CODE_E_D_TOV_TIMER_EXPIRATION /* Timer error codes */ ,
FCOE_WARNING_CODE_REC_TOV_TIMER_EXPIRATION /* Timer error codes */ ,
FCOE_ERROR_CODE_RR_TOV_TIMER_EXPIRATION /* Timer error codes */ ,
/* ABTSrsp pckt arrived unexpected */
FCOE_ERROR_CODE_ABTS_REPLY_UNEXPECTED ,
FCOE_ERROR_CODE_TARGET_MODE_FCP_RSP ,
FCOE_ERROR_CODE_TARGET_MODE_FCP_XFER ,
FCOE_ERROR_CODE_TARGET_MODE_DATA_TASK_TYPE_NOT_WRITE ,
FCOE_ERROR_CODE_DATA_FCTL_TARGET ,
FCOE_ERROR_CODE_TARGET_DATA_SIZE_NO_MATCH_XFER ,
FCOE_ERROR_CODE_TARGET_DIF_CRC_CHECKSUM_ERROR ,
FCOE_ERROR_CODE_TARGET_DIF_REF_TAG_ERROR ,
FCOE_ERROR_CODE_TARGET_DIF_APP_TAG_ERROR ,
MAX_FCOE_FP_ERROR_WARNING_CODE
} ;
/*
* FCoE RESPQ element
*/
struct fcoe_respqe {
__le16 ox_id /* OX_ID that is located in the FCP_RSP FC header */ ;
__le16 rx_id /* RX_ID that is located in the FCP_RSP FC header */ ;
__le32 additional_info ;
/* PARAM that is located in the FCP_RSP FC header */
# define FCOE_RESPQE_PARAM_MASK 0xFFFFFF
# define FCOE_RESPQE_PARAM_SHIFT 0
/* Indication whther its Target-auto-rsp mode or not */
# define FCOE_RESPQE_TARGET_AUTO_RSP_MASK 0xFF
# define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24
} ;
/*
* FCoE slow path error codes
*/
enum fcoe_sp_error_code {
/* Error codes for Error Reporting in slow path flows */
FCOE_ERROR_CODE_SLOW_PATH_TOO_MANY_FUNCS ,
FCOE_ERROR_SLOW_PATH_CODE_NO_LICENSE ,
MAX_FCOE_SP_ERROR_CODE
} ;
/*
* FCoE task TX state
*/
enum fcoe_task_tx_state {
/* Initiate state after driver has initialized the task */
FCOE_TASK_TX_STATE_NORMAL ,
/* Updated by TX path after complete transmitting unsolicited packet */
FCOE_TASK_TX_STATE_UNSOLICITED_COMPLETED ,
/*
* Updated by TX path after start processing the task requesting the
* cleanup / abort operation
*/
FCOE_TASK_TX_STATE_CLEAN_REQ ,
FCOE_TASK_TX_STATE_ABTS /* Updated by TX path during abort procedure */ ,
/* Updated by TX path during exchange cleanup procedure */
FCOE_TASK_TX_STATE_EXCLEANUP ,
/*
* Updated by TX path during exchange cleanup continuation task
* procedure
*/
FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_CONT ,
/* Updated by TX path during exchange cleanup first xfer procedure */
FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE ,
/* Updated by TX path during exchange cleanup read task in Target */
FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_READ_OR_RSP ,
/* Updated by TX path during target exchange cleanup procedure */
FCOE_TASK_TX_STATE_EXCLEANUP_TARGET_WRITE_LAST_CYCLE ,
/* Updated by TX path during sequence recovery procedure */
FCOE_TASK_TX_STATE_SEQRECOVERY ,
MAX_FCOE_TASK_TX_STATE
} ;
# endif /* __QEDF_HSI__ */