18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* QLogic FCoE Offload Driver 38c2ecf20Sopenharmony_ci * Copyright (c) 2016-2018 Cavium Inc. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci#ifndef _SCSI_FW_FUNCS_H 68c2ecf20Sopenharmony_ci#define _SCSI_FW_FUNCS_H 78c2ecf20Sopenharmony_ci#include <linux/qed/common_hsi.h> 88c2ecf20Sopenharmony_ci#include <linux/qed/storage_common.h> 98c2ecf20Sopenharmony_ci#include <linux/qed/fcoe_common.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistruct scsi_sgl_task_params { 128c2ecf20Sopenharmony_ci struct scsi_sge *sgl; 138c2ecf20Sopenharmony_ci struct regpair sgl_phys_addr; 148c2ecf20Sopenharmony_ci u32 total_buffer_size; 158c2ecf20Sopenharmony_ci u16 num_sges; 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci /* true if SGL contains a small (< 4KB) SGE in middle(not 1st or last) 188c2ecf20Sopenharmony_ci * -> relevant for tx only 198c2ecf20Sopenharmony_ci */ 208c2ecf20Sopenharmony_ci bool small_mid_sge; 218c2ecf20Sopenharmony_ci}; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_cistruct scsi_dif_task_params { 248c2ecf20Sopenharmony_ci u32 initial_ref_tag; 258c2ecf20Sopenharmony_ci bool initial_ref_tag_is_valid; 268c2ecf20Sopenharmony_ci u16 application_tag; 278c2ecf20Sopenharmony_ci u16 application_tag_mask; 288c2ecf20Sopenharmony_ci u16 dif_block_size_log; 298c2ecf20Sopenharmony_ci bool dif_on_network; 308c2ecf20Sopenharmony_ci bool dif_on_host; 318c2ecf20Sopenharmony_ci u8 host_guard_type; 328c2ecf20Sopenharmony_ci u8 protection_type; 338c2ecf20Sopenharmony_ci u8 ref_tag_mask; 348c2ecf20Sopenharmony_ci bool crc_seed; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci /* Enable Connection error upon DIF error (segments with DIF errors are 378c2ecf20Sopenharmony_ci * dropped) 388c2ecf20Sopenharmony_ci */ 398c2ecf20Sopenharmony_ci bool tx_dif_conn_err_en; 408c2ecf20Sopenharmony_ci bool ignore_app_tag; 418c2ecf20Sopenharmony_ci bool keep_ref_tag_const; 428c2ecf20Sopenharmony_ci bool validate_guard; 438c2ecf20Sopenharmony_ci bool validate_app_tag; 448c2ecf20Sopenharmony_ci bool validate_ref_tag; 458c2ecf20Sopenharmony_ci bool forward_guard; 468c2ecf20Sopenharmony_ci bool forward_app_tag; 478c2ecf20Sopenharmony_ci bool forward_ref_tag; 488c2ecf20Sopenharmony_ci bool forward_app_tag_with_mask; 498c2ecf20Sopenharmony_ci bool forward_ref_tag_with_mask; 508c2ecf20Sopenharmony_ci}; 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cistruct scsi_initiator_cmd_params { 538c2ecf20Sopenharmony_ci /* for cdb_size > default CDB size (extended CDB > 16 bytes) -> 548c2ecf20Sopenharmony_ci * pointer to the CDB buffer SGE 558c2ecf20Sopenharmony_ci */ 568c2ecf20Sopenharmony_ci struct scsi_sge extended_cdb_sge; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci /* Physical address of sense data buffer for sense data - 256B buffer */ 598c2ecf20Sopenharmony_ci struct regpair sense_data_buffer_phys_addr; 608c2ecf20Sopenharmony_ci}; 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci/** 638c2ecf20Sopenharmony_ci * @brief scsi_is_slow_sgl - checks for slow SGL 648c2ecf20Sopenharmony_ci * 658c2ecf20Sopenharmony_ci * @param num_sges - number of sges in SGL 668c2ecf20Sopenharmony_ci * @param small_mid_sge - True is the SGL contains an SGE which is smaller than 678c2ecf20Sopenharmony_ci * 4KB and its not the 1st or last SGE in the SGL 688c2ecf20Sopenharmony_ci */ 698c2ecf20Sopenharmony_cibool scsi_is_slow_sgl(u16 num_sges, bool small_mid_sge); 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci/** 728c2ecf20Sopenharmony_ci * @brief init_scsi_sgl_context - initializes SGL task context 738c2ecf20Sopenharmony_ci * 748c2ecf20Sopenharmony_ci * @param sgl_params - SGL context parameters to initialize (output parameter) 758c2ecf20Sopenharmony_ci * @param data_desc - context struct containing SGEs array to set (output 768c2ecf20Sopenharmony_ci * parameter) 778c2ecf20Sopenharmony_ci * @param sgl_task_params - SGL parameters (input) 788c2ecf20Sopenharmony_ci */ 798c2ecf20Sopenharmony_civoid init_scsi_sgl_context(struct scsi_sgl_params *sgl_params, 808c2ecf20Sopenharmony_ci struct scsi_cached_sges *ctx_data_desc, 818c2ecf20Sopenharmony_ci struct scsi_sgl_task_params *sgl_task_params); 828c2ecf20Sopenharmony_ci#endif 83