1 | /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ |
2 | /* QLogic qed NIC Driver |
3 | * Copyright (c) 2015-2017 QLogic Corporation |
4 | * Copyright (c) 2019-2020 Marvell International Ltd. |
5 | */ |
6 | |
7 | #ifndef __STORAGE_COMMON__ |
8 | #define __STORAGE_COMMON__ |
9 | |
10 | /*********************/ |
11 | /* SCSI CONSTANTS */ |
12 | /*********************/ |
13 | |
14 | #define SCSI_MAX_NUM_OF_CMDQS (NUM_OF_GLOBAL_QUEUES / 2) |
15 | #define BDQ_NUM_RESOURCES (4) |
16 | |
17 | #define BDQ_ID_RQ (0) |
18 | #define BDQ_ID_IMM_DATA (1) |
19 | #define BDQ_ID_TQ (2) |
20 | #define BDQ_NUM_IDS (3) |
21 | |
22 | #define SCSI_NUM_SGES_SLOW_SGL_THR 8 |
23 | |
24 | #define BDQ_MAX_EXTERNAL_RING_SIZE BIT(15) |
25 | |
26 | /* SCSI op codes */ |
27 | #define SCSI_OPCODE_COMPARE_AND_WRITE (0x89) |
28 | #define SCSI_OPCODE_READ_10 (0x28) |
29 | #define SCSI_OPCODE_WRITE_6 (0x0A) |
30 | #define SCSI_OPCODE_WRITE_10 (0x2A) |
31 | #define SCSI_OPCODE_WRITE_12 (0xAA) |
32 | #define SCSI_OPCODE_WRITE_16 (0x8A) |
33 | #define SCSI_OPCODE_WRITE_AND_VERIFY_10 (0x2E) |
34 | #define SCSI_OPCODE_WRITE_AND_VERIFY_12 (0xAE) |
35 | #define SCSI_OPCODE_WRITE_AND_VERIFY_16 (0x8E) |
36 | |
37 | /* iSCSI Drv opaque */ |
38 | struct iscsi_drv_opaque { |
39 | __le16 reserved_zero[3]; |
40 | __le16 opaque; |
41 | }; |
42 | |
43 | /* Scsi 2B/8B opaque union */ |
44 | union scsi_opaque { |
45 | struct regpair fcoe_opaque; |
46 | struct iscsi_drv_opaque iscsi_opaque; |
47 | }; |
48 | |
49 | /* SCSI buffer descriptor */ |
50 | struct scsi_bd { |
51 | struct regpair address; |
52 | union scsi_opaque opaque; |
53 | }; |
54 | |
55 | /* Scsi Drv BDQ struct */ |
56 | struct scsi_bdq_ram_drv_data { |
57 | __le16 external_producer; |
58 | __le16 reserved0[3]; |
59 | }; |
60 | |
61 | /* SCSI SGE entry */ |
62 | struct scsi_sge { |
63 | struct regpair sge_addr; |
64 | __le32 sge_len; |
65 | __le32 reserved; |
66 | }; |
67 | |
68 | /* Cached SGEs section */ |
69 | struct scsi_cached_sges { |
70 | struct scsi_sge sge[4]; |
71 | }; |
72 | |
73 | /* Scsi Drv CMDQ struct */ |
74 | struct scsi_drv_cmdq { |
75 | __le16 cmdq_cons; |
76 | __le16 reserved0; |
77 | __le32 reserved1; |
78 | }; |
79 | |
80 | /* Common SCSI init params passed by driver to FW in function init ramrod */ |
81 | struct scsi_init_func_params { |
82 | __le16 num_tasks; |
83 | u8 log_page_size; |
84 | u8 log_page_size_conn; |
85 | u8 debug_mode; |
86 | u8 reserved2[11]; |
87 | }; |
88 | |
89 | /* SCSI RQ/CQ/CMDQ firmware function init parameters */ |
90 | struct scsi_init_func_queues { |
91 | struct regpair glbl_q_params_addr; |
92 | __le16 rq_buffer_size; |
93 | __le16 cq_num_entries; |
94 | __le16 cmdq_num_entries; |
95 | u8 bdq_resource_id; |
96 | u8 q_validity; |
97 | #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_MASK 0x1 |
98 | #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_SHIFT 0 |
99 | #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_MASK 0x1 |
100 | #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_SHIFT 1 |
101 | #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_MASK 0x1 |
102 | #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_SHIFT 2 |
103 | #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_MASK 0x1 |
104 | #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_SHIFT 3 |
105 | #define SCSI_INIT_FUNC_QUEUES_SOC_EN_MASK 0x1 |
106 | #define SCSI_INIT_FUNC_QUEUES_SOC_EN_SHIFT 4 |
107 | #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_MASK 0x7 |
108 | #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_SHIFT 5 |
109 | __le16 cq_cmdq_sb_num_arr[SCSI_MAX_NUM_OF_CMDQS]; |
110 | u8 num_queues; |
111 | u8 queue_relative_offset; |
112 | u8 cq_sb_pi; |
113 | u8 cmdq_sb_pi; |
114 | u8 bdq_pbl_num_entries[BDQ_NUM_IDS]; |
115 | u8 reserved1; |
116 | struct regpair bdq_pbl_base_address[BDQ_NUM_IDS]; |
117 | __le16 bdq_xoff_threshold[BDQ_NUM_IDS]; |
118 | __le16 cmdq_xoff_threshold; |
119 | __le16 bdq_xon_threshold[BDQ_NUM_IDS]; |
120 | __le16 cmdq_xon_threshold; |
121 | }; |
122 | |
123 | /* Scsi Drv BDQ Data struct (2 BDQ IDs: 0 - RQ, 1 - Immediate Data) */ |
124 | struct scsi_ram_per_bdq_resource_drv_data { |
125 | struct scsi_bdq_ram_drv_data drv_data_per_bdq_id[BDQ_NUM_IDS]; |
126 | }; |
127 | |
128 | /* SCSI SGL types */ |
129 | enum scsi_sgl_mode { |
130 | SCSI_TX_SLOW_SGL, |
131 | SCSI_FAST_SGL, |
132 | MAX_SCSI_SGL_MODE |
133 | }; |
134 | |
135 | /* SCSI SGL parameters */ |
136 | struct scsi_sgl_params { |
137 | struct regpair sgl_addr; |
138 | __le32 sgl_total_length; |
139 | __le32 sge_offset; |
140 | __le16 sgl_num_sges; |
141 | u8 sgl_index; |
142 | u8 reserved; |
143 | }; |
144 | |
145 | /* SCSI terminate connection params */ |
146 | struct { |
147 | __le16 ; |
148 | __le16 ; |
149 | u8 [4]; |
150 | }; |
151 | |
152 | /* SCSI Task Queue Element */ |
153 | struct scsi_tqe { |
154 | __le16 itid; |
155 | }; |
156 | |
157 | #endif /* __STORAGE_COMMON__ */ |
158 | |