1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* QLogic FCoE Offload Driver 3*4882a593Smuzhiyun * Copyright (c) 2016-2018 Cavium Inc. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun #ifndef _FCOE_FW_FUNCS_H 6*4882a593Smuzhiyun #define _FCOE_FW_FUNCS_H 7*4882a593Smuzhiyun #include "drv_scsi_fw_funcs.h" 8*4882a593Smuzhiyun #include "qedf_hsi.h" 9*4882a593Smuzhiyun #include <linux/qed/qed_if.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct fcoe_task_params { 12*4882a593Smuzhiyun /* Output parameter [set/filled by the HSI function] */ 13*4882a593Smuzhiyun struct e4_fcoe_task_context *context; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* Output parameter [set/filled by the HSI function] */ 16*4882a593Smuzhiyun struct fcoe_wqe *sqe; 17*4882a593Smuzhiyun enum fcoe_task_type task_type; 18*4882a593Smuzhiyun u32 tx_io_size; /* in bytes */ 19*4882a593Smuzhiyun u32 rx_io_size; /* in bytes */ 20*4882a593Smuzhiyun u32 conn_cid; 21*4882a593Smuzhiyun u16 itid; 22*4882a593Smuzhiyun u8 cq_rss_number; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* Whether it's Tape device or not (0=Disk, 1=Tape) */ 25*4882a593Smuzhiyun u8 is_tape_device; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /** 29*4882a593Smuzhiyun * @brief init_initiator_rw_fcoe_task - Initializes FCoE task context for 30*4882a593Smuzhiyun * read/write task types and init fcoe_sqe 31*4882a593Smuzhiyun * 32*4882a593Smuzhiyun * @param task_params - Pointer to task parameters struct 33*4882a593Smuzhiyun * @param sgl_task_params - Pointer to SGL task params 34*4882a593Smuzhiyun * @param sense_data_buffer_phys_addr - Pointer to sense data buffer 35*4882a593Smuzhiyun * @param task_retry_id - retry identification - Used only for Tape device 36*4882a593Smuzhiyun * @param fcp_cmnd_payload - FCP CMD Payload 37*4882a593Smuzhiyun */ 38*4882a593Smuzhiyun int init_initiator_rw_fcoe_task(struct fcoe_task_params *task_params, 39*4882a593Smuzhiyun struct scsi_sgl_task_params *sgl_task_params, 40*4882a593Smuzhiyun struct regpair sense_data_buffer_phys_addr, 41*4882a593Smuzhiyun u32 task_retry_id, 42*4882a593Smuzhiyun u8 fcp_cmd_payload[32]); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /** 45*4882a593Smuzhiyun * @brief init_initiator_midpath_fcoe_task - Initializes FCoE task context for 46*4882a593Smuzhiyun * midpath/unsolicited task types and init fcoe_sqe 47*4882a593Smuzhiyun * 48*4882a593Smuzhiyun * @param task_params - Pointer to task parameters struct 49*4882a593Smuzhiyun * @param mid_path_fc_header - FC header 50*4882a593Smuzhiyun * @param tx_sgl_task_params - Pointer to Tx SGL task params 51*4882a593Smuzhiyun * @param rx_sgl_task_params - Pointer to Rx SGL task params 52*4882a593Smuzhiyun * @param fw_to_place_fc_header - Indication if the FW will place the FC header 53*4882a593Smuzhiyun * in addition to the data arrives. 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun int init_initiator_midpath_unsolicited_fcoe_task( 56*4882a593Smuzhiyun struct fcoe_task_params *task_params, 57*4882a593Smuzhiyun struct fcoe_tx_mid_path_params *mid_path_fc_header, 58*4882a593Smuzhiyun struct scsi_sgl_task_params *tx_sgl_task_params, 59*4882a593Smuzhiyun struct scsi_sgl_task_params *rx_sgl_task_params, 60*4882a593Smuzhiyun u8 fw_to_place_fc_header); 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /** 63*4882a593Smuzhiyun * @brief init_initiator_abort_fcoe_task - Initializes FCoE task context for 64*4882a593Smuzhiyun * abort task types and init fcoe_sqe 65*4882a593Smuzhiyun * 66*4882a593Smuzhiyun * @param task_params - Pointer to task parameters struct 67*4882a593Smuzhiyun */ 68*4882a593Smuzhiyun int init_initiator_abort_fcoe_task(struct fcoe_task_params *task_params); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun /** 71*4882a593Smuzhiyun * @brief init_initiator_cleanup_fcoe_task - Initializes FCoE task context for 72*4882a593Smuzhiyun * cleanup task types and init fcoe_sqe 73*4882a593Smuzhiyun * 74*4882a593Smuzhiyun * 75*4882a593Smuzhiyun * @param task_params - Pointer to task parameters struct 76*4882a593Smuzhiyun */ 77*4882a593Smuzhiyun int init_initiator_cleanup_fcoe_task(struct fcoe_task_params *task_params); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /** 80*4882a593Smuzhiyun * @brief init_initiator_cleanup_fcoe_task - Initializes FCoE task context for 81*4882a593Smuzhiyun * sequence recovery task types and init fcoe_sqe 82*4882a593Smuzhiyun * 83*4882a593Smuzhiyun * 84*4882a593Smuzhiyun * @param task_params - Pointer to task parameters struct 85*4882a593Smuzhiyun * @param desired_offset - The desired offest the task will be re-sent from 86*4882a593Smuzhiyun */ 87*4882a593Smuzhiyun int init_initiator_sequence_recovery_fcoe_task( 88*4882a593Smuzhiyun struct fcoe_task_params *task_params, 89*4882a593Smuzhiyun u32 desired_offset); 90*4882a593Smuzhiyun #endif 91