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 | |