| 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
| 2 | /* QLogic FCoE Offload Driver |
| 3 | * Copyright (c) 2016-2018 Cavium Inc. |
| 4 | */ |
| 5 | #ifndef _SCSI_FW_FUNCS_H |
| 6 | #define _SCSI_FW_FUNCS_H |
| 7 | #include <linux/qed/common_hsi.h> |
| 8 | #include <linux/qed/storage_common.h> |
| 9 | #include <linux/qed/fcoe_common.h> |
| 10 | |
| 11 | struct scsi_sgl_task_params { |
| 12 | struct scsi_sge *sgl; |
| 13 | struct regpair sgl_phys_addr; |
| 14 | u32 total_buffer_size; |
| 15 | u16 num_sges; |
| 16 | |
| 17 | /* true if SGL contains a small (< 4KB) SGE in middle(not 1st or last) |
| 18 | * -> relevant for tx only |
| 19 | */ |
| 20 | bool small_mid_sge; |
| 21 | }; |
| 22 | |
| 23 | struct scsi_dif_task_params { |
| 24 | u32 initial_ref_tag; |
| 25 | bool initial_ref_tag_is_valid; |
| 26 | u16 application_tag; |
| 27 | u16 application_tag_mask; |
| 28 | u16 dif_block_size_log; |
| 29 | bool dif_on_network; |
| 30 | bool dif_on_host; |
| 31 | u8 host_guard_type; |
| 32 | u8 protection_type; |
| 33 | u8 ref_tag_mask; |
| 34 | bool crc_seed; |
| 35 | |
| 36 | /* Enable Connection error upon DIF error (segments with DIF errors are |
| 37 | * dropped) |
| 38 | */ |
| 39 | bool tx_dif_conn_err_en; |
| 40 | bool ignore_app_tag; |
| 41 | bool keep_ref_tag_const; |
| 42 | bool validate_guard; |
| 43 | bool validate_app_tag; |
| 44 | bool validate_ref_tag; |
| 45 | bool forward_guard; |
| 46 | bool forward_app_tag; |
| 47 | bool forward_ref_tag; |
| 48 | bool forward_app_tag_with_mask; |
| 49 | bool forward_ref_tag_with_mask; |
| 50 | }; |
| 51 | |
| 52 | struct scsi_initiator_cmd_params { |
| 53 | /* for cdb_size > default CDB size (extended CDB > 16 bytes) -> |
| 54 | * pointer to the CDB buffer SGE |
| 55 | */ |
| 56 | struct scsi_sge extended_cdb_sge; |
| 57 | |
| 58 | /* Physical address of sense data buffer for sense data - 256B buffer */ |
| 59 | struct regpair sense_data_buffer_phys_addr; |
| 60 | }; |
| 61 | |
| 62 | /** |
| 63 | * @brief scsi_is_slow_sgl - checks for slow SGL |
| 64 | * |
| 65 | * @param num_sges - number of sges in SGL |
| 66 | * @param small_mid_sge - True is the SGL contains an SGE which is smaller than |
| 67 | * 4KB and its not the 1st or last SGE in the SGL |
| 68 | */ |
| 69 | bool scsi_is_slow_sgl(u16 num_sges, bool small_mid_sge); |
| 70 | |
| 71 | /** |
| 72 | * @brief init_scsi_sgl_context - initializes SGL task context |
| 73 | * |
| 74 | * @param sgl_params - SGL context parameters to initialize (output parameter) |
| 75 | * @param data_desc - context struct containing SGEs array to set (output |
| 76 | * parameter) |
| 77 | * @param sgl_task_params - SGL parameters (input) |
| 78 | */ |
| 79 | void init_scsi_sgl_context(struct scsi_sgl_params *sgl_params, |
| 80 | struct scsi_cached_sges *ctx_data_desc, |
| 81 | struct scsi_sgl_task_params *sgl_task_params); |
| 82 | #endif |
| 83 | |