brintos

brintos / linux-shallow public Read only

0
0
Text · 10.4 KiB · ecd5cb5 Raw
352 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 *  QLogic FCoE Offload Driver4 *  Copyright (c) 2016-2018 Cavium Inc.5 */6#ifndef __QEDF_HSI__7#define __QEDF_HSI__8/*9 * Add include to common target10 */11#include <linux/qed/common_hsi.h>12 13/*14 * Add include to common storage target15 */16#include <linux/qed/storage_common.h>17 18/*19 * Add include to common fcoe target for both eCore and protocol driver20 */21#include <linux/qed/fcoe_common.h>22 23 24/*25 * FCoE CQ element ABTS information26 */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 type38 */39enum fcoe_class_type {40	FCOE_TASK_CLASS_TYPE_3,41	FCOE_TASK_CLASS_TYPE_2,42	MAX_FCOE_CLASS_TYPE43};44 45 46/*47 * FCoE CMDQ element control information48 */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  0x155#define FCOE_CMDQE_CONTROL_ABTSREQCMD_SHIFT 056#define FCOE_CMDQE_CONTROL_RESERVED1_MASK   0x7F57#define FCOE_CMDQE_CONTROL_RESERVED1_SHIFT  158	u8 reserved2[4];59};60 61/*62 * FCoE control + payload CMDQ element63 */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 flags74 */75struct fcoe_fcp_rsp_flags {76	u8 flags;77#define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_MASK  0x178#define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 079#define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_MASK  0x180#define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 181#define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_MASK     0x182#define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT    283#define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_MASK    0x184#define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT   385#define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_MASK       0x186#define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT      487#define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_MASK     0x788#define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT    589};90 91/*92 * FCoE CQ element response information93 */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 0105#define FCOE_CQE_RSP_INFO_RESREVED_MASK     0x7F106#define FCOE_CQE_RSP_INFO_RESREVED_SHIFT    1107	u8 reserved;108	__le32 fw_residual /* Residual bytes calculated by FW */;109};110 111/*112 * FCoE CQ element Target completion information113 */114struct fcoe_cqe_target_info {115	__le16 rx_id;116	__le16 reserved0;117	__le32 reserved1[5];118};119 120/*121 * FCoE error/warning reporting entry122 */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 information137 */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 information147 */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 entry158 */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 information170 */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 element188 */189struct fcoe_cqe {190	__le32 cqe_data;191	/* The task identifier (OX_ID) to be completed */192#define FCOE_CQE_TASK_ID_MASK    0xFFFF193#define FCOE_CQE_TASK_ID_SHIFT   0194	/*195	 * The CQE type: 0x0 Indicating on a pending work request completion.196	 * 0x1 - Indicating on an unsolicited event notification. use enum197	 * fcoe_cqe_type  (use enum fcoe_cqe_type)198	 */199#define FCOE_CQE_CQE_TYPE_MASK   0xF200#define FCOE_CQE_CQE_TYPE_SHIFT  16201#define FCOE_CQE_RESERVED0_MASK  0xFFF202#define FCOE_CQE_RESERVED0_SHIFT 20203	__le16 reserved1;204	__le16 fw_cq_prod;205	union fcoe_cqe_info cqe_info;206};207 208/*209 * FCoE CQE type210 */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_TYPE223};224 225/*226 * FCoE fast path error codes227 */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_CODE290};291 292 293/*294 * FCoE RESPQ element295 */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            0xFFFFFF302#define FCOE_RESPQE_PARAM_SHIFT           0303/* Indication whther its Target-auto-rsp mode or not */304#define FCOE_RESPQE_TARGET_AUTO_RSP_MASK  0xFF305#define FCOE_RESPQE_TARGET_AUTO_RSP_SHIFT 24306};307 308 309/*310 * FCoE slow path error codes311 */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_CODE317};318 319/*320 * FCoE task TX state321 */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 the329	 * cleanup/abort operation330	 */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 task337	 * procedure338	 */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_STATE349};350 351#endif /* __QEDF_HSI__ */352