xref: /dpdk/drivers/net/qede/base/ecore_hsi_common.h (revision 2352f348c997a34549c71c99029fb3d214aad39a)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2016 - 2018 Cavium Inc.
3  * All rights reserved.
4  * www.cavium.com
5  */
6 
7 #ifndef __ECORE_HSI_COMMON__
8 #define __ECORE_HSI_COMMON__
9 /********************************/
10 /* Add include to common target */
11 /********************************/
12 #include "common_hsi.h"
13 #include "mcp_public.h"
14 
15 
16 /*
17  * opcodes for the event ring
18  */
19 enum common_event_opcode {
20 	COMMON_EVENT_PF_START,
21 	COMMON_EVENT_PF_STOP,
22 	COMMON_EVENT_VF_START,
23 	COMMON_EVENT_VF_STOP,
24 	COMMON_EVENT_VF_PF_CHANNEL,
25 	COMMON_EVENT_VF_FLR,
26 	COMMON_EVENT_PF_UPDATE,
27 	COMMON_EVENT_MALICIOUS_VF,
28 	COMMON_EVENT_RL_UPDATE,
29 	COMMON_EVENT_EMPTY,
30 	MAX_COMMON_EVENT_OPCODE
31 };
32 
33 
34 /*
35  * Common Ramrod Command IDs
36  */
37 enum common_ramrod_cmd_id {
38 	COMMON_RAMROD_UNUSED,
39 	COMMON_RAMROD_PF_START /* PF Function Start Ramrod */,
40 	COMMON_RAMROD_PF_STOP /* PF Function Stop Ramrod */,
41 	COMMON_RAMROD_VF_START /* VF Function Start */,
42 	COMMON_RAMROD_VF_STOP /* VF Function Stop Ramrod */,
43 	COMMON_RAMROD_PF_UPDATE /* PF update Ramrod */,
44 	COMMON_RAMROD_RL_UPDATE /* QCN/DCQCN RL update Ramrod */,
45 	COMMON_RAMROD_EMPTY /* Empty Ramrod */,
46 	MAX_COMMON_RAMROD_CMD_ID
47 };
48 
49 
50 /*
51  * The core storm context for the Ystorm
52  */
53 struct ystorm_core_conn_st_ctx {
54 	__le32 reserved[4];
55 };
56 
57 /*
58  * The core storm context for the Pstorm
59  */
60 struct pstorm_core_conn_st_ctx {
61 	__le32 reserved[20];
62 };
63 
64 /*
65  * Core Slowpath Connection storm context of Xstorm
66  */
67 struct xstorm_core_conn_st_ctx {
68 	__le32 spq_base_lo /* SPQ Ring Base Address low dword */;
69 	__le32 spq_base_hi /* SPQ Ring Base Address high dword */;
70 /* Consolidation Ring Base Address */
71 	struct regpair consolid_base_addr;
72 	__le16 spq_cons /* SPQ Ring Consumer */;
73 	__le16 consolid_cons /* Consolidation Ring Consumer */;
74 	__le32 reserved0[55] /* Pad to 15 cycles */;
75 };
76 
77 struct xstorm_core_conn_ag_ctx {
78 	u8 reserved0 /* cdu_validation */;
79 	u8 state /* state */;
80 	u8 flags0;
81 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM0_MASK         0x1 /* exist_in_qm0 */
82 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM0_SHIFT        0
83 #define XSTORM_CORE_CONN_AG_CTX_RESERVED1_MASK            0x1 /* exist_in_qm1 */
84 #define XSTORM_CORE_CONN_AG_CTX_RESERVED1_SHIFT           1
85 #define XSTORM_CORE_CONN_AG_CTX_RESERVED2_MASK            0x1 /* exist_in_qm2 */
86 #define XSTORM_CORE_CONN_AG_CTX_RESERVED2_SHIFT           2
87 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM3_MASK         0x1 /* exist_in_qm3 */
88 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM3_SHIFT        3
89 #define XSTORM_CORE_CONN_AG_CTX_RESERVED3_MASK            0x1 /* bit4 */
90 #define XSTORM_CORE_CONN_AG_CTX_RESERVED3_SHIFT           4
91 /* cf_array_active */
92 #define XSTORM_CORE_CONN_AG_CTX_RESERVED4_MASK            0x1
93 #define XSTORM_CORE_CONN_AG_CTX_RESERVED4_SHIFT           5
94 #define XSTORM_CORE_CONN_AG_CTX_RESERVED5_MASK            0x1 /* bit6 */
95 #define XSTORM_CORE_CONN_AG_CTX_RESERVED5_SHIFT           6
96 #define XSTORM_CORE_CONN_AG_CTX_RESERVED6_MASK            0x1 /* bit7 */
97 #define XSTORM_CORE_CONN_AG_CTX_RESERVED6_SHIFT           7
98 	u8 flags1;
99 #define XSTORM_CORE_CONN_AG_CTX_RESERVED7_MASK            0x1 /* bit8 */
100 #define XSTORM_CORE_CONN_AG_CTX_RESERVED7_SHIFT           0
101 #define XSTORM_CORE_CONN_AG_CTX_RESERVED8_MASK            0x1 /* bit9 */
102 #define XSTORM_CORE_CONN_AG_CTX_RESERVED8_SHIFT           1
103 #define XSTORM_CORE_CONN_AG_CTX_RESERVED9_MASK            0x1 /* bit10 */
104 #define XSTORM_CORE_CONN_AG_CTX_RESERVED9_SHIFT           2
105 #define XSTORM_CORE_CONN_AG_CTX_BIT11_MASK                0x1 /* bit11 */
106 #define XSTORM_CORE_CONN_AG_CTX_BIT11_SHIFT               3
107 #define XSTORM_CORE_CONN_AG_CTX_BIT12_MASK                0x1 /* bit12 */
108 #define XSTORM_CORE_CONN_AG_CTX_BIT12_SHIFT               4
109 #define XSTORM_CORE_CONN_AG_CTX_BIT13_MASK                0x1 /* bit13 */
110 #define XSTORM_CORE_CONN_AG_CTX_BIT13_SHIFT               5
111 #define XSTORM_CORE_CONN_AG_CTX_TX_RULE_ACTIVE_MASK       0x1 /* bit14 */
112 #define XSTORM_CORE_CONN_AG_CTX_TX_RULE_ACTIVE_SHIFT      6
113 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_ACTIVE_MASK         0x1 /* bit15 */
114 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_ACTIVE_SHIFT        7
115 	u8 flags2;
116 #define XSTORM_CORE_CONN_AG_CTX_CF0_MASK                  0x3 /* timer0cf */
117 #define XSTORM_CORE_CONN_AG_CTX_CF0_SHIFT                 0
118 #define XSTORM_CORE_CONN_AG_CTX_CF1_MASK                  0x3 /* timer1cf */
119 #define XSTORM_CORE_CONN_AG_CTX_CF1_SHIFT                 2
120 #define XSTORM_CORE_CONN_AG_CTX_CF2_MASK                  0x3 /* timer2cf */
121 #define XSTORM_CORE_CONN_AG_CTX_CF2_SHIFT                 4
122 /* timer_stop_all */
123 #define XSTORM_CORE_CONN_AG_CTX_CF3_MASK                  0x3
124 #define XSTORM_CORE_CONN_AG_CTX_CF3_SHIFT                 6
125 	u8 flags3;
126 #define XSTORM_CORE_CONN_AG_CTX_CF4_MASK                  0x3 /* cf4 */
127 #define XSTORM_CORE_CONN_AG_CTX_CF4_SHIFT                 0
128 #define XSTORM_CORE_CONN_AG_CTX_CF5_MASK                  0x3 /* cf5 */
129 #define XSTORM_CORE_CONN_AG_CTX_CF5_SHIFT                 2
130 #define XSTORM_CORE_CONN_AG_CTX_CF6_MASK                  0x3 /* cf6 */
131 #define XSTORM_CORE_CONN_AG_CTX_CF6_SHIFT                 4
132 #define XSTORM_CORE_CONN_AG_CTX_CF7_MASK                  0x3 /* cf7 */
133 #define XSTORM_CORE_CONN_AG_CTX_CF7_SHIFT                 6
134 	u8 flags4;
135 #define XSTORM_CORE_CONN_AG_CTX_CF8_MASK                  0x3 /* cf8 */
136 #define XSTORM_CORE_CONN_AG_CTX_CF8_SHIFT                 0
137 #define XSTORM_CORE_CONN_AG_CTX_CF9_MASK                  0x3 /* cf9 */
138 #define XSTORM_CORE_CONN_AG_CTX_CF9_SHIFT                 2
139 #define XSTORM_CORE_CONN_AG_CTX_CF10_MASK                 0x3 /* cf10 */
140 #define XSTORM_CORE_CONN_AG_CTX_CF10_SHIFT                4
141 #define XSTORM_CORE_CONN_AG_CTX_CF11_MASK                 0x3 /* cf11 */
142 #define XSTORM_CORE_CONN_AG_CTX_CF11_SHIFT                6
143 	u8 flags5;
144 #define XSTORM_CORE_CONN_AG_CTX_CF12_MASK                 0x3 /* cf12 */
145 #define XSTORM_CORE_CONN_AG_CTX_CF12_SHIFT                0
146 #define XSTORM_CORE_CONN_AG_CTX_CF13_MASK                 0x3 /* cf13 */
147 #define XSTORM_CORE_CONN_AG_CTX_CF13_SHIFT                2
148 #define XSTORM_CORE_CONN_AG_CTX_CF14_MASK                 0x3 /* cf14 */
149 #define XSTORM_CORE_CONN_AG_CTX_CF14_SHIFT                4
150 #define XSTORM_CORE_CONN_AG_CTX_CF15_MASK                 0x3 /* cf15 */
151 #define XSTORM_CORE_CONN_AG_CTX_CF15_SHIFT                6
152 	u8 flags6;
153 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_MASK     0x3 /* cf16 */
154 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_SHIFT    0
155 #define XSTORM_CORE_CONN_AG_CTX_CF17_MASK                 0x3 /* cf_array_cf */
156 #define XSTORM_CORE_CONN_AG_CTX_CF17_SHIFT                2
157 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_MASK                0x3 /* cf18 */
158 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_SHIFT               4
159 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_MASK         0x3 /* cf19 */
160 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_SHIFT        6
161 	u8 flags7;
162 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_MASK             0x3 /* cf20 */
163 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_SHIFT            0
164 #define XSTORM_CORE_CONN_AG_CTX_RESERVED10_MASK           0x3 /* cf21 */
165 #define XSTORM_CORE_CONN_AG_CTX_RESERVED10_SHIFT          2
166 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_MASK            0x3 /* cf22 */
167 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_SHIFT           4
168 #define XSTORM_CORE_CONN_AG_CTX_CF0EN_MASK                0x1 /* cf0en */
169 #define XSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT               6
170 #define XSTORM_CORE_CONN_AG_CTX_CF1EN_MASK                0x1 /* cf1en */
171 #define XSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT               7
172 	u8 flags8;
173 #define XSTORM_CORE_CONN_AG_CTX_CF2EN_MASK                0x1 /* cf2en */
174 #define XSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT               0
175 #define XSTORM_CORE_CONN_AG_CTX_CF3EN_MASK                0x1 /* cf3en */
176 #define XSTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT               1
177 #define XSTORM_CORE_CONN_AG_CTX_CF4EN_MASK                0x1 /* cf4en */
178 #define XSTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT               2
179 #define XSTORM_CORE_CONN_AG_CTX_CF5EN_MASK                0x1 /* cf5en */
180 #define XSTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT               3
181 #define XSTORM_CORE_CONN_AG_CTX_CF6EN_MASK                0x1 /* cf6en */
182 #define XSTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT               4
183 #define XSTORM_CORE_CONN_AG_CTX_CF7EN_MASK                0x1 /* cf7en */
184 #define XSTORM_CORE_CONN_AG_CTX_CF7EN_SHIFT               5
185 #define XSTORM_CORE_CONN_AG_CTX_CF8EN_MASK                0x1 /* cf8en */
186 #define XSTORM_CORE_CONN_AG_CTX_CF8EN_SHIFT               6
187 #define XSTORM_CORE_CONN_AG_CTX_CF9EN_MASK                0x1 /* cf9en */
188 #define XSTORM_CORE_CONN_AG_CTX_CF9EN_SHIFT               7
189 	u8 flags9;
190 #define XSTORM_CORE_CONN_AG_CTX_CF10EN_MASK               0x1 /* cf10en */
191 #define XSTORM_CORE_CONN_AG_CTX_CF10EN_SHIFT              0
192 #define XSTORM_CORE_CONN_AG_CTX_CF11EN_MASK               0x1 /* cf11en */
193 #define XSTORM_CORE_CONN_AG_CTX_CF11EN_SHIFT              1
194 #define XSTORM_CORE_CONN_AG_CTX_CF12EN_MASK               0x1 /* cf12en */
195 #define XSTORM_CORE_CONN_AG_CTX_CF12EN_SHIFT              2
196 #define XSTORM_CORE_CONN_AG_CTX_CF13EN_MASK               0x1 /* cf13en */
197 #define XSTORM_CORE_CONN_AG_CTX_CF13EN_SHIFT              3
198 #define XSTORM_CORE_CONN_AG_CTX_CF14EN_MASK               0x1 /* cf14en */
199 #define XSTORM_CORE_CONN_AG_CTX_CF14EN_SHIFT              4
200 #define XSTORM_CORE_CONN_AG_CTX_CF15EN_MASK               0x1 /* cf15en */
201 #define XSTORM_CORE_CONN_AG_CTX_CF15EN_SHIFT              5
202 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_EN_MASK  0x1 /* cf16en */
203 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_EN_SHIFT 6
204 /* cf_array_cf_en */
205 #define XSTORM_CORE_CONN_AG_CTX_CF17EN_MASK               0x1
206 #define XSTORM_CORE_CONN_AG_CTX_CF17EN_SHIFT              7
207 	u8 flags10;
208 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_EN_MASK             0x1 /* cf18en */
209 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_EN_SHIFT            0
210 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_EN_MASK      0x1 /* cf19en */
211 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_EN_SHIFT     1
212 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_EN_MASK          0x1 /* cf20en */
213 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_EN_SHIFT         2
214 #define XSTORM_CORE_CONN_AG_CTX_RESERVED11_MASK           0x1 /* cf21en */
215 #define XSTORM_CORE_CONN_AG_CTX_RESERVED11_SHIFT          3
216 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_EN_MASK         0x1 /* cf22en */
217 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_EN_SHIFT        4
218 #define XSTORM_CORE_CONN_AG_CTX_CF23EN_MASK               0x1 /* cf23en */
219 #define XSTORM_CORE_CONN_AG_CTX_CF23EN_SHIFT              5
220 #define XSTORM_CORE_CONN_AG_CTX_RESERVED12_MASK           0x1 /* rule0en */
221 #define XSTORM_CORE_CONN_AG_CTX_RESERVED12_SHIFT          6
222 #define XSTORM_CORE_CONN_AG_CTX_RESERVED13_MASK           0x1 /* rule1en */
223 #define XSTORM_CORE_CONN_AG_CTX_RESERVED13_SHIFT          7
224 	u8 flags11;
225 #define XSTORM_CORE_CONN_AG_CTX_RESERVED14_MASK           0x1 /* rule2en */
226 #define XSTORM_CORE_CONN_AG_CTX_RESERVED14_SHIFT          0
227 #define XSTORM_CORE_CONN_AG_CTX_RESERVED15_MASK           0x1 /* rule3en */
228 #define XSTORM_CORE_CONN_AG_CTX_RESERVED15_SHIFT          1
229 #define XSTORM_CORE_CONN_AG_CTX_TX_DEC_RULE_EN_MASK       0x1 /* rule4en */
230 #define XSTORM_CORE_CONN_AG_CTX_TX_DEC_RULE_EN_SHIFT      2
231 #define XSTORM_CORE_CONN_AG_CTX_RULE5EN_MASK              0x1 /* rule5en */
232 #define XSTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT             3
233 #define XSTORM_CORE_CONN_AG_CTX_RULE6EN_MASK              0x1 /* rule6en */
234 #define XSTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT             4
235 #define XSTORM_CORE_CONN_AG_CTX_RULE7EN_MASK              0x1 /* rule7en */
236 #define XSTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT             5
237 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED1_MASK         0x1 /* rule8en */
238 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED1_SHIFT        6
239 #define XSTORM_CORE_CONN_AG_CTX_RULE9EN_MASK              0x1 /* rule9en */
240 #define XSTORM_CORE_CONN_AG_CTX_RULE9EN_SHIFT             7
241 	u8 flags12;
242 #define XSTORM_CORE_CONN_AG_CTX_RULE10EN_MASK             0x1 /* rule10en */
243 #define XSTORM_CORE_CONN_AG_CTX_RULE10EN_SHIFT            0
244 #define XSTORM_CORE_CONN_AG_CTX_RULE11EN_MASK             0x1 /* rule11en */
245 #define XSTORM_CORE_CONN_AG_CTX_RULE11EN_SHIFT            1
246 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED2_MASK         0x1 /* rule12en */
247 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED2_SHIFT        2
248 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED3_MASK         0x1 /* rule13en */
249 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED3_SHIFT        3
250 #define XSTORM_CORE_CONN_AG_CTX_RULE14EN_MASK             0x1 /* rule14en */
251 #define XSTORM_CORE_CONN_AG_CTX_RULE14EN_SHIFT            4
252 #define XSTORM_CORE_CONN_AG_CTX_RULE15EN_MASK             0x1 /* rule15en */
253 #define XSTORM_CORE_CONN_AG_CTX_RULE15EN_SHIFT            5
254 #define XSTORM_CORE_CONN_AG_CTX_RULE16EN_MASK             0x1 /* rule16en */
255 #define XSTORM_CORE_CONN_AG_CTX_RULE16EN_SHIFT            6
256 #define XSTORM_CORE_CONN_AG_CTX_RULE17EN_MASK             0x1 /* rule17en */
257 #define XSTORM_CORE_CONN_AG_CTX_RULE17EN_SHIFT            7
258 	u8 flags13;
259 #define XSTORM_CORE_CONN_AG_CTX_RULE18EN_MASK             0x1 /* rule18en */
260 #define XSTORM_CORE_CONN_AG_CTX_RULE18EN_SHIFT            0
261 #define XSTORM_CORE_CONN_AG_CTX_RULE19EN_MASK             0x1 /* rule19en */
262 #define XSTORM_CORE_CONN_AG_CTX_RULE19EN_SHIFT            1
263 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED4_MASK         0x1 /* rule20en */
264 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED4_SHIFT        2
265 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED5_MASK         0x1 /* rule21en */
266 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED5_SHIFT        3
267 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED6_MASK         0x1 /* rule22en */
268 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED6_SHIFT        4
269 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED7_MASK         0x1 /* rule23en */
270 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED7_SHIFT        5
271 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED8_MASK         0x1 /* rule24en */
272 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED8_SHIFT        6
273 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED9_MASK         0x1 /* rule25en */
274 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED9_SHIFT        7
275 	u8 flags14;
276 #define XSTORM_CORE_CONN_AG_CTX_BIT16_MASK                0x1 /* bit16 */
277 #define XSTORM_CORE_CONN_AG_CTX_BIT16_SHIFT               0
278 #define XSTORM_CORE_CONN_AG_CTX_BIT17_MASK                0x1 /* bit17 */
279 #define XSTORM_CORE_CONN_AG_CTX_BIT17_SHIFT               1
280 #define XSTORM_CORE_CONN_AG_CTX_BIT18_MASK                0x1 /* bit18 */
281 #define XSTORM_CORE_CONN_AG_CTX_BIT18_SHIFT               2
282 #define XSTORM_CORE_CONN_AG_CTX_BIT19_MASK                0x1 /* bit19 */
283 #define XSTORM_CORE_CONN_AG_CTX_BIT19_SHIFT               3
284 #define XSTORM_CORE_CONN_AG_CTX_BIT20_MASK                0x1 /* bit20 */
285 #define XSTORM_CORE_CONN_AG_CTX_BIT20_SHIFT               4
286 #define XSTORM_CORE_CONN_AG_CTX_BIT21_MASK                0x1 /* bit21 */
287 #define XSTORM_CORE_CONN_AG_CTX_BIT21_SHIFT               5
288 #define XSTORM_CORE_CONN_AG_CTX_CF23_MASK                 0x3 /* cf23 */
289 #define XSTORM_CORE_CONN_AG_CTX_CF23_SHIFT                6
290 	u8 byte2 /* byte2 */;
291 	__le16 physical_q0 /* physical_q0 */;
292 	__le16 consolid_prod /* physical_q1 */;
293 	__le16 reserved16 /* physical_q2 */;
294 	__le16 tx_bd_cons /* word3 */;
295 	__le16 tx_bd_or_spq_prod /* word4 */;
296 	__le16 updated_qm_pq_id /* word5 */;
297 	__le16 conn_dpi /* conn_dpi */;
298 	u8 byte3 /* byte3 */;
299 	u8 byte4 /* byte4 */;
300 	u8 byte5 /* byte5 */;
301 	u8 byte6 /* byte6 */;
302 	__le32 reg0 /* reg0 */;
303 	__le32 reg1 /* reg1 */;
304 	__le32 reg2 /* reg2 */;
305 	__le32 reg3 /* reg3 */;
306 	__le32 reg4 /* reg4 */;
307 	__le32 reg5 /* cf_array0 */;
308 	__le32 reg6 /* cf_array1 */;
309 	__le16 word7 /* word7 */;
310 	__le16 word8 /* word8 */;
311 	__le16 word9 /* word9 */;
312 	__le16 word10 /* word10 */;
313 	__le32 reg7 /* reg7 */;
314 	__le32 reg8 /* reg8 */;
315 	__le32 reg9 /* reg9 */;
316 	u8 byte7 /* byte7 */;
317 	u8 byte8 /* byte8 */;
318 	u8 byte9 /* byte9 */;
319 	u8 byte10 /* byte10 */;
320 	u8 byte11 /* byte11 */;
321 	u8 byte12 /* byte12 */;
322 	u8 byte13 /* byte13 */;
323 	u8 byte14 /* byte14 */;
324 	u8 byte15 /* byte15 */;
325 	u8 e5_reserved /* e5_reserved */;
326 	__le16 word11 /* word11 */;
327 	__le32 reg10 /* reg10 */;
328 	__le32 reg11 /* reg11 */;
329 	__le32 reg12 /* reg12 */;
330 	__le32 reg13 /* reg13 */;
331 	__le32 reg14 /* reg14 */;
332 	__le32 reg15 /* reg15 */;
333 	__le32 reg16 /* reg16 */;
334 	__le32 reg17 /* reg17 */;
335 	__le32 reg18 /* reg18 */;
336 	__le32 reg19 /* reg19 */;
337 	__le16 word12 /* word12 */;
338 	__le16 word13 /* word13 */;
339 	__le16 word14 /* word14 */;
340 	__le16 word15 /* word15 */;
341 };
342 
343 struct tstorm_core_conn_ag_ctx {
344 	u8 byte0 /* cdu_validation */;
345 	u8 byte1 /* state */;
346 	u8 flags0;
347 #define TSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
348 #define TSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
349 #define TSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
350 #define TSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
351 #define TSTORM_CORE_CONN_AG_CTX_BIT2_MASK     0x1 /* bit2 */
352 #define TSTORM_CORE_CONN_AG_CTX_BIT2_SHIFT    2
353 #define TSTORM_CORE_CONN_AG_CTX_BIT3_MASK     0x1 /* bit3 */
354 #define TSTORM_CORE_CONN_AG_CTX_BIT3_SHIFT    3
355 #define TSTORM_CORE_CONN_AG_CTX_BIT4_MASK     0x1 /* bit4 */
356 #define TSTORM_CORE_CONN_AG_CTX_BIT4_SHIFT    4
357 #define TSTORM_CORE_CONN_AG_CTX_BIT5_MASK     0x1 /* bit5 */
358 #define TSTORM_CORE_CONN_AG_CTX_BIT5_SHIFT    5
359 #define TSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* timer0cf */
360 #define TSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     6
361 	u8 flags1;
362 #define TSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* timer1cf */
363 #define TSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     0
364 #define TSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* timer2cf */
365 #define TSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     2
366 #define TSTORM_CORE_CONN_AG_CTX_CF3_MASK      0x3 /* timer_stop_all */
367 #define TSTORM_CORE_CONN_AG_CTX_CF3_SHIFT     4
368 #define TSTORM_CORE_CONN_AG_CTX_CF4_MASK      0x3 /* cf4 */
369 #define TSTORM_CORE_CONN_AG_CTX_CF4_SHIFT     6
370 	u8 flags2;
371 #define TSTORM_CORE_CONN_AG_CTX_CF5_MASK      0x3 /* cf5 */
372 #define TSTORM_CORE_CONN_AG_CTX_CF5_SHIFT     0
373 #define TSTORM_CORE_CONN_AG_CTX_CF6_MASK      0x3 /* cf6 */
374 #define TSTORM_CORE_CONN_AG_CTX_CF6_SHIFT     2
375 #define TSTORM_CORE_CONN_AG_CTX_CF7_MASK      0x3 /* cf7 */
376 #define TSTORM_CORE_CONN_AG_CTX_CF7_SHIFT     4
377 #define TSTORM_CORE_CONN_AG_CTX_CF8_MASK      0x3 /* cf8 */
378 #define TSTORM_CORE_CONN_AG_CTX_CF8_SHIFT     6
379 	u8 flags3;
380 #define TSTORM_CORE_CONN_AG_CTX_CF9_MASK      0x3 /* cf9 */
381 #define TSTORM_CORE_CONN_AG_CTX_CF9_SHIFT     0
382 #define TSTORM_CORE_CONN_AG_CTX_CF10_MASK     0x3 /* cf10 */
383 #define TSTORM_CORE_CONN_AG_CTX_CF10_SHIFT    2
384 #define TSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
385 #define TSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   4
386 #define TSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
387 #define TSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   5
388 #define TSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
389 #define TSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   6
390 #define TSTORM_CORE_CONN_AG_CTX_CF3EN_MASK    0x1 /* cf3en */
391 #define TSTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT   7
392 	u8 flags4;
393 #define TSTORM_CORE_CONN_AG_CTX_CF4EN_MASK    0x1 /* cf4en */
394 #define TSTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT   0
395 #define TSTORM_CORE_CONN_AG_CTX_CF5EN_MASK    0x1 /* cf5en */
396 #define TSTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT   1
397 #define TSTORM_CORE_CONN_AG_CTX_CF6EN_MASK    0x1 /* cf6en */
398 #define TSTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT   2
399 #define TSTORM_CORE_CONN_AG_CTX_CF7EN_MASK    0x1 /* cf7en */
400 #define TSTORM_CORE_CONN_AG_CTX_CF7EN_SHIFT   3
401 #define TSTORM_CORE_CONN_AG_CTX_CF8EN_MASK    0x1 /* cf8en */
402 #define TSTORM_CORE_CONN_AG_CTX_CF8EN_SHIFT   4
403 #define TSTORM_CORE_CONN_AG_CTX_CF9EN_MASK    0x1 /* cf9en */
404 #define TSTORM_CORE_CONN_AG_CTX_CF9EN_SHIFT   5
405 #define TSTORM_CORE_CONN_AG_CTX_CF10EN_MASK   0x1 /* cf10en */
406 #define TSTORM_CORE_CONN_AG_CTX_CF10EN_SHIFT  6
407 #define TSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
408 #define TSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 7
409 	u8 flags5;
410 #define TSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
411 #define TSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 0
412 #define TSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
413 #define TSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 1
414 #define TSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
415 #define TSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 2
416 #define TSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
417 #define TSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 3
418 #define TSTORM_CORE_CONN_AG_CTX_RULE5EN_MASK  0x1 /* rule5en */
419 #define TSTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT 4
420 #define TSTORM_CORE_CONN_AG_CTX_RULE6EN_MASK  0x1 /* rule6en */
421 #define TSTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT 5
422 #define TSTORM_CORE_CONN_AG_CTX_RULE7EN_MASK  0x1 /* rule7en */
423 #define TSTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT 6
424 #define TSTORM_CORE_CONN_AG_CTX_RULE8EN_MASK  0x1 /* rule8en */
425 #define TSTORM_CORE_CONN_AG_CTX_RULE8EN_SHIFT 7
426 	__le32 reg0 /* reg0 */;
427 	__le32 reg1 /* reg1 */;
428 	__le32 reg2 /* reg2 */;
429 	__le32 reg3 /* reg3 */;
430 	__le32 reg4 /* reg4 */;
431 	__le32 reg5 /* reg5 */;
432 	__le32 reg6 /* reg6 */;
433 	__le32 reg7 /* reg7 */;
434 	__le32 reg8 /* reg8 */;
435 	u8 byte2 /* byte2 */;
436 	u8 byte3 /* byte3 */;
437 	__le16 word0 /* word0 */;
438 	u8 byte4 /* byte4 */;
439 	u8 byte5 /* byte5 */;
440 	__le16 word1 /* word1 */;
441 	__le16 word2 /* conn_dpi */;
442 	__le16 word3 /* word3 */;
443 	__le32 reg9 /* reg9 */;
444 	__le32 reg10 /* reg10 */;
445 };
446 
447 struct ustorm_core_conn_ag_ctx {
448 	u8 reserved /* cdu_validation */;
449 	u8 byte1 /* state */;
450 	u8 flags0;
451 #define USTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
452 #define USTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
453 #define USTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
454 #define USTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
455 #define USTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* timer0cf */
456 #define USTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
457 #define USTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* timer1cf */
458 #define USTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
459 #define USTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* timer2cf */
460 #define USTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
461 	u8 flags1;
462 #define USTORM_CORE_CONN_AG_CTX_CF3_MASK      0x3 /* timer_stop_all */
463 #define USTORM_CORE_CONN_AG_CTX_CF3_SHIFT     0
464 #define USTORM_CORE_CONN_AG_CTX_CF4_MASK      0x3 /* cf4 */
465 #define USTORM_CORE_CONN_AG_CTX_CF4_SHIFT     2
466 #define USTORM_CORE_CONN_AG_CTX_CF5_MASK      0x3 /* cf5 */
467 #define USTORM_CORE_CONN_AG_CTX_CF5_SHIFT     4
468 #define USTORM_CORE_CONN_AG_CTX_CF6_MASK      0x3 /* cf6 */
469 #define USTORM_CORE_CONN_AG_CTX_CF6_SHIFT     6
470 	u8 flags2;
471 #define USTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
472 #define USTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
473 #define USTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
474 #define USTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
475 #define USTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
476 #define USTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
477 #define USTORM_CORE_CONN_AG_CTX_CF3EN_MASK    0x1 /* cf3en */
478 #define USTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT   3
479 #define USTORM_CORE_CONN_AG_CTX_CF4EN_MASK    0x1 /* cf4en */
480 #define USTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT   4
481 #define USTORM_CORE_CONN_AG_CTX_CF5EN_MASK    0x1 /* cf5en */
482 #define USTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT   5
483 #define USTORM_CORE_CONN_AG_CTX_CF6EN_MASK    0x1 /* cf6en */
484 #define USTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT   6
485 #define USTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
486 #define USTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 7
487 	u8 flags3;
488 #define USTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
489 #define USTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 0
490 #define USTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
491 #define USTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 1
492 #define USTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
493 #define USTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 2
494 #define USTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
495 #define USTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 3
496 #define USTORM_CORE_CONN_AG_CTX_RULE5EN_MASK  0x1 /* rule5en */
497 #define USTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT 4
498 #define USTORM_CORE_CONN_AG_CTX_RULE6EN_MASK  0x1 /* rule6en */
499 #define USTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT 5
500 #define USTORM_CORE_CONN_AG_CTX_RULE7EN_MASK  0x1 /* rule7en */
501 #define USTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT 6
502 #define USTORM_CORE_CONN_AG_CTX_RULE8EN_MASK  0x1 /* rule8en */
503 #define USTORM_CORE_CONN_AG_CTX_RULE8EN_SHIFT 7
504 	u8 byte2 /* byte2 */;
505 	u8 byte3 /* byte3 */;
506 	__le16 word0 /* conn_dpi */;
507 	__le16 word1 /* word1 */;
508 	__le32 rx_producers /* reg0 */;
509 	__le32 reg1 /* reg1 */;
510 	__le32 reg2 /* reg2 */;
511 	__le32 reg3 /* reg3 */;
512 	__le16 word2 /* word2 */;
513 	__le16 word3 /* word3 */;
514 };
515 
516 /*
517  * The core storm context for the Mstorm
518  */
519 struct mstorm_core_conn_st_ctx {
520 	__le32 reserved[40];
521 };
522 
523 /*
524  * The core storm context for the Ustorm
525  */
526 struct ustorm_core_conn_st_ctx {
527 	__le32 reserved[20];
528 };
529 
530 /*
531  * The core storm context for the Tstorm
532  */
533 struct tstorm_core_conn_st_ctx {
534 	__le32 reserved[4];
535 };
536 
537 /*
538  * core connection context
539  */
540 struct core_conn_context {
541 /* ystorm storm context */
542 	struct ystorm_core_conn_st_ctx ystorm_st_context;
543 	struct regpair ystorm_st_padding[2] /* padding */;
544 /* pstorm storm context */
545 	struct pstorm_core_conn_st_ctx pstorm_st_context;
546 	struct regpair pstorm_st_padding[2] /* padding */;
547 /* xstorm storm context */
548 	struct xstorm_core_conn_st_ctx xstorm_st_context;
549 /* xstorm aggregative context */
550 	struct xstorm_core_conn_ag_ctx xstorm_ag_context;
551 /* tstorm aggregative context */
552 	struct tstorm_core_conn_ag_ctx tstorm_ag_context;
553 /* ustorm aggregative context */
554 	struct ustorm_core_conn_ag_ctx ustorm_ag_context;
555 /* mstorm storm context */
556 	struct mstorm_core_conn_st_ctx mstorm_st_context;
557 /* ustorm storm context */
558 	struct ustorm_core_conn_st_ctx ustorm_st_context;
559 	struct regpair ustorm_st_padding[2] /* padding */;
560 /* tstorm storm context */
561 	struct tstorm_core_conn_st_ctx tstorm_st_context;
562 	struct regpair tstorm_st_padding[2] /* padding */;
563 };
564 
565 
566 /*
567  * How ll2 should deal with packet upon errors
568  */
569 enum core_error_handle {
570 	LL2_DROP_PACKET /* If error occurs drop packet */,
571 	LL2_DO_NOTHING /* If error occurs do nothing */,
572 	LL2_ASSERT /* If error occurs assert */,
573 	MAX_CORE_ERROR_HANDLE
574 };
575 
576 
577 /*
578  * opcodes for the event ring
579  */
580 enum core_event_opcode {
581 	CORE_EVENT_TX_QUEUE_START,
582 	CORE_EVENT_TX_QUEUE_STOP,
583 	CORE_EVENT_RX_QUEUE_START,
584 	CORE_EVENT_RX_QUEUE_STOP,
585 	CORE_EVENT_RX_QUEUE_FLUSH,
586 	CORE_EVENT_TX_QUEUE_UPDATE,
587 	CORE_EVENT_QUEUE_STATS_QUERY,
588 	MAX_CORE_EVENT_OPCODE
589 };
590 
591 
592 /*
593  * The L4 pseudo checksum mode for Core
594  */
595 enum core_l4_pseudo_checksum_mode {
596 /* Pseudo Checksum on packet is calculated with the correct packet length. */
597 	CORE_L4_PSEUDO_CSUM_CORRECT_LENGTH,
598 /* Pseudo Checksum on packet is calculated with zero length. */
599 	CORE_L4_PSEUDO_CSUM_ZERO_LENGTH,
600 	MAX_CORE_L4_PSEUDO_CHECKSUM_MODE
601 };
602 
603 
604 /*
605  * Light-L2 RX Producers in Tstorm RAM
606  */
607 struct core_ll2_port_stats {
608 	struct regpair gsi_invalid_hdr;
609 	struct regpair gsi_invalid_pkt_length;
610 	struct regpair gsi_unsupported_pkt_typ;
611 	struct regpair gsi_crcchksm_error;
612 };
613 
614 
615 /*
616  * LL2 TX Per Queue Stats
617  */
618 struct core_ll2_pstorm_per_queue_stat {
619 /* number of total bytes sent without errors */
620 	struct regpair sent_ucast_bytes;
621 /* number of total bytes sent without errors */
622 	struct regpair sent_mcast_bytes;
623 /* number of total bytes sent without errors */
624 	struct regpair sent_bcast_bytes;
625 /* number of total packets sent without errors */
626 	struct regpair sent_ucast_pkts;
627 /* number of total packets sent without errors */
628 	struct regpair sent_mcast_pkts;
629 /* number of total packets sent without errors */
630 	struct regpair sent_bcast_pkts;
631 /* number of total packets dropped due to errors */
632 	struct regpair error_drop_pkts;
633 };
634 
635 
636 struct core_ll2_tstorm_per_queue_stat {
637 /* Number of packets discarded because they are bigger than MTU */
638 	struct regpair packet_too_big_discard;
639 /* Number of packets discarded due to lack of host buffers */
640 	struct regpair no_buff_discard;
641 };
642 
643 struct core_ll2_ustorm_per_queue_stat {
644 	struct regpair rcv_ucast_bytes;
645 	struct regpair rcv_mcast_bytes;
646 	struct regpair rcv_bcast_bytes;
647 	struct regpair rcv_ucast_pkts;
648 	struct regpair rcv_mcast_pkts;
649 	struct regpair rcv_bcast_pkts;
650 };
651 
652 
653 /*
654  * Light-L2 RX Producers
655  */
656 struct core_ll2_rx_prod {
657 	__le16 bd_prod /* BD Producer */;
658 	__le16 cqe_prod /* CQE Producer */;
659 };
660 
661 
662 
663 struct core_ll2_tx_per_queue_stat {
664 /* PSTORM per queue statistics */
665 	struct core_ll2_pstorm_per_queue_stat pstorm_stat;
666 };
667 
668 
669 
670 /*
671  * Structure for doorbell data, in PWM mode, for RX producers update.
672  */
673 struct core_pwm_prod_update_data {
674 	__le16 icid /* internal CID */;
675 	u8 reserved0;
676 	u8 params;
677 /* aggregative command. Set DB_AGG_CMD_SET for producer update
678  * (use enum db_agg_cmd_sel)
679  */
680 #define CORE_PWM_PROD_UPDATE_DATA_AGG_CMD_MASK    0x3
681 #define CORE_PWM_PROD_UPDATE_DATA_AGG_CMD_SHIFT   0
682 #define CORE_PWM_PROD_UPDATE_DATA_RESERVED1_MASK  0x3F /* Set 0. */
683 #define CORE_PWM_PROD_UPDATE_DATA_RESERVED1_SHIFT 2
684 	struct core_ll2_rx_prod prod /* Producers. */;
685 };
686 
687 
688 /*
689  * Ramrod data for rx/tx queue statistics query ramrod
690  */
691 struct core_queue_stats_query_ramrod_data {
692 	u8 rx_stat /* If set, collect RX queue statistics. */;
693 	u8 tx_stat /* If set, collect TX queue statistics. */;
694 	__le16 reserved[3];
695 /* Address of RX statistic buffer. core_ll2_rx_per_queue_stat struct will be
696  * write to this address.
697  */
698 	struct regpair rx_stat_addr;
699 /* Address of TX statistic buffer. core_ll2_tx_per_queue_stat struct will be
700  * write to this address.
701  */
702 	struct regpair tx_stat_addr;
703 };
704 
705 
706 /*
707  * Core Ramrod Command IDs (light L2)
708  */
709 enum core_ramrod_cmd_id {
710 	CORE_RAMROD_UNUSED,
711 	CORE_RAMROD_RX_QUEUE_START /* RX Queue Start Ramrod */,
712 	CORE_RAMROD_TX_QUEUE_START /* TX Queue Start Ramrod */,
713 	CORE_RAMROD_RX_QUEUE_STOP /* RX Queue Stop Ramrod */,
714 	CORE_RAMROD_TX_QUEUE_STOP /* TX Queue Stop Ramrod */,
715 	CORE_RAMROD_RX_QUEUE_FLUSH /* RX Flush queue Ramrod */,
716 	CORE_RAMROD_TX_QUEUE_UPDATE /* TX Queue Update Ramrod */,
717 	CORE_RAMROD_QUEUE_STATS_QUERY /* Queue Statist Query Ramrod */,
718 	MAX_CORE_RAMROD_CMD_ID
719 };
720 
721 
722 /*
723  * Core RX CQE Type for Light L2
724  */
725 enum core_roce_flavor_type {
726 	CORE_ROCE,
727 	CORE_RROCE,
728 	MAX_CORE_ROCE_FLAVOR_TYPE
729 };
730 
731 
732 /*
733  * Specifies how ll2 should deal with packets errors: packet_too_big and no_buff
734  */
735 struct core_rx_action_on_error {
736 	u8 error_type;
737 /* ll2 how to handle error packet_too_big (use enum core_error_handle) */
738 #define CORE_RX_ACTION_ON_ERROR_PACKET_TOO_BIG_MASK  0x3
739 #define CORE_RX_ACTION_ON_ERROR_PACKET_TOO_BIG_SHIFT 0
740 /* ll2 how to handle error with no_buff  (use enum core_error_handle) */
741 #define CORE_RX_ACTION_ON_ERROR_NO_BUFF_MASK         0x3
742 #define CORE_RX_ACTION_ON_ERROR_NO_BUFF_SHIFT        2
743 #define CORE_RX_ACTION_ON_ERROR_RESERVED_MASK        0xF
744 #define CORE_RX_ACTION_ON_ERROR_RESERVED_SHIFT       4
745 };
746 
747 
748 /*
749  * Core RX BD for Light L2
750  */
751 struct core_rx_bd {
752 	struct regpair addr;
753 	__le16 reserved[4];
754 };
755 
756 
757 /*
758  * Core RX CM offload BD for Light L2
759  */
760 struct core_rx_bd_with_buff_len {
761 	struct regpair addr;
762 	__le16 buff_length;
763 	__le16 reserved[3];
764 };
765 
766 /*
767  * Core RX CM offload BD for Light L2
768  */
769 union core_rx_bd_union {
770 	struct core_rx_bd rx_bd /* Core Rx Bd static buffer size */;
771 /* Core Rx Bd with dynamic buffer length */
772 	struct core_rx_bd_with_buff_len rx_bd_with_len;
773 };
774 
775 
776 
777 /*
778  * Opaque Data for Light L2 RX CQE .
779  */
780 struct core_rx_cqe_opaque_data {
781 	__le32 data[2] /* Opaque CQE Data */;
782 };
783 
784 
785 /*
786  * Core RX CQE Type for Light L2
787  */
788 enum core_rx_cqe_type {
789 	CORE_RX_CQE_ILLIGAL_TYPE /* Bad RX Cqe type */,
790 	CORE_RX_CQE_TYPE_REGULAR /* Regular Core RX CQE */,
791 	CORE_RX_CQE_TYPE_GSI_OFFLOAD /* Fp Gsi offload RX CQE */,
792 	CORE_RX_CQE_TYPE_SLOW_PATH /* Slow path Core RX CQE */,
793 	MAX_CORE_RX_CQE_TYPE
794 };
795 
796 
797 /*
798  * Core RX CQE for Light L2 .
799  */
800 struct core_rx_fast_path_cqe {
801 	u8 type /* CQE type */;
802 /* Offset (in bytes) of the packet from start of the buffer */
803 	u8 placement_offset;
804 /* Parsing and error flags from the parser */
805 	struct parsing_and_err_flags parse_flags;
806 	__le16 packet_length /* Total packet length (from the parser) */;
807 	__le16 vlan /* 802.1q VLAN tag */;
808 	struct core_rx_cqe_opaque_data opaque_data /* Opaque Data */;
809 /* bit- map: each bit represents a specific error. errors indications are
810  * provided by the cracker. see spec for detailed description
811  */
812 	struct parsing_err_flags err_flags;
813 	__le16 reserved0;
814 	__le32 reserved1[3];
815 };
816 
817 /*
818  * Core Rx CM offload CQE .
819  */
820 struct core_rx_gsi_offload_cqe {
821 	u8 type /* CQE type */;
822 	u8 data_length_error /* set if gsi data is bigger than buff */;
823 /* Parsing and error flags from the parser */
824 	struct parsing_and_err_flags parse_flags;
825 	__le16 data_length /* Total packet length (from the parser) */;
826 	__le16 vlan /* 802.1q VLAN tag */;
827 	__le32 src_mac_addrhi /* hi 4 bytes source mac address */;
828 	__le16 src_mac_addrlo /* lo 2 bytes of source mac address */;
829 /* These are the lower 16 bit of QP id in RoCE BTH header */
830 	__le16 qp_id;
831 	__le32 src_qp /* Source QP from DETH header */;
832 	struct core_rx_cqe_opaque_data opaque_data /* Opaque Data */;
833 	__le32 reserved;
834 };
835 
836 /*
837  * Core RX CQE for Light L2 .
838  */
839 struct core_rx_slow_path_cqe {
840 	u8 type /* CQE type */;
841 	u8 ramrod_cmd_id;
842 	__le16 echo;
843 	struct core_rx_cqe_opaque_data opaque_data /* Opaque Data */;
844 	__le32 reserved1[5];
845 };
846 
847 /*
848  * Core RX CM offload BD for Light L2
849  */
850 union core_rx_cqe_union {
851 	struct core_rx_fast_path_cqe rx_cqe_fp /* Fast path CQE */;
852 	struct core_rx_gsi_offload_cqe rx_cqe_gsi /* GSI offload CQE */;
853 	struct core_rx_slow_path_cqe rx_cqe_sp /* Slow path CQE */;
854 };
855 
856 
857 
858 
859 
860 /*
861  * Ramrod data for rx queue start ramrod
862  */
863 struct core_rx_start_ramrod_data {
864 	struct regpair bd_base /* Address of the first BD page */;
865 	struct regpair cqe_pbl_addr /* Base address on host of CQE PBL */;
866 	__le16 mtu /* MTU */;
867 	__le16 sb_id /* Status block ID */;
868 	u8 sb_index /* Status block index */;
869 	u8 complete_cqe_flg /* if set - post completion to the CQE ring */;
870 	u8 complete_event_flg /* if set - post completion to the event ring */;
871 	u8 drop_ttl0_flg /* if set - drop packet with ttl=0 */;
872 	__le16 num_of_pbl_pages /* Number of pages in CQE PBL */;
873 /* if set - 802.1q tag will be removed and copied to CQE */
874 	u8 inner_vlan_stripping_en;
875 /* if set - outer tag wont be stripped, valid only in MF OVLAN mode. */
876 	u8 outer_vlan_stripping_dis;
877 	u8 queue_id /* Light L2 RX Queue ID */;
878 	u8 main_func_queue /* Set if this is the main PFs LL2 queue */;
879 /* Duplicate broadcast packets to LL2 main queue in mf_si mode. Valid if
880  * main_func_queue is set.
881  */
882 	u8 mf_si_bcast_accept_all;
883 /* Duplicate multicast packets to LL2 main queue in mf_si mode. Valid if
884  * main_func_queue is set.
885  */
886 	u8 mf_si_mcast_accept_all;
887 /* If set, the inner vlan (802.1q tag) priority that is written to cqe will be
888  * zero out, used for TenantDcb
889  */
890 /* Specifies how ll2 should deal with RX packets errors */
891 	struct core_rx_action_on_error action_on_error;
892 	u8 gsi_offload_flag /* set for GSI offload mode */;
893 /* If set, queue is subject for RX VFC classification. */
894 	u8 vport_id_valid;
895 	u8 vport_id /* Queue VPORT for RX VFC classification. */;
896 	u8 zero_prod_flg /* If set, zero RX producers. */;
897 /* If set, the inner vlan (802.1q tag) priority that is written to cqe will be
898  * zero out, used for TenantDcb
899  */
900 	u8 wipe_inner_vlan_pri_en;
901 	u8 reserved[2];
902 };
903 
904 
905 /*
906  * Ramrod data for rx queue stop ramrod
907  */
908 struct core_rx_stop_ramrod_data {
909 	u8 complete_cqe_flg /* post completion to the CQE ring if set */;
910 	u8 complete_event_flg /* post completion to the event ring if set */;
911 	u8 queue_id /* Light L2 RX Queue ID */;
912 	u8 reserved1;
913 	__le16 reserved2[2];
914 };
915 
916 
917 /*
918  * Flags for Core TX BD
919  */
920 struct core_tx_bd_data {
921 	__le16 as_bitfield;
922 /* Do not allow additional VLAN manipulations on this packet (DCB) */
923 #define CORE_TX_BD_DATA_FORCE_VLAN_MODE_MASK         0x1
924 #define CORE_TX_BD_DATA_FORCE_VLAN_MODE_SHIFT        0
925 /* Insert VLAN into packet. Cannot be set for LB packets
926  * (tx_dst == CORE_TX_DEST_LB)
927  */
928 #define CORE_TX_BD_DATA_VLAN_INSERTION_MASK          0x1
929 #define CORE_TX_BD_DATA_VLAN_INSERTION_SHIFT         1
930 /* This is the first BD of the packet (for debug) */
931 #define CORE_TX_BD_DATA_START_BD_MASK                0x1
932 #define CORE_TX_BD_DATA_START_BD_SHIFT               2
933 /* Calculate the IP checksum for the packet */
934 #define CORE_TX_BD_DATA_IP_CSUM_MASK                 0x1
935 #define CORE_TX_BD_DATA_IP_CSUM_SHIFT                3
936 /* Calculate the L4 checksum for the packet */
937 #define CORE_TX_BD_DATA_L4_CSUM_MASK                 0x1
938 #define CORE_TX_BD_DATA_L4_CSUM_SHIFT                4
939 /* Packet is IPv6 with extensions */
940 #define CORE_TX_BD_DATA_IPV6_EXT_MASK                0x1
941 #define CORE_TX_BD_DATA_IPV6_EXT_SHIFT               5
942 /* If IPv6+ext, and if l4_csum is 1, than this field indicates L4 protocol:
943  * 0-TCP, 1-UDP
944  */
945 #define CORE_TX_BD_DATA_L4_PROTOCOL_MASK             0x1
946 #define CORE_TX_BD_DATA_L4_PROTOCOL_SHIFT            6
947 /* The pseudo checksum mode to place in the L4 checksum field. Required only
948  * when IPv6+ext and l4_csum is set. (use enum core_l4_pseudo_checksum_mode)
949  */
950 #define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_MASK     0x1
951 #define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_SHIFT    7
952 /* Number of BDs that make up one packet - width wide enough to present
953  * CORE_LL2_TX_MAX_BDS_PER_PACKET
954  */
955 #define CORE_TX_BD_DATA_NBDS_MASK                    0xF
956 #define CORE_TX_BD_DATA_NBDS_SHIFT                   8
957 /* Use roce_flavor enum - Differentiate between Roce flavors is valid when
958  * connType is ROCE (use enum core_roce_flavor_type)
959  */
960 #define CORE_TX_BD_DATA_ROCE_FLAV_MASK               0x1
961 #define CORE_TX_BD_DATA_ROCE_FLAV_SHIFT              12
962 /* Calculate ip length */
963 #define CORE_TX_BD_DATA_IP_LEN_MASK                  0x1
964 #define CORE_TX_BD_DATA_IP_LEN_SHIFT                 13
965 /* disables the STAG insertion, relevant only in MF OVLAN mode. */
966 #define CORE_TX_BD_DATA_DISABLE_STAG_INSERTION_MASK  0x1
967 #define CORE_TX_BD_DATA_DISABLE_STAG_INSERTION_SHIFT 14
968 #define CORE_TX_BD_DATA_RESERVED0_MASK               0x1
969 #define CORE_TX_BD_DATA_RESERVED0_SHIFT              15
970 };
971 
972 /*
973  * Core TX BD for Light L2
974  */
975 struct core_tx_bd {
976 	struct regpair addr /* Buffer Address */;
977 	__le16 nbytes /* Number of Bytes in Buffer */;
978 /* Network packets: VLAN to insert to packet (if insertion flag set) LoopBack
979  * packets: echo data to pass to Rx
980  */
981 	__le16 nw_vlan_or_lb_echo;
982 	struct core_tx_bd_data bd_data /* BD Flags */;
983 	__le16 bitfield1;
984 /* L4 Header Offset from start of packet (in Words). This is needed if both
985  * l4_csum and ipv6_ext are set
986  */
987 #define CORE_TX_BD_L4_HDR_OFFSET_W_MASK  0x3FFF
988 #define CORE_TX_BD_L4_HDR_OFFSET_W_SHIFT 0
989 /* Packet destination - Network, Loopback or Drop (use enum core_tx_dest) */
990 #define CORE_TX_BD_TX_DST_MASK           0x3
991 #define CORE_TX_BD_TX_DST_SHIFT          14
992 };
993 
994 
995 
996 /*
997  * Light L2 TX Destination
998  */
999 enum core_tx_dest {
1000 	CORE_TX_DEST_NW /* TX Destination to the Network */,
1001 	CORE_TX_DEST_LB /* TX Destination to the Loopback */,
1002 	CORE_TX_DEST_RESERVED,
1003 	CORE_TX_DEST_DROP /* TX Drop */,
1004 	MAX_CORE_TX_DEST
1005 };
1006 
1007 
1008 /*
1009  * Ramrod data for tx queue start ramrod
1010  */
1011 struct core_tx_start_ramrod_data {
1012 	struct regpair pbl_base_addr /* Address of the pbl page */;
1013 	__le16 mtu /* Maximum transmission unit */;
1014 	__le16 sb_id /* Status block ID */;
1015 	u8 sb_index /* Status block protocol index */;
1016 	u8 stats_en /* Statistics Enable */;
1017 	u8 stats_id /* Statistics Counter ID */;
1018 	u8 conn_type /* connection type that loaded ll2 */;
1019 	__le16 pbl_size /* Number of BD pages pointed by PBL */;
1020 	__le16 qm_pq_id /* QM PQ ID */;
1021 	u8 gsi_offload_flag /* set for GSI offload mode */;
1022 	u8 ctx_stats_en /* Context statistics enable */;
1023 /* If set, queue is part of VPORT and subject for TX switching. */
1024 	u8 vport_id_valid;
1025 /* vport id of the current connection, used to access non_rdma_in_to_in_pri_map
1026  * which is per vport
1027  */
1028 	u8 vport_id;
1029 };
1030 
1031 
1032 /*
1033  * Ramrod data for tx queue stop ramrod
1034  */
1035 struct core_tx_stop_ramrod_data {
1036 	__le32 reserved0[2];
1037 };
1038 
1039 
1040 /*
1041  * Ramrod data for tx queue update ramrod
1042  */
1043 struct core_tx_update_ramrod_data {
1044 	u8 update_qm_pq_id_flg /* Flag to Update QM PQ ID */;
1045 	u8 reserved0;
1046 	__le16 qm_pq_id /* Updated QM PQ ID */;
1047 	__le32 reserved1[1];
1048 };
1049 
1050 
1051 /*
1052  * Enum flag for what type of dcb data to update
1053  */
1054 enum dcb_dscp_update_mode {
1055 /* use when no change should be done to DCB data */
1056 	DONT_UPDATE_DCB_DSCP,
1057 	UPDATE_DCB /* use to update only L2 (vlan) priority */,
1058 	UPDATE_DSCP /* use to update only IP DSCP */,
1059 	UPDATE_DCB_DSCP /* update vlan pri and DSCP */,
1060 	MAX_DCB_DSCP_UPDATE_FLAG
1061 };
1062 
1063 
1064 struct eth_mstorm_per_pf_stat {
1065 	struct regpair gre_discard_pkts /* Dropped GRE RX packets */;
1066 	struct regpair vxlan_discard_pkts /* Dropped VXLAN RX packets */;
1067 	struct regpair geneve_discard_pkts /* Dropped GENEVE RX packets */;
1068 	struct regpair lb_discard_pkts /* Dropped Tx switched packets */;
1069 };
1070 
1071 
1072 struct eth_mstorm_per_queue_stat {
1073 /* Number of packets discarded because TTL=0 (in IPv4) or hopLimit=0 (IPv6) */
1074 	struct regpair ttl0_discard;
1075 /* Number of packets discarded because they are bigger than MTU */
1076 	struct regpair packet_too_big_discard;
1077 /* Number of packets discarded due to lack of host buffers (BDs/SGEs/CQEs) */
1078 	struct regpair no_buff_discard;
1079 /* Number of packets discarded because of no active Rx connection */
1080 	struct regpair not_active_discard;
1081 /* number of coalesced packets in all TPA aggregations */
1082 	struct regpair tpa_coalesced_pkts;
1083 /* total number of TPA aggregations */
1084 	struct regpair tpa_coalesced_events;
1085 /* number of aggregations, which abnormally ended */
1086 	struct regpair tpa_aborts_num;
1087 /* total TCP payload length in all TPA aggregations */
1088 	struct regpair tpa_coalesced_bytes;
1089 };
1090 
1091 
1092 /*
1093  * Ethernet TX Per PF
1094  */
1095 struct eth_pstorm_per_pf_stat {
1096 /* number of total ucast bytes sent on loopback port without errors */
1097 	struct regpair sent_lb_ucast_bytes;
1098 /* number of total mcast bytes sent on loopback port without errors */
1099 	struct regpair sent_lb_mcast_bytes;
1100 /* number of total bcast bytes sent on loopback port without errors */
1101 	struct regpair sent_lb_bcast_bytes;
1102 /* number of total ucast packets sent on loopback port without errors */
1103 	struct regpair sent_lb_ucast_pkts;
1104 /* number of total mcast packets sent on loopback port without errors */
1105 	struct regpair sent_lb_mcast_pkts;
1106 /* number of total bcast packets sent on loopback port without errors */
1107 	struct regpair sent_lb_bcast_pkts;
1108 	struct regpair sent_gre_bytes /* Sent GRE bytes */;
1109 	struct regpair sent_vxlan_bytes /* Sent VXLAN bytes */;
1110 	struct regpair sent_geneve_bytes /* Sent GENEVE bytes */;
1111 	struct regpair sent_mpls_bytes /* Sent MPLS bytes */;
1112 	struct regpair sent_gre_mpls_bytes /* Sent GRE MPLS bytes (E5 Only) */;
1113 	struct regpair sent_udp_mpls_bytes /* Sent GRE MPLS bytes (E5 Only) */;
1114 	struct regpair sent_gre_pkts /* Sent GRE packets (E5 Only) */;
1115 	struct regpair sent_vxlan_pkts /* Sent VXLAN packets */;
1116 	struct regpair sent_geneve_pkts /* Sent GENEVE packets */;
1117 	struct regpair sent_mpls_pkts /* Sent MPLS packets (E5 Only) */;
1118 	struct regpair sent_gre_mpls_pkts /* Sent GRE MPLS packets (E5 Only) */;
1119 	struct regpair sent_udp_mpls_pkts /* Sent UDP MPLS packets (E5 Only) */;
1120 	struct regpair gre_drop_pkts /* Dropped GRE TX packets */;
1121 	struct regpair vxlan_drop_pkts /* Dropped VXLAN TX packets */;
1122 	struct regpair geneve_drop_pkts /* Dropped GENEVE TX packets */;
1123 	struct regpair mpls_drop_pkts /* Dropped MPLS TX packets (E5 Only) */;
1124 /* Dropped GRE MPLS TX packets (E5 Only) */
1125 	struct regpair gre_mpls_drop_pkts;
1126 /* Dropped UDP MPLS TX packets (E5 Only) */
1127 	struct regpair udp_mpls_drop_pkts;
1128 };
1129 
1130 
1131 /*
1132  * Ethernet TX Per Queue Stats
1133  */
1134 struct eth_pstorm_per_queue_stat {
1135 /* number of total bytes sent without errors */
1136 	struct regpair sent_ucast_bytes;
1137 /* number of total bytes sent without errors */
1138 	struct regpair sent_mcast_bytes;
1139 /* number of total bytes sent without errors */
1140 	struct regpair sent_bcast_bytes;
1141 /* number of total packets sent without errors */
1142 	struct regpair sent_ucast_pkts;
1143 /* number of total packets sent without errors */
1144 	struct regpair sent_mcast_pkts;
1145 /* number of total packets sent without errors */
1146 	struct regpair sent_bcast_pkts;
1147 /* number of total packets dropped due to errors */
1148 	struct regpair error_drop_pkts;
1149 };
1150 
1151 
1152 /*
1153  * ETH Rx producers data
1154  */
1155 struct eth_rx_rate_limit {
1156 /* Rate Limit Multiplier - (Storm Clock (MHz) * 8 / Desired Bandwidth (MB/s)) */
1157 	__le16 mult;
1158 /* Constant term to add (or subtract from number of cycles) */
1159 	__le16 cnst;
1160 	u8 add_sub_cnst /* Add (1) or subtract (0) constant term */;
1161 	u8 reserved0;
1162 	__le16 reserved1;
1163 };
1164 
1165 
1166 /* Update RSS indirection table entry command. One outstanding command supported
1167  * per PF.
1168  */
1169 struct eth_tstorm_rss_update_data {
1170 /* Valid flag. Driver must set this flag, FW clear valid flag when ready for new
1171  * RSS update command.
1172  */
1173 	u8 valid;
1174 /* Global VPORT ID. If RSS is disable for VPORT, RSS update command will be
1175  * ignored.
1176  */
1177 	u8 vport_id;
1178 	u8 ind_table_index /* RSS indirect table index that will be updated. */;
1179 	u8 reserved;
1180 	__le16 ind_table_value /* RSS indirect table new value. */;
1181 	__le16 reserved1 /* reserved. */;
1182 };
1183 
1184 
1185 struct eth_ustorm_per_pf_stat {
1186 /* number of total ucast bytes received on loopback port without errors */
1187 	struct regpair rcv_lb_ucast_bytes;
1188 /* number of total mcast bytes received on loopback port without errors */
1189 	struct regpair rcv_lb_mcast_bytes;
1190 /* number of total bcast bytes received on loopback port without errors */
1191 	struct regpair rcv_lb_bcast_bytes;
1192 /* number of total ucast packets received on loopback port without errors */
1193 	struct regpair rcv_lb_ucast_pkts;
1194 /* number of total mcast packets received on loopback port without errors */
1195 	struct regpair rcv_lb_mcast_pkts;
1196 /* number of total bcast packets received on loopback port without errors */
1197 	struct regpair rcv_lb_bcast_pkts;
1198 	struct regpair rcv_gre_bytes /* Received GRE bytes */;
1199 	struct regpair rcv_vxlan_bytes /* Received VXLAN bytes */;
1200 	struct regpair rcv_geneve_bytes /* Received GENEVE bytes */;
1201 	struct regpair rcv_gre_pkts /* Received GRE packets */;
1202 	struct regpair rcv_vxlan_pkts /* Received VXLAN packets */;
1203 	struct regpair rcv_geneve_pkts /* Received GENEVE packets */;
1204 };
1205 
1206 
1207 struct eth_ustorm_per_queue_stat {
1208 	struct regpair rcv_ucast_bytes;
1209 	struct regpair rcv_mcast_bytes;
1210 	struct regpair rcv_bcast_bytes;
1211 	struct regpair rcv_ucast_pkts;
1212 	struct regpair rcv_mcast_pkts;
1213 	struct regpair rcv_bcast_pkts;
1214 };
1215 
1216 
1217 /*
1218  * Event Ring VF-PF Channel data
1219  */
1220 struct vf_pf_channel_eqe_data {
1221 	struct regpair msg_addr /* VF-PF message address */;
1222 };
1223 
1224 /*
1225  * Event Ring malicious VF data
1226  */
1227 struct malicious_vf_eqe_data {
1228 	u8 vf_id /* Malicious VF ID */;
1229 	u8 err_id /* Malicious VF error (use enum malicious_vf_error_id) */;
1230 	__le16 reserved[3];
1231 };
1232 
1233 /*
1234  * Event Ring initial cleanup data
1235  */
1236 struct initial_cleanup_eqe_data {
1237 	u8 vf_id /* VF ID */;
1238 	u8 reserved[7];
1239 };
1240 
1241 /*
1242  * Event Data Union
1243  */
1244 union event_ring_data {
1245 	u8 bytes[8] /* Byte Array */;
1246 	struct vf_pf_channel_eqe_data vf_pf_channel /* VF-PF Channel data */;
1247 	struct iscsi_eqe_data iscsi_info /* Dedicated fields to iscsi data */;
1248 /* Dedicated fields to iscsi connect done results */
1249 	struct iscsi_connect_done_results iscsi_conn_done_info;
1250 	union rdma_eqe_data rdma_data /* Dedicated field for RDMA data */;
1251 	struct nvmf_eqe_data nvmf_data /* Dedicated field for NVMf data */;
1252 	struct malicious_vf_eqe_data malicious_vf /* Malicious VF data */;
1253 /* VF Initial Cleanup data */
1254 	struct initial_cleanup_eqe_data vf_init_cleanup;
1255 };
1256 
1257 
1258 /*
1259  * Event Ring Entry
1260  */
1261 struct event_ring_entry {
1262 	u8 protocol_id /* Event Protocol ID (use enum protocol_type) */;
1263 	u8 opcode /* Event Opcode (Per Protocol Type) */;
1264 	u8 reserved0 /* Reserved */;
1265 	u8 vfId /* vfId for this event, 0xFF if this is a PF event */;
1266 	__le16 echo /* Echo value from ramrod data on the host */;
1267 /* FW return code for SP ramrods. Use (according to protocol) eth_return_code,
1268  * or rdma_fw_return_code, or fcoe_completion_status
1269  */
1270 	u8 fw_return_code;
1271 	u8 flags;
1272 /* 0: synchronous EQE - a completion of SP message. 1: asynchronous EQE */
1273 #define EVENT_RING_ENTRY_ASYNC_MASK      0x1
1274 #define EVENT_RING_ENTRY_ASYNC_SHIFT     0
1275 #define EVENT_RING_ENTRY_RESERVED1_MASK  0x7F
1276 #define EVENT_RING_ENTRY_RESERVED1_SHIFT 1
1277 	union event_ring_data data;
1278 };
1279 
1280 /*
1281  * Event Ring Next Page Address
1282  */
1283 struct event_ring_next_addr {
1284 	struct regpair addr /* Next Page Address */;
1285 	__le32 reserved[2] /* Reserved */;
1286 };
1287 
1288 /*
1289  * Event Ring Element
1290  */
1291 union event_ring_element {
1292 	struct event_ring_entry entry /* Event Ring Entry */;
1293 /* Event Ring Next Page Address */
1294 	struct event_ring_next_addr next_addr;
1295 };
1296 
1297 
1298 
1299 /*
1300  * Ports mode
1301  */
1302 enum fw_flow_ctrl_mode {
1303 	flow_ctrl_pause,
1304 	flow_ctrl_pfc,
1305 	MAX_FW_FLOW_CTRL_MODE
1306 };
1307 
1308 
1309 /*
1310  * GFT profile type.
1311  */
1312 enum gft_profile_type {
1313 /* tunnel type, inner 4 tuple, IP type and L4 type match. */
1314 	GFT_PROFILE_TYPE_4_TUPLE,
1315 /* tunnel type, inner L4 destination port, IP type and L4 type match. */
1316 	GFT_PROFILE_TYPE_L4_DST_PORT,
1317 /* tunnel type, inner IP destination address and IP type match. */
1318 	GFT_PROFILE_TYPE_IP_DST_ADDR,
1319 /* tunnel type, inner IP source address and IP type match. */
1320 	GFT_PROFILE_TYPE_IP_SRC_ADDR,
1321 	GFT_PROFILE_TYPE_TUNNEL_TYPE /* tunnel type and outer IP type match. */,
1322 	MAX_GFT_PROFILE_TYPE
1323 };
1324 
1325 
1326 /*
1327  * Major and Minor hsi Versions
1328  */
1329 struct hsi_fp_ver_struct {
1330 	u8 minor_ver_arr[2] /* Minor Version of hsi loading pf */;
1331 	u8 major_ver_arr[2] /* Major Version of driver loading pf */;
1332 };
1333 
1334 
1335 /*
1336  * Integration Phase
1337  */
1338 enum integ_phase {
1339 	INTEG_PHASE_BB_A0_LATEST = 3 /* BB A0 latest integration phase */,
1340 	INTEG_PHASE_BB_B0_NO_MCP = 10 /* BB B0 without MCP */,
1341 	INTEG_PHASE_BB_B0_WITH_MCP = 11 /* BB B0 with MCP */,
1342 	MAX_INTEG_PHASE
1343 };
1344 
1345 
1346 /*
1347  * Ports mode
1348  */
1349 enum iwarp_ll2_tx_queues {
1350 /* LL2 queue for OOO packets sent in-order by the driver */
1351 	IWARP_LL2_IN_ORDER_TX_QUEUE = 1,
1352 /* LL2 queue for unaligned packets sent aligned by the driver */
1353 	IWARP_LL2_ALIGNED_TX_QUEUE,
1354 /* LL2 queue for unaligned packets sent aligned and was right-trimmed by the
1355  * driver
1356  */
1357 	IWARP_LL2_ALIGNED_RIGHT_TRIMMED_TX_QUEUE,
1358 	IWARP_LL2_ERROR /* Error indication */,
1359 	MAX_IWARP_LL2_TX_QUEUES
1360 };
1361 
1362 
1363 /*
1364  * Malicious VF error ID
1365  */
1366 enum malicious_vf_error_id {
1367 	MALICIOUS_VF_NO_ERROR /* Zero placeholder value */,
1368 /* Writing to VF/PF channel when it is not ready */
1369 	VF_PF_CHANNEL_NOT_READY,
1370 	VF_ZONE_MSG_NOT_VALID /* VF channel message is not valid */,
1371 	VF_ZONE_FUNC_NOT_ENABLED /* Parent PF of VF channel is not active */,
1372 /* TX packet is shorter then reported on BDs or from minimal size */
1373 	ETH_PACKET_TOO_SMALL,
1374 /* Tx packet with marked as insert VLAN when its illegal */
1375 	ETH_ILLEGAL_VLAN_MODE,
1376 	ETH_MTU_VIOLATION /* TX packet is greater then MTU */,
1377 /* TX packet has illegal inband tags marked */
1378 	ETH_ILLEGAL_INBAND_TAGS,
1379 /* Vlan cant be added to inband tag */
1380 	ETH_VLAN_INSERT_AND_INBAND_VLAN,
1381 /* indicated number of BDs for the packet is illegal */
1382 	ETH_ILLEGAL_NBDS,
1383 	ETH_FIRST_BD_WO_SOP /* 1st BD must have start_bd flag set */,
1384 /* There are not enough BDs for transmission of even one packet */
1385 	ETH_INSUFFICIENT_BDS,
1386 	ETH_ILLEGAL_LSO_HDR_NBDS /* Header NBDs value is illegal */,
1387 	ETH_ILLEGAL_LSO_MSS /* LSO MSS value is more than allowed */,
1388 /* empty BD (which not contains control flags) is illegal  */
1389 	ETH_ZERO_SIZE_BD,
1390 	ETH_ILLEGAL_LSO_HDR_LEN /* LSO header size is above the limit  */,
1391 /* In LSO its expected that on the local BD ring there will be at least MSS
1392  * bytes of data
1393  */
1394 	ETH_INSUFFICIENT_PAYLOAD,
1395 	ETH_EDPM_OUT_OF_SYNC /* Valid BDs on local ring after EDPM L2 sync */,
1396 /* Tunneled packet with IPv6+Ext without a proper number of BDs */
1397 	ETH_TUNN_IPV6_EXT_NBD_ERR,
1398 	ETH_CONTROL_PACKET_VIOLATION /* VF sent control frame such as PFC */,
1399 	ETH_ANTI_SPOOFING_ERR /* Anti-Spoofing verification failure */,
1400 /* packet scanned is too large (can be 9700 at most) */
1401 	ETH_PACKET_SIZE_TOO_LARGE,
1402 /* Tx packet with marked as insert VLAN when its illegal */
1403 	CORE_ILLEGAL_VLAN_MODE,
1404 /* indicated number of BDs for the packet is illegal */
1405 	CORE_ILLEGAL_NBDS,
1406 	CORE_FIRST_BD_WO_SOP /* 1st BD must have start_bd flag set */,
1407 /* There are not enough BDs for transmission of even one packet */
1408 	CORE_INSUFFICIENT_BDS,
1409 /* TX packet is shorter then reported on BDs or from minimal size */
1410 	CORE_PACKET_TOO_SMALL,
1411 	CORE_ILLEGAL_INBAND_TAGS /* TX packet has illegal inband tags marked */,
1412 	CORE_VLAN_INSERT_AND_INBAND_VLAN /* Vlan cant be added to inband tag */,
1413 	CORE_MTU_VIOLATION /* TX packet is greater then MTU */,
1414 	CORE_CONTROL_PACKET_VIOLATION /* VF sent control frame such as PFC */,
1415 	CORE_ANTI_SPOOFING_ERR /* Anti-Spoofing verification failure */,
1416 	MAX_MALICIOUS_VF_ERROR_ID
1417 };
1418 
1419 
1420 
1421 /*
1422  * Mstorm non-triggering VF zone
1423  */
1424 struct mstorm_non_trigger_vf_zone {
1425 /* VF statistic bucket */
1426 	struct eth_mstorm_per_queue_stat eth_queue_stat;
1427 /* VF RX queues producers */
1428 	struct eth_rx_prod_data
1429 		eth_rx_queue_producers[ETH_MAX_NUM_RX_QUEUES_PER_VF_QUAD];
1430 };
1431 
1432 
1433 /*
1434  * Mstorm VF zone
1435  */
1436 struct mstorm_vf_zone {
1437 /* non-interrupt-triggering zone */
1438 	struct mstorm_non_trigger_vf_zone non_trigger;
1439 };
1440 
1441 
1442 /*
1443  * vlan header including TPID and TCI fields
1444  */
1445 struct vlan_header {
1446 	__le16 tpid /* Tag Protocol Identifier */;
1447 	__le16 tci /* Tag Control Information */;
1448 };
1449 
1450 /*
1451  * outer tag configurations
1452  */
1453 struct outer_tag_config_struct {
1454 /* Enables updating S-tag priority from inner tag or DCB. Should be 1 for Bette
1455  * Davis, UFP with Host Control mode, and UFP with DCB over base interface.
1456  * else - 0.
1457  */
1458 	u8 enable_stag_pri_change;
1459 /* If inner_to_outer_pri_map is initialize then set pri_map_valid */
1460 	u8 pri_map_valid;
1461 	u8 reserved[2];
1462 /* In case mf_mode is MF_OVLAN, this field specifies the outer tag protocol
1463  * identifier and outer tag control information
1464  */
1465 	struct vlan_header outer_tag;
1466 /* Map from inner to outer priority. Set pri_map_valid when init map */
1467 	u8 inner_to_outer_pri_map[8];
1468 };
1469 
1470 
1471 /*
1472  * personality per PF
1473  */
1474 enum personality_type {
1475 	BAD_PERSONALITY_TYP,
1476 	PERSONALITY_ISCSI /* iSCSI and LL2 */,
1477 	PERSONALITY_FCOE /* Fcoe and LL2 */,
1478 	PERSONALITY_RDMA_AND_ETH /* Roce or Iwarp, Eth and LL2 */,
1479 	PERSONALITY_RDMA /* Roce and LL2 */,
1480 	PERSONALITY_CORE /* CORE(LL2) */,
1481 	PERSONALITY_ETH /* Ethernet */,
1482 	PERSONALITY_TOE /* Toe and LL2 */,
1483 	MAX_PERSONALITY_TYPE
1484 };
1485 
1486 
1487 /*
1488  * tunnel configuration
1489  */
1490 struct pf_start_tunnel_config {
1491 /* Set VXLAN tunnel UDP destination port to vxlan_udp_port. If not set -
1492  * FW will use a default port
1493  */
1494 	u8 set_vxlan_udp_port_flg;
1495 /* Set GENEVE tunnel UDP destination port to geneve_udp_port. If not set -
1496  * FW will use a default port
1497  */
1498 	u8 set_geneve_udp_port_flg;
1499 /* Set no-innet-L2 VXLAN tunnel UDP destination port to
1500  * no_inner_l2_vxlan_udp_port. If not set - FW will use a default port
1501  */
1502 	u8 set_no_inner_l2_vxlan_udp_port_flg;
1503 	u8 tunnel_clss_vxlan /* Rx classification scheme for VXLAN tunnel. */;
1504 /* Rx classification scheme for l2 GENEVE tunnel. */
1505 	u8 tunnel_clss_l2geneve;
1506 /* Rx classification scheme for ip GENEVE tunnel. */
1507 	u8 tunnel_clss_ipgeneve;
1508 	u8 tunnel_clss_l2gre /* Rx classification scheme for l2 GRE tunnel. */;
1509 	u8 tunnel_clss_ipgre /* Rx classification scheme for ip GRE tunnel. */;
1510 /* VXLAN tunnel UDP destination port. Valid if set_vxlan_udp_port_flg=1 */
1511 	__le16 vxlan_udp_port;
1512 /* GENEVE tunnel UDP destination port. Valid if set_geneve_udp_port_flg=1 */
1513 	__le16 geneve_udp_port;
1514 /* no-innet-L2 VXLAN  tunnel UDP destination port. Valid if
1515  * set_no_inner_l2_vxlan_udp_port_flg=1
1516  */
1517 	__le16 no_inner_l2_vxlan_udp_port;
1518 	__le16 reserved[3];
1519 };
1520 
1521 /*
1522  * Ramrod data for PF start ramrod
1523  */
1524 struct pf_start_ramrod_data {
1525 	struct regpair event_ring_pbl_addr /* Address of event ring PBL */;
1526 /* PBL address of consolidation queue */
1527 	struct regpair consolid_q_pbl_addr;
1528 /* tunnel configuration. */
1529 	struct pf_start_tunnel_config tunnel_config;
1530 	__le16 event_ring_sb_id /* Status block ID */;
1531 /* All VfIds owned by Pf will be from baseVfId till baseVfId+numVfs */
1532 	u8 base_vf_id;
1533 	u8 num_vfs /* Amount of vfs owned by PF */;
1534 	u8 event_ring_num_pages /* Number of PBL pages in event ring */;
1535 	u8 event_ring_sb_index /* Status block index */;
1536 	u8 path_id /* HW path ID (engine ID) */;
1537 	u8 warning_as_error /* In FW asserts, treat warning as error */;
1538 /* If not set - throw a warning for each ramrod (for debug) */
1539 	u8 dont_log_ramrods;
1540 	u8 personality /* define what type of personality is new PF */;
1541 /* Log type mask. Each bit set enables a corresponding event type logging.
1542  * Event types are defined as ASSERT_LOG_TYPE_xxx
1543  */
1544 	__le16 log_type_mask;
1545 	u8 mf_mode /* Multi function mode */;
1546 	u8 integ_phase /* Integration phase */;
1547 /* If set, inter-pf tx switching is allowed in Switch Independent func mode */
1548 	u8 allow_npar_tx_switching;
1549 	u8 reserved0;
1550 /* FP HSI version to be used by FW */
1551 	struct hsi_fp_ver_struct hsi_fp_ver;
1552 /* Outer tag configurations */
1553 	struct outer_tag_config_struct outer_tag_config;
1554 };
1555 
1556 
1557 
1558 /*
1559  * Per protocol DCB data
1560  */
1561 struct protocol_dcb_data {
1562 	u8 dcb_enable_flag /* Enable DCB */;
1563 	u8 dscp_enable_flag /* Enable updating DSCP value */;
1564 	u8 dcb_priority /* DCB priority */;
1565 	u8 dcb_tc /* DCB TC */;
1566 	u8 dscp_val /* DSCP value to write if dscp_enable_flag is set */;
1567 /* When DCB is enabled - if this flag is set, dont add VLAN 0 tag to untagged
1568  * frames
1569  */
1570 	u8 dcb_dont_add_vlan0;
1571 };
1572 
1573 /*
1574  * Update tunnel configuration
1575  */
1576 struct pf_update_tunnel_config {
1577 /* Update RX per PF tunnel classification scheme. */
1578 	u8 update_rx_pf_clss;
1579 /* Update per PORT default tunnel RX classification scheme for traffic with
1580  * unknown unicast outer MAC in NPAR mode.
1581  */
1582 	u8 update_rx_def_ucast_clss;
1583 /* Update per PORT default tunnel RX classification scheme for traffic with non
1584  * unicast outer MAC in NPAR mode.
1585  */
1586 	u8 update_rx_def_non_ucast_clss;
1587 /* Update VXLAN tunnel UDP destination port. */
1588 	u8 set_vxlan_udp_port_flg;
1589 /* Update GENEVE tunnel UDP destination port. */
1590 	u8 set_geneve_udp_port_flg;
1591 /* Update no-innet-L2 VXLAN  tunnel UDP destination port. */
1592 	u8 set_no_inner_l2_vxlan_udp_port_flg;
1593 	u8 tunnel_clss_vxlan /* Classification scheme for VXLAN tunnel. */;
1594 /* Classification scheme for l2 GENEVE tunnel. */
1595 	u8 tunnel_clss_l2geneve;
1596 /* Classification scheme for ip GENEVE tunnel. */
1597 	u8 tunnel_clss_ipgeneve;
1598 	u8 tunnel_clss_l2gre /* Classification scheme for l2 GRE tunnel. */;
1599 	u8 tunnel_clss_ipgre /* Classification scheme for ip GRE tunnel. */;
1600 	u8 reserved;
1601 	__le16 vxlan_udp_port /* VXLAN tunnel UDP destination port. */;
1602 	__le16 geneve_udp_port /* GENEVE tunnel UDP destination port. */;
1603 /* no-innet-L2 VXLAN  tunnel UDP destination port. */
1604 	__le16 no_inner_l2_vxlan_udp_port;
1605 	__le16 reserved1[3];
1606 };
1607 
1608 /*
1609  * Data for port update ramrod
1610  */
1611 struct pf_update_ramrod_data {
1612 /* Update Eth DCB  data indication (use enum dcb_dscp_update_mode) */
1613 	u8 update_eth_dcb_data_mode;
1614 /* Update FCOE DCB  data indication (use enum dcb_dscp_update_mode) */
1615 	u8 update_fcoe_dcb_data_mode;
1616 /* Update iSCSI DCB  data indication (use enum dcb_dscp_update_mode) */
1617 	u8 update_iscsi_dcb_data_mode;
1618 	u8 update_roce_dcb_data_mode /* Update ROCE DCB  data indication */;
1619 /* Update RROCE (RoceV2) DCB  data indication */
1620 	u8 update_rroce_dcb_data_mode;
1621 	u8 update_iwarp_dcb_data_mode /* Update IWARP DCB  data indication */;
1622 	u8 update_mf_vlan_flag /* Update MF outer vlan Id */;
1623 /* Update Enable STAG Priority Change indication */
1624 	u8 update_enable_stag_pri_change;
1625 	struct protocol_dcb_data eth_dcb_data /* core eth related fields */;
1626 	struct protocol_dcb_data fcoe_dcb_data /* core fcoe related fields */;
1627 /* core iscsi related fields */
1628 	struct protocol_dcb_data iscsi_dcb_data;
1629 	struct protocol_dcb_data roce_dcb_data /* core roce related fields */;
1630 /* core roce related fields */
1631 	struct protocol_dcb_data rroce_dcb_data;
1632 /* core iwarp related fields */
1633 	struct protocol_dcb_data iwarp_dcb_data;
1634 	__le16 mf_vlan /* new outer vlan id value */;
1635 /* enables updating S-tag priority from inner tag or DCB. Should be 1 for Bette
1636  * Davis, UFP with Host Control mode, and UFP with DCB over base interface.
1637  * else - 0
1638  */
1639 	u8 enable_stag_pri_change;
1640 	u8 reserved;
1641 /* tunnel configuration. */
1642 	struct pf_update_tunnel_config tunnel_config;
1643 };
1644 
1645 
1646 
1647 /*
1648  * Ports mode
1649  */
1650 enum ports_mode {
1651 	ENGX2_PORTX1 /* 2 engines x 1 port */,
1652 	ENGX2_PORTX2 /* 2 engines x 2 ports */,
1653 	ENGX1_PORTX1 /* 1 engine  x 1 port */,
1654 	ENGX1_PORTX2 /* 1 engine  x 2 ports */,
1655 	ENGX1_PORTX4 /* 1 engine  x 4 ports */,
1656 	MAX_PORTS_MODE
1657 };
1658 
1659 
1660 
1661 /*
1662  * use to index in hsi_fp_[major|minor]_ver_arr per protocol
1663  */
1664 enum protocol_version_array_key {
1665 	ETH_VER_KEY = 0,
1666 	ROCE_VER_KEY,
1667 	MAX_PROTOCOL_VERSION_ARRAY_KEY
1668 };
1669 
1670 
1671 
1672 /*
1673  * RDMA TX Stats
1674  */
1675 struct rdma_sent_stats {
1676 	struct regpair sent_bytes /* number of total RDMA bytes sent */;
1677 	struct regpair sent_pkts /* number of total RDMA packets sent */;
1678 };
1679 
1680 /*
1681  * Pstorm non-triggering VF zone
1682  */
1683 struct pstorm_non_trigger_vf_zone {
1684 /* VF statistic bucket */
1685 	struct eth_pstorm_per_queue_stat eth_queue_stat;
1686 	struct rdma_sent_stats rdma_stats /* RoCE sent statistics */;
1687 };
1688 
1689 
1690 /*
1691  * Pstorm VF zone
1692  */
1693 struct pstorm_vf_zone {
1694 /* non-interrupt-triggering zone */
1695 	struct pstorm_non_trigger_vf_zone non_trigger;
1696 	struct regpair reserved[7] /* vf_zone size mus be power of 2 */;
1697 };
1698 
1699 
1700 /*
1701  * Ramrod Header of SPQE
1702  */
1703 struct ramrod_header {
1704 	__le32 cid /* Slowpath Connection CID */;
1705 	u8 cmd_id /* Ramrod Cmd (Per Protocol Type) */;
1706 	u8 protocol_id /* Ramrod Protocol ID */;
1707 	__le16 echo /* Ramrod echo */;
1708 };
1709 
1710 
1711 /*
1712  * RDMA RX Stats
1713  */
1714 struct rdma_rcv_stats {
1715 	struct regpair rcv_bytes /* number of total RDMA bytes received */;
1716 	struct regpair rcv_pkts /* number of total RDMA packets received */;
1717 };
1718 
1719 
1720 
1721 /*
1722  * Data for update QCN/DCQCN RL ramrod
1723  */
1724 struct rl_update_ramrod_data {
1725 	u8 qcn_update_param_flg /* Update QCN global params: timeout. */;
1726 /* Update DCQCN global params: timeout, g, k. */
1727 	u8 dcqcn_update_param_flg;
1728 	u8 rl_init_flg /* Init RL parameters, when RL disabled. */;
1729 	u8 rl_start_flg /* Start RL in IDLE state. Set rate to maximum. */;
1730 	u8 rl_stop_flg /* Stop RL. */;
1731 	u8 rl_id_first /* ID of first or single RL, that will be updated. */;
1732 /* ID of last RL, that will be updated. If clear, single RL will updated. */
1733 	u8 rl_id_last;
1734 	u8 rl_dc_qcn_flg /* If set, RL will used for DCQCN. */;
1735 /* If set, alpha will be reset to 1 when the state machine is idle. */
1736 	u8 dcqcn_reset_alpha_on_idle;
1737 /* Byte counter threshold to change rate increase stage. */
1738 	u8 rl_bc_stage_th;
1739 /* Timer threshold to change rate increase stage. */
1740 	u8 rl_timer_stage_th;
1741 	u8 reserved1;
1742 	__le32 rl_bc_rate /* Byte Counter Limit. */;
1743 	__le16 rl_max_rate /* Maximum rate in 1.6 Mbps resolution. */;
1744 	__le16 rl_r_ai /* Active increase rate. */;
1745 	__le16 rl_r_hai /* Hyper active increase rate. */;
1746 	__le16 dcqcn_g /* DCQCN Alpha update gain in 1/64K resolution . */;
1747 	__le32 dcqcn_k_us /* DCQCN Alpha update interval. */;
1748 	__le32 dcqcn_timeuot_us /* DCQCN timeout. */;
1749 	__le32 qcn_timeuot_us /* QCN timeout. */;
1750 	__le32 reserved2;
1751 };
1752 
1753 
1754 /*
1755  * Slowpath Element (SPQE)
1756  */
1757 struct slow_path_element {
1758 	struct ramrod_header hdr /* Ramrod Header */;
1759 	struct regpair data_ptr /* Pointer to the Ramrod Data on the Host */;
1760 };
1761 
1762 
1763 /*
1764  * Tstorm non-triggering VF zone
1765  */
1766 struct tstorm_non_trigger_vf_zone {
1767 	struct rdma_rcv_stats rdma_stats /* RoCE received statistics */;
1768 };
1769 
1770 
1771 struct tstorm_per_port_stat {
1772 /* packet is dropped because it was truncated in NIG */
1773 	struct regpair trunc_error_discard;
1774 /* packet is dropped because of Ethernet FCS error */
1775 	struct regpair mac_error_discard;
1776 /* packet is dropped because classification was unsuccessful */
1777 	struct regpair mftag_filter_discard;
1778 /* packet was passed to Ethernet and dropped because of no mac filter match */
1779 	struct regpair eth_mac_filter_discard;
1780 /* packet passed to Light L2 and dropped because Light L2 is not configured for
1781  * this PF
1782  */
1783 	struct regpair ll2_mac_filter_discard;
1784 /* packet passed to Light L2 and dropped because Light L2 is not configured for
1785  * this PF
1786  */
1787 	struct regpair ll2_conn_disabled_discard;
1788 /* packet is an ISCSI irregular packet */
1789 	struct regpair iscsi_irregular_pkt;
1790 /* packet is an FCOE irregular packet */
1791 	struct regpair fcoe_irregular_pkt;
1792 /* packet is an ROCE irregular packet */
1793 	struct regpair roce_irregular_pkt;
1794 /* packet is an IWARP irregular packet */
1795 	struct regpair iwarp_irregular_pkt;
1796 /* packet is an ETH irregular packet */
1797 	struct regpair eth_irregular_pkt;
1798 /* packet is an TOE irregular packet */
1799 	struct regpair toe_irregular_pkt;
1800 /* packet is an PREROCE irregular packet */
1801 	struct regpair preroce_irregular_pkt;
1802 	struct regpair eth_gre_tunn_filter_discard /* GRE dropped packets */;
1803 /* VXLAN dropped packets */
1804 	struct regpair eth_vxlan_tunn_filter_discard;
1805 /* GENEVE dropped packets */
1806 	struct regpair eth_geneve_tunn_filter_discard;
1807 	struct regpair eth_gft_drop_pkt /* GFT dropped packets */;
1808 };
1809 
1810 
1811 /*
1812  * Tstorm VF zone
1813  */
1814 struct tstorm_vf_zone {
1815 /* non-interrupt-triggering zone */
1816 	struct tstorm_non_trigger_vf_zone non_trigger;
1817 };
1818 
1819 
1820 /*
1821  * Tunnel classification scheme
1822  */
1823 enum tunnel_clss {
1824 /* Use MAC and VLAN from first L2 header for vport classification. */
1825 	TUNNEL_CLSS_MAC_VLAN = 0,
1826 /* Use MAC from first L2 header and VNI from tunnel header for vport
1827  * classification
1828  */
1829 	TUNNEL_CLSS_MAC_VNI,
1830 /* Use MAC and VLAN from last L2 header for vport classification */
1831 	TUNNEL_CLSS_INNER_MAC_VLAN,
1832 /* Use MAC from last L2 header and VNI from tunnel header for vport
1833  * classification
1834  */
1835 	TUNNEL_CLSS_INNER_MAC_VNI,
1836 /* Use MAC and VLAN from last L2 header for vport classification. If no exact
1837  * match, use MAC and VLAN from first L2 header for classification.
1838  */
1839 	TUNNEL_CLSS_MAC_VLAN_DUAL_STAGE,
1840 	MAX_TUNNEL_CLSS
1841 };
1842 
1843 
1844 
1845 /*
1846  * Ustorm non-triggering VF zone
1847  */
1848 struct ustorm_non_trigger_vf_zone {
1849 /* VF statistic bucket */
1850 	struct eth_ustorm_per_queue_stat eth_queue_stat;
1851 	struct regpair vf_pf_msg_addr /* VF-PF message address */;
1852 };
1853 
1854 
1855 /*
1856  * Ustorm triggering VF zone
1857  */
1858 struct ustorm_trigger_vf_zone {
1859 	u8 vf_pf_msg_valid /* VF-PF message valid flag */;
1860 	u8 reserved[7];
1861 };
1862 
1863 
1864 /*
1865  * Ustorm VF zone
1866  */
1867 struct ustorm_vf_zone {
1868 /* non-interrupt-triggering zone */
1869 	struct ustorm_non_trigger_vf_zone non_trigger;
1870 	struct ustorm_trigger_vf_zone trigger /* interrupt triggering zone */;
1871 };
1872 
1873 
1874 /*
1875  * VF-PF channel data
1876  */
1877 struct vf_pf_channel_data {
1878 /* 0: VF-PF Channel NOT ready. Waiting for ack from PF driver. 1: VF-PF Channel
1879  * is ready for a new transaction.
1880  */
1881 	__le32 ready;
1882 /* 0: VF-PF Channel is invalid because of malicious VF. 1: VF-PF Channel is
1883  * valid.
1884  */
1885 	u8 valid;
1886 	u8 reserved0;
1887 	__le16 reserved1;
1888 };
1889 
1890 
1891 /*
1892  * Ramrod data for VF start ramrod
1893  */
1894 struct vf_start_ramrod_data {
1895 	u8 vf_id /* VF ID */;
1896 /* If set, initial cleanup ack will be sent to parent PF SP event queue */
1897 	u8 enable_flr_ack;
1898 	__le16 opaque_fid /* VF opaque FID */;
1899 	u8 personality /* define what type of personality is new VF */;
1900 	u8 reserved[7];
1901 /* FP HSI version to be used by FW */
1902 	struct hsi_fp_ver_struct hsi_fp_ver;
1903 };
1904 
1905 
1906 /*
1907  * Ramrod data for VF start ramrod
1908  */
1909 struct vf_stop_ramrod_data {
1910 	u8 vf_id /* VF ID */;
1911 	u8 reserved0;
1912 	__le16 reserved1;
1913 	__le32 reserved2;
1914 };
1915 
1916 
1917 /*
1918  * VF zone size mode.
1919  */
1920 enum vf_zone_size_mode {
1921 /* Default VF zone size. Up to 192 VF supported. */
1922 	VF_ZONE_SIZE_MODE_DEFAULT,
1923 /* Doubled VF zone size. Up to 96 VF supported. */
1924 	VF_ZONE_SIZE_MODE_DOUBLE,
1925 /* Quad VF zone size. Up to 48 VF supported. */
1926 	VF_ZONE_SIZE_MODE_QUAD,
1927 	MAX_VF_ZONE_SIZE_MODE
1928 };
1929 
1930 
1931 
1932 
1933 /*
1934  * Xstorm non-triggering VF zone
1935  */
1936 struct xstorm_non_trigger_vf_zone {
1937 	struct regpair non_edpm_ack_pkts /* RoCE received statistics */;
1938 };
1939 
1940 
1941 /*
1942  * Tstorm VF zone
1943  */
1944 struct xstorm_vf_zone {
1945 /* non-interrupt-triggering zone */
1946 	struct xstorm_non_trigger_vf_zone non_trigger;
1947 };
1948 
1949 
1950 
1951 /*
1952  * Attentions status block
1953  */
1954 struct atten_status_block {
1955 	__le32 atten_bits;
1956 	__le32 atten_ack;
1957 	__le16 reserved0;
1958 	__le16 sb_index /* status block running index */;
1959 	__le32 reserved1;
1960 };
1961 
1962 
1963 /*
1964  * DMAE command
1965  */
1966 struct dmae_cmd {
1967 	__le32 opcode;
1968 /* DMA Source. 0 - PCIe, 1 - GRC (use enum dmae_cmd_src_enum) */
1969 #define DMAE_CMD_SRC_MASK              0x1
1970 #define DMAE_CMD_SRC_SHIFT             0
1971 /* DMA destination. 0 - None, 1 - PCIe, 2 - GRC, 3 - None
1972  * (use enum dmae_cmd_dst_enum)
1973  */
1974 #define DMAE_CMD_DST_MASK              0x3
1975 #define DMAE_CMD_DST_SHIFT             1
1976 /* Completion destination. 0 - PCie, 1 - GRC (use enum dmae_cmd_c_dst_enum) */
1977 #define DMAE_CMD_C_DST_MASK            0x1
1978 #define DMAE_CMD_C_DST_SHIFT           3
1979 /* Reset the CRC result (do not use the previous result as the seed) */
1980 #define DMAE_CMD_CRC_RESET_MASK        0x1
1981 #define DMAE_CMD_CRC_RESET_SHIFT       4
1982 /* Reset the source address in the next go to the same source address of the
1983  * previous go
1984  */
1985 #define DMAE_CMD_SRC_ADDR_RESET_MASK   0x1
1986 #define DMAE_CMD_SRC_ADDR_RESET_SHIFT  5
1987 /* Reset the destination address in the next go to the same destination address
1988  * of the previous go
1989  */
1990 #define DMAE_CMD_DST_ADDR_RESET_MASK   0x1
1991 #define DMAE_CMD_DST_ADDR_RESET_SHIFT  6
1992 /* 0   completion function is the same as src function, 1 - 0 completion
1993  * function is the same as dst function (use enum dmae_cmd_comp_func_enum)
1994  */
1995 #define DMAE_CMD_COMP_FUNC_MASK        0x1
1996 #define DMAE_CMD_COMP_FUNC_SHIFT       7
1997 /* 0 - Do not write a completion word, 1 - Write a completion word
1998  * (use enum dmae_cmd_comp_word_en_enum)
1999  */
2000 #define DMAE_CMD_COMP_WORD_EN_MASK     0x1
2001 #define DMAE_CMD_COMP_WORD_EN_SHIFT    8
2002 /* 0 - Do not write a CRC word, 1 - Write a CRC word
2003  * (use enum dmae_cmd_comp_crc_en_enum)
2004  */
2005 #define DMAE_CMD_COMP_CRC_EN_MASK      0x1
2006 #define DMAE_CMD_COMP_CRC_EN_SHIFT     9
2007 /* The CRC word should be taken from the DMAE address space from address 9+X,
2008  * where X is the value in these bits.
2009  */
2010 #define DMAE_CMD_COMP_CRC_OFFSET_MASK  0x7
2011 #define DMAE_CMD_COMP_CRC_OFFSET_SHIFT 10
2012 #define DMAE_CMD_RESERVED1_MASK        0x1
2013 #define DMAE_CMD_RESERVED1_SHIFT       13
2014 #define DMAE_CMD_ENDIANITY_MODE_MASK   0x3
2015 #define DMAE_CMD_ENDIANITY_MODE_SHIFT  14
2016 /* The field specifies how the completion word is affected by PCIe read error. 0
2017  * Send a regular completion, 1 - Send a completion with an error indication,
2018  * 2 do not send a completion (use enum dmae_cmd_error_handling_enum)
2019  */
2020 #define DMAE_CMD_ERR_HANDLING_MASK     0x3
2021 #define DMAE_CMD_ERR_HANDLING_SHIFT    16
2022 /* The port ID to be placed on the  RF FID  field of the GRC bus. this field is
2023  * used both when GRC is the destination and when it is the source of the DMAE
2024  * transaction.
2025  */
2026 #define DMAE_CMD_PORT_ID_MASK          0x3
2027 #define DMAE_CMD_PORT_ID_SHIFT         18
2028 /* Source PCI function number [3:0] */
2029 #define DMAE_CMD_SRC_PF_ID_MASK        0xF
2030 #define DMAE_CMD_SRC_PF_ID_SHIFT       20
2031 /* Destination PCI function number [3:0] */
2032 #define DMAE_CMD_DST_PF_ID_MASK        0xF
2033 #define DMAE_CMD_DST_PF_ID_SHIFT       24
2034 #define DMAE_CMD_SRC_VF_ID_VALID_MASK  0x1 /* Source VFID valid */
2035 #define DMAE_CMD_SRC_VF_ID_VALID_SHIFT 28
2036 #define DMAE_CMD_DST_VF_ID_VALID_MASK  0x1 /* Destination VFID valid */
2037 #define DMAE_CMD_DST_VF_ID_VALID_SHIFT 29
2038 #define DMAE_CMD_RESERVED2_MASK        0x3
2039 #define DMAE_CMD_RESERVED2_SHIFT       30
2040 /* PCIe source address low in bytes or GRC source address in DW */
2041 	__le32 src_addr_lo;
2042 /* PCIe source address high in bytes or reserved (if source is GRC) */
2043 	__le32 src_addr_hi;
2044 /* PCIe destination address low in bytes or GRC destination address in DW */
2045 	__le32 dst_addr_lo;
2046 /* PCIe destination address high in bytes or reserved (if destination is GRC) */
2047 	__le32 dst_addr_hi;
2048 	__le16 length_dw /* Length in DW */;
2049 	__le16 opcode_b;
2050 #define DMAE_CMD_SRC_VF_ID_MASK        0xFF /* Source VF id */
2051 #define DMAE_CMD_SRC_VF_ID_SHIFT       0
2052 #define DMAE_CMD_DST_VF_ID_MASK        0xFF /* Destination VF id */
2053 #define DMAE_CMD_DST_VF_ID_SHIFT       8
2054 /* PCIe completion address low in bytes or GRC completion address in DW */
2055 	__le32 comp_addr_lo;
2056 /* PCIe completion address high in bytes or reserved (if completion address is
2057  * GRC)
2058  */
2059 	__le32 comp_addr_hi;
2060 	__le32 comp_val /* Value to write to completion address */;
2061 	__le32 crc32 /* crc16 result */;
2062 	__le32 crc_32_c /* crc32_c result */;
2063 	__le16 crc16 /* crc16 result */;
2064 	__le16 crc16_c /* crc16_c result */;
2065 	__le16 crc10 /* crc_t10 result */;
2066 	__le16 error_bit_reserved;
2067 #define DMAE_CMD_ERROR_BIT_MASK        0x1 /* Error bit */
2068 #define DMAE_CMD_ERROR_BIT_SHIFT       0
2069 #define DMAE_CMD_RESERVED_MASK         0x7FFF
2070 #define DMAE_CMD_RESERVED_SHIFT        1
2071 	__le16 xsum16 /* checksum16 result  */;
2072 	__le16 xsum8 /* checksum8 result  */;
2073 };
2074 
2075 
2076 enum dmae_cmd_comp_crc_en_enum {
2077 	dmae_cmd_comp_crc_disabled /* Do not write a CRC word */,
2078 	dmae_cmd_comp_crc_enabled /* Write a CRC word */,
2079 	MAX_DMAE_CMD_COMP_CRC_EN_ENUM
2080 };
2081 
2082 
2083 enum dmae_cmd_comp_func_enum {
2084 /* completion word and/or CRC will be sent to SRC-PCI function/SRC VFID */
2085 	dmae_cmd_comp_func_to_src,
2086 /* completion word and/or CRC will be sent to DST-PCI function/DST VFID */
2087 	dmae_cmd_comp_func_to_dst,
2088 	MAX_DMAE_CMD_COMP_FUNC_ENUM
2089 };
2090 
2091 
2092 enum dmae_cmd_comp_word_en_enum {
2093 	dmae_cmd_comp_word_disabled /* Do not write a completion word */,
2094 	dmae_cmd_comp_word_enabled /* Write the completion word */,
2095 	MAX_DMAE_CMD_COMP_WORD_EN_ENUM
2096 };
2097 
2098 
2099 enum dmae_cmd_c_dst_enum {
2100 	dmae_cmd_c_dst_pcie,
2101 	dmae_cmd_c_dst_grc,
2102 	MAX_DMAE_CMD_C_DST_ENUM
2103 };
2104 
2105 
2106 enum dmae_cmd_dst_enum {
2107 	dmae_cmd_dst_none_0,
2108 	dmae_cmd_dst_pcie,
2109 	dmae_cmd_dst_grc,
2110 	dmae_cmd_dst_none_3,
2111 	MAX_DMAE_CMD_DST_ENUM
2112 };
2113 
2114 
2115 enum dmae_cmd_error_handling_enum {
2116 /* Send a regular completion (with no error indication) */
2117 	dmae_cmd_error_handling_send_regular_comp,
2118 /* Send a completion with an error indication (i.e. set bit 31 of the completion
2119  * word)
2120  */
2121 	dmae_cmd_error_handling_send_comp_with_err,
2122 	dmae_cmd_error_handling_dont_send_comp /* Do not send a completion */,
2123 	MAX_DMAE_CMD_ERROR_HANDLING_ENUM
2124 };
2125 
2126 
2127 enum dmae_cmd_src_enum {
2128 	dmae_cmd_src_pcie /* The source is the PCIe */,
2129 	dmae_cmd_src_grc /* The source is the GRC */,
2130 	MAX_DMAE_CMD_SRC_ENUM
2131 };
2132 
2133 
2134 /*
2135  * DMAE parameters
2136  */
2137 struct dmae_params {
2138 	__le32 flags;
2139 /* If set and the source is a block of length DMAE_MAX_RW_SIZE and the
2140  * destination is larger, the source block will be duplicated as many
2141  * times as required to fill the destination block. This is used mostly
2142  * to write a zeroed buffer to destination address using DMA
2143  */
2144 #define DMAE_PARAMS_RW_REPL_SRC_MASK     0x1
2145 #define DMAE_PARAMS_RW_REPL_SRC_SHIFT    0
2146 /* If set, the source is a VF, and the source VF ID is taken from the
2147  * src_vf_id parameter.
2148  */
2149 #define DMAE_PARAMS_SRC_VF_VALID_MASK    0x1
2150 #define DMAE_PARAMS_SRC_VF_VALID_SHIFT   1
2151 /* If set, the destination is a VF, and the destination VF ID is taken
2152  * from the dst_vf_id parameter.
2153  */
2154 #define DMAE_PARAMS_DST_VF_VALID_MASK    0x1
2155 #define DMAE_PARAMS_DST_VF_VALID_SHIFT   2
2156 /* If set, a completion is sent to the destination function.
2157  * Otherwise its sent to the source function.
2158  */
2159 #define DMAE_PARAMS_COMPLETION_DST_MASK  0x1
2160 #define DMAE_PARAMS_COMPLETION_DST_SHIFT 3
2161 /* If set, the port ID is taken from the port_id parameter.
2162  * Otherwise, the current port ID is used.
2163  */
2164 #define DMAE_PARAMS_PORT_VALID_MASK      0x1
2165 #define DMAE_PARAMS_PORT_VALID_SHIFT     4
2166 /* If set, the source PF ID is taken from the src_pf_id parameter.
2167  * Otherwise, the current PF ID is used.
2168  */
2169 #define DMAE_PARAMS_SRC_PF_VALID_MASK    0x1
2170 #define DMAE_PARAMS_SRC_PF_VALID_SHIFT   5
2171 /* If set, the destination PF ID is taken from the dst_pf_id parameter.
2172  * Otherwise, the current PF ID is used
2173  */
2174 #define DMAE_PARAMS_DST_PF_VALID_MASK    0x1
2175 #define DMAE_PARAMS_DST_PF_VALID_SHIFT   6
2176 #define DMAE_PARAMS_RESERVED_MASK        0x1FFFFFF
2177 #define DMAE_PARAMS_RESERVED_SHIFT       7
2178 	u8 src_vf_id /* Source VF ID, valid only if src_vf_valid is set */;
2179 	u8 dst_vf_id /* Destination VF ID, valid only if dst_vf_valid is set */;
2180 	u8 port_id /* Port ID, valid only if port_valid is set */;
2181 	u8 src_pf_id /* Source PF ID, valid only if src_pf_valid is set */;
2182 	u8 dst_pf_id /* Destination PF ID, valid only if dst_pf_valid is set */;
2183 	u8 reserved1;
2184 	__le16 reserved2;
2185 };
2186 
2187 
2188 struct fw_asserts_ram_section {
2189 /* The offset of the section in the RAM in RAM lines (64-bit units) */
2190 	__le16 section_ram_line_offset;
2191 /* The size of the section in RAM lines (64-bit units) */
2192 	__le16 section_ram_line_size;
2193 /* The offset of the asserts list within the section in dwords */
2194 	u8 list_dword_offset;
2195 /* The size of an assert list element in dwords */
2196 	u8 list_element_dword_size;
2197 	u8 list_num_elements /* The number of elements in the asserts list */;
2198 /* The offset of the next list index field within the section in dwords */
2199 	u8 list_next_index_dword_offset;
2200 };
2201 
2202 
2203 struct fw_ver_num {
2204 	u8 major /* Firmware major version number */;
2205 	u8 minor /* Firmware minor version number */;
2206 	u8 rev /* Firmware revision version number */;
2207 	u8 eng /* Firmware engineering version number (for bootleg versions) */;
2208 };
2209 
2210 struct fw_ver_info {
2211 	__le16 tools_ver /* Tools version number */;
2212 	u8 image_id /* FW image ID (e.g. main, l2b, kuku) */;
2213 	u8 reserved1;
2214 	struct fw_ver_num num /* FW version number */;
2215 	__le32 timestamp /* FW Timestamp in unix time  (sec. since 1970) */;
2216 	__le32 reserved2;
2217 };
2218 
2219 struct fw_info {
2220 	struct fw_ver_info ver /* FW version information */;
2221 /* Info regarding the FW asserts section in the Storm RAM */
2222 	struct fw_asserts_ram_section fw_asserts_section;
2223 };
2224 
2225 
2226 struct fw_info_location {
2227 	__le32 grc_addr /* GRC address where the fw_info struct is located. */;
2228 /* Size of the fw_info structure (thats located at the grc_addr). */
2229 	__le32 size;
2230 };
2231 
2232 
2233 /* DMAE parameters */
2234 struct ecore_dmae_params {
2235 	u32 flags;
2236 /* If QED_DMAE_PARAMS_RW_REPL_SRC flag is set and the
2237  * source is a block of length DMAE_MAX_RW_SIZE and the
2238  * destination is larger, the source block will be duplicated as
2239  * many times as required to fill the destination block. This is
2240  * used mostly to write a zeroed buffer to destination address
2241  * using DMA
2242  */
2243 #define ECORE_DMAE_PARAMS_RW_REPL_SRC_MASK        0x1
2244 #define ECORE_DMAE_PARAMS_RW_REPL_SRC_SHIFT       0
2245 #define ECORE_DMAE_PARAMS_SRC_VF_VALID_MASK       0x1
2246 #define ECORE_DMAE_PARAMS_SRC_VF_VALID_SHIFT      1
2247 #define ECORE_DMAE_PARAMS_DST_VF_VALID_MASK       0x1
2248 #define ECORE_DMAE_PARAMS_DST_VF_VALID_SHIFT      2
2249 #define ECORE_DMAE_PARAMS_COMPLETION_DST_MASK     0x1
2250 #define ECORE_DMAE_PARAMS_COMPLETION_DST_SHIFT    3
2251 #define ECORE_DMAE_PARAMS_PORT_VALID_MASK         0x1
2252 #define ECORE_DMAE_PARAMS_PORT_VALID_SHIFT        4
2253 #define ECORE_DMAE_PARAMS_SRC_PF_VALID_MASK       0x1
2254 #define ECORE_DMAE_PARAMS_SRC_PF_VALID_SHIFT      5
2255 #define ECORE_DMAE_PARAMS_DST_PF_VALID_MASK       0x1
2256 #define ECORE_DMAE_PARAMS_DST_PF_VALID_SHIFT      6
2257 #define ECORE_DMAE_PARAMS_RESERVED_MASK           0x1FFFFFF
2258 #define ECORE_DMAE_PARAMS_RESERVED_SHIFT          7
2259 	u8 src_vfid;
2260 	u8 dst_vfid;
2261 	u8 port_id;
2262 	u8 src_pfid;
2263 	u8 dst_pfid;
2264 	u8 reserved1;
2265 	__le16 reserved2;
2266 };
2267 
2268 /*
2269  * IGU cleanup command
2270  */
2271 struct igu_cleanup {
2272 	__le32 sb_id_and_flags;
2273 #define IGU_CLEANUP_RESERVED0_MASK     0x7FFFFFF
2274 #define IGU_CLEANUP_RESERVED0_SHIFT    0
2275 /* cleanup clear - 0, set - 1 */
2276 #define IGU_CLEANUP_CLEANUP_SET_MASK   0x1
2277 #define IGU_CLEANUP_CLEANUP_SET_SHIFT  27
2278 #define IGU_CLEANUP_CLEANUP_TYPE_MASK  0x7
2279 #define IGU_CLEANUP_CLEANUP_TYPE_SHIFT 28
2280 /* must always be set (use enum command_type_bit) */
2281 #define IGU_CLEANUP_COMMAND_TYPE_MASK  0x1U
2282 #define IGU_CLEANUP_COMMAND_TYPE_SHIFT 31
2283 	__le32 reserved1;
2284 };
2285 
2286 
2287 /*
2288  * IGU firmware driver command
2289  */
2290 union igu_command {
2291 	struct igu_prod_cons_update prod_cons_update;
2292 	struct igu_cleanup cleanup;
2293 };
2294 
2295 
2296 /*
2297  * IGU firmware driver command
2298  */
2299 struct igu_command_reg_ctrl {
2300 	__le16 opaque_fid;
2301 	__le16 igu_command_reg_ctrl_fields;
2302 #define IGU_COMMAND_REG_CTRL_PXP_BAR_ADDR_MASK  0xFFF
2303 #define IGU_COMMAND_REG_CTRL_PXP_BAR_ADDR_SHIFT 0
2304 #define IGU_COMMAND_REG_CTRL_RESERVED_MASK      0x7
2305 #define IGU_COMMAND_REG_CTRL_RESERVED_SHIFT     12
2306 /* command typ: 0 - read, 1 - write */
2307 #define IGU_COMMAND_REG_CTRL_COMMAND_TYPE_MASK  0x1
2308 #define IGU_COMMAND_REG_CTRL_COMMAND_TYPE_SHIFT 15
2309 };
2310 
2311 
2312 /*
2313  * IGU mapping line structure
2314  */
2315 struct igu_mapping_line {
2316 	__le32 igu_mapping_line_fields;
2317 #define IGU_MAPPING_LINE_VALID_MASK            0x1
2318 #define IGU_MAPPING_LINE_VALID_SHIFT           0
2319 #define IGU_MAPPING_LINE_VECTOR_NUMBER_MASK    0xFF
2320 #define IGU_MAPPING_LINE_VECTOR_NUMBER_SHIFT   1
2321 /* In BB: VF-0-120, PF-0-7; In K2: VF-0-191, PF-0-15 */
2322 #define IGU_MAPPING_LINE_FUNCTION_NUMBER_MASK  0xFF
2323 #define IGU_MAPPING_LINE_FUNCTION_NUMBER_SHIFT 9
2324 #define IGU_MAPPING_LINE_PF_VALID_MASK         0x1 /* PF-1, VF-0 */
2325 #define IGU_MAPPING_LINE_PF_VALID_SHIFT        17
2326 #define IGU_MAPPING_LINE_IPS_GROUP_MASK        0x3F
2327 #define IGU_MAPPING_LINE_IPS_GROUP_SHIFT       18
2328 #define IGU_MAPPING_LINE_RESERVED_MASK         0xFF
2329 #define IGU_MAPPING_LINE_RESERVED_SHIFT        24
2330 };
2331 
2332 
2333 /*
2334  * IGU MSIX line structure
2335  */
2336 struct igu_msix_vector {
2337 	struct regpair address;
2338 	__le32 data;
2339 	__le32 msix_vector_fields;
2340 #define IGU_MSIX_VECTOR_MASK_BIT_MASK      0x1
2341 #define IGU_MSIX_VECTOR_MASK_BIT_SHIFT     0
2342 #define IGU_MSIX_VECTOR_RESERVED0_MASK     0x7FFF
2343 #define IGU_MSIX_VECTOR_RESERVED0_SHIFT    1
2344 #define IGU_MSIX_VECTOR_STEERING_TAG_MASK  0xFF
2345 #define IGU_MSIX_VECTOR_STEERING_TAG_SHIFT 16
2346 #define IGU_MSIX_VECTOR_RESERVED1_MASK     0xFF
2347 #define IGU_MSIX_VECTOR_RESERVED1_SHIFT    24
2348 };
2349 
2350 
2351 struct mstorm_core_conn_ag_ctx {
2352 	u8 byte0 /* cdu_validation */;
2353 	u8 byte1 /* state */;
2354 	u8 flags0;
2355 #define MSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
2356 #define MSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
2357 #define MSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
2358 #define MSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
2359 #define MSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* cf0 */
2360 #define MSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
2361 #define MSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* cf1 */
2362 #define MSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
2363 #define MSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* cf2 */
2364 #define MSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
2365 	u8 flags1;
2366 #define MSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
2367 #define MSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
2368 #define MSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
2369 #define MSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
2370 #define MSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
2371 #define MSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
2372 #define MSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
2373 #define MSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 3
2374 #define MSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
2375 #define MSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 4
2376 #define MSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
2377 #define MSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 5
2378 #define MSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
2379 #define MSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 6
2380 #define MSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
2381 #define MSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 7
2382 	__le16 word0 /* word0 */;
2383 	__le16 word1 /* word1 */;
2384 	__le32 reg0 /* reg0 */;
2385 	__le32 reg1 /* reg1 */;
2386 };
2387 
2388 
2389 /*
2390  * per encapsulation type enabling flags
2391  */
2392 struct prs_reg_encapsulation_type_en {
2393 	u8 flags;
2394 /* Enable bit for Ethernet-over-GRE (L2 GRE) encapsulation. */
2395 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GRE_ENABLE_MASK     0x1
2396 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GRE_ENABLE_SHIFT    0
2397 /* Enable bit for IP-over-GRE (IP GRE) encapsulation. */
2398 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GRE_ENABLE_MASK      0x1
2399 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GRE_ENABLE_SHIFT     1
2400 /* Enable bit for VXLAN encapsulation. */
2401 #define PRS_REG_ENCAPSULATION_TYPE_EN_VXLAN_ENABLE_MASK            0x1
2402 #define PRS_REG_ENCAPSULATION_TYPE_EN_VXLAN_ENABLE_SHIFT           2
2403 /* Enable bit for T-Tag encapsulation. */
2404 #define PRS_REG_ENCAPSULATION_TYPE_EN_T_TAG_ENABLE_MASK            0x1
2405 #define PRS_REG_ENCAPSULATION_TYPE_EN_T_TAG_ENABLE_SHIFT           3
2406 /* Enable bit for Ethernet-over-GENEVE (L2 GENEVE) encapsulation. */
2407 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GENEVE_ENABLE_MASK  0x1
2408 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GENEVE_ENABLE_SHIFT 4
2409 /* Enable bit for IP-over-GENEVE (IP GENEVE) encapsulation. */
2410 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GENEVE_ENABLE_MASK   0x1
2411 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GENEVE_ENABLE_SHIFT  5
2412 #define PRS_REG_ENCAPSULATION_TYPE_EN_RESERVED_MASK                0x3
2413 #define PRS_REG_ENCAPSULATION_TYPE_EN_RESERVED_SHIFT               6
2414 };
2415 
2416 
2417 enum pxp_tph_st_hint {
2418 	TPH_ST_HINT_BIDIR /* Read/Write access by Host and Device */,
2419 	TPH_ST_HINT_REQUESTER /* Read/Write access by Device */,
2420 /* Device Write and Host Read, or Host Write and Device Read */
2421 	TPH_ST_HINT_TARGET,
2422 /* Device Write and Host Read, or Host Write and Device Read - with temporal
2423  * reuse
2424  */
2425 	TPH_ST_HINT_TARGET_PRIO,
2426 	MAX_PXP_TPH_ST_HINT
2427 };
2428 
2429 
2430 /*
2431  * QM hardware structure of enable bypass credit mask
2432  */
2433 struct qm_rf_bypass_mask {
2434 	u8 flags;
2435 #define QM_RF_BYPASS_MASK_LINEVOQ_MASK    0x1
2436 #define QM_RF_BYPASS_MASK_LINEVOQ_SHIFT   0
2437 #define QM_RF_BYPASS_MASK_RESERVED0_MASK  0x1
2438 #define QM_RF_BYPASS_MASK_RESERVED0_SHIFT 1
2439 #define QM_RF_BYPASS_MASK_PFWFQ_MASK      0x1
2440 #define QM_RF_BYPASS_MASK_PFWFQ_SHIFT     2
2441 #define QM_RF_BYPASS_MASK_VPWFQ_MASK      0x1
2442 #define QM_RF_BYPASS_MASK_VPWFQ_SHIFT     3
2443 #define QM_RF_BYPASS_MASK_PFRL_MASK       0x1
2444 #define QM_RF_BYPASS_MASK_PFRL_SHIFT      4
2445 #define QM_RF_BYPASS_MASK_VPQCNRL_MASK    0x1
2446 #define QM_RF_BYPASS_MASK_VPQCNRL_SHIFT   5
2447 #define QM_RF_BYPASS_MASK_FWPAUSE_MASK    0x1
2448 #define QM_RF_BYPASS_MASK_FWPAUSE_SHIFT   6
2449 #define QM_RF_BYPASS_MASK_RESERVED1_MASK  0x1
2450 #define QM_RF_BYPASS_MASK_RESERVED1_SHIFT 7
2451 };
2452 
2453 
2454 /*
2455  * QM hardware structure of opportunistic credit mask
2456  */
2457 struct qm_rf_opportunistic_mask {
2458 	__le16 flags;
2459 #define QM_RF_OPPORTUNISTIC_MASK_LINEVOQ_MASK     0x1
2460 #define QM_RF_OPPORTUNISTIC_MASK_LINEVOQ_SHIFT    0
2461 #define QM_RF_OPPORTUNISTIC_MASK_BYTEVOQ_MASK     0x1
2462 #define QM_RF_OPPORTUNISTIC_MASK_BYTEVOQ_SHIFT    1
2463 #define QM_RF_OPPORTUNISTIC_MASK_PFWFQ_MASK       0x1
2464 #define QM_RF_OPPORTUNISTIC_MASK_PFWFQ_SHIFT      2
2465 #define QM_RF_OPPORTUNISTIC_MASK_VPWFQ_MASK       0x1
2466 #define QM_RF_OPPORTUNISTIC_MASK_VPWFQ_SHIFT      3
2467 #define QM_RF_OPPORTUNISTIC_MASK_PFRL_MASK        0x1
2468 #define QM_RF_OPPORTUNISTIC_MASK_PFRL_SHIFT       4
2469 #define QM_RF_OPPORTUNISTIC_MASK_VPQCNRL_MASK     0x1
2470 #define QM_RF_OPPORTUNISTIC_MASK_VPQCNRL_SHIFT    5
2471 #define QM_RF_OPPORTUNISTIC_MASK_FWPAUSE_MASK     0x1
2472 #define QM_RF_OPPORTUNISTIC_MASK_FWPAUSE_SHIFT    6
2473 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED0_MASK   0x1
2474 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED0_SHIFT  7
2475 #define QM_RF_OPPORTUNISTIC_MASK_QUEUEEMPTY_MASK  0x1
2476 #define QM_RF_OPPORTUNISTIC_MASK_QUEUEEMPTY_SHIFT 8
2477 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED1_MASK   0x7F
2478 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED1_SHIFT  9
2479 };
2480 
2481 
2482 /*
2483  * QM hardware structure of QM map memory
2484  */
2485 struct qm_rf_pq_map {
2486 	__le32 reg;
2487 #define QM_RF_PQ_MAP_PQ_VALID_MASK          0x1 /* PQ active */
2488 #define QM_RF_PQ_MAP_PQ_VALID_SHIFT         0
2489 #define QM_RF_PQ_MAP_RL_ID_MASK             0xFF /* RL ID */
2490 #define QM_RF_PQ_MAP_RL_ID_SHIFT            1
2491 /* the first PQ associated with the VPORT and VOQ of this PQ */
2492 #define QM_RF_PQ_MAP_VP_PQ_ID_MASK          0x1FF
2493 #define QM_RF_PQ_MAP_VP_PQ_ID_SHIFT         9
2494 #define QM_RF_PQ_MAP_VOQ_MASK               0x1F /* VOQ */
2495 #define QM_RF_PQ_MAP_VOQ_SHIFT              18
2496 #define QM_RF_PQ_MAP_WRR_WEIGHT_GROUP_MASK  0x3 /* WRR weight */
2497 #define QM_RF_PQ_MAP_WRR_WEIGHT_GROUP_SHIFT 23
2498 #define QM_RF_PQ_MAP_RL_VALID_MASK          0x1 /* RL active */
2499 #define QM_RF_PQ_MAP_RL_VALID_SHIFT         25
2500 #define QM_RF_PQ_MAP_RESERVED_MASK          0x3F
2501 #define QM_RF_PQ_MAP_RESERVED_SHIFT         26
2502 };
2503 
2504 
2505 /*
2506  * Completion params for aggregated interrupt completion
2507  */
2508 struct sdm_agg_int_comp_params {
2509 	__le16 params;
2510 /* the number of aggregated interrupt, 0-31 */
2511 #define SDM_AGG_INT_COMP_PARAMS_AGG_INT_INDEX_MASK      0x3F
2512 #define SDM_AGG_INT_COMP_PARAMS_AGG_INT_INDEX_SHIFT     0
2513 /* 1 - set a bit in aggregated vector, 0 - dont set */
2514 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_ENABLE_MASK  0x1
2515 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_ENABLE_SHIFT 6
2516 /* Number of bit in the aggregated vector, 0-279 (TBD) */
2517 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_BIT_MASK     0x1FF
2518 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_BIT_SHIFT    7
2519 };
2520 
2521 
2522 /*
2523  * SDM operation gen command (generate aggregative interrupt)
2524  */
2525 struct sdm_op_gen {
2526 	__le32 command;
2527 /* completion parameters 0-15 */
2528 #define SDM_OP_GEN_COMP_PARAM_MASK  0xFFFF
2529 #define SDM_OP_GEN_COMP_PARAM_SHIFT 0
2530 #define SDM_OP_GEN_COMP_TYPE_MASK   0xF /* completion type 16-19 */
2531 #define SDM_OP_GEN_COMP_TYPE_SHIFT  16
2532 #define SDM_OP_GEN_RESERVED_MASK    0xFFF /* reserved 20-31 */
2533 #define SDM_OP_GEN_RESERVED_SHIFT   20
2534 };
2535 
2536 struct ystorm_core_conn_ag_ctx {
2537 	u8 byte0 /* cdu_validation */;
2538 	u8 byte1 /* state */;
2539 	u8 flags0;
2540 #define YSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
2541 #define YSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
2542 #define YSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
2543 #define YSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
2544 #define YSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* cf0 */
2545 #define YSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
2546 #define YSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* cf1 */
2547 #define YSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
2548 #define YSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* cf2 */
2549 #define YSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
2550 	u8 flags1;
2551 #define YSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
2552 #define YSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
2553 #define YSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
2554 #define YSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
2555 #define YSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
2556 #define YSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
2557 #define YSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
2558 #define YSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 3
2559 #define YSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
2560 #define YSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 4
2561 #define YSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
2562 #define YSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 5
2563 #define YSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
2564 #define YSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 6
2565 #define YSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
2566 #define YSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 7
2567 	u8 byte2 /* byte2 */;
2568 	u8 byte3 /* byte3 */;
2569 	__le16 word0 /* word0 */;
2570 	__le32 reg0 /* reg0 */;
2571 	__le32 reg1 /* reg1 */;
2572 	__le16 word1 /* word1 */;
2573 	__le16 word2 /* word2 */;
2574 	__le16 word3 /* word3 */;
2575 	__le16 word4 /* word4 */;
2576 	__le32 reg2 /* reg2 */;
2577 	__le32 reg3 /* reg3 */;
2578 };
2579 
2580 /*********/
2581 /* DEBUG */
2582 /*********/
2583 
2584 #define MFW_TRACE_SIGNATURE	0x25071946
2585 
2586 /* The trace in the buffer */
2587 #define MFW_TRACE_EVENTID_MASK		0x00ffff
2588 #define MFW_TRACE_PRM_SIZE_MASK		0x0f0000
2589 #define MFW_TRACE_PRM_SIZE_OFFSET	16
2590 #define MFW_TRACE_ENTRY_SIZE		3
2591 
2592 struct mcp_trace {
2593 	u32	signature;	/* Help to identify that the trace is valid */
2594 	u32	size;		/* the size of the trace buffer in bytes*/
2595 	u32	curr_level;	/* 2 - all will be written to the buffer
2596 				 * 1 - debug trace will not be written
2597 				 * 0 - just errors will be written to the buffer
2598 				 */
2599 	/* a bit per module, 1 means mask it off, 0 means add it to the trace
2600 	 * buffer
2601 	 */
2602 	u32	modules_mask[2];
2603 
2604 	/* Warning: the following pointers are assumed to be 32bits as they are
2605 	 * used only in the MFW
2606 	 */
2607 	/* The next trace will be written to this offset */
2608 	u32	trace_prod;
2609 	/* The oldest valid trace starts at this offset (usually very close
2610 	 * after the current producer)
2611 	 */
2612 	u32	trace_oldest;
2613 };
2614 
2615 enum spad_sections {
2616 	SPAD_SECTION_TRACE,
2617 	SPAD_SECTION_NVM_CFG,
2618 	SPAD_SECTION_PUBLIC,
2619 	SPAD_SECTION_PRIVATE,
2620 	SPAD_SECTION_MAX
2621 };
2622 
2623 #define MCP_TRACE_SIZE          2048    /* 2kb */
2624 
2625 /* This section is located at a fixed location in the beginning of the
2626  * scratchpad, to ensure that the MCP trace is not run over during MFW upgrade.
2627  * All the rest of data has a floating location which differs from version to
2628  * version, and is pointed by the mcp_meta_data below.
2629  * Moreover, the spad_layout section is part of the MFW firmware, and is loaded
2630  * with it from nvram in order to clear this portion.
2631  */
2632 struct static_init {
2633 	u32 num_sections;
2634 	offsize_t sections[SPAD_SECTION_MAX];
2635 #define SECTION(_sec_) (*((offsize_t *)(STRUCT_OFFSET(sections[_sec_]))))
2636 
2637 	struct mcp_trace trace;
2638 #define MCP_TRACE_P ((struct mcp_trace *)(STRUCT_OFFSET(trace)))
2639 	u8 trace_buffer[MCP_TRACE_SIZE];
2640 #define MCP_TRACE_BUF ((u8 *)(STRUCT_OFFSET(trace_buffer)))
2641 	/* running_mfw has the same definition as in nvm_map.h.
2642 	 * This bit indicate both the running dir, and the running bundle.
2643 	 * It is set once when the LIM is loaded.
2644 	 */
2645 	u32 running_mfw;
2646 #define RUNNING_MFW (*((u32 *)(STRUCT_OFFSET(running_mfw))))
2647 	u32 build_time;
2648 #define MFW_BUILD_TIME (*((u32 *)(STRUCT_OFFSET(build_time))))
2649 	u32 reset_type;
2650 #define RESET_TYPE (*((u32 *)(STRUCT_OFFSET(reset_type))))
2651 	u32 mfw_secure_mode;
2652 #define MFW_SECURE_MODE (*((u32 *)(STRUCT_OFFSET(mfw_secure_mode))))
2653 	u16 pme_status_pf_bitmap;
2654 #define PME_STATUS_PF_BITMAP (*((u16 *)(STRUCT_OFFSET(pme_status_pf_bitmap))))
2655 	u16 pme_enable_pf_bitmap;
2656 #define PME_ENABLE_PF_BITMAP (*((u16 *)(STRUCT_OFFSET(pme_enable_pf_bitmap))))
2657 	u32 mim_nvm_addr;
2658 	u32 mim_start_addr;
2659 	u32 ah_pcie_link_params;
2660 #define AH_PCIE_LINK_PARAMS_LINK_SPEED_MASK     (0x000000ff)
2661 #define AH_PCIE_LINK_PARAMS_LINK_SPEED_SHIFT    (0)
2662 #define AH_PCIE_LINK_PARAMS_LINK_WIDTH_MASK     (0x0000ff00)
2663 #define AH_PCIE_LINK_PARAMS_LINK_WIDTH_SHIFT    (8)
2664 #define AH_PCIE_LINK_PARAMS_ASPM_MODE_MASK      (0x00ff0000)
2665 #define AH_PCIE_LINK_PARAMS_ASPM_MODE_SHIFT     (16)
2666 #define AH_PCIE_LINK_PARAMS_ASPM_CAP_MASK       (0xff000000)
2667 #define AH_PCIE_LINK_PARAMS_ASPM_CAP_SHIFT      (24)
2668 #define AH_PCIE_LINK_PARAMS (*((u32 *)(STRUCT_OFFSET(ah_pcie_link_params))))
2669 
2670 	u32 rsrv_persist[5];	/* Persist reserved for MFW upgrades */
2671 };
2672 
2673 #define NVM_MAGIC_VALUE		0x669955aa
2674 
2675 enum nvm_image_type {
2676 	NVM_TYPE_TIM1 = 0x01,
2677 	NVM_TYPE_TIM2 = 0x02,
2678 	NVM_TYPE_MIM1 = 0x03,
2679 	NVM_TYPE_MIM2 = 0x04,
2680 	NVM_TYPE_MBA = 0x05,
2681 	NVM_TYPE_MODULES_PN = 0x06,
2682 	NVM_TYPE_VPD = 0x07,
2683 	NVM_TYPE_MFW_TRACE1 = 0x08,
2684 	NVM_TYPE_MFW_TRACE2 = 0x09,
2685 	NVM_TYPE_NVM_CFG1 = 0x0a,
2686 	NVM_TYPE_L2B = 0x0b,
2687 	NVM_TYPE_DIR1 = 0x0c,
2688 	NVM_TYPE_EAGLE_FW1 = 0x0d,
2689 	NVM_TYPE_FALCON_FW1 = 0x0e,
2690 	NVM_TYPE_PCIE_FW1 = 0x0f,
2691 	NVM_TYPE_HW_SET = 0x10,
2692 	NVM_TYPE_LIM = 0x11,
2693 	NVM_TYPE_AVS_FW1 = 0x12,
2694 	NVM_TYPE_DIR2 = 0x13,
2695 	NVM_TYPE_CCM = 0x14,
2696 	NVM_TYPE_EAGLE_FW2 = 0x15,
2697 	NVM_TYPE_FALCON_FW2 = 0x16,
2698 	NVM_TYPE_PCIE_FW2 = 0x17,
2699 	NVM_TYPE_AVS_FW2 = 0x18,
2700 	NVM_TYPE_INIT_HW = 0x19,
2701 	NVM_TYPE_DEFAULT_CFG = 0x1a,
2702 	NVM_TYPE_MDUMP = 0x1b,
2703 	NVM_TYPE_META = 0x1c,
2704 	NVM_TYPE_ISCSI_CFG = 0x1d,
2705 	NVM_TYPE_FCOE_CFG = 0x1f,
2706 	NVM_TYPE_ETH_PHY_FW1 = 0x20,
2707 	NVM_TYPE_ETH_PHY_FW2 = 0x21,
2708 	NVM_TYPE_BDN = 0x22,
2709 	NVM_TYPE_8485X_PHY_FW = 0x23,
2710 	NVM_TYPE_PUB_KEY = 0x24,
2711 	NVM_TYPE_RECOVERY = 0x25,
2712 	NVM_TYPE_PLDM = 0x26,
2713 	NVM_TYPE_UPK1 = 0x27,
2714 	NVM_TYPE_UPK2 = 0x28,
2715 	NVM_TYPE_MASTER_KC = 0x29,
2716 	NVM_TYPE_BACKUP_KC = 0x2a,
2717 	NVM_TYPE_HW_DUMP = 0x2b,
2718 	NVM_TYPE_HW_DUMP_OUT = 0x2c,
2719 	NVM_TYPE_BIN_NVM_META = 0x30,
2720 	NVM_TYPE_ROM_TEST = 0xf0,
2721 	NVM_TYPE_88X33X0_PHY_FW = 0x31,
2722 	NVM_TYPE_88X33X0_PHY_SLAVE_FW = 0x32,
2723 	NVM_TYPE_MAX,
2724 };
2725 
2726 #define DIR_ID_1    (0)
2727 
2728 #endif /* __ECORE_HSI_COMMON__ */
2729