New upstream version 17.11-rc3
[deb_dpdk.git] / drivers / net / qede / base / ecore_hsi_common.h
1 /*
2  * Copyright (c) 2016 QLogic Corporation.
3  * All rights reserved.
4  * www.qlogic.com
5  *
6  * See LICENSE.qede_pmd for copyright and licensing details.
7  */
8
9 #ifndef __ECORE_HSI_COMMON__
10 #define __ECORE_HSI_COMMON__
11 /********************************/
12 /* Add include to common target */
13 /********************************/
14 #include "common_hsi.h"
15
16
17 /*
18  * opcodes for the event ring
19  */
20 enum common_event_opcode {
21         COMMON_EVENT_PF_START,
22         COMMON_EVENT_PF_STOP,
23         COMMON_EVENT_VF_START,
24         COMMON_EVENT_VF_STOP,
25         COMMON_EVENT_VF_PF_CHANNEL,
26         COMMON_EVENT_VF_FLR,
27         COMMON_EVENT_PF_UPDATE,
28         COMMON_EVENT_MALICIOUS_VF,
29         COMMON_EVENT_RL_UPDATE,
30         COMMON_EVENT_EMPTY,
31         MAX_COMMON_EVENT_OPCODE
32 };
33
34
35 /*
36  * Common Ramrod Command IDs
37  */
38 enum common_ramrod_cmd_id {
39         COMMON_RAMROD_UNUSED,
40         COMMON_RAMROD_PF_START /* PF Function Start Ramrod */,
41         COMMON_RAMROD_PF_STOP /* PF Function Stop Ramrod */,
42         COMMON_RAMROD_VF_START /* VF Function Start */,
43         COMMON_RAMROD_VF_STOP /* VF Function Stop Ramrod */,
44         COMMON_RAMROD_PF_UPDATE /* PF update Ramrod */,
45         COMMON_RAMROD_RL_UPDATE /* QCN/DCQCN RL update Ramrod */,
46         COMMON_RAMROD_EMPTY /* Empty Ramrod */,
47         MAX_COMMON_RAMROD_CMD_ID
48 };
49
50
51 /*
52  * The core storm context for the Ystorm
53  */
54 struct ystorm_core_conn_st_ctx {
55         __le32 reserved[4];
56 };
57
58 /*
59  * The core storm context for the Pstorm
60  */
61 struct pstorm_core_conn_st_ctx {
62         __le32 reserved[4];
63 };
64
65 /*
66  * Core Slowpath Connection storm context of Xstorm
67  */
68 struct xstorm_core_conn_st_ctx {
69         __le32 spq_base_lo /* SPQ Ring Base Address low dword */;
70         __le32 spq_base_hi /* SPQ Ring Base Address high dword */;
71 /* Consolidation Ring Base Address */
72         struct regpair consolid_base_addr;
73         __le16 spq_cons /* SPQ Ring Consumer */;
74         __le16 consolid_cons /* Consolidation Ring Consumer */;
75         __le32 reserved0[55] /* Pad to 15 cycles */;
76 };
77
78 struct e4_xstorm_core_conn_ag_ctx {
79         u8 reserved0 /* cdu_validation */;
80         u8 core_state /* state */;
81         u8 flags0;
82 /* exist_in_qm0 */
83 #define E4_XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM0_MASK         0x1
84 #define E4_XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM0_SHIFT        0
85 /* exist_in_qm1 */
86 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED1_MASK            0x1
87 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED1_SHIFT           1
88 /* exist_in_qm2 */
89 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED2_MASK            0x1
90 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED2_SHIFT           2
91 /* exist_in_qm3 */
92 #define E4_XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM3_MASK         0x1
93 #define E4_XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM3_SHIFT        3
94 /* bit4 */
95 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED3_MASK            0x1
96 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED3_SHIFT           4
97 /* cf_array_active */
98 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED4_MASK            0x1
99 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED4_SHIFT           5
100 /* bit6 */
101 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED5_MASK            0x1
102 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED5_SHIFT           6
103 /* bit7 */
104 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED6_MASK            0x1
105 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED6_SHIFT           7
106         u8 flags1;
107 /* bit8 */
108 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED7_MASK            0x1
109 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED7_SHIFT           0
110 /* bit9 */
111 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED8_MASK            0x1
112 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED8_SHIFT           1
113 /* bit10 */
114 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED9_MASK            0x1
115 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED9_SHIFT           2
116 /* bit11 */
117 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT11_MASK                0x1
118 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT11_SHIFT               3
119 /* bit12 */
120 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT12_MASK                0x1
121 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT12_SHIFT               4
122 /* bit13 */
123 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT13_MASK                0x1
124 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT13_SHIFT               5
125 /* bit14 */
126 #define E4_XSTORM_CORE_CONN_AG_CTX_TX_RULE_ACTIVE_MASK       0x1
127 #define E4_XSTORM_CORE_CONN_AG_CTX_TX_RULE_ACTIVE_SHIFT      6
128 /* bit15 */
129 #define E4_XSTORM_CORE_CONN_AG_CTX_DQ_CF_ACTIVE_MASK         0x1
130 #define E4_XSTORM_CORE_CONN_AG_CTX_DQ_CF_ACTIVE_SHIFT        7
131         u8 flags2;
132 /* timer0cf */
133 #define E4_XSTORM_CORE_CONN_AG_CTX_CF0_MASK                  0x3
134 #define E4_XSTORM_CORE_CONN_AG_CTX_CF0_SHIFT                 0
135 /* timer1cf */
136 #define E4_XSTORM_CORE_CONN_AG_CTX_CF1_MASK                  0x3
137 #define E4_XSTORM_CORE_CONN_AG_CTX_CF1_SHIFT                 2
138 /* timer2cf */
139 #define E4_XSTORM_CORE_CONN_AG_CTX_CF2_MASK                  0x3
140 #define E4_XSTORM_CORE_CONN_AG_CTX_CF2_SHIFT                 4
141 /* timer_stop_all */
142 #define E4_XSTORM_CORE_CONN_AG_CTX_CF3_MASK                  0x3
143 #define E4_XSTORM_CORE_CONN_AG_CTX_CF3_SHIFT                 6
144         u8 flags3;
145 #define E4_XSTORM_CORE_CONN_AG_CTX_CF4_MASK                  0x3 /* cf4 */
146 #define E4_XSTORM_CORE_CONN_AG_CTX_CF4_SHIFT                 0
147 #define E4_XSTORM_CORE_CONN_AG_CTX_CF5_MASK                  0x3 /* cf5 */
148 #define E4_XSTORM_CORE_CONN_AG_CTX_CF5_SHIFT                 2
149 #define E4_XSTORM_CORE_CONN_AG_CTX_CF6_MASK                  0x3 /* cf6 */
150 #define E4_XSTORM_CORE_CONN_AG_CTX_CF6_SHIFT                 4
151 #define E4_XSTORM_CORE_CONN_AG_CTX_CF7_MASK                  0x3 /* cf7 */
152 #define E4_XSTORM_CORE_CONN_AG_CTX_CF7_SHIFT                 6
153         u8 flags4;
154 #define E4_XSTORM_CORE_CONN_AG_CTX_CF8_MASK                  0x3 /* cf8 */
155 #define E4_XSTORM_CORE_CONN_AG_CTX_CF8_SHIFT                 0
156 #define E4_XSTORM_CORE_CONN_AG_CTX_CF9_MASK                  0x3 /* cf9 */
157 #define E4_XSTORM_CORE_CONN_AG_CTX_CF9_SHIFT                 2
158 /* cf10 */
159 #define E4_XSTORM_CORE_CONN_AG_CTX_CF10_MASK                 0x3
160 #define E4_XSTORM_CORE_CONN_AG_CTX_CF10_SHIFT                4
161 /* cf11 */
162 #define E4_XSTORM_CORE_CONN_AG_CTX_CF11_MASK                 0x3
163 #define E4_XSTORM_CORE_CONN_AG_CTX_CF11_SHIFT                6
164         u8 flags5;
165 /* cf12 */
166 #define E4_XSTORM_CORE_CONN_AG_CTX_CF12_MASK                 0x3
167 #define E4_XSTORM_CORE_CONN_AG_CTX_CF12_SHIFT                0
168 /* cf13 */
169 #define E4_XSTORM_CORE_CONN_AG_CTX_CF13_MASK                 0x3
170 #define E4_XSTORM_CORE_CONN_AG_CTX_CF13_SHIFT                2
171 /* cf14 */
172 #define E4_XSTORM_CORE_CONN_AG_CTX_CF14_MASK                 0x3
173 #define E4_XSTORM_CORE_CONN_AG_CTX_CF14_SHIFT                4
174 /* cf15 */
175 #define E4_XSTORM_CORE_CONN_AG_CTX_CF15_MASK                 0x3
176 #define E4_XSTORM_CORE_CONN_AG_CTX_CF15_SHIFT                6
177         u8 flags6;
178 /* cf16 */
179 #define E4_XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_MASK     0x3
180 #define E4_XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_SHIFT    0
181 /* cf_array_cf */
182 #define E4_XSTORM_CORE_CONN_AG_CTX_CF17_MASK                 0x3
183 #define E4_XSTORM_CORE_CONN_AG_CTX_CF17_SHIFT                2
184 /* cf18 */
185 #define E4_XSTORM_CORE_CONN_AG_CTX_DQ_CF_MASK                0x3
186 #define E4_XSTORM_CORE_CONN_AG_CTX_DQ_CF_SHIFT               4
187 /* cf19 */
188 #define E4_XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_MASK         0x3
189 #define E4_XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_SHIFT        6
190         u8 flags7;
191 /* cf20 */
192 #define E4_XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_MASK             0x3
193 #define E4_XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_SHIFT            0
194 /* cf21 */
195 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED10_MASK           0x3
196 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED10_SHIFT          2
197 /* cf22 */
198 #define E4_XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_MASK            0x3
199 #define E4_XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_SHIFT           4
200 /* cf0en */
201 #define E4_XSTORM_CORE_CONN_AG_CTX_CF0EN_MASK                0x1
202 #define E4_XSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT               6
203 /* cf1en */
204 #define E4_XSTORM_CORE_CONN_AG_CTX_CF1EN_MASK                0x1
205 #define E4_XSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT               7
206         u8 flags8;
207 /* cf2en */
208 #define E4_XSTORM_CORE_CONN_AG_CTX_CF2EN_MASK                0x1
209 #define E4_XSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT               0
210 /* cf3en */
211 #define E4_XSTORM_CORE_CONN_AG_CTX_CF3EN_MASK                0x1
212 #define E4_XSTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT               1
213 /* cf4en */
214 #define E4_XSTORM_CORE_CONN_AG_CTX_CF4EN_MASK                0x1
215 #define E4_XSTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT               2
216 /* cf5en */
217 #define E4_XSTORM_CORE_CONN_AG_CTX_CF5EN_MASK                0x1
218 #define E4_XSTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT               3
219 /* cf6en */
220 #define E4_XSTORM_CORE_CONN_AG_CTX_CF6EN_MASK                0x1
221 #define E4_XSTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT               4
222 /* cf7en */
223 #define E4_XSTORM_CORE_CONN_AG_CTX_CF7EN_MASK                0x1
224 #define E4_XSTORM_CORE_CONN_AG_CTX_CF7EN_SHIFT               5
225 /* cf8en */
226 #define E4_XSTORM_CORE_CONN_AG_CTX_CF8EN_MASK                0x1
227 #define E4_XSTORM_CORE_CONN_AG_CTX_CF8EN_SHIFT               6
228 /* cf9en */
229 #define E4_XSTORM_CORE_CONN_AG_CTX_CF9EN_MASK                0x1
230 #define E4_XSTORM_CORE_CONN_AG_CTX_CF9EN_SHIFT               7
231         u8 flags9;
232 /* cf10en */
233 #define E4_XSTORM_CORE_CONN_AG_CTX_CF10EN_MASK               0x1
234 #define E4_XSTORM_CORE_CONN_AG_CTX_CF10EN_SHIFT              0
235 /* cf11en */
236 #define E4_XSTORM_CORE_CONN_AG_CTX_CF11EN_MASK               0x1
237 #define E4_XSTORM_CORE_CONN_AG_CTX_CF11EN_SHIFT              1
238 /* cf12en */
239 #define E4_XSTORM_CORE_CONN_AG_CTX_CF12EN_MASK               0x1
240 #define E4_XSTORM_CORE_CONN_AG_CTX_CF12EN_SHIFT              2
241 /* cf13en */
242 #define E4_XSTORM_CORE_CONN_AG_CTX_CF13EN_MASK               0x1
243 #define E4_XSTORM_CORE_CONN_AG_CTX_CF13EN_SHIFT              3
244 /* cf14en */
245 #define E4_XSTORM_CORE_CONN_AG_CTX_CF14EN_MASK               0x1
246 #define E4_XSTORM_CORE_CONN_AG_CTX_CF14EN_SHIFT              4
247 /* cf15en */
248 #define E4_XSTORM_CORE_CONN_AG_CTX_CF15EN_MASK               0x1
249 #define E4_XSTORM_CORE_CONN_AG_CTX_CF15EN_SHIFT              5
250 /* cf16en */
251 #define E4_XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_EN_MASK  0x1
252 #define E4_XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_EN_SHIFT 6
253 /* cf_array_cf_en */
254 #define E4_XSTORM_CORE_CONN_AG_CTX_CF17EN_MASK               0x1
255 #define E4_XSTORM_CORE_CONN_AG_CTX_CF17EN_SHIFT              7
256         u8 flags10;
257 /* cf18en */
258 #define E4_XSTORM_CORE_CONN_AG_CTX_DQ_CF_EN_MASK             0x1
259 #define E4_XSTORM_CORE_CONN_AG_CTX_DQ_CF_EN_SHIFT            0
260 /* cf19en */
261 #define E4_XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_EN_MASK      0x1
262 #define E4_XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_EN_SHIFT     1
263 /* cf20en */
264 #define E4_XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_EN_MASK          0x1
265 #define E4_XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_EN_SHIFT         2
266 /* cf21en */
267 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED11_MASK           0x1
268 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED11_SHIFT          3
269 /* cf22en */
270 #define E4_XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_EN_MASK         0x1
271 #define E4_XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_EN_SHIFT        4
272 /* cf23en */
273 #define E4_XSTORM_CORE_CONN_AG_CTX_CF23EN_MASK               0x1
274 #define E4_XSTORM_CORE_CONN_AG_CTX_CF23EN_SHIFT              5
275 /* rule0en */
276 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED12_MASK           0x1
277 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED12_SHIFT          6
278 /* rule1en */
279 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED13_MASK           0x1
280 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED13_SHIFT          7
281         u8 flags11;
282 /* rule2en */
283 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED14_MASK           0x1
284 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED14_SHIFT          0
285 /* rule3en */
286 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED15_MASK           0x1
287 #define E4_XSTORM_CORE_CONN_AG_CTX_RESERVED15_SHIFT          1
288 /* rule4en */
289 #define E4_XSTORM_CORE_CONN_AG_CTX_TX_DEC_RULE_EN_MASK       0x1
290 #define E4_XSTORM_CORE_CONN_AG_CTX_TX_DEC_RULE_EN_SHIFT      2
291 /* rule5en */
292 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE5EN_MASK              0x1
293 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT             3
294 /* rule6en */
295 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE6EN_MASK              0x1
296 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT             4
297 /* rule7en */
298 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE7EN_MASK              0x1
299 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT             5
300 /* rule8en */
301 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED1_MASK         0x1
302 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED1_SHIFT        6
303 /* rule9en */
304 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE9EN_MASK              0x1
305 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE9EN_SHIFT             7
306         u8 flags12;
307 /* rule10en */
308 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE10EN_MASK             0x1
309 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE10EN_SHIFT            0
310 /* rule11en */
311 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE11EN_MASK             0x1
312 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE11EN_SHIFT            1
313 /* rule12en */
314 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED2_MASK         0x1
315 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED2_SHIFT        2
316 /* rule13en */
317 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED3_MASK         0x1
318 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED3_SHIFT        3
319 /* rule14en */
320 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE14EN_MASK             0x1
321 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE14EN_SHIFT            4
322 /* rule15en */
323 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE15EN_MASK             0x1
324 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE15EN_SHIFT            5
325 /* rule16en */
326 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE16EN_MASK             0x1
327 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE16EN_SHIFT            6
328 /* rule17en */
329 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE17EN_MASK             0x1
330 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE17EN_SHIFT            7
331         u8 flags13;
332 /* rule18en */
333 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE18EN_MASK             0x1
334 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE18EN_SHIFT            0
335 /* rule19en */
336 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE19EN_MASK             0x1
337 #define E4_XSTORM_CORE_CONN_AG_CTX_RULE19EN_SHIFT            1
338 /* rule20en */
339 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED4_MASK         0x1
340 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED4_SHIFT        2
341 /* rule21en */
342 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED5_MASK         0x1
343 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED5_SHIFT        3
344 /* rule22en */
345 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED6_MASK         0x1
346 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED6_SHIFT        4
347 /* rule23en */
348 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED7_MASK         0x1
349 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED7_SHIFT        5
350 /* rule24en */
351 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED8_MASK         0x1
352 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED8_SHIFT        6
353 /* rule25en */
354 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED9_MASK         0x1
355 #define E4_XSTORM_CORE_CONN_AG_CTX_A0_RESERVED9_SHIFT        7
356         u8 flags14;
357 /* bit16 */
358 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT16_MASK                0x1
359 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT16_SHIFT               0
360 /* bit17 */
361 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT17_MASK                0x1
362 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT17_SHIFT               1
363 /* bit18 */
364 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT18_MASK                0x1
365 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT18_SHIFT               2
366 /* bit19 */
367 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT19_MASK                0x1
368 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT19_SHIFT               3
369 /* bit20 */
370 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT20_MASK                0x1
371 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT20_SHIFT               4
372 /* bit21 */
373 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT21_MASK                0x1
374 #define E4_XSTORM_CORE_CONN_AG_CTX_BIT21_SHIFT               5
375 /* cf23 */
376 #define E4_XSTORM_CORE_CONN_AG_CTX_CF23_MASK                 0x3
377 #define E4_XSTORM_CORE_CONN_AG_CTX_CF23_SHIFT                6
378         u8 byte2 /* byte2 */;
379         __le16 physical_q0 /* physical_q0 */;
380         __le16 consolid_prod /* physical_q1 */;
381         __le16 reserved16 /* physical_q2 */;
382         __le16 tx_bd_cons /* word3 */;
383         __le16 tx_bd_or_spq_prod /* word4 */;
384         __le16 word5 /* word5 */;
385         __le16 conn_dpi /* conn_dpi */;
386         u8 byte3 /* byte3 */;
387         u8 byte4 /* byte4 */;
388         u8 byte5 /* byte5 */;
389         u8 byte6 /* byte6 */;
390         __le32 reg0 /* reg0 */;
391         __le32 reg1 /* reg1 */;
392         __le32 reg2 /* reg2 */;
393         __le32 reg3 /* reg3 */;
394         __le32 reg4 /* reg4 */;
395         __le32 reg5 /* cf_array0 */;
396         __le32 reg6 /* cf_array1 */;
397         __le16 word7 /* word7 */;
398         __le16 word8 /* word8 */;
399         __le16 word9 /* word9 */;
400         __le16 word10 /* word10 */;
401         __le32 reg7 /* reg7 */;
402         __le32 reg8 /* reg8 */;
403         __le32 reg9 /* reg9 */;
404         u8 byte7 /* byte7 */;
405         u8 byte8 /* byte8 */;
406         u8 byte9 /* byte9 */;
407         u8 byte10 /* byte10 */;
408         u8 byte11 /* byte11 */;
409         u8 byte12 /* byte12 */;
410         u8 byte13 /* byte13 */;
411         u8 byte14 /* byte14 */;
412         u8 byte15 /* byte15 */;
413         u8 e5_reserved /* e5_reserved */;
414         __le16 word11 /* word11 */;
415         __le32 reg10 /* reg10 */;
416         __le32 reg11 /* reg11 */;
417         __le32 reg12 /* reg12 */;
418         __le32 reg13 /* reg13 */;
419         __le32 reg14 /* reg14 */;
420         __le32 reg15 /* reg15 */;
421         __le32 reg16 /* reg16 */;
422         __le32 reg17 /* reg17 */;
423         __le32 reg18 /* reg18 */;
424         __le32 reg19 /* reg19 */;
425         __le16 word12 /* word12 */;
426         __le16 word13 /* word13 */;
427         __le16 word14 /* word14 */;
428         __le16 word15 /* word15 */;
429 };
430
431 struct e4_tstorm_core_conn_ag_ctx {
432         u8 byte0 /* cdu_validation */;
433         u8 byte1 /* state */;
434         u8 flags0;
435 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
436 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
437 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
438 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
439 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT2_MASK     0x1 /* bit2 */
440 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT2_SHIFT    2
441 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT3_MASK     0x1 /* bit3 */
442 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT3_SHIFT    3
443 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT4_MASK     0x1 /* bit4 */
444 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT4_SHIFT    4
445 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT5_MASK     0x1 /* bit5 */
446 #define E4_TSTORM_CORE_CONN_AG_CTX_BIT5_SHIFT    5
447 #define E4_TSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* timer0cf */
448 #define E4_TSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     6
449         u8 flags1;
450 #define E4_TSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* timer1cf */
451 #define E4_TSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     0
452 #define E4_TSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* timer2cf */
453 #define E4_TSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     2
454 #define E4_TSTORM_CORE_CONN_AG_CTX_CF3_MASK      0x3 /* timer_stop_all */
455 #define E4_TSTORM_CORE_CONN_AG_CTX_CF3_SHIFT     4
456 #define E4_TSTORM_CORE_CONN_AG_CTX_CF4_MASK      0x3 /* cf4 */
457 #define E4_TSTORM_CORE_CONN_AG_CTX_CF4_SHIFT     6
458         u8 flags2;
459 #define E4_TSTORM_CORE_CONN_AG_CTX_CF5_MASK      0x3 /* cf5 */
460 #define E4_TSTORM_CORE_CONN_AG_CTX_CF5_SHIFT     0
461 #define E4_TSTORM_CORE_CONN_AG_CTX_CF6_MASK      0x3 /* cf6 */
462 #define E4_TSTORM_CORE_CONN_AG_CTX_CF6_SHIFT     2
463 #define E4_TSTORM_CORE_CONN_AG_CTX_CF7_MASK      0x3 /* cf7 */
464 #define E4_TSTORM_CORE_CONN_AG_CTX_CF7_SHIFT     4
465 #define E4_TSTORM_CORE_CONN_AG_CTX_CF8_MASK      0x3 /* cf8 */
466 #define E4_TSTORM_CORE_CONN_AG_CTX_CF8_SHIFT     6
467         u8 flags3;
468 #define E4_TSTORM_CORE_CONN_AG_CTX_CF9_MASK      0x3 /* cf9 */
469 #define E4_TSTORM_CORE_CONN_AG_CTX_CF9_SHIFT     0
470 #define E4_TSTORM_CORE_CONN_AG_CTX_CF10_MASK     0x3 /* cf10 */
471 #define E4_TSTORM_CORE_CONN_AG_CTX_CF10_SHIFT    2
472 #define E4_TSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
473 #define E4_TSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   4
474 #define E4_TSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
475 #define E4_TSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   5
476 #define E4_TSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
477 #define E4_TSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   6
478 #define E4_TSTORM_CORE_CONN_AG_CTX_CF3EN_MASK    0x1 /* cf3en */
479 #define E4_TSTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT   7
480         u8 flags4;
481 #define E4_TSTORM_CORE_CONN_AG_CTX_CF4EN_MASK    0x1 /* cf4en */
482 #define E4_TSTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT   0
483 #define E4_TSTORM_CORE_CONN_AG_CTX_CF5EN_MASK    0x1 /* cf5en */
484 #define E4_TSTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT   1
485 #define E4_TSTORM_CORE_CONN_AG_CTX_CF6EN_MASK    0x1 /* cf6en */
486 #define E4_TSTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT   2
487 #define E4_TSTORM_CORE_CONN_AG_CTX_CF7EN_MASK    0x1 /* cf7en */
488 #define E4_TSTORM_CORE_CONN_AG_CTX_CF7EN_SHIFT   3
489 #define E4_TSTORM_CORE_CONN_AG_CTX_CF8EN_MASK    0x1 /* cf8en */
490 #define E4_TSTORM_CORE_CONN_AG_CTX_CF8EN_SHIFT   4
491 #define E4_TSTORM_CORE_CONN_AG_CTX_CF9EN_MASK    0x1 /* cf9en */
492 #define E4_TSTORM_CORE_CONN_AG_CTX_CF9EN_SHIFT   5
493 #define E4_TSTORM_CORE_CONN_AG_CTX_CF10EN_MASK   0x1 /* cf10en */
494 #define E4_TSTORM_CORE_CONN_AG_CTX_CF10EN_SHIFT  6
495 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
496 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 7
497         u8 flags5;
498 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
499 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 0
500 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
501 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 1
502 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
503 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 2
504 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
505 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 3
506 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE5EN_MASK  0x1 /* rule5en */
507 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT 4
508 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE6EN_MASK  0x1 /* rule6en */
509 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT 5
510 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE7EN_MASK  0x1 /* rule7en */
511 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT 6
512 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE8EN_MASK  0x1 /* rule8en */
513 #define E4_TSTORM_CORE_CONN_AG_CTX_RULE8EN_SHIFT 7
514         __le32 reg0 /* reg0 */;
515         __le32 reg1 /* reg1 */;
516         __le32 reg2 /* reg2 */;
517         __le32 reg3 /* reg3 */;
518         __le32 reg4 /* reg4 */;
519         __le32 reg5 /* reg5 */;
520         __le32 reg6 /* reg6 */;
521         __le32 reg7 /* reg7 */;
522         __le32 reg8 /* reg8 */;
523         u8 byte2 /* byte2 */;
524         u8 byte3 /* byte3 */;
525         __le16 word0 /* word0 */;
526         u8 byte4 /* byte4 */;
527         u8 byte5 /* byte5 */;
528         __le16 word1 /* word1 */;
529         __le16 word2 /* conn_dpi */;
530         __le16 word3 /* word3 */;
531         __le32 reg9 /* reg9 */;
532         __le32 reg10 /* reg10 */;
533 };
534
535 struct e4_ustorm_core_conn_ag_ctx {
536         u8 reserved /* cdu_validation */;
537         u8 byte1 /* state */;
538         u8 flags0;
539 #define E4_USTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
540 #define E4_USTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
541 #define E4_USTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
542 #define E4_USTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
543 #define E4_USTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* timer0cf */
544 #define E4_USTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
545 #define E4_USTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* timer1cf */
546 #define E4_USTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
547 #define E4_USTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* timer2cf */
548 #define E4_USTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
549         u8 flags1;
550 #define E4_USTORM_CORE_CONN_AG_CTX_CF3_MASK      0x3 /* timer_stop_all */
551 #define E4_USTORM_CORE_CONN_AG_CTX_CF3_SHIFT     0
552 #define E4_USTORM_CORE_CONN_AG_CTX_CF4_MASK      0x3 /* cf4 */
553 #define E4_USTORM_CORE_CONN_AG_CTX_CF4_SHIFT     2
554 #define E4_USTORM_CORE_CONN_AG_CTX_CF5_MASK      0x3 /* cf5 */
555 #define E4_USTORM_CORE_CONN_AG_CTX_CF5_SHIFT     4
556 #define E4_USTORM_CORE_CONN_AG_CTX_CF6_MASK      0x3 /* cf6 */
557 #define E4_USTORM_CORE_CONN_AG_CTX_CF6_SHIFT     6
558         u8 flags2;
559 #define E4_USTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
560 #define E4_USTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
561 #define E4_USTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
562 #define E4_USTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
563 #define E4_USTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
564 #define E4_USTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
565 #define E4_USTORM_CORE_CONN_AG_CTX_CF3EN_MASK    0x1 /* cf3en */
566 #define E4_USTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT   3
567 #define E4_USTORM_CORE_CONN_AG_CTX_CF4EN_MASK    0x1 /* cf4en */
568 #define E4_USTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT   4
569 #define E4_USTORM_CORE_CONN_AG_CTX_CF5EN_MASK    0x1 /* cf5en */
570 #define E4_USTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT   5
571 #define E4_USTORM_CORE_CONN_AG_CTX_CF6EN_MASK    0x1 /* cf6en */
572 #define E4_USTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT   6
573 #define E4_USTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
574 #define E4_USTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 7
575         u8 flags3;
576 #define E4_USTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
577 #define E4_USTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 0
578 #define E4_USTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
579 #define E4_USTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 1
580 #define E4_USTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
581 #define E4_USTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 2
582 #define E4_USTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
583 #define E4_USTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 3
584 #define E4_USTORM_CORE_CONN_AG_CTX_RULE5EN_MASK  0x1 /* rule5en */
585 #define E4_USTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT 4
586 #define E4_USTORM_CORE_CONN_AG_CTX_RULE6EN_MASK  0x1 /* rule6en */
587 #define E4_USTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT 5
588 #define E4_USTORM_CORE_CONN_AG_CTX_RULE7EN_MASK  0x1 /* rule7en */
589 #define E4_USTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT 6
590 #define E4_USTORM_CORE_CONN_AG_CTX_RULE8EN_MASK  0x1 /* rule8en */
591 #define E4_USTORM_CORE_CONN_AG_CTX_RULE8EN_SHIFT 7
592         u8 byte2 /* byte2 */;
593         u8 byte3 /* byte3 */;
594         __le16 word0 /* conn_dpi */;
595         __le16 word1 /* word1 */;
596         __le32 rx_producers /* reg0 */;
597         __le32 reg1 /* reg1 */;
598         __le32 reg2 /* reg2 */;
599         __le32 reg3 /* reg3 */;
600         __le16 word2 /* word2 */;
601         __le16 word3 /* word3 */;
602 };
603
604 /*
605  * The core storm context for the Mstorm
606  */
607 struct mstorm_core_conn_st_ctx {
608         __le32 reserved[24];
609 };
610
611 /*
612  * The core storm context for the Ustorm
613  */
614 struct ustorm_core_conn_st_ctx {
615         __le32 reserved[4];
616 };
617
618 /*
619  * core connection context
620  */
621 struct e4_core_conn_context {
622 /* ystorm storm context */
623         struct ystorm_core_conn_st_ctx ystorm_st_context;
624         struct regpair ystorm_st_padding[2] /* padding */;
625 /* pstorm storm context */
626         struct pstorm_core_conn_st_ctx pstorm_st_context;
627         struct regpair pstorm_st_padding[2] /* padding */;
628 /* xstorm storm context */
629         struct xstorm_core_conn_st_ctx xstorm_st_context;
630 /* xstorm aggregative context */
631         struct e4_xstorm_core_conn_ag_ctx xstorm_ag_context;
632 /* tstorm aggregative context */
633         struct e4_tstorm_core_conn_ag_ctx tstorm_ag_context;
634 /* ustorm aggregative context */
635         struct e4_ustorm_core_conn_ag_ctx ustorm_ag_context;
636 /* mstorm storm context */
637         struct mstorm_core_conn_st_ctx mstorm_st_context;
638 /* ustorm storm context */
639         struct ustorm_core_conn_st_ctx ustorm_st_context;
640         struct regpair ustorm_st_padding[2] /* padding */;
641 };
642
643
644 /*
645  * How ll2 should deal with packet upon errors
646  */
647 enum core_error_handle {
648         LL2_DROP_PACKET /* If error occurs drop packet */,
649         LL2_DO_NOTHING /* If error occurs do nothing */,
650         LL2_ASSERT /* If error occurs assert */,
651         MAX_CORE_ERROR_HANDLE
652 };
653
654
655 /*
656  * opcodes for the event ring
657  */
658 enum core_event_opcode {
659         CORE_EVENT_TX_QUEUE_START,
660         CORE_EVENT_TX_QUEUE_STOP,
661         CORE_EVENT_RX_QUEUE_START,
662         CORE_EVENT_RX_QUEUE_STOP,
663         CORE_EVENT_RX_QUEUE_FLUSH,
664         CORE_EVENT_TX_QUEUE_UPDATE,
665         MAX_CORE_EVENT_OPCODE
666 };
667
668
669 /*
670  * The L4 pseudo checksum mode for Core
671  */
672 enum core_l4_pseudo_checksum_mode {
673 /* Pseudo Checksum on packet is calculated with the correct packet length. */
674         CORE_L4_PSEUDO_CSUM_CORRECT_LENGTH,
675 /* Pseudo Checksum on packet is calculated with zero length. */
676         CORE_L4_PSEUDO_CSUM_ZERO_LENGTH,
677         MAX_CORE_L4_PSEUDO_CHECKSUM_MODE
678 };
679
680
681 /*
682  * Light-L2 RX Producers in Tstorm RAM
683  */
684 struct core_ll2_port_stats {
685         struct regpair gsi_invalid_hdr;
686         struct regpair gsi_invalid_pkt_length;
687         struct regpair gsi_unsupported_pkt_typ;
688         struct regpair gsi_crcchksm_error;
689 };
690
691
692 /*
693  * Ethernet TX Per Queue Stats
694  */
695 struct core_ll2_pstorm_per_queue_stat {
696 /* number of total bytes sent without errors */
697         struct regpair sent_ucast_bytes;
698 /* number of total bytes sent without errors */
699         struct regpair sent_mcast_bytes;
700 /* number of total bytes sent without errors */
701         struct regpair sent_bcast_bytes;
702 /* number of total packets sent without errors */
703         struct regpair sent_ucast_pkts;
704 /* number of total packets sent without errors */
705         struct regpair sent_mcast_pkts;
706 /* number of total packets sent without errors */
707         struct regpair sent_bcast_pkts;
708 };
709
710
711 /*
712  * Light-L2 RX Producers in Tstorm RAM
713  */
714 struct core_ll2_rx_prod {
715         __le16 bd_prod /* BD Producer */;
716         __le16 cqe_prod /* CQE Producer */;
717         __le32 reserved;
718 };
719
720
721 struct core_ll2_tstorm_per_queue_stat {
722 /* Number of packets discarded because they are bigger than MTU */
723         struct regpair packet_too_big_discard;
724 /* Number of packets discarded due to lack of host buffers */
725         struct regpair no_buff_discard;
726 };
727
728
729 struct core_ll2_ustorm_per_queue_stat {
730         struct regpair rcv_ucast_bytes;
731         struct regpair rcv_mcast_bytes;
732         struct regpair rcv_bcast_bytes;
733         struct regpair rcv_ucast_pkts;
734         struct regpair rcv_mcast_pkts;
735         struct regpair rcv_bcast_pkts;
736 };
737
738
739 /*
740  * Core Ramrod Command IDs (light L2)
741  */
742 enum core_ramrod_cmd_id {
743         CORE_RAMROD_UNUSED,
744         CORE_RAMROD_RX_QUEUE_START /* RX Queue Start Ramrod */,
745         CORE_RAMROD_TX_QUEUE_START /* TX Queue Start Ramrod */,
746         CORE_RAMROD_RX_QUEUE_STOP /* RX Queue Stop Ramrod */,
747         CORE_RAMROD_TX_QUEUE_STOP /* TX Queue Stop Ramrod */,
748         CORE_RAMROD_RX_QUEUE_FLUSH /* RX Flush queue Ramrod */,
749         CORE_RAMROD_TX_QUEUE_UPDATE /* TX Queue Update Ramrod */,
750         MAX_CORE_RAMROD_CMD_ID
751 };
752
753
754 /*
755  * Core RX CQE Type for Light L2
756  */
757 enum core_roce_flavor_type {
758         CORE_ROCE,
759         CORE_RROCE,
760         MAX_CORE_ROCE_FLAVOR_TYPE
761 };
762
763
764 /*
765  * Specifies how ll2 should deal with packets errors: packet_too_big and no_buff
766  */
767 struct core_rx_action_on_error {
768         u8 error_type;
769 /* ll2 how to handle error packet_too_big (use enum core_error_handle) */
770 #define CORE_RX_ACTION_ON_ERROR_PACKET_TOO_BIG_MASK  0x3
771 #define CORE_RX_ACTION_ON_ERROR_PACKET_TOO_BIG_SHIFT 0
772 /* ll2 how to handle error with no_buff  (use enum core_error_handle) */
773 #define CORE_RX_ACTION_ON_ERROR_NO_BUFF_MASK         0x3
774 #define CORE_RX_ACTION_ON_ERROR_NO_BUFF_SHIFT        2
775 #define CORE_RX_ACTION_ON_ERROR_RESERVED_MASK        0xF
776 #define CORE_RX_ACTION_ON_ERROR_RESERVED_SHIFT       4
777 };
778
779
780 /*
781  * Core RX BD for Light L2
782  */
783 struct core_rx_bd {
784         struct regpair addr;
785         __le16 reserved[4];
786 };
787
788
789 /*
790  * Core RX CM offload BD for Light L2
791  */
792 struct core_rx_bd_with_buff_len {
793         struct regpair addr;
794         __le16 buff_length;
795         __le16 reserved[3];
796 };
797
798 /*
799  * Core RX CM offload BD for Light L2
800  */
801 union core_rx_bd_union {
802         struct core_rx_bd rx_bd /* Core Rx Bd static buffer size */;
803 /* Core Rx Bd with dynamic buffer length */
804         struct core_rx_bd_with_buff_len rx_bd_with_len;
805 };
806
807
808
809 /*
810  * Opaque Data for Light L2 RX CQE .
811  */
812 struct core_rx_cqe_opaque_data {
813         __le32 data[2] /* Opaque CQE Data */;
814 };
815
816
817 /*
818  * Core RX CQE Type for Light L2
819  */
820 enum core_rx_cqe_type {
821         CORE_RX_CQE_ILLIGAL_TYPE /* Bad RX Cqe type */,
822         CORE_RX_CQE_TYPE_REGULAR /* Regular Core RX CQE */,
823         CORE_RX_CQE_TYPE_GSI_OFFLOAD /* Fp Gsi offload RX CQE */,
824         CORE_RX_CQE_TYPE_SLOW_PATH /* Slow path Core RX CQE */,
825         MAX_CORE_RX_CQE_TYPE
826 };
827
828
829 /*
830  * Core RX CQE for Light L2 .
831  */
832 struct core_rx_fast_path_cqe {
833         u8 type /* CQE type */;
834 /* Offset (in bytes) of the packet from start of the buffer */
835         u8 placement_offset;
836 /* Parsing and error flags from the parser */
837         struct parsing_and_err_flags parse_flags;
838         __le16 packet_length /* Total packet length (from the parser) */;
839         __le16 vlan /* 802.1q VLAN tag */;
840         struct core_rx_cqe_opaque_data opaque_data /* Opaque Data */;
841 /* bit- map: each bit represents a specific error. errors indications are
842  * provided by the cracker. see spec for detailed description
843  */
844         struct parsing_err_flags err_flags;
845         __le16 reserved0;
846         __le32 reserved1[3];
847 };
848
849 /*
850  * Core Rx CM offload CQE .
851  */
852 struct core_rx_gsi_offload_cqe {
853         u8 type /* CQE type */;
854         u8 data_length_error /* set if gsi data is bigger than buff */;
855 /* Parsing and error flags from the parser */
856         struct parsing_and_err_flags parse_flags;
857         __le16 data_length /* Total packet length (from the parser) */;
858         __le16 vlan /* 802.1q VLAN tag */;
859         __le32 src_mac_addrhi /* hi 4 bytes source mac address */;
860         __le16 src_mac_addrlo /* lo 2 bytes of source mac address */;
861 /* These are the lower 16 bit of QP id in RoCE BTH header */
862         __le16 qp_id;
863         __le32 src_qp /* Source QP from DETH header */;
864         __le32 reserved[3];
865 };
866
867 /*
868  * Core RX CQE for Light L2 .
869  */
870 struct core_rx_slow_path_cqe {
871         u8 type /* CQE type */;
872         u8 ramrod_cmd_id;
873         __le16 echo;
874         struct core_rx_cqe_opaque_data opaque_data /* Opaque Data */;
875         __le32 reserved1[5];
876 };
877
878 /*
879  * Core RX CM offload BD for Light L2
880  */
881 union core_rx_cqe_union {
882         struct core_rx_fast_path_cqe rx_cqe_fp /* Fast path CQE */;
883         struct core_rx_gsi_offload_cqe rx_cqe_gsi /* GSI offload CQE */;
884         struct core_rx_slow_path_cqe rx_cqe_sp /* Slow path CQE */;
885 };
886
887
888
889
890
891 /*
892  * Ramrod data for rx queue start ramrod
893  */
894 struct core_rx_start_ramrod_data {
895         struct regpair bd_base /* bd address of the first bd page */;
896         struct regpair cqe_pbl_addr /* Base address on host of CQE PBL */;
897         __le16 mtu /* Maximum transmission unit */;
898         __le16 sb_id /* Status block ID */;
899         u8 sb_index /* index of the protocol index */;
900         u8 complete_cqe_flg /* post completion to the CQE ring if set */;
901         u8 complete_event_flg /* post completion to the event ring if set */;
902         u8 drop_ttl0_flg /* drop packet with ttl0 if set */;
903         __le16 num_of_pbl_pages /* Num of pages in CQE PBL */;
904 /* if set, 802.1q tags will be removed and copied to CQE */
905 /* if set, 802.1q tags will be removed and copied to CQE */
906         u8 inner_vlan_stripping_en;
907 /* if set, outer tag wont be stripped, valid only in MF OVLAN. */
908         u8 outer_vlan_stripping_dis;
909         u8 queue_id /* Light L2 RX Queue ID */;
910         u8 main_func_queue /* Is this the main queue for the PF */;
911 /* Duplicate broadcast packets to LL2 main queue in mf_si mode. Valid if
912  * main_func_queue is set.
913  */
914         u8 mf_si_bcast_accept_all;
915 /* Duplicate multicast packets to LL2 main queue in mf_si mode. Valid if
916  * main_func_queue is set.
917  */
918         u8 mf_si_mcast_accept_all;
919 /* Specifies how ll2 should deal with packets errors: packet_too_big and
920  * no_buff
921  */
922         struct core_rx_action_on_error action_on_error;
923 /* set when in GSI offload mode on ROCE connection */
924         u8 gsi_offload_flag;
925         u8 reserved[6];
926 };
927
928
929 /*
930  * Ramrod data for rx queue stop ramrod
931  */
932 struct core_rx_stop_ramrod_data {
933         u8 complete_cqe_flg /* post completion to the CQE ring if set */;
934         u8 complete_event_flg /* post completion to the event ring if set */;
935         u8 queue_id /* Light L2 RX Queue ID */;
936         u8 reserved1;
937         __le16 reserved2[2];
938 };
939
940
941 /*
942  * Flags for Core TX BD
943  */
944 struct core_tx_bd_data {
945         __le16 as_bitfield;
946 /* Do not allow additional VLAN manipulations on this packet (DCB) */
947 #define CORE_TX_BD_DATA_FORCE_VLAN_MODE_MASK         0x1
948 #define CORE_TX_BD_DATA_FORCE_VLAN_MODE_SHIFT        0
949 /* Insert VLAN into packet */
950 #define CORE_TX_BD_DATA_VLAN_INSERTION_MASK          0x1
951 #define CORE_TX_BD_DATA_VLAN_INSERTION_SHIFT         1
952 /* This is the first BD of the packet (for debug) */
953 #define CORE_TX_BD_DATA_START_BD_MASK                0x1
954 #define CORE_TX_BD_DATA_START_BD_SHIFT               2
955 /* Calculate the IP checksum for the packet */
956 #define CORE_TX_BD_DATA_IP_CSUM_MASK                 0x1
957 #define CORE_TX_BD_DATA_IP_CSUM_SHIFT                3
958 /* Calculate the L4 checksum for the packet */
959 #define CORE_TX_BD_DATA_L4_CSUM_MASK                 0x1
960 #define CORE_TX_BD_DATA_L4_CSUM_SHIFT                4
961 /* Packet is IPv6 with extensions */
962 #define CORE_TX_BD_DATA_IPV6_EXT_MASK                0x1
963 #define CORE_TX_BD_DATA_IPV6_EXT_SHIFT               5
964 /* If IPv6+ext, and if l4_csum is 1, than this field indicates L4 protocol:
965  * 0-TCP, 1-UDP
966  */
967 #define CORE_TX_BD_DATA_L4_PROTOCOL_MASK             0x1
968 #define CORE_TX_BD_DATA_L4_PROTOCOL_SHIFT            6
969 /* The pseudo checksum mode to place in the L4 checksum field. Required only
970  * when IPv6+ext and l4_csum is set. (use enum core_l4_pseudo_checksum_mode)
971  */
972 #define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_MASK     0x1
973 #define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_SHIFT    7
974 /* Number of BDs that make up one packet - width wide enough to present
975  * CORE_LL2_TX_MAX_BDS_PER_PACKET
976  */
977 #define CORE_TX_BD_DATA_NBDS_MASK                    0xF
978 #define CORE_TX_BD_DATA_NBDS_SHIFT                   8
979 /* Use roce_flavor enum - Differentiate between Roce flavors is valid when
980  * connType is ROCE (use enum core_roce_flavor_type)
981  */
982 #define CORE_TX_BD_DATA_ROCE_FLAV_MASK               0x1
983 #define CORE_TX_BD_DATA_ROCE_FLAV_SHIFT              12
984 /* Calculate ip length */
985 #define CORE_TX_BD_DATA_IP_LEN_MASK                  0x1
986 #define CORE_TX_BD_DATA_IP_LEN_SHIFT                 13
987 /* disables the STAG insertion, relevant only in MF OVLAN mode. */
988 #define CORE_TX_BD_DATA_DISABLE_STAG_INSERTION_MASK  0x1
989 #define CORE_TX_BD_DATA_DISABLE_STAG_INSERTION_SHIFT 14
990 #define CORE_TX_BD_DATA_RESERVED0_MASK               0x1
991 #define CORE_TX_BD_DATA_RESERVED0_SHIFT              15
992 };
993
994 /*
995  * Core TX BD for Light L2
996  */
997 struct core_tx_bd {
998         struct regpair addr /* Buffer Address */;
999         __le16 nbytes /* Number of Bytes in Buffer */;
1000 /* Network packets: VLAN to insert to packet (if insertion flag set) LoopBack
1001  * packets: echo data to pass to Rx
1002  */
1003         __le16 nw_vlan_or_lb_echo;
1004         struct core_tx_bd_data bd_data /* BD Flags */;
1005         __le16 bitfield1;
1006 /* L4 Header Offset from start of packet (in Words). This is needed if both
1007  * l4_csum and ipv6_ext are set
1008  */
1009 #define CORE_TX_BD_L4_HDR_OFFSET_W_MASK  0x3FFF
1010 #define CORE_TX_BD_L4_HDR_OFFSET_W_SHIFT 0
1011 /* Packet destination - Network, Loopback or Drop (use enum core_tx_dest) */
1012 #define CORE_TX_BD_TX_DST_MASK           0x3
1013 #define CORE_TX_BD_TX_DST_SHIFT          14
1014 };
1015
1016
1017
1018 /*
1019  * Light L2 TX Destination
1020  */
1021 enum core_tx_dest {
1022         CORE_TX_DEST_NW /* TX Destination to the Network */,
1023         CORE_TX_DEST_LB /* TX Destination to the Loopback */,
1024         CORE_TX_DEST_RESERVED,
1025         CORE_TX_DEST_DROP /* TX Drop */,
1026         MAX_CORE_TX_DEST
1027 };
1028
1029
1030 /*
1031  * Ramrod data for tx queue start ramrod
1032  */
1033 struct core_tx_start_ramrod_data {
1034         struct regpair pbl_base_addr /* Address of the pbl page */;
1035         __le16 mtu /* Maximum transmission unit */;
1036         __le16 sb_id /* Status block ID */;
1037         u8 sb_index /* Status block protocol index */;
1038         u8 stats_en /* Statistics Enable */;
1039         u8 stats_id /* Statistics Counter ID */;
1040         u8 conn_type /* connection type that loaded ll2 */;
1041         __le16 pbl_size /* Number of BD pages pointed by PBL */;
1042         __le16 qm_pq_id /* QM PQ ID */;
1043 /* set when in GSI offload mode on ROCE connection */
1044         u8 gsi_offload_flag;
1045         u8 resrved[3];
1046 };
1047
1048
1049 /*
1050  * Ramrod data for tx queue stop ramrod
1051  */
1052 struct core_tx_stop_ramrod_data {
1053         __le32 reserved0[2];
1054 };
1055
1056
1057 /*
1058  * Ramrod data for tx queue update ramrod
1059  */
1060 struct core_tx_update_ramrod_data {
1061         u8 update_qm_pq_id_flg /* Flag to Update QM PQ ID */;
1062         u8 reserved0;
1063         __le16 qm_pq_id /* Updated QM PQ ID */;
1064         __le32 reserved1[1];
1065 };
1066
1067
1068 /*
1069  * Enum flag for what type of dcb data to update
1070  */
1071 enum dcb_dscp_update_mode {
1072 /* use when no change should be done to dcb data */
1073         DONT_UPDATE_DCB_DSCP,
1074         UPDATE_DCB /* use to update only l2 (vlan) priority */,
1075         UPDATE_DSCP /* use to update only l3 dscp */,
1076         UPDATE_DCB_DSCP /* update vlan pri and dscp */,
1077         MAX_DCB_DSCP_UPDATE_FLAG
1078 };
1079
1080
1081 struct eth_mstorm_per_pf_stat {
1082         struct regpair gre_discard_pkts /* Dropped GRE RX packets */;
1083         struct regpair vxlan_discard_pkts /* Dropped VXLAN RX packets */;
1084         struct regpair geneve_discard_pkts /* Dropped GENEVE RX packets */;
1085         struct regpair lb_discard_pkts /* Dropped Tx switched packets */;
1086 };
1087
1088
1089 struct eth_mstorm_per_queue_stat {
1090 /* Number of packets discarded because TTL=0 (in IPv4) or hopLimit=0 (IPv6) */
1091         struct regpair ttl0_discard;
1092 /* Number of packets discarded because they are bigger than MTU */
1093         struct regpair packet_too_big_discard;
1094 /* Number of packets discarded due to lack of host buffers (BDs/SGEs/CQEs) */
1095         struct regpair no_buff_discard;
1096 /* Number of packets discarded because of no active Rx connection */
1097         struct regpair not_active_discard;
1098 /* number of coalesced packets in all TPA aggregations */
1099         struct regpair tpa_coalesced_pkts;
1100 /* total number of TPA aggregations */
1101         struct regpair tpa_coalesced_events;
1102 /* number of aggregations, which abnormally ended */
1103         struct regpair tpa_aborts_num;
1104 /* total TCP payload length in all TPA aggregations */
1105         struct regpair tpa_coalesced_bytes;
1106 };
1107
1108
1109 /*
1110  * Ethernet TX Per PF
1111  */
1112 struct eth_pstorm_per_pf_stat {
1113 /* number of total ucast bytes sent on loopback port without errors */
1114         struct regpair sent_lb_ucast_bytes;
1115 /* number of total mcast bytes sent on loopback port without errors */
1116         struct regpair sent_lb_mcast_bytes;
1117 /* number of total bcast bytes sent on loopback port without errors */
1118         struct regpair sent_lb_bcast_bytes;
1119 /* number of total ucast packets sent on loopback port without errors */
1120         struct regpair sent_lb_ucast_pkts;
1121 /* number of total mcast packets sent on loopback port without errors */
1122         struct regpair sent_lb_mcast_pkts;
1123 /* number of total bcast packets sent on loopback port without errors */
1124         struct regpair sent_lb_bcast_pkts;
1125         struct regpair sent_gre_bytes /* Sent GRE bytes */;
1126         struct regpair sent_vxlan_bytes /* Sent VXLAN bytes */;
1127         struct regpair sent_geneve_bytes /* Sent GENEVE bytes */;
1128         struct regpair sent_gre_pkts /* Sent GRE packets */;
1129         struct regpair sent_vxlan_pkts /* Sent VXLAN packets */;
1130         struct regpair sent_geneve_pkts /* Sent GENEVE packets */;
1131         struct regpair gre_drop_pkts /* Dropped GRE TX packets */;
1132         struct regpair vxlan_drop_pkts /* Dropped VXLAN TX packets */;
1133         struct regpair geneve_drop_pkts /* Dropped GENEVE TX packets */;
1134 };
1135
1136
1137 /*
1138  * Ethernet TX Per Queue Stats
1139  */
1140 struct eth_pstorm_per_queue_stat {
1141 /* number of total bytes sent without errors */
1142         struct regpair sent_ucast_bytes;
1143 /* number of total bytes sent without errors */
1144         struct regpair sent_mcast_bytes;
1145 /* number of total bytes sent without errors */
1146         struct regpair sent_bcast_bytes;
1147 /* number of total packets sent without errors */
1148         struct regpair sent_ucast_pkts;
1149 /* number of total packets sent without errors */
1150         struct regpair sent_mcast_pkts;
1151 /* number of total packets sent without errors */
1152         struct regpair sent_bcast_pkts;
1153 /* number of total packets dropped due to errors */
1154         struct regpair error_drop_pkts;
1155 };
1156
1157
1158 /*
1159  * ETH Rx producers data
1160  */
1161 struct eth_rx_rate_limit {
1162 /* Rate Limit Multiplier - (Storm Clock (MHz) * 8 / Desired Bandwidth (MB/s)) */
1163         __le16 mult;
1164 /* Constant term to add (or subtract from number of cycles) */
1165         __le16 cnst;
1166         u8 add_sub_cnst /* Add (1) or subtract (0) constant term */;
1167         u8 reserved0;
1168         __le16 reserved1;
1169 };
1170
1171
1172 struct eth_ustorm_per_pf_stat {
1173 /* number of total ucast bytes received on loopback port without errors */
1174         struct regpair rcv_lb_ucast_bytes;
1175 /* number of total mcast bytes received on loopback port without errors */
1176         struct regpair rcv_lb_mcast_bytes;
1177 /* number of total bcast bytes received on loopback port without errors */
1178         struct regpair rcv_lb_bcast_bytes;
1179 /* number of total ucast packets received on loopback port without errors */
1180         struct regpair rcv_lb_ucast_pkts;
1181 /* number of total mcast packets received on loopback port without errors */
1182         struct regpair rcv_lb_mcast_pkts;
1183 /* number of total bcast packets received on loopback port without errors */
1184         struct regpair rcv_lb_bcast_pkts;
1185         struct regpair rcv_gre_bytes /* Received GRE bytes */;
1186         struct regpair rcv_vxlan_bytes /* Received VXLAN bytes */;
1187         struct regpair rcv_geneve_bytes /* Received GENEVE bytes */;
1188         struct regpair rcv_gre_pkts /* Received GRE packets */;
1189         struct regpair rcv_vxlan_pkts /* Received VXLAN packets */;
1190         struct regpair rcv_geneve_pkts /* Received GENEVE packets */;
1191 };
1192
1193
1194 struct eth_ustorm_per_queue_stat {
1195         struct regpair rcv_ucast_bytes;
1196         struct regpair rcv_mcast_bytes;
1197         struct regpair rcv_bcast_bytes;
1198         struct regpair rcv_ucast_pkts;
1199         struct regpair rcv_mcast_pkts;
1200         struct regpair rcv_bcast_pkts;
1201 };
1202
1203
1204 /*
1205  * Event Ring VF-PF Channel data
1206  */
1207 struct vf_pf_channel_eqe_data {
1208         struct regpair msg_addr /* VF-PF message address */;
1209 };
1210
1211 /*
1212  * Event Ring malicious VF data
1213  */
1214 struct malicious_vf_eqe_data {
1215         u8 vf_id /* Malicious VF ID */;
1216         u8 err_id /* Malicious VF error (use enum malicious_vf_error_id) */;
1217         __le16 reserved[3];
1218 };
1219
1220 /*
1221  * Event Ring initial cleanup data
1222  */
1223 struct initial_cleanup_eqe_data {
1224         u8 vf_id /* VF ID */;
1225         u8 reserved[7];
1226 };
1227
1228 /*
1229  * Event Data Union
1230  */
1231 union event_ring_data {
1232         u8 bytes[8] /* Byte Array */;
1233         struct vf_pf_channel_eqe_data vf_pf_channel /* VF-PF Channel data */;
1234         struct iscsi_eqe_data iscsi_info /* Dedicated fields to iscsi data */;
1235 /* Dedicated fields to iscsi connect done results */
1236         struct iscsi_connect_done_results iscsi_conn_done_info;
1237         struct malicious_vf_eqe_data malicious_vf /* Malicious VF data */;
1238 /* VF Initial Cleanup data */
1239         struct initial_cleanup_eqe_data vf_init_cleanup;
1240 };
1241
1242
1243 /*
1244  * Event Ring Entry
1245  */
1246 struct event_ring_entry {
1247         u8 protocol_id /* Event Protocol ID (use enum protocol_type) */;
1248         u8 opcode /* Event Opcode */;
1249         __le16 reserved0 /* Reserved */;
1250         __le16 echo /* Echo value from ramrod data on the host */;
1251         u8 fw_return_code /* FW return code for SP ramrods */;
1252         u8 flags;
1253 /* 0: synchronous EQE - a completion of SP message. 1: asynchronous EQE */
1254 #define EVENT_RING_ENTRY_ASYNC_MASK      0x1
1255 #define EVENT_RING_ENTRY_ASYNC_SHIFT     0
1256 #define EVENT_RING_ENTRY_RESERVED1_MASK  0x7F
1257 #define EVENT_RING_ENTRY_RESERVED1_SHIFT 1
1258         union event_ring_data data;
1259 };
1260
1261 /*
1262  * Event Ring Next Page Address
1263  */
1264 struct event_ring_next_addr {
1265         struct regpair addr /* Next Page Address */;
1266         __le32 reserved[2] /* Reserved */;
1267 };
1268
1269 /*
1270  * Event Ring Element
1271  */
1272 union event_ring_element {
1273         struct event_ring_entry entry /* Event Ring Entry */;
1274 /* Event Ring Next Page Address */
1275         struct event_ring_next_addr next_addr;
1276 };
1277
1278
1279
1280 /*
1281  * Ports mode
1282  */
1283 enum fw_flow_ctrl_mode {
1284         flow_ctrl_pause,
1285         flow_ctrl_pfc,
1286         MAX_FW_FLOW_CTRL_MODE
1287 };
1288
1289
1290 /*
1291  * GFT profile type.
1292  */
1293 enum gft_profile_type {
1294         GFT_PROFILE_TYPE_4_TUPLE /* 4 tuple, IP type and L4 type match. */,
1295 /* L4 destination port, IP type and L4 type match. */
1296         GFT_PROFILE_TYPE_L4_DST_PORT,
1297         GFT_PROFILE_TYPE_IP_DST_PORT /* IP destination port and IP type. */,
1298         MAX_GFT_PROFILE_TYPE
1299 };
1300
1301
1302 /*
1303  * Major and Minor hsi Versions
1304  */
1305 struct hsi_fp_ver_struct {
1306         u8 minor_ver_arr[2] /* Minor Version of hsi loading pf */;
1307         u8 major_ver_arr[2] /* Major Version of driver loading pf */;
1308 };
1309
1310
1311 /*
1312  * Integration Phase
1313  */
1314 enum integ_phase {
1315         INTEG_PHASE_BB_A0_LATEST = 3 /* BB A0 latest integration phase */,
1316         INTEG_PHASE_BB_B0_NO_MCP = 10 /* BB B0 without MCP */,
1317         INTEG_PHASE_BB_B0_WITH_MCP = 11 /* BB B0 with MCP */,
1318         MAX_INTEG_PHASE
1319 };
1320
1321
1322 /*
1323  * Ports mode
1324  */
1325 enum iwarp_ll2_tx_queues {
1326 /* LL2 queue for OOO packets sent in-order by the driver */
1327         IWARP_LL2_IN_ORDER_TX_QUEUE = 1,
1328 /* LL2 queue for unaligned packets sent aligned by the driver */
1329         IWARP_LL2_ALIGNED_TX_QUEUE,
1330 /* LL2 queue for unaligned packets sent aligned and was right-trimmed by the
1331  * driver
1332  */
1333         IWARP_LL2_ALIGNED_RIGHT_TRIMMED_TX_QUEUE,
1334         IWARP_LL2_ERROR /* Error indication */,
1335         MAX_IWARP_LL2_TX_QUEUES
1336 };
1337
1338
1339 /*
1340  * Malicious VF error ID
1341  */
1342 enum malicious_vf_error_id {
1343         MALICIOUS_VF_NO_ERROR /* Zero placeholder value */,
1344 /* Writing to VF/PF channel when it is not ready */
1345         VF_PF_CHANNEL_NOT_READY,
1346         VF_ZONE_MSG_NOT_VALID /* VF channel message is not valid */,
1347         VF_ZONE_FUNC_NOT_ENABLED /* Parent PF of VF channel is not active */,
1348 /* TX packet is shorter then reported on BDs or from minimal size */
1349         ETH_PACKET_TOO_SMALL,
1350 /* Tx packet with marked as insert VLAN when its illegal */
1351         ETH_ILLEGAL_VLAN_MODE,
1352         ETH_MTU_VIOLATION /* TX packet is greater then MTU */,
1353 /* TX packet has illegal inband tags marked */
1354         ETH_ILLEGAL_INBAND_TAGS,
1355 /* Vlan cant be added to inband tag */
1356         ETH_VLAN_INSERT_AND_INBAND_VLAN,
1357 /* indicated number of BDs for the packet is illegal */
1358         ETH_ILLEGAL_NBDS,
1359         ETH_FIRST_BD_WO_SOP /* 1st BD must have start_bd flag set */,
1360 /* There are not enough BDs for transmission of even one packet */
1361         ETH_INSUFFICIENT_BDS,
1362         ETH_ILLEGAL_LSO_HDR_NBDS /* Header NBDs value is illegal */,
1363         ETH_ILLEGAL_LSO_MSS /* LSO MSS value is more than allowed */,
1364 /* empty BD (which not contains control flags) is illegal  */
1365         ETH_ZERO_SIZE_BD,
1366         ETH_ILLEGAL_LSO_HDR_LEN /* LSO header size is above the limit  */,
1367 /* In LSO its expected that on the local BD ring there will be at least MSS
1368  * bytes of data
1369  */
1370         ETH_INSUFFICIENT_PAYLOAD,
1371         ETH_EDPM_OUT_OF_SYNC /* Valid BDs on local ring after EDPM L2 sync */,
1372 /* Tunneled packet with IPv6+Ext without a proper number of BDs */
1373         ETH_TUNN_IPV6_EXT_NBD_ERR,
1374         ETH_CONTROL_PACKET_VIOLATION /* VF sent control frame such as PFC */,
1375         ETH_ANTI_SPOOFING_ERR /* Anti-Spoofing verification failure */,
1376         MAX_MALICIOUS_VF_ERROR_ID
1377 };
1378
1379
1380
1381 /*
1382  * Mstorm non-triggering VF zone
1383  */
1384 struct mstorm_non_trigger_vf_zone {
1385 /* VF statistic bucket */
1386         struct eth_mstorm_per_queue_stat eth_queue_stat;
1387 /* VF RX queues producers */
1388         struct eth_rx_prod_data
1389                 eth_rx_queue_producers[ETH_MAX_NUM_RX_QUEUES_PER_VF_QUAD];
1390 };
1391
1392
1393 /*
1394  * Mstorm VF zone
1395  */
1396 struct mstorm_vf_zone {
1397 /* non-interrupt-triggering zone */
1398         struct mstorm_non_trigger_vf_zone non_trigger;
1399 };
1400
1401
1402 /*
1403  * vlan header including TPID and TCI fields
1404  */
1405 struct vlan_header {
1406         __le16 tpid /* Tag Protocol Identifier */;
1407         __le16 tci /* Tag Control Information */;
1408 };
1409
1410 /*
1411  * outer tag configurations
1412  */
1413 struct outer_tag_config_struct {
1414 /* Enables the STAG Priority Change , Should be 1 for Bette Davis and UFP with
1415  * Host Control mode. Else - 0
1416  */
1417         u8 enable_stag_pri_change;
1418 /* If inner_to_outer_pri_map is initialize then set pri_map_valid */
1419         u8 pri_map_valid;
1420         u8 reserved[2];
1421 /* In case mf_mode is MF_OVLAN, this field specifies the outer tag protocol
1422  * identifier and outer tag control information
1423  */
1424         struct vlan_header outer_tag;
1425 /* Map from inner to outer priority. Set pri_map_valid when init map */
1426         u8 inner_to_outer_pri_map[8];
1427 };
1428
1429
1430 /*
1431  * personality per PF
1432  */
1433 enum personality_type {
1434         BAD_PERSONALITY_TYP,
1435         PERSONALITY_ISCSI /* iSCSI and LL2 */,
1436         PERSONALITY_FCOE /* Fcoe and LL2 */,
1437         PERSONALITY_RDMA_AND_ETH /* Roce or Iwarp, Eth and LL2 */,
1438         PERSONALITY_RDMA /* Roce and LL2 */,
1439         PERSONALITY_CORE /* CORE(LL2) */,
1440         PERSONALITY_ETH /* Ethernet */,
1441         PERSONALITY_TOE /* Toe and LL2 */,
1442         MAX_PERSONALITY_TYPE
1443 };
1444
1445
1446 /*
1447  * tunnel configuration
1448  */
1449 struct pf_start_tunnel_config {
1450 /* Set VXLAN tunnel UDP destination port to vxlan_udp_port. If not set -
1451  * FW will use a default port
1452  */
1453         u8 set_vxlan_udp_port_flg;
1454 /* Set GENEVE tunnel UDP destination port to geneve_udp_port. If not set -
1455  * FW will use a default port
1456  */
1457         u8 set_geneve_udp_port_flg;
1458         u8 tunnel_clss_vxlan /* Rx classification scheme for VXLAN tunnel. */;
1459 /* Rx classification scheme for l2 GENEVE tunnel. */
1460         u8 tunnel_clss_l2geneve;
1461 /* Rx classification scheme for ip GENEVE tunnel. */
1462         u8 tunnel_clss_ipgeneve;
1463         u8 tunnel_clss_l2gre /* Rx classification scheme for l2 GRE tunnel. */;
1464         u8 tunnel_clss_ipgre /* Rx classification scheme for ip GRE tunnel. */;
1465         u8 reserved;
1466 /* VXLAN tunnel UDP destination port. Valid if set_vxlan_udp_port_flg=1 */
1467         __le16 vxlan_udp_port;
1468 /* GENEVE tunnel UDP destination port. Valid if set_geneve_udp_port_flg=1 */
1469         __le16 geneve_udp_port;
1470 };
1471
1472 /*
1473  * Ramrod data for PF start ramrod
1474  */
1475 struct pf_start_ramrod_data {
1476         struct regpair event_ring_pbl_addr /* Address of event ring PBL */;
1477 /* PBL address of consolidation queue */
1478         struct regpair consolid_q_pbl_addr;
1479 /* tunnel configuration. */
1480         struct pf_start_tunnel_config tunnel_config;
1481         __le16 event_ring_sb_id /* Status block ID */;
1482 /* All VfIds owned by Pf will be from baseVfId till baseVfId+numVfs */
1483         u8 base_vf_id;
1484         u8 num_vfs /* Amount of vfs owned by PF */;
1485         u8 event_ring_num_pages /* Number of PBL pages in event ring */;
1486         u8 event_ring_sb_index /* Status block index */;
1487         u8 path_id /* HW path ID (engine ID) */;
1488         u8 warning_as_error /* In FW asserts, treat warning as error */;
1489 /* If not set - throw a warning for each ramrod (for debug) */
1490         u8 dont_log_ramrods;
1491         u8 personality /* define what type of personality is new PF */;
1492 /* Log type mask. Each bit set enables a corresponding event type logging.
1493  * Event types are defined as ASSERT_LOG_TYPE_xxx
1494  */
1495         __le16 log_type_mask;
1496         u8 mf_mode /* Multi function mode */;
1497         u8 integ_phase /* Integration phase */;
1498 /* If set, inter-pf tx switching is allowed in Switch Independent func mode */
1499         u8 allow_npar_tx_switching;
1500         u8 reserved0;
1501 /* FP HSI version to be used by FW */
1502         struct hsi_fp_ver_struct hsi_fp_ver;
1503 /* Outer tag configurations */
1504         struct outer_tag_config_struct outer_tag_config;
1505 };
1506
1507
1508
1509 /*
1510  * Data for port update ramrod
1511  */
1512 struct protocol_dcb_data {
1513         u8 dcb_enable_flag /* dcbEnable flag value */;
1514         u8 dscp_enable_flag /* If set use dscp value */;
1515         u8 dcb_priority /* dcbPri flag value */;
1516         u8 dcb_tc /* dcb TC value */;
1517         u8 dscp_val /* dscp value to write if dscp_enable_flag is set */;
1518         u8 reserved0;
1519 };
1520
1521 /*
1522  * Update tunnel configuration
1523  */
1524 struct pf_update_tunnel_config {
1525 /* Update RX per PF tunnel classification scheme. */
1526         u8 update_rx_pf_clss;
1527 /* Update per PORT default tunnel RX classification scheme for traffic with
1528  * unknown unicast outer MAC in NPAR mode.
1529  */
1530         u8 update_rx_def_ucast_clss;
1531 /* Update per PORT default tunnel RX classification scheme for traffic with non
1532  * unicast outer MAC in NPAR mode.
1533  */
1534         u8 update_rx_def_non_ucast_clss;
1535 /* Update VXLAN tunnel UDP destination port. */
1536         u8 set_vxlan_udp_port_flg;
1537 /* Update GENEVE tunnel UDP destination port. */
1538         u8 set_geneve_udp_port_flg;
1539         u8 tunnel_clss_vxlan /* Classification scheme for VXLAN tunnel. */;
1540 /* Classification scheme for l2 GENEVE tunnel. */
1541         u8 tunnel_clss_l2geneve;
1542 /* Classification scheme for ip GENEVE tunnel. */
1543         u8 tunnel_clss_ipgeneve;
1544         u8 tunnel_clss_l2gre /* Classification scheme for l2 GRE tunnel. */;
1545         u8 tunnel_clss_ipgre /* Classification scheme for ip GRE tunnel. */;
1546         __le16 vxlan_udp_port /* VXLAN tunnel UDP destination port. */;
1547         __le16 geneve_udp_port /* GENEVE tunnel UDP destination port. */;
1548         __le16 reserved;
1549 };
1550
1551 /*
1552  * Data for port update ramrod
1553  */
1554 struct pf_update_ramrod_data {
1555 /* Update Eth DCB  data indication (use enum dcb_dscp_update_mode) */
1556         u8 update_eth_dcb_data_mode;
1557 /* Update FCOE DCB  data indication (use enum dcb_dscp_update_mode) */
1558         u8 update_fcoe_dcb_data_mode;
1559 /* Update iSCSI DCB  data indication (use enum dcb_dscp_update_mode) */
1560         u8 update_iscsi_dcb_data_mode;
1561         u8 update_roce_dcb_data_mode /* Update ROCE DCB  data indication */;
1562 /* Update RROCE (RoceV2) DCB  data indication */
1563         u8 update_rroce_dcb_data_mode;
1564         u8 update_iwarp_dcb_data_mode /* Update IWARP DCB  data indication */;
1565         u8 update_mf_vlan_flag /* Update MF outer vlan Id */;
1566 /* Update Enable STAG Priority Change indication */
1567         u8 update_enable_stag_pri_change;
1568         struct protocol_dcb_data eth_dcb_data /* core eth related fields */;
1569         struct protocol_dcb_data fcoe_dcb_data /* core fcoe related fields */;
1570 /* core iscsi related fields */
1571         struct protocol_dcb_data iscsi_dcb_data;
1572         struct protocol_dcb_data roce_dcb_data /* core roce related fields */;
1573 /* core roce related fields */
1574         struct protocol_dcb_data rroce_dcb_data;
1575 /* core iwarp related fields */
1576         struct protocol_dcb_data iwarp_dcb_data;
1577         __le16 mf_vlan /* new outer vlan id value */;
1578 /* enables the inner to outer TAG priority mapping. Should be 1 for Bette Davis
1579  * and UFP with Host Control mode, else - 0.
1580  */
1581         u8 enable_stag_pri_change;
1582         u8 reserved;
1583 /* tunnel configuration. */
1584         struct pf_update_tunnel_config tunnel_config;
1585 };
1586
1587
1588
1589 /*
1590  * Ports mode
1591  */
1592 enum ports_mode {
1593         ENGX2_PORTX1 /* 2 engines x 1 port */,
1594         ENGX2_PORTX2 /* 2 engines x 2 ports */,
1595         ENGX1_PORTX1 /* 1 engine  x 1 port */,
1596         ENGX1_PORTX2 /* 1 engine  x 2 ports */,
1597         ENGX1_PORTX4 /* 1 engine  x 4 ports */,
1598         MAX_PORTS_MODE
1599 };
1600
1601
1602
1603 /*
1604  * use to index in hsi_fp_[major|minor]_ver_arr per protocol
1605  */
1606 enum protocol_version_array_key {
1607         ETH_VER_KEY = 0,
1608         ROCE_VER_KEY,
1609         MAX_PROTOCOL_VERSION_ARRAY_KEY
1610 };
1611
1612
1613
1614 /*
1615  * RDMA TX Stats
1616  */
1617 struct rdma_sent_stats {
1618         struct regpair sent_bytes /* number of total RDMA bytes sent */;
1619         struct regpair sent_pkts /* number of total RDMA packets sent */;
1620 };
1621
1622 /*
1623  * Pstorm non-triggering VF zone
1624  */
1625 struct pstorm_non_trigger_vf_zone {
1626 /* VF statistic bucket */
1627         struct eth_pstorm_per_queue_stat eth_queue_stat;
1628         struct rdma_sent_stats rdma_stats /* RoCE sent statistics */;
1629 };
1630
1631
1632 /*
1633  * Pstorm VF zone
1634  */
1635 struct pstorm_vf_zone {
1636 /* non-interrupt-triggering zone */
1637         struct pstorm_non_trigger_vf_zone non_trigger;
1638         struct regpair reserved[7] /* vf_zone size mus be power of 2 */;
1639 };
1640
1641
1642 /*
1643  * Ramrod Header of SPQE
1644  */
1645 struct ramrod_header {
1646         __le32 cid /* Slowpath Connection CID */;
1647         u8 cmd_id /* Ramrod Cmd (Per Protocol Type) */;
1648         u8 protocol_id /* Ramrod Protocol ID */;
1649         __le16 echo /* Ramrod echo */;
1650 };
1651
1652
1653 /*
1654  * RDMA RX Stats
1655  */
1656 struct rdma_rcv_stats {
1657         struct regpair rcv_bytes /* number of total RDMA bytes received */;
1658         struct regpair rcv_pkts /* number of total RDMA packets received */;
1659 };
1660
1661
1662
1663 /*
1664  * Data for update QCN/DCQCN RL ramrod
1665  */
1666 struct rl_update_ramrod_data {
1667         u8 qcn_update_param_flg /* Update QCN global params: timeout. */;
1668 /* Update DCQCN global params: timeout, g, k. */
1669         u8 dcqcn_update_param_flg;
1670         u8 rl_init_flg /* Init RL parameters, when RL disabled. */;
1671         u8 rl_start_flg /* Start RL in IDLE state. Set rate to maximum. */;
1672         u8 rl_stop_flg /* Stop RL. */;
1673         u8 rl_id_first /* ID of first or single RL, that will be updated. */;
1674 /* ID of last RL, that will be updated. If clear, single RL will updated. */
1675         u8 rl_id_last;
1676         u8 rl_dc_qcn_flg /* If set, RL will used for DCQCN. */;
1677         __le32 rl_bc_rate /* Byte Counter Limit. */;
1678         __le16 rl_max_rate /* Maximum rate in 1.6 Mbps resolution. */;
1679         __le16 rl_r_ai /* Active increase rate. */;
1680         __le16 rl_r_hai /* Hyper active increase rate. */;
1681         __le16 dcqcn_g /* DCQCN Alpha update gain in 1/64K resolution . */;
1682         __le32 dcqcn_k_us /* DCQCN Alpha update interval. */;
1683         __le32 dcqcn_timeuot_us /* DCQCN timeout. */;
1684         __le32 qcn_timeuot_us /* QCN timeout. */;
1685         __le32 reserved[2];
1686 };
1687
1688
1689 /*
1690  * Slowpath Element (SPQE)
1691  */
1692 struct slow_path_element {
1693         struct ramrod_header hdr /* Ramrod Header */;
1694         struct regpair data_ptr /* Pointer to the Ramrod Data on the Host */;
1695 };
1696
1697
1698 /*
1699  * Tstorm non-triggering VF zone
1700  */
1701 struct tstorm_non_trigger_vf_zone {
1702         struct rdma_rcv_stats rdma_stats /* RoCE received statistics */;
1703 };
1704
1705
1706 struct tstorm_per_port_stat {
1707 /* packet is dropped because it was truncated in NIG */
1708         struct regpair trunc_error_discard;
1709 /* packet is dropped because of Ethernet FCS error */
1710         struct regpair mac_error_discard;
1711 /* packet is dropped because classification was unsuccessful */
1712         struct regpair mftag_filter_discard;
1713 /* packet was passed to Ethernet and dropped because of no mac filter match */
1714         struct regpair eth_mac_filter_discard;
1715 /* packet passed to Light L2 and dropped because Light L2 is not configured for
1716  * this PF
1717  */
1718         struct regpair ll2_mac_filter_discard;
1719 /* packet passed to Light L2 and dropped because Light L2 is not configured for
1720  * this PF
1721  */
1722         struct regpair ll2_conn_disabled_discard;
1723 /* packet is an ISCSI irregular packet */
1724         struct regpair iscsi_irregular_pkt;
1725 /* packet is an FCOE irregular packet */
1726         struct regpair fcoe_irregular_pkt;
1727 /* packet is an ROCE irregular packet */
1728         struct regpair roce_irregular_pkt;
1729 /* packet is an IWARP irregular packet */
1730         struct regpair iwarp_irregular_pkt;
1731 /* packet is an ETH irregular packet */
1732         struct regpair eth_irregular_pkt;
1733 /* packet is an TOE irregular packet */
1734         struct regpair toe_irregular_pkt;
1735 /* packet is an PREROCE irregular packet */
1736         struct regpair preroce_irregular_pkt;
1737         struct regpair eth_gre_tunn_filter_discard /* GRE dropped packets */;
1738 /* VXLAN dropped packets */
1739         struct regpair eth_vxlan_tunn_filter_discard;
1740 /* GENEVE dropped packets */
1741         struct regpair eth_geneve_tunn_filter_discard;
1742 };
1743
1744
1745 /*
1746  * Tstorm VF zone
1747  */
1748 struct tstorm_vf_zone {
1749 /* non-interrupt-triggering zone */
1750         struct tstorm_non_trigger_vf_zone non_trigger;
1751 };
1752
1753
1754 /*
1755  * Tunnel classification scheme
1756  */
1757 enum tunnel_clss {
1758 /* Use MAC and VLAN from first L2 header for vport classification. */
1759         TUNNEL_CLSS_MAC_VLAN = 0,
1760 /* Use MAC from first L2 header and VNI from tunnel header for vport
1761  * classification
1762  */
1763         TUNNEL_CLSS_MAC_VNI,
1764 /* Use MAC and VLAN from last L2 header for vport classification */
1765         TUNNEL_CLSS_INNER_MAC_VLAN,
1766 /* Use MAC from last L2 header and VNI from tunnel header for vport
1767  * classification
1768  */
1769         TUNNEL_CLSS_INNER_MAC_VNI,
1770 /* Use MAC and VLAN from last L2 header for vport classification. If no exact
1771  * match, use MAC and VLAN from first L2 header for classification.
1772  */
1773         TUNNEL_CLSS_MAC_VLAN_DUAL_STAGE,
1774         MAX_TUNNEL_CLSS
1775 };
1776
1777
1778
1779 /*
1780  * Ustorm non-triggering VF zone
1781  */
1782 struct ustorm_non_trigger_vf_zone {
1783 /* VF statistic bucket */
1784         struct eth_ustorm_per_queue_stat eth_queue_stat;
1785         struct regpair vf_pf_msg_addr /* VF-PF message address */;
1786 };
1787
1788
1789 /*
1790  * Ustorm triggering VF zone
1791  */
1792 struct ustorm_trigger_vf_zone {
1793         u8 vf_pf_msg_valid /* VF-PF message valid flag */;
1794         u8 reserved[7];
1795 };
1796
1797
1798 /*
1799  * Ustorm VF zone
1800  */
1801 struct ustorm_vf_zone {
1802 /* non-interrupt-triggering zone */
1803         struct ustorm_non_trigger_vf_zone non_trigger;
1804         struct ustorm_trigger_vf_zone trigger /* interrupt triggering zone */;
1805 };
1806
1807
1808 /*
1809  * VF-PF channel data
1810  */
1811 struct vf_pf_channel_data {
1812 /* 0: VF-PF Channel NOT ready. Waiting for ack from PF driver. 1: VF-PF Channel
1813  * is ready for a new transaction.
1814  */
1815         __le32 ready;
1816 /* 0: VF-PF Channel is invalid because of malicious VF. 1: VF-PF Channel is
1817  * valid.
1818  */
1819         u8 valid;
1820         u8 reserved0;
1821         __le16 reserved1;
1822 };
1823
1824
1825 /*
1826  * Ramrod data for VF start ramrod
1827  */
1828 struct vf_start_ramrod_data {
1829         u8 vf_id /* VF ID */;
1830 /* If set, initial cleanup ack will be sent to parent PF SP event queue */
1831         u8 enable_flr_ack;
1832         __le16 opaque_fid /* VF opaque FID */;
1833         u8 personality /* define what type of personality is new VF */;
1834         u8 reserved[7];
1835 /* FP HSI version to be used by FW */
1836         struct hsi_fp_ver_struct hsi_fp_ver;
1837 };
1838
1839
1840 /*
1841  * Ramrod data for VF start ramrod
1842  */
1843 struct vf_stop_ramrod_data {
1844         u8 vf_id /* VF ID */;
1845         u8 reserved0;
1846         __le16 reserved1;
1847         __le32 reserved2;
1848 };
1849
1850
1851 /*
1852  * VF zone size mode.
1853  */
1854 enum vf_zone_size_mode {
1855 /* Default VF zone size. Up to 192 VF supported. */
1856         VF_ZONE_SIZE_MODE_DEFAULT,
1857 /* Doubled VF zone size. Up to 96 VF supported. */
1858         VF_ZONE_SIZE_MODE_DOUBLE,
1859 /* Quad VF zone size. Up to 48 VF supported. */
1860         VF_ZONE_SIZE_MODE_QUAD,
1861         MAX_VF_ZONE_SIZE_MODE
1862 };
1863
1864
1865
1866
1867
1868 /*
1869  * Attentions status block
1870  */
1871 struct atten_status_block {
1872         __le32 atten_bits;
1873         __le32 atten_ack;
1874         __le16 reserved0;
1875         __le16 sb_index /* status block running index */;
1876         __le32 reserved1;
1877 };
1878
1879
1880 /*
1881  * DMAE command
1882  */
1883 struct dmae_cmd {
1884         __le32 opcode;
1885 /* DMA Source. 0 - PCIe, 1 - GRC (use enum dmae_cmd_src_enum) */
1886 #define DMAE_CMD_SRC_MASK              0x1
1887 #define DMAE_CMD_SRC_SHIFT             0
1888 /* DMA destination. 0 - None, 1 - PCIe, 2 - GRC, 3 - None
1889  * (use enum dmae_cmd_dst_enum)
1890  */
1891 #define DMAE_CMD_DST_MASK              0x3
1892 #define DMAE_CMD_DST_SHIFT             1
1893 /* Completion destination. 0 - PCie, 1 - GRC (use enum dmae_cmd_c_dst_enum) */
1894 #define DMAE_CMD_C_DST_MASK            0x1
1895 #define DMAE_CMD_C_DST_SHIFT           3
1896 /* Reset the CRC result (do not use the previous result as the seed) */
1897 #define DMAE_CMD_CRC_RESET_MASK        0x1
1898 #define DMAE_CMD_CRC_RESET_SHIFT       4
1899 /* Reset the source address in the next go to the same source address of the
1900  * previous go
1901  */
1902 #define DMAE_CMD_SRC_ADDR_RESET_MASK   0x1
1903 #define DMAE_CMD_SRC_ADDR_RESET_SHIFT  5
1904 /* Reset the destination address in the next go to the same destination address
1905  * of the previous go
1906  */
1907 #define DMAE_CMD_DST_ADDR_RESET_MASK   0x1
1908 #define DMAE_CMD_DST_ADDR_RESET_SHIFT  6
1909 /* 0   completion function is the same as src function, 1 - 0 completion
1910  * function is the same as dst function (use enum dmae_cmd_comp_func_enum)
1911  */
1912 #define DMAE_CMD_COMP_FUNC_MASK        0x1
1913 #define DMAE_CMD_COMP_FUNC_SHIFT       7
1914 /* 0 - Do not write a completion word, 1 - Write a completion word
1915  * (use enum dmae_cmd_comp_word_en_enum)
1916  */
1917 #define DMAE_CMD_COMP_WORD_EN_MASK     0x1
1918 #define DMAE_CMD_COMP_WORD_EN_SHIFT    8
1919 /* 0 - Do not write a CRC word, 1 - Write a CRC word
1920  * (use enum dmae_cmd_comp_crc_en_enum)
1921  */
1922 #define DMAE_CMD_COMP_CRC_EN_MASK      0x1
1923 #define DMAE_CMD_COMP_CRC_EN_SHIFT     9
1924 /* The CRC word should be taken from the DMAE address space from address 9+X,
1925  * where X is the value in these bits.
1926  */
1927 #define DMAE_CMD_COMP_CRC_OFFSET_MASK  0x7
1928 #define DMAE_CMD_COMP_CRC_OFFSET_SHIFT 10
1929 #define DMAE_CMD_RESERVED1_MASK        0x1
1930 #define DMAE_CMD_RESERVED1_SHIFT       13
1931 #define DMAE_CMD_ENDIANITY_MODE_MASK   0x3
1932 #define DMAE_CMD_ENDIANITY_MODE_SHIFT  14
1933 /* The field specifies how the completion word is affected by PCIe read error. 0
1934  * Send a regular completion, 1 - Send a completion with an error indication,
1935  * 2 do not send a completion (use enum dmae_cmd_error_handling_enum)
1936  */
1937 #define DMAE_CMD_ERR_HANDLING_MASK     0x3
1938 #define DMAE_CMD_ERR_HANDLING_SHIFT    16
1939 /* The port ID to be placed on the  RF FID  field of the GRC bus. this field is
1940  * used both when GRC is the destination and when it is the source of the DMAE
1941  * transaction.
1942  */
1943 #define DMAE_CMD_PORT_ID_MASK          0x3
1944 #define DMAE_CMD_PORT_ID_SHIFT         18
1945 /* Source PCI function number [3:0] */
1946 #define DMAE_CMD_SRC_PF_ID_MASK        0xF
1947 #define DMAE_CMD_SRC_PF_ID_SHIFT       20
1948 /* Destination PCI function number [3:0] */
1949 #define DMAE_CMD_DST_PF_ID_MASK        0xF
1950 #define DMAE_CMD_DST_PF_ID_SHIFT       24
1951 #define DMAE_CMD_SRC_VF_ID_VALID_MASK  0x1 /* Source VFID valid */
1952 #define DMAE_CMD_SRC_VF_ID_VALID_SHIFT 28
1953 #define DMAE_CMD_DST_VF_ID_VALID_MASK  0x1 /* Destination VFID valid */
1954 #define DMAE_CMD_DST_VF_ID_VALID_SHIFT 29
1955 #define DMAE_CMD_RESERVED2_MASK        0x3
1956 #define DMAE_CMD_RESERVED2_SHIFT       30
1957 /* PCIe source address low in bytes or GRC source address in DW */
1958         __le32 src_addr_lo;
1959 /* PCIe source address high in bytes or reserved (if source is GRC) */
1960         __le32 src_addr_hi;
1961 /* PCIe destination address low in bytes or GRC destination address in DW */
1962         __le32 dst_addr_lo;
1963 /* PCIe destination address high in bytes or reserved (if destination is GRC) */
1964         __le32 dst_addr_hi;
1965         __le16 length_dw /* Length in DW */;
1966         __le16 opcode_b;
1967 #define DMAE_CMD_SRC_VF_ID_MASK        0xFF /* Source VF id */
1968 #define DMAE_CMD_SRC_VF_ID_SHIFT       0
1969 #define DMAE_CMD_DST_VF_ID_MASK        0xFF /* Destination VF id */
1970 #define DMAE_CMD_DST_VF_ID_SHIFT       8
1971 /* PCIe completion address low in bytes or GRC completion address in DW */
1972         __le32 comp_addr_lo;
1973 /* PCIe completion address high in bytes or reserved (if completion address is
1974  * GRC)
1975  */
1976         __le32 comp_addr_hi;
1977         __le32 comp_val /* Value to write to completion address */;
1978         __le32 crc32 /* crc16 result */;
1979         __le32 crc_32_c /* crc32_c result */;
1980         __le16 crc16 /* crc16 result */;
1981         __le16 crc16_c /* crc16_c result */;
1982         __le16 crc10 /* crc_t10 result */;
1983         __le16 reserved;
1984         __le16 xsum16 /* checksum16 result  */;
1985         __le16 xsum8 /* checksum8 result  */;
1986 };
1987
1988
1989 enum dmae_cmd_comp_crc_en_enum {
1990         dmae_cmd_comp_crc_disabled /* Do not write a CRC word */,
1991         dmae_cmd_comp_crc_enabled /* Write a CRC word */,
1992         MAX_DMAE_CMD_COMP_CRC_EN_ENUM
1993 };
1994
1995
1996 enum dmae_cmd_comp_func_enum {
1997 /* completion word and/or CRC will be sent to SRC-PCI function/SRC VFID */
1998         dmae_cmd_comp_func_to_src,
1999 /* completion word and/or CRC will be sent to DST-PCI function/DST VFID */
2000         dmae_cmd_comp_func_to_dst,
2001         MAX_DMAE_CMD_COMP_FUNC_ENUM
2002 };
2003
2004
2005 enum dmae_cmd_comp_word_en_enum {
2006         dmae_cmd_comp_word_disabled /* Do not write a completion word */,
2007         dmae_cmd_comp_word_enabled /* Write the completion word */,
2008         MAX_DMAE_CMD_COMP_WORD_EN_ENUM
2009 };
2010
2011
2012 enum dmae_cmd_c_dst_enum {
2013         dmae_cmd_c_dst_pcie,
2014         dmae_cmd_c_dst_grc,
2015         MAX_DMAE_CMD_C_DST_ENUM
2016 };
2017
2018
2019 enum dmae_cmd_dst_enum {
2020         dmae_cmd_dst_none_0,
2021         dmae_cmd_dst_pcie,
2022         dmae_cmd_dst_grc,
2023         dmae_cmd_dst_none_3,
2024         MAX_DMAE_CMD_DST_ENUM
2025 };
2026
2027
2028 enum dmae_cmd_error_handling_enum {
2029 /* Send a regular completion (with no error indication) */
2030         dmae_cmd_error_handling_send_regular_comp,
2031 /* Send a completion with an error indication (i.e. set bit 31 of the completion
2032  * word)
2033  */
2034         dmae_cmd_error_handling_send_comp_with_err,
2035         dmae_cmd_error_handling_dont_send_comp /* Do not send a completion */,
2036         MAX_DMAE_CMD_ERROR_HANDLING_ENUM
2037 };
2038
2039
2040 enum dmae_cmd_src_enum {
2041         dmae_cmd_src_pcie /* The source is the PCIe */,
2042         dmae_cmd_src_grc /* The source is the GRC */,
2043         MAX_DMAE_CMD_SRC_ENUM
2044 };
2045
2046
2047 struct e4_mstorm_core_conn_ag_ctx {
2048         u8 byte0 /* cdu_validation */;
2049         u8 byte1 /* state */;
2050         u8 flags0;
2051 #define E4_MSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
2052 #define E4_MSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
2053 #define E4_MSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
2054 #define E4_MSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
2055 #define E4_MSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* cf0 */
2056 #define E4_MSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
2057 #define E4_MSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* cf1 */
2058 #define E4_MSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
2059 #define E4_MSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* cf2 */
2060 #define E4_MSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
2061         u8 flags1;
2062 #define E4_MSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
2063 #define E4_MSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
2064 #define E4_MSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
2065 #define E4_MSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
2066 #define E4_MSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
2067 #define E4_MSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
2068 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
2069 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 3
2070 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
2071 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 4
2072 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
2073 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 5
2074 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
2075 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 6
2076 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
2077 #define E4_MSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 7
2078         __le16 word0 /* word0 */;
2079         __le16 word1 /* word1 */;
2080         __le32 reg0 /* reg0 */;
2081         __le32 reg1 /* reg1 */;
2082 };
2083
2084
2085
2086
2087
2088 struct e4_ystorm_core_conn_ag_ctx {
2089         u8 byte0 /* cdu_validation */;
2090         u8 byte1 /* state */;
2091         u8 flags0;
2092 #define E4_YSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
2093 #define E4_YSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
2094 #define E4_YSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
2095 #define E4_YSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
2096 #define E4_YSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* cf0 */
2097 #define E4_YSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
2098 #define E4_YSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* cf1 */
2099 #define E4_YSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
2100 #define E4_YSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* cf2 */
2101 #define E4_YSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
2102         u8 flags1;
2103 #define E4_YSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
2104 #define E4_YSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
2105 #define E4_YSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
2106 #define E4_YSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
2107 #define E4_YSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
2108 #define E4_YSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
2109 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
2110 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 3
2111 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
2112 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 4
2113 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
2114 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 5
2115 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
2116 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 6
2117 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
2118 #define E4_YSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 7
2119         u8 byte2 /* byte2 */;
2120         u8 byte3 /* byte3 */;
2121         __le16 word0 /* word0 */;
2122         __le32 reg0 /* reg0 */;
2123         __le32 reg1 /* reg1 */;
2124         __le16 word1 /* word1 */;
2125         __le16 word2 /* word2 */;
2126         __le16 word3 /* word3 */;
2127         __le16 word4 /* word4 */;
2128         __le32 reg2 /* reg2 */;
2129         __le32 reg3 /* reg3 */;
2130 };
2131
2132
2133 /*
2134  * IGU cleanup command
2135  */
2136 struct igu_cleanup {
2137         __le32 sb_id_and_flags;
2138 #define IGU_CLEANUP_RESERVED0_MASK     0x7FFFFFF
2139 #define IGU_CLEANUP_RESERVED0_SHIFT    0
2140 /* cleanup clear - 0, set - 1 */
2141 #define IGU_CLEANUP_CLEANUP_SET_MASK   0x1
2142 #define IGU_CLEANUP_CLEANUP_SET_SHIFT  27
2143 #define IGU_CLEANUP_CLEANUP_TYPE_MASK  0x7
2144 #define IGU_CLEANUP_CLEANUP_TYPE_SHIFT 28
2145 /* must always be set (use enum command_type_bit) */
2146 #define IGU_CLEANUP_COMMAND_TYPE_MASK  0x1
2147 #define IGU_CLEANUP_COMMAND_TYPE_SHIFT 31
2148         __le32 reserved1;
2149 };
2150
2151
2152 /*
2153  * IGU firmware driver command
2154  */
2155 union igu_command {
2156         struct igu_prod_cons_update prod_cons_update;
2157         struct igu_cleanup cleanup;
2158 };
2159
2160
2161 /*
2162  * IGU firmware driver command
2163  */
2164 struct igu_command_reg_ctrl {
2165         __le16 opaque_fid;
2166         __le16 igu_command_reg_ctrl_fields;
2167 #define IGU_COMMAND_REG_CTRL_PXP_BAR_ADDR_MASK  0xFFF
2168 #define IGU_COMMAND_REG_CTRL_PXP_BAR_ADDR_SHIFT 0
2169 #define IGU_COMMAND_REG_CTRL_RESERVED_MASK      0x7
2170 #define IGU_COMMAND_REG_CTRL_RESERVED_SHIFT     12
2171 /* command typ: 0 - read, 1 - write */
2172 #define IGU_COMMAND_REG_CTRL_COMMAND_TYPE_MASK  0x1
2173 #define IGU_COMMAND_REG_CTRL_COMMAND_TYPE_SHIFT 15
2174 };
2175
2176
2177 /*
2178  * IGU mapping line structure
2179  */
2180 struct igu_mapping_line {
2181         __le32 igu_mapping_line_fields;
2182 #define IGU_MAPPING_LINE_VALID_MASK            0x1
2183 #define IGU_MAPPING_LINE_VALID_SHIFT           0
2184 #define IGU_MAPPING_LINE_VECTOR_NUMBER_MASK    0xFF
2185 #define IGU_MAPPING_LINE_VECTOR_NUMBER_SHIFT   1
2186 /* In BB: VF-0-120, PF-0-7; In K2: VF-0-191, PF-0-15 */
2187 #define IGU_MAPPING_LINE_FUNCTION_NUMBER_MASK  0xFF
2188 #define IGU_MAPPING_LINE_FUNCTION_NUMBER_SHIFT 9
2189 #define IGU_MAPPING_LINE_PF_VALID_MASK         0x1 /* PF-1, VF-0 */
2190 #define IGU_MAPPING_LINE_PF_VALID_SHIFT        17
2191 #define IGU_MAPPING_LINE_IPS_GROUP_MASK        0x3F
2192 #define IGU_MAPPING_LINE_IPS_GROUP_SHIFT       18
2193 #define IGU_MAPPING_LINE_RESERVED_MASK         0xFF
2194 #define IGU_MAPPING_LINE_RESERVED_SHIFT        24
2195 };
2196
2197
2198 /*
2199  * IGU MSIX line structure
2200  */
2201 struct igu_msix_vector {
2202         struct regpair address;
2203         __le32 data;
2204         __le32 msix_vector_fields;
2205 #define IGU_MSIX_VECTOR_MASK_BIT_MASK      0x1
2206 #define IGU_MSIX_VECTOR_MASK_BIT_SHIFT     0
2207 #define IGU_MSIX_VECTOR_RESERVED0_MASK     0x7FFF
2208 #define IGU_MSIX_VECTOR_RESERVED0_SHIFT    1
2209 #define IGU_MSIX_VECTOR_STEERING_TAG_MASK  0xFF
2210 #define IGU_MSIX_VECTOR_STEERING_TAG_SHIFT 16
2211 #define IGU_MSIX_VECTOR_RESERVED1_MASK     0xFF
2212 #define IGU_MSIX_VECTOR_RESERVED1_SHIFT    24
2213 };
2214
2215
2216 /*
2217  * per encapsulation type enabling flags
2218  */
2219 struct prs_reg_encapsulation_type_en {
2220         u8 flags;
2221 /* Enable bit for Ethernet-over-GRE (L2 GRE) encapsulation. */
2222 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GRE_ENABLE_MASK     0x1
2223 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GRE_ENABLE_SHIFT    0
2224 /* Enable bit for IP-over-GRE (IP GRE) encapsulation. */
2225 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GRE_ENABLE_MASK      0x1
2226 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GRE_ENABLE_SHIFT     1
2227 /* Enable bit for VXLAN encapsulation. */
2228 #define PRS_REG_ENCAPSULATION_TYPE_EN_VXLAN_ENABLE_MASK            0x1
2229 #define PRS_REG_ENCAPSULATION_TYPE_EN_VXLAN_ENABLE_SHIFT           2
2230 /* Enable bit for T-Tag encapsulation. */
2231 #define PRS_REG_ENCAPSULATION_TYPE_EN_T_TAG_ENABLE_MASK            0x1
2232 #define PRS_REG_ENCAPSULATION_TYPE_EN_T_TAG_ENABLE_SHIFT           3
2233 /* Enable bit for Ethernet-over-GENEVE (L2 GENEVE) encapsulation. */
2234 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GENEVE_ENABLE_MASK  0x1
2235 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GENEVE_ENABLE_SHIFT 4
2236 /* Enable bit for IP-over-GENEVE (IP GENEVE) encapsulation. */
2237 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GENEVE_ENABLE_MASK   0x1
2238 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GENEVE_ENABLE_SHIFT  5
2239 #define PRS_REG_ENCAPSULATION_TYPE_EN_RESERVED_MASK                0x3
2240 #define PRS_REG_ENCAPSULATION_TYPE_EN_RESERVED_SHIFT               6
2241 };
2242
2243
2244 enum pxp_tph_st_hint {
2245         TPH_ST_HINT_BIDIR /* Read/Write access by Host and Device */,
2246         TPH_ST_HINT_REQUESTER /* Read/Write access by Device */,
2247 /* Device Write and Host Read, or Host Write and Device Read */
2248         TPH_ST_HINT_TARGET,
2249 /* Device Write and Host Read, or Host Write and Device Read - with temporal
2250  * reuse
2251  */
2252         TPH_ST_HINT_TARGET_PRIO,
2253         MAX_PXP_TPH_ST_HINT
2254 };
2255
2256
2257 /*
2258  * QM hardware structure of enable bypass credit mask
2259  */
2260 struct qm_rf_bypass_mask {
2261         u8 flags;
2262 #define QM_RF_BYPASS_MASK_LINEVOQ_MASK    0x1
2263 #define QM_RF_BYPASS_MASK_LINEVOQ_SHIFT   0
2264 #define QM_RF_BYPASS_MASK_RESERVED0_MASK  0x1
2265 #define QM_RF_BYPASS_MASK_RESERVED0_SHIFT 1
2266 #define QM_RF_BYPASS_MASK_PFWFQ_MASK      0x1
2267 #define QM_RF_BYPASS_MASK_PFWFQ_SHIFT     2
2268 #define QM_RF_BYPASS_MASK_VPWFQ_MASK      0x1
2269 #define QM_RF_BYPASS_MASK_VPWFQ_SHIFT     3
2270 #define QM_RF_BYPASS_MASK_PFRL_MASK       0x1
2271 #define QM_RF_BYPASS_MASK_PFRL_SHIFT      4
2272 #define QM_RF_BYPASS_MASK_VPQCNRL_MASK    0x1
2273 #define QM_RF_BYPASS_MASK_VPQCNRL_SHIFT   5
2274 #define QM_RF_BYPASS_MASK_FWPAUSE_MASK    0x1
2275 #define QM_RF_BYPASS_MASK_FWPAUSE_SHIFT   6
2276 #define QM_RF_BYPASS_MASK_RESERVED1_MASK  0x1
2277 #define QM_RF_BYPASS_MASK_RESERVED1_SHIFT 7
2278 };
2279
2280
2281 /*
2282  * QM hardware structure of opportunistic credit mask
2283  */
2284 struct qm_rf_opportunistic_mask {
2285         __le16 flags;
2286 #define QM_RF_OPPORTUNISTIC_MASK_LINEVOQ_MASK     0x1
2287 #define QM_RF_OPPORTUNISTIC_MASK_LINEVOQ_SHIFT    0
2288 #define QM_RF_OPPORTUNISTIC_MASK_BYTEVOQ_MASK     0x1
2289 #define QM_RF_OPPORTUNISTIC_MASK_BYTEVOQ_SHIFT    1
2290 #define QM_RF_OPPORTUNISTIC_MASK_PFWFQ_MASK       0x1
2291 #define QM_RF_OPPORTUNISTIC_MASK_PFWFQ_SHIFT      2
2292 #define QM_RF_OPPORTUNISTIC_MASK_VPWFQ_MASK       0x1
2293 #define QM_RF_OPPORTUNISTIC_MASK_VPWFQ_SHIFT      3
2294 #define QM_RF_OPPORTUNISTIC_MASK_PFRL_MASK        0x1
2295 #define QM_RF_OPPORTUNISTIC_MASK_PFRL_SHIFT       4
2296 #define QM_RF_OPPORTUNISTIC_MASK_VPQCNRL_MASK     0x1
2297 #define QM_RF_OPPORTUNISTIC_MASK_VPQCNRL_SHIFT    5
2298 #define QM_RF_OPPORTUNISTIC_MASK_FWPAUSE_MASK     0x1
2299 #define QM_RF_OPPORTUNISTIC_MASK_FWPAUSE_SHIFT    6
2300 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED0_MASK   0x1
2301 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED0_SHIFT  7
2302 #define QM_RF_OPPORTUNISTIC_MASK_QUEUEEMPTY_MASK  0x1
2303 #define QM_RF_OPPORTUNISTIC_MASK_QUEUEEMPTY_SHIFT 8
2304 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED1_MASK   0x7F
2305 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED1_SHIFT  9
2306 };
2307
2308
2309 /*
2310  * QM hardware structure of QM map memory
2311  */
2312 struct qm_rf_pq_map_e4 {
2313         __le32 reg;
2314 #define QM_RF_PQ_MAP_E4_PQ_VALID_MASK          0x1 /* PQ active */
2315 #define QM_RF_PQ_MAP_E4_PQ_VALID_SHIFT         0
2316 #define QM_RF_PQ_MAP_E4_RL_ID_MASK             0xFF /* RL ID */
2317 #define QM_RF_PQ_MAP_E4_RL_ID_SHIFT            1
2318 /* the first PQ associated with the VPORT and VOQ of this PQ */
2319 #define QM_RF_PQ_MAP_E4_VP_PQ_ID_MASK          0x1FF
2320 #define QM_RF_PQ_MAP_E4_VP_PQ_ID_SHIFT         9
2321 #define QM_RF_PQ_MAP_E4_VOQ_MASK               0x1F /* VOQ */
2322 #define QM_RF_PQ_MAP_E4_VOQ_SHIFT              18
2323 #define QM_RF_PQ_MAP_E4_WRR_WEIGHT_GROUP_MASK  0x3 /* WRR weight */
2324 #define QM_RF_PQ_MAP_E4_WRR_WEIGHT_GROUP_SHIFT 23
2325 #define QM_RF_PQ_MAP_E4_RL_VALID_MASK          0x1 /* RL active */
2326 #define QM_RF_PQ_MAP_E4_RL_VALID_SHIFT         25
2327 #define QM_RF_PQ_MAP_E4_RESERVED_MASK          0x3F
2328 #define QM_RF_PQ_MAP_E4_RESERVED_SHIFT         26
2329 };
2330
2331
2332 /*
2333  * Completion params for aggregated interrupt completion
2334  */
2335 struct sdm_agg_int_comp_params {
2336         __le16 params;
2337 /* the number of aggregated interrupt, 0-31 */
2338 #define SDM_AGG_INT_COMP_PARAMS_AGG_INT_INDEX_MASK      0x3F
2339 #define SDM_AGG_INT_COMP_PARAMS_AGG_INT_INDEX_SHIFT     0
2340 /* 1 - set a bit in aggregated vector, 0 - dont set */
2341 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_ENABLE_MASK  0x1
2342 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_ENABLE_SHIFT 6
2343 /* Number of bit in the aggregated vector, 0-279 (TBD) */
2344 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_BIT_MASK     0x1FF
2345 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_BIT_SHIFT    7
2346 };
2347
2348
2349 /*
2350  * SDM operation gen command (generate aggregative interrupt)
2351  */
2352 struct sdm_op_gen {
2353         __le32 command;
2354 /* completion parameters 0-15 */
2355 #define SDM_OP_GEN_COMP_PARAM_MASK  0xFFFF
2356 #define SDM_OP_GEN_COMP_PARAM_SHIFT 0
2357 #define SDM_OP_GEN_COMP_TYPE_MASK   0xF /* completion type 16-19 */
2358 #define SDM_OP_GEN_COMP_TYPE_SHIFT  16
2359 #define SDM_OP_GEN_RESERVED_MASK    0xFFF /* reserved 20-31 */
2360 #define SDM_OP_GEN_RESERVED_SHIFT   20
2361 };
2362
2363 struct ystorm_core_conn_ag_ctx {
2364         u8 byte0 /* cdu_validation */;
2365         u8 byte1 /* state */;
2366         u8 flags0;
2367 #define YSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1 /* exist_in_qm0 */
2368 #define YSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
2369 #define YSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1 /* exist_in_qm1 */
2370 #define YSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
2371 #define YSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3 /* cf0 */
2372 #define YSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
2373 #define YSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3 /* cf1 */
2374 #define YSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
2375 #define YSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3 /* cf2 */
2376 #define YSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
2377         u8 flags1;
2378 #define YSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1 /* cf0en */
2379 #define YSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
2380 #define YSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1 /* cf1en */
2381 #define YSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
2382 #define YSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1 /* cf2en */
2383 #define YSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
2384 #define YSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1 /* rule0en */
2385 #define YSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 3
2386 #define YSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1 /* rule1en */
2387 #define YSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 4
2388 #define YSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1 /* rule2en */
2389 #define YSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 5
2390 #define YSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1 /* rule3en */
2391 #define YSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 6
2392 #define YSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1 /* rule4en */
2393 #define YSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 7
2394         u8 byte2 /* byte2 */;
2395         u8 byte3 /* byte3 */;
2396         __le16 word0 /* word0 */;
2397         __le32 reg0 /* reg0 */;
2398         __le32 reg1 /* reg1 */;
2399         __le16 word1 /* word1 */;
2400         __le16 word2 /* word2 */;
2401         __le16 word3 /* word3 */;
2402         __le16 word4 /* word4 */;
2403         __le32 reg2 /* reg2 */;
2404         __le32 reg3 /* reg3 */;
2405 };
2406
2407 #endif /* __ECORE_HSI_COMMON__ */