net/qede/base: add HSI changes and register defines
[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  * opcodes for the event ring
18  */
19 enum common_event_opcode {
20         COMMON_EVENT_PF_START,
21         COMMON_EVENT_PF_STOP,
22         COMMON_EVENT_VF_START,
23         COMMON_EVENT_VF_STOP,
24         COMMON_EVENT_VF_PF_CHANNEL,
25         COMMON_EVENT_VF_FLR,
26         COMMON_EVENT_PF_UPDATE,
27         COMMON_EVENT_MALICIOUS_VF,
28         COMMON_EVENT_RL_UPDATE,
29         COMMON_EVENT_EMPTY,
30         MAX_COMMON_EVENT_OPCODE
31 };
32
33 /*
34  * Common Ramrod Command IDs
35  */
36 enum common_ramrod_cmd_id {
37         COMMON_RAMROD_UNUSED,
38         COMMON_RAMROD_PF_START /* PF Function Start Ramrod */,
39         COMMON_RAMROD_PF_STOP /* PF Function Stop Ramrod */,
40         COMMON_RAMROD_VF_START /* VF Function Start */,
41         COMMON_RAMROD_VF_STOP /* VF Function Stop Ramrod */,
42         COMMON_RAMROD_PF_UPDATE /* PF update Ramrod */,
43         COMMON_RAMROD_RL_UPDATE /* QCN/DCQCN RL update Ramrod */,
44         COMMON_RAMROD_EMPTY /* Empty Ramrod */,
45         MAX_COMMON_RAMROD_CMD_ID
46 };
47
48 /*
49  * The core storm context for the Ystorm
50  */
51 struct ystorm_core_conn_st_ctx {
52         __le32 reserved[4];
53 };
54
55 /*
56  * The core storm context for the Pstorm
57  */
58 struct pstorm_core_conn_st_ctx {
59         __le32 reserved[4];
60 };
61
62 /*
63  * Core Slowpath Connection storm context of Xstorm
64  */
65 struct xstorm_core_conn_st_ctx {
66         __le32 spq_base_lo /* SPQ Ring Base Address low dword */;
67         __le32 spq_base_hi /* SPQ Ring Base Address high dword */;
68         struct regpair consolid_base_addr /* Consolidation Ring Base Address */
69           ;
70         __le16 spq_cons /* SPQ Ring Consumer */;
71         __le16 consolid_cons /* Consolidation Ring Consumer */;
72         __le32 reserved0[55] /* Pad to 15 cycles */;
73 };
74
75 struct xstorm_core_conn_ag_ctx {
76         u8 reserved0 /* cdu_validation */;
77         u8 core_state /* state */;
78         u8 flags0;
79 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM0_MASK         0x1
80 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM0_SHIFT        0
81 #define XSTORM_CORE_CONN_AG_CTX_RESERVED1_MASK            0x1
82 #define XSTORM_CORE_CONN_AG_CTX_RESERVED1_SHIFT           1
83 #define XSTORM_CORE_CONN_AG_CTX_RESERVED2_MASK            0x1
84 #define XSTORM_CORE_CONN_AG_CTX_RESERVED2_SHIFT           2
85 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM3_MASK         0x1
86 #define XSTORM_CORE_CONN_AG_CTX_EXIST_IN_QM3_SHIFT        3
87 #define XSTORM_CORE_CONN_AG_CTX_RESERVED3_MASK            0x1
88 #define XSTORM_CORE_CONN_AG_CTX_RESERVED3_SHIFT           4
89 #define XSTORM_CORE_CONN_AG_CTX_RESERVED4_MASK            0x1
90 #define XSTORM_CORE_CONN_AG_CTX_RESERVED4_SHIFT           5
91 #define XSTORM_CORE_CONN_AG_CTX_RESERVED5_MASK            0x1
92 #define XSTORM_CORE_CONN_AG_CTX_RESERVED5_SHIFT           6
93 #define XSTORM_CORE_CONN_AG_CTX_RESERVED6_MASK            0x1
94 #define XSTORM_CORE_CONN_AG_CTX_RESERVED6_SHIFT           7
95         u8 flags1;
96 #define XSTORM_CORE_CONN_AG_CTX_RESERVED7_MASK            0x1
97 #define XSTORM_CORE_CONN_AG_CTX_RESERVED7_SHIFT           0
98 #define XSTORM_CORE_CONN_AG_CTX_RESERVED8_MASK            0x1
99 #define XSTORM_CORE_CONN_AG_CTX_RESERVED8_SHIFT           1
100 #define XSTORM_CORE_CONN_AG_CTX_RESERVED9_MASK            0x1
101 #define XSTORM_CORE_CONN_AG_CTX_RESERVED9_SHIFT           2
102 #define XSTORM_CORE_CONN_AG_CTX_BIT11_MASK                0x1
103 #define XSTORM_CORE_CONN_AG_CTX_BIT11_SHIFT               3
104 #define XSTORM_CORE_CONN_AG_CTX_BIT12_MASK                0x1
105 #define XSTORM_CORE_CONN_AG_CTX_BIT12_SHIFT               4
106 #define XSTORM_CORE_CONN_AG_CTX_BIT13_MASK                0x1
107 #define XSTORM_CORE_CONN_AG_CTX_BIT13_SHIFT               5
108 #define XSTORM_CORE_CONN_AG_CTX_TX_RULE_ACTIVE_MASK       0x1
109 #define XSTORM_CORE_CONN_AG_CTX_TX_RULE_ACTIVE_SHIFT      6
110 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_ACTIVE_MASK         0x1
111 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_ACTIVE_SHIFT        7
112         u8 flags2;
113 #define XSTORM_CORE_CONN_AG_CTX_CF0_MASK                  0x3
114 #define XSTORM_CORE_CONN_AG_CTX_CF0_SHIFT                 0
115 #define XSTORM_CORE_CONN_AG_CTX_CF1_MASK                  0x3
116 #define XSTORM_CORE_CONN_AG_CTX_CF1_SHIFT                 2
117 #define XSTORM_CORE_CONN_AG_CTX_CF2_MASK                  0x3
118 #define XSTORM_CORE_CONN_AG_CTX_CF2_SHIFT                 4
119 #define XSTORM_CORE_CONN_AG_CTX_CF3_MASK                  0x3
120 #define XSTORM_CORE_CONN_AG_CTX_CF3_SHIFT                 6
121         u8 flags3;
122 #define XSTORM_CORE_CONN_AG_CTX_CF4_MASK                  0x3
123 #define XSTORM_CORE_CONN_AG_CTX_CF4_SHIFT                 0
124 #define XSTORM_CORE_CONN_AG_CTX_CF5_MASK                  0x3
125 #define XSTORM_CORE_CONN_AG_CTX_CF5_SHIFT                 2
126 #define XSTORM_CORE_CONN_AG_CTX_CF6_MASK                  0x3
127 #define XSTORM_CORE_CONN_AG_CTX_CF6_SHIFT                 4
128 #define XSTORM_CORE_CONN_AG_CTX_CF7_MASK                  0x3
129 #define XSTORM_CORE_CONN_AG_CTX_CF7_SHIFT                 6
130         u8 flags4;
131 #define XSTORM_CORE_CONN_AG_CTX_CF8_MASK                  0x3
132 #define XSTORM_CORE_CONN_AG_CTX_CF8_SHIFT                 0
133 #define XSTORM_CORE_CONN_AG_CTX_CF9_MASK                  0x3
134 #define XSTORM_CORE_CONN_AG_CTX_CF9_SHIFT                 2
135 #define XSTORM_CORE_CONN_AG_CTX_CF10_MASK                 0x3
136 #define XSTORM_CORE_CONN_AG_CTX_CF10_SHIFT                4
137 #define XSTORM_CORE_CONN_AG_CTX_CF11_MASK                 0x3
138 #define XSTORM_CORE_CONN_AG_CTX_CF11_SHIFT                6
139         u8 flags5;
140 #define XSTORM_CORE_CONN_AG_CTX_CF12_MASK                 0x3
141 #define XSTORM_CORE_CONN_AG_CTX_CF12_SHIFT                0
142 #define XSTORM_CORE_CONN_AG_CTX_CF13_MASK                 0x3
143 #define XSTORM_CORE_CONN_AG_CTX_CF13_SHIFT                2
144 #define XSTORM_CORE_CONN_AG_CTX_CF14_MASK                 0x3
145 #define XSTORM_CORE_CONN_AG_CTX_CF14_SHIFT                4
146 #define XSTORM_CORE_CONN_AG_CTX_CF15_MASK                 0x3
147 #define XSTORM_CORE_CONN_AG_CTX_CF15_SHIFT                6
148         u8 flags6;
149 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_MASK     0x3
150 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_SHIFT    0
151 #define XSTORM_CORE_CONN_AG_CTX_CF17_MASK                 0x3
152 #define XSTORM_CORE_CONN_AG_CTX_CF17_SHIFT                2
153 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_MASK                0x3
154 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_SHIFT               4
155 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_MASK         0x3
156 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_SHIFT        6
157         u8 flags7;
158 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_MASK             0x3
159 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_SHIFT            0
160 #define XSTORM_CORE_CONN_AG_CTX_RESERVED10_MASK           0x3
161 #define XSTORM_CORE_CONN_AG_CTX_RESERVED10_SHIFT          2
162 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_MASK            0x3
163 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_SHIFT           4
164 #define XSTORM_CORE_CONN_AG_CTX_CF0EN_MASK                0x1
165 #define XSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT               6
166 #define XSTORM_CORE_CONN_AG_CTX_CF1EN_MASK                0x1
167 #define XSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT               7
168         u8 flags8;
169 #define XSTORM_CORE_CONN_AG_CTX_CF2EN_MASK                0x1
170 #define XSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT               0
171 #define XSTORM_CORE_CONN_AG_CTX_CF3EN_MASK                0x1
172 #define XSTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT               1
173 #define XSTORM_CORE_CONN_AG_CTX_CF4EN_MASK                0x1
174 #define XSTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT               2
175 #define XSTORM_CORE_CONN_AG_CTX_CF5EN_MASK                0x1
176 #define XSTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT               3
177 #define XSTORM_CORE_CONN_AG_CTX_CF6EN_MASK                0x1
178 #define XSTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT               4
179 #define XSTORM_CORE_CONN_AG_CTX_CF7EN_MASK                0x1
180 #define XSTORM_CORE_CONN_AG_CTX_CF7EN_SHIFT               5
181 #define XSTORM_CORE_CONN_AG_CTX_CF8EN_MASK                0x1
182 #define XSTORM_CORE_CONN_AG_CTX_CF8EN_SHIFT               6
183 #define XSTORM_CORE_CONN_AG_CTX_CF9EN_MASK                0x1
184 #define XSTORM_CORE_CONN_AG_CTX_CF9EN_SHIFT               7
185         u8 flags9;
186 #define XSTORM_CORE_CONN_AG_CTX_CF10EN_MASK               0x1
187 #define XSTORM_CORE_CONN_AG_CTX_CF10EN_SHIFT              0
188 #define XSTORM_CORE_CONN_AG_CTX_CF11EN_MASK               0x1
189 #define XSTORM_CORE_CONN_AG_CTX_CF11EN_SHIFT              1
190 #define XSTORM_CORE_CONN_AG_CTX_CF12EN_MASK               0x1
191 #define XSTORM_CORE_CONN_AG_CTX_CF12EN_SHIFT              2
192 #define XSTORM_CORE_CONN_AG_CTX_CF13EN_MASK               0x1
193 #define XSTORM_CORE_CONN_AG_CTX_CF13EN_SHIFT              3
194 #define XSTORM_CORE_CONN_AG_CTX_CF14EN_MASK               0x1
195 #define XSTORM_CORE_CONN_AG_CTX_CF14EN_SHIFT              4
196 #define XSTORM_CORE_CONN_AG_CTX_CF15EN_MASK               0x1
197 #define XSTORM_CORE_CONN_AG_CTX_CF15EN_SHIFT              5
198 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_EN_MASK  0x1
199 #define XSTORM_CORE_CONN_AG_CTX_CONSOLID_PROD_CF_EN_SHIFT 6
200 #define XSTORM_CORE_CONN_AG_CTX_CF17EN_MASK               0x1
201 #define XSTORM_CORE_CONN_AG_CTX_CF17EN_SHIFT              7
202         u8 flags10;
203 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_EN_MASK             0x1
204 #define XSTORM_CORE_CONN_AG_CTX_DQ_CF_EN_SHIFT            0
205 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_EN_MASK      0x1
206 #define XSTORM_CORE_CONN_AG_CTX_TERMINATE_CF_EN_SHIFT     1
207 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_EN_MASK          0x1
208 #define XSTORM_CORE_CONN_AG_CTX_FLUSH_Q0_EN_SHIFT         2
209 #define XSTORM_CORE_CONN_AG_CTX_RESERVED11_MASK           0x1
210 #define XSTORM_CORE_CONN_AG_CTX_RESERVED11_SHIFT          3
211 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_EN_MASK         0x1
212 #define XSTORM_CORE_CONN_AG_CTX_SLOW_PATH_EN_SHIFT        4
213 #define XSTORM_CORE_CONN_AG_CTX_CF23EN_MASK               0x1
214 #define XSTORM_CORE_CONN_AG_CTX_CF23EN_SHIFT              5
215 #define XSTORM_CORE_CONN_AG_CTX_RESERVED12_MASK           0x1
216 #define XSTORM_CORE_CONN_AG_CTX_RESERVED12_SHIFT          6
217 #define XSTORM_CORE_CONN_AG_CTX_RESERVED13_MASK           0x1
218 #define XSTORM_CORE_CONN_AG_CTX_RESERVED13_SHIFT          7
219         u8 flags11;
220 #define XSTORM_CORE_CONN_AG_CTX_RESERVED14_MASK           0x1
221 #define XSTORM_CORE_CONN_AG_CTX_RESERVED14_SHIFT          0
222 #define XSTORM_CORE_CONN_AG_CTX_RESERVED15_MASK           0x1
223 #define XSTORM_CORE_CONN_AG_CTX_RESERVED15_SHIFT          1
224 #define XSTORM_CORE_CONN_AG_CTX_TX_DEC_RULE_EN_MASK       0x1
225 #define XSTORM_CORE_CONN_AG_CTX_TX_DEC_RULE_EN_SHIFT      2
226 #define XSTORM_CORE_CONN_AG_CTX_RULE5EN_MASK              0x1
227 #define XSTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT             3
228 #define XSTORM_CORE_CONN_AG_CTX_RULE6EN_MASK              0x1
229 #define XSTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT             4
230 #define XSTORM_CORE_CONN_AG_CTX_RULE7EN_MASK              0x1
231 #define XSTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT             5
232 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED1_MASK         0x1
233 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED1_SHIFT        6
234 #define XSTORM_CORE_CONN_AG_CTX_RULE9EN_MASK              0x1
235 #define XSTORM_CORE_CONN_AG_CTX_RULE9EN_SHIFT             7
236         u8 flags12;
237 #define XSTORM_CORE_CONN_AG_CTX_RULE10EN_MASK             0x1
238 #define XSTORM_CORE_CONN_AG_CTX_RULE10EN_SHIFT            0
239 #define XSTORM_CORE_CONN_AG_CTX_RULE11EN_MASK             0x1
240 #define XSTORM_CORE_CONN_AG_CTX_RULE11EN_SHIFT            1
241 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED2_MASK         0x1
242 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED2_SHIFT        2
243 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED3_MASK         0x1
244 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED3_SHIFT        3
245 #define XSTORM_CORE_CONN_AG_CTX_RULE14EN_MASK             0x1
246 #define XSTORM_CORE_CONN_AG_CTX_RULE14EN_SHIFT            4
247 #define XSTORM_CORE_CONN_AG_CTX_RULE15EN_MASK             0x1
248 #define XSTORM_CORE_CONN_AG_CTX_RULE15EN_SHIFT            5
249 #define XSTORM_CORE_CONN_AG_CTX_RULE16EN_MASK             0x1
250 #define XSTORM_CORE_CONN_AG_CTX_RULE16EN_SHIFT            6
251 #define XSTORM_CORE_CONN_AG_CTX_RULE17EN_MASK             0x1
252 #define XSTORM_CORE_CONN_AG_CTX_RULE17EN_SHIFT            7
253         u8 flags13;
254 #define XSTORM_CORE_CONN_AG_CTX_RULE18EN_MASK             0x1
255 #define XSTORM_CORE_CONN_AG_CTX_RULE18EN_SHIFT            0
256 #define XSTORM_CORE_CONN_AG_CTX_RULE19EN_MASK             0x1
257 #define XSTORM_CORE_CONN_AG_CTX_RULE19EN_SHIFT            1
258 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED4_MASK         0x1
259 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED4_SHIFT        2
260 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED5_MASK         0x1
261 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED5_SHIFT        3
262 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED6_MASK         0x1
263 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED6_SHIFT        4
264 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED7_MASK         0x1
265 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED7_SHIFT        5
266 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED8_MASK         0x1
267 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED8_SHIFT        6
268 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED9_MASK         0x1
269 #define XSTORM_CORE_CONN_AG_CTX_A0_RESERVED9_SHIFT        7
270         u8 flags14;
271 #define XSTORM_CORE_CONN_AG_CTX_BIT16_MASK                0x1
272 #define XSTORM_CORE_CONN_AG_CTX_BIT16_SHIFT               0
273 #define XSTORM_CORE_CONN_AG_CTX_BIT17_MASK                0x1
274 #define XSTORM_CORE_CONN_AG_CTX_BIT17_SHIFT               1
275 #define XSTORM_CORE_CONN_AG_CTX_BIT18_MASK                0x1
276 #define XSTORM_CORE_CONN_AG_CTX_BIT18_SHIFT               2
277 #define XSTORM_CORE_CONN_AG_CTX_BIT19_MASK                0x1
278 #define XSTORM_CORE_CONN_AG_CTX_BIT19_SHIFT               3
279 #define XSTORM_CORE_CONN_AG_CTX_BIT20_MASK                0x1
280 #define XSTORM_CORE_CONN_AG_CTX_BIT20_SHIFT               4
281 #define XSTORM_CORE_CONN_AG_CTX_BIT21_MASK                0x1
282 #define XSTORM_CORE_CONN_AG_CTX_BIT21_SHIFT               5
283 #define XSTORM_CORE_CONN_AG_CTX_CF23_MASK                 0x3
284 #define XSTORM_CORE_CONN_AG_CTX_CF23_SHIFT                6
285         u8 byte2 /* byte2 */;
286         __le16 physical_q0 /* physical_q0 */;
287         __le16 consolid_prod /* physical_q1 */;
288         __le16 reserved16 /* physical_q2 */;
289         __le16 tx_bd_cons /* word3 */;
290         __le16 tx_bd_or_spq_prod /* word4 */;
291         __le16 word5 /* word5 */;
292         __le16 conn_dpi /* conn_dpi */;
293         u8 byte3 /* byte3 */;
294         u8 byte4 /* byte4 */;
295         u8 byte5 /* byte5 */;
296         u8 byte6 /* byte6 */;
297         __le32 reg0 /* reg0 */;
298         __le32 reg1 /* reg1 */;
299         __le32 reg2 /* reg2 */;
300         __le32 reg3 /* reg3 */;
301         __le32 reg4 /* reg4 */;
302         __le32 reg5 /* cf_array0 */;
303         __le32 reg6 /* cf_array1 */;
304         __le16 word7 /* word7 */;
305         __le16 word8 /* word8 */;
306         __le16 word9 /* word9 */;
307         __le16 word10 /* word10 */;
308         __le32 reg7 /* reg7 */;
309         __le32 reg8 /* reg8 */;
310         __le32 reg9 /* reg9 */;
311         u8 byte7 /* byte7 */;
312         u8 byte8 /* byte8 */;
313         u8 byte9 /* byte9 */;
314         u8 byte10 /* byte10 */;
315         u8 byte11 /* byte11 */;
316         u8 byte12 /* byte12 */;
317         u8 byte13 /* byte13 */;
318         u8 byte14 /* byte14 */;
319         u8 byte15 /* byte15 */;
320         u8 byte16 /* byte16 */;
321         __le16 word11 /* word11 */;
322         __le32 reg10 /* reg10 */;
323         __le32 reg11 /* reg11 */;
324         __le32 reg12 /* reg12 */;
325         __le32 reg13 /* reg13 */;
326         __le32 reg14 /* reg14 */;
327         __le32 reg15 /* reg15 */;
328         __le32 reg16 /* reg16 */;
329         __le32 reg17 /* reg17 */;
330         __le32 reg18 /* reg18 */;
331         __le32 reg19 /* reg19 */;
332         __le16 word12 /* word12 */;
333         __le16 word13 /* word13 */;
334         __le16 word14 /* word14 */;
335         __le16 word15 /* word15 */;
336 };
337
338 struct tstorm_core_conn_ag_ctx {
339         u8 byte0 /* cdu_validation */;
340         u8 byte1 /* state */;
341         u8 flags0;
342 #define TSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1
343 #define TSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
344 #define TSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1
345 #define TSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
346 #define TSTORM_CORE_CONN_AG_CTX_BIT2_MASK     0x1
347 #define TSTORM_CORE_CONN_AG_CTX_BIT2_SHIFT    2
348 #define TSTORM_CORE_CONN_AG_CTX_BIT3_MASK     0x1
349 #define TSTORM_CORE_CONN_AG_CTX_BIT3_SHIFT    3
350 #define TSTORM_CORE_CONN_AG_CTX_BIT4_MASK     0x1
351 #define TSTORM_CORE_CONN_AG_CTX_BIT4_SHIFT    4
352 #define TSTORM_CORE_CONN_AG_CTX_BIT5_MASK     0x1
353 #define TSTORM_CORE_CONN_AG_CTX_BIT5_SHIFT    5
354 #define TSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3
355 #define TSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     6
356         u8 flags1;
357 #define TSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3
358 #define TSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     0
359 #define TSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3
360 #define TSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     2
361 #define TSTORM_CORE_CONN_AG_CTX_CF3_MASK      0x3
362 #define TSTORM_CORE_CONN_AG_CTX_CF3_SHIFT     4
363 #define TSTORM_CORE_CONN_AG_CTX_CF4_MASK      0x3
364 #define TSTORM_CORE_CONN_AG_CTX_CF4_SHIFT     6
365         u8 flags2;
366 #define TSTORM_CORE_CONN_AG_CTX_CF5_MASK      0x3
367 #define TSTORM_CORE_CONN_AG_CTX_CF5_SHIFT     0
368 #define TSTORM_CORE_CONN_AG_CTX_CF6_MASK      0x3
369 #define TSTORM_CORE_CONN_AG_CTX_CF6_SHIFT     2
370 #define TSTORM_CORE_CONN_AG_CTX_CF7_MASK      0x3
371 #define TSTORM_CORE_CONN_AG_CTX_CF7_SHIFT     4
372 #define TSTORM_CORE_CONN_AG_CTX_CF8_MASK      0x3
373 #define TSTORM_CORE_CONN_AG_CTX_CF8_SHIFT     6
374         u8 flags3;
375 #define TSTORM_CORE_CONN_AG_CTX_CF9_MASK      0x3
376 #define TSTORM_CORE_CONN_AG_CTX_CF9_SHIFT     0
377 #define TSTORM_CORE_CONN_AG_CTX_CF10_MASK     0x3
378 #define TSTORM_CORE_CONN_AG_CTX_CF10_SHIFT    2
379 #define TSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1
380 #define TSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   4
381 #define TSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1
382 #define TSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   5
383 #define TSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1
384 #define TSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   6
385 #define TSTORM_CORE_CONN_AG_CTX_CF3EN_MASK    0x1
386 #define TSTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT   7
387         u8 flags4;
388 #define TSTORM_CORE_CONN_AG_CTX_CF4EN_MASK    0x1
389 #define TSTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT   0
390 #define TSTORM_CORE_CONN_AG_CTX_CF5EN_MASK    0x1
391 #define TSTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT   1
392 #define TSTORM_CORE_CONN_AG_CTX_CF6EN_MASK    0x1
393 #define TSTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT   2
394 #define TSTORM_CORE_CONN_AG_CTX_CF7EN_MASK    0x1
395 #define TSTORM_CORE_CONN_AG_CTX_CF7EN_SHIFT   3
396 #define TSTORM_CORE_CONN_AG_CTX_CF8EN_MASK    0x1
397 #define TSTORM_CORE_CONN_AG_CTX_CF8EN_SHIFT   4
398 #define TSTORM_CORE_CONN_AG_CTX_CF9EN_MASK    0x1
399 #define TSTORM_CORE_CONN_AG_CTX_CF9EN_SHIFT   5
400 #define TSTORM_CORE_CONN_AG_CTX_CF10EN_MASK   0x1
401 #define TSTORM_CORE_CONN_AG_CTX_CF10EN_SHIFT  6
402 #define TSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1
403 #define TSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 7
404         u8 flags5;
405 #define TSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1
406 #define TSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 0
407 #define TSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1
408 #define TSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 1
409 #define TSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1
410 #define TSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 2
411 #define TSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1
412 #define TSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 3
413 #define TSTORM_CORE_CONN_AG_CTX_RULE5EN_MASK  0x1
414 #define TSTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT 4
415 #define TSTORM_CORE_CONN_AG_CTX_RULE6EN_MASK  0x1
416 #define TSTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT 5
417 #define TSTORM_CORE_CONN_AG_CTX_RULE7EN_MASK  0x1
418 #define TSTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT 6
419 #define TSTORM_CORE_CONN_AG_CTX_RULE8EN_MASK  0x1
420 #define TSTORM_CORE_CONN_AG_CTX_RULE8EN_SHIFT 7
421         __le32 reg0 /* reg0 */;
422         __le32 reg1 /* reg1 */;
423         __le32 reg2 /* reg2 */;
424         __le32 reg3 /* reg3 */;
425         __le32 reg4 /* reg4 */;
426         __le32 reg5 /* reg5 */;
427         __le32 reg6 /* reg6 */;
428         __le32 reg7 /* reg7 */;
429         __le32 reg8 /* reg8 */;
430         u8 byte2 /* byte2 */;
431         u8 byte3 /* byte3 */;
432         __le16 word0 /* word0 */;
433         u8 byte4 /* byte4 */;
434         u8 byte5 /* byte5 */;
435         __le16 word1 /* word1 */;
436         __le16 word2 /* conn_dpi */;
437         __le16 word3 /* word3 */;
438         __le32 reg9 /* reg9 */;
439         __le32 reg10 /* reg10 */;
440 };
441
442 struct ustorm_core_conn_ag_ctx {
443         u8 reserved /* cdu_validation */;
444         u8 byte1 /* state */;
445         u8 flags0;
446 #define USTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1
447 #define USTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
448 #define USTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1
449 #define USTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
450 #define USTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3
451 #define USTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
452 #define USTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3
453 #define USTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
454 #define USTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3
455 #define USTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
456         u8 flags1;
457 #define USTORM_CORE_CONN_AG_CTX_CF3_MASK      0x3
458 #define USTORM_CORE_CONN_AG_CTX_CF3_SHIFT     0
459 #define USTORM_CORE_CONN_AG_CTX_CF4_MASK      0x3
460 #define USTORM_CORE_CONN_AG_CTX_CF4_SHIFT     2
461 #define USTORM_CORE_CONN_AG_CTX_CF5_MASK      0x3
462 #define USTORM_CORE_CONN_AG_CTX_CF5_SHIFT     4
463 #define USTORM_CORE_CONN_AG_CTX_CF6_MASK      0x3
464 #define USTORM_CORE_CONN_AG_CTX_CF6_SHIFT     6
465         u8 flags2;
466 #define USTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1
467 #define USTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
468 #define USTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1
469 #define USTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
470 #define USTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1
471 #define USTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
472 #define USTORM_CORE_CONN_AG_CTX_CF3EN_MASK    0x1
473 #define USTORM_CORE_CONN_AG_CTX_CF3EN_SHIFT   3
474 #define USTORM_CORE_CONN_AG_CTX_CF4EN_MASK    0x1
475 #define USTORM_CORE_CONN_AG_CTX_CF4EN_SHIFT   4
476 #define USTORM_CORE_CONN_AG_CTX_CF5EN_MASK    0x1
477 #define USTORM_CORE_CONN_AG_CTX_CF5EN_SHIFT   5
478 #define USTORM_CORE_CONN_AG_CTX_CF6EN_MASK    0x1
479 #define USTORM_CORE_CONN_AG_CTX_CF6EN_SHIFT   6
480 #define USTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1
481 #define USTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 7
482         u8 flags3;
483 #define USTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1
484 #define USTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 0
485 #define USTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1
486 #define USTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 1
487 #define USTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1
488 #define USTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 2
489 #define USTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1
490 #define USTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 3
491 #define USTORM_CORE_CONN_AG_CTX_RULE5EN_MASK  0x1
492 #define USTORM_CORE_CONN_AG_CTX_RULE5EN_SHIFT 4
493 #define USTORM_CORE_CONN_AG_CTX_RULE6EN_MASK  0x1
494 #define USTORM_CORE_CONN_AG_CTX_RULE6EN_SHIFT 5
495 #define USTORM_CORE_CONN_AG_CTX_RULE7EN_MASK  0x1
496 #define USTORM_CORE_CONN_AG_CTX_RULE7EN_SHIFT 6
497 #define USTORM_CORE_CONN_AG_CTX_RULE8EN_MASK  0x1
498 #define USTORM_CORE_CONN_AG_CTX_RULE8EN_SHIFT 7
499         u8 byte2 /* byte2 */;
500         u8 byte3 /* byte3 */;
501         __le16 word0 /* conn_dpi */;
502         __le16 word1 /* word1 */;
503         __le32 rx_producers /* reg0 */;
504         __le32 reg1 /* reg1 */;
505         __le32 reg2 /* reg2 */;
506         __le32 reg3 /* reg3 */;
507         __le16 word2 /* word2 */;
508         __le16 word3 /* word3 */;
509 };
510
511 /*
512  * The core storm context for the Mstorm
513  */
514 struct mstorm_core_conn_st_ctx {
515         __le32 reserved[24];
516 };
517
518 /*
519  * The core storm context for the Ustorm
520  */
521 struct ustorm_core_conn_st_ctx {
522         __le32 reserved[4];
523 };
524
525 /*
526  * core connection context
527  */
528 struct core_conn_context {
529         struct ystorm_core_conn_st_ctx ystorm_st_context
530             /* ystorm storm context */;
531         struct regpair ystorm_st_padding[2] /* padding */;
532         struct pstorm_core_conn_st_ctx pstorm_st_context
533             /* pstorm storm context */;
534         struct regpair pstorm_st_padding[2] /* padding */;
535         struct xstorm_core_conn_st_ctx xstorm_st_context
536             /* xstorm storm context */;
537         struct xstorm_core_conn_ag_ctx xstorm_ag_context
538             /* xstorm aggregative context */;
539         struct tstorm_core_conn_ag_ctx tstorm_ag_context
540             /* tstorm aggregative context */;
541         struct ustorm_core_conn_ag_ctx ustorm_ag_context
542             /* ustorm aggregative context */;
543         struct mstorm_core_conn_st_ctx mstorm_st_context
544             /* mstorm storm context */;
545         struct ustorm_core_conn_st_ctx ustorm_st_context
546             /* ustorm storm context */;
547         struct regpair ustorm_st_padding[2] /* padding */;
548 };
549
550 /*
551  * How ll2 should deal with packet upon errors
552  */
553 enum core_error_handle {
554         LL2_DROP_PACKET /* If error occurs drop packet */,
555         LL2_DO_NOTHING /* If error occurs do nothing */,
556         LL2_ASSERT /* If error occurs assert */,
557         MAX_CORE_ERROR_HANDLE
558 };
559
560 /*
561  * opcodes for the event ring
562  */
563 enum core_event_opcode {
564         CORE_EVENT_TX_QUEUE_START,
565         CORE_EVENT_TX_QUEUE_STOP,
566         CORE_EVENT_RX_QUEUE_START,
567         CORE_EVENT_RX_QUEUE_STOP,
568         MAX_CORE_EVENT_OPCODE
569 };
570
571 /*
572  * The L4 pseudo checksum mode for Core
573  */
574 enum core_l4_pseudo_checksum_mode {
575         CORE_L4_PSEUDO_CSUM_CORRECT_LENGTH
576             ,
577         CORE_L4_PSEUDO_CSUM_ZERO_LENGTH
578             /* Pseudo Checksum on packet is calculated with zero length. */,
579         MAX_CORE_L4_PSEUDO_CHECKSUM_MODE
580 };
581
582 /*
583  * Light-L2 RX Producers in Tstorm RAM
584  */
585 struct core_ll2_port_stats {
586         struct regpair gsi_invalid_hdr;
587         struct regpair gsi_invalid_pkt_length;
588         struct regpair gsi_unsupported_pkt_typ;
589         struct regpair gsi_crcchksm_error;
590 };
591
592 /*
593  * Ethernet TX Per Queue Stats
594  */
595 struct core_ll2_pstorm_per_queue_stat {
596         struct regpair sent_ucast_bytes
597             /* number of total bytes sent without errors */;
598         struct regpair sent_mcast_bytes
599             /* number of total bytes sent without errors */;
600         struct regpair sent_bcast_bytes
601             /* number of total bytes sent without errors */;
602         struct regpair sent_ucast_pkts
603             /* number of total packets sent without errors */;
604         struct regpair sent_mcast_pkts
605             /* number of total packets sent without errors */;
606         struct regpair sent_bcast_pkts
607             /* number of total packets sent without errors */;
608 };
609
610 /*
611  * Light-L2 RX Producers in Tstorm RAM
612  */
613 struct core_ll2_rx_prod {
614         __le16 bd_prod /* BD Producer */;
615         __le16 cqe_prod /* CQE Producer */;
616         __le32 reserved;
617 };
618
619 struct core_ll2_tstorm_per_queue_stat {
620         struct regpair packet_too_big_discard
621             /* Number of packets discarded because they are bigger than MTU */;
622         struct regpair no_buff_discard
623             /* Number of packets discarded due to lack of host buffers */;
624 };
625
626 struct core_ll2_ustorm_per_queue_stat {
627         struct regpair rcv_ucast_bytes;
628         struct regpair rcv_mcast_bytes;
629         struct regpair rcv_bcast_bytes;
630         struct regpair rcv_ucast_pkts;
631         struct regpair rcv_mcast_pkts;
632         struct regpair rcv_bcast_pkts;
633 };
634
635 /*
636  * Core Ramrod Command IDs (light L2)
637  */
638 enum core_ramrod_cmd_id {
639         CORE_RAMROD_UNUSED,
640         CORE_RAMROD_RX_QUEUE_START /* RX Queue Start Ramrod */,
641         CORE_RAMROD_TX_QUEUE_START /* TX Queue Start Ramrod */,
642         CORE_RAMROD_RX_QUEUE_STOP /* RX Queue Stop Ramrod */,
643         CORE_RAMROD_TX_QUEUE_STOP /* TX Queue Stop Ramrod */,
644         MAX_CORE_RAMROD_CMD_ID
645 };
646
647 /*
648  * Core RX CQE Type for Light L2
649  */
650 enum core_roce_flavor_type {
651         CORE_ROCE,
652         CORE_RROCE,
653         MAX_CORE_ROCE_FLAVOR_TYPE
654 };
655
656 /*
657  * Specifies how ll2 should deal with packets errors: packet_too_big and no_buff
658  */
659 struct core_rx_action_on_error {
660         u8 error_type;
661 #define CORE_RX_ACTION_ON_ERROR_PACKET_TOO_BIG_MASK  0x3
662 #define CORE_RX_ACTION_ON_ERROR_PACKET_TOO_BIG_SHIFT 0
663 #define CORE_RX_ACTION_ON_ERROR_NO_BUFF_MASK         0x3
664 #define CORE_RX_ACTION_ON_ERROR_NO_BUFF_SHIFT        2
665 #define CORE_RX_ACTION_ON_ERROR_RESERVED_MASK        0xF
666 #define CORE_RX_ACTION_ON_ERROR_RESERVED_SHIFT       4
667 };
668
669 /*
670  * Core RX BD for Light L2
671  */
672 struct core_rx_bd {
673         struct regpair addr;
674         __le16 reserved[4];
675 };
676
677 /*
678  * Core RX CM offload BD for Light L2
679  */
680 struct core_rx_bd_with_buff_len {
681         struct regpair addr;
682         __le16 buff_length;
683         __le16 reserved[3];
684 };
685
686 /*
687  * Core RX CM offload BD for Light L2
688  */
689 union core_rx_bd_union {
690         struct core_rx_bd rx_bd /* Core Rx Bd static buffer size */;
691         struct core_rx_bd_with_buff_len rx_bd_with_len
692             /* Core Rx Bd with dynamic buffer length */;
693 };
694
695 /*
696  * Opaque Data for Light L2 RX CQE .
697  */
698 struct core_rx_cqe_opaque_data {
699         __le32 data[2] /* Opaque CQE Data */;
700 };
701
702 /*
703  * Core RX CQE Type for Light L2
704  */
705 enum core_rx_cqe_type {
706         CORE_RX_CQE_ILLIGAL_TYPE /* Bad RX Cqe type */,
707         CORE_RX_CQE_TYPE_REGULAR /* Regular Core RX CQE */,
708         CORE_RX_CQE_TYPE_GSI_OFFLOAD /* Fp Gsi offload RX CQE */,
709         CORE_RX_CQE_TYPE_SLOW_PATH /* Slow path Core RX CQE */,
710         MAX_CORE_RX_CQE_TYPE
711 };
712
713 /*
714  * Core RX CQE for Light L2 .
715  */
716 struct core_rx_fast_path_cqe {
717         u8 type /* CQE type */;
718         u8 placement_offset
719             /* Offset (in bytes) of the packet from start of the buffer */;
720         struct parsing_and_err_flags parse_flags
721             /* Parsing and error flags from the parser */;
722         __le16 packet_length /* Total packet length (from the parser) */;
723         __le16 vlan /* 802.1q VLAN tag */;
724         struct core_rx_cqe_opaque_data opaque_data /* Opaque Data */;
725         __le32 reserved[4];
726 };
727
728 /*
729  * Core Rx CM offload CQE .
730  */
731 struct core_rx_gsi_offload_cqe {
732         u8 type /* CQE type */;
733         u8 data_length_error /* set if gsi data is bigger than buff */;
734         struct parsing_and_err_flags parse_flags
735             /* Parsing and error flags from the parser */;
736         __le16 data_length /* Total packet length (from the parser) */;
737         __le16 vlan /* 802.1q VLAN tag */;
738         __le32 src_mac_addrhi /* hi 4 bytes source mac address */;
739         __le16 src_mac_addrlo /* lo 2 bytes of source mac address */;
740         u8 reserved1[2];
741         __le32 gid_dst[4] /* Gid destination address */;
742 };
743
744 /*
745  * Core RX CQE for Light L2 .
746  */
747 struct core_rx_slow_path_cqe {
748         u8 type /* CQE type */;
749         u8 ramrod_cmd_id;
750         __le16 echo;
751         __le32 reserved1[7];
752 };
753
754 /*
755  * Core RX CM offload BD for Light L2
756  */
757 union core_rx_cqe_union {
758         struct core_rx_fast_path_cqe rx_cqe_fp /* Fast path CQE */;
759         struct core_rx_gsi_offload_cqe rx_cqe_gsi /* GSI offload CQE */;
760         struct core_rx_slow_path_cqe rx_cqe_sp /* Slow path CQE */;
761 };
762
763 /*
764  * Ramrod data for rx queue start ramrod
765  */
766 struct core_rx_start_ramrod_data {
767         struct regpair bd_base /* bd address of the first bd page */;
768         struct regpair cqe_pbl_addr /* Base address on host of CQE PBL */;
769         __le16 mtu /* Maximum transmission unit */;
770         __le16 sb_id /* Status block ID */;
771         u8 sb_index /* index of the protocol index */;
772         u8 complete_cqe_flg /* post completion to the CQE ring if set */;
773         u8 complete_event_flg /* post completion to the event ring if set */;
774         u8 drop_ttl0_flg /* drop packet with ttl0 if set */;
775         __le16 num_of_pbl_pages /* Num of pages in CQE PBL */;
776         u8 inner_vlan_removal_en
777             /* if set, 802.1q tags will be removed and copied to CQE */;
778         u8 queue_id /* Light L2 RX Queue ID */;
779         u8 main_func_queue /* Is this the main queue for the PF */;
780         u8 mf_si_bcast_accept_all;
781         u8 mf_si_mcast_accept_all;
782         struct core_rx_action_on_error action_on_error;
783         u8 gsi_offload_flag
784             /* set when in GSI offload mode on ROCE connection */;
785         u8 reserved[7];
786 };
787
788 /*
789  * Ramrod data for rx queue stop ramrod
790  */
791 struct core_rx_stop_ramrod_data {
792         u8 complete_cqe_flg /* post completion to the CQE ring if set */;
793         u8 complete_event_flg /* post completion to the event ring if set */;
794         u8 queue_id /* Light L2 RX Queue ID */;
795         u8 reserved1;
796         __le16 reserved2[2];
797 };
798
799 /*
800  * Flags for Core TX BD
801  */
802 struct core_tx_bd_flags {
803         u8 as_bitfield;
804 #define CORE_TX_BD_FLAGS_FORCE_VLAN_MODE_MASK      0x1
805 #define CORE_TX_BD_FLAGS_FORCE_VLAN_MODE_SHIFT     0
806 #define CORE_TX_BD_FLAGS_VLAN_INSERTION_MASK       0x1
807 #define CORE_TX_BD_FLAGS_VLAN_INSERTION_SHIFT      1
808 #define CORE_TX_BD_FLAGS_START_BD_MASK             0x1
809 #define CORE_TX_BD_FLAGS_START_BD_SHIFT            2
810 #define CORE_TX_BD_FLAGS_IP_CSUM_MASK              0x1
811 #define CORE_TX_BD_FLAGS_IP_CSUM_SHIFT             3
812 #define CORE_TX_BD_FLAGS_L4_CSUM_MASK              0x1
813 #define CORE_TX_BD_FLAGS_L4_CSUM_SHIFT             4
814 #define CORE_TX_BD_FLAGS_IPV6_EXT_MASK             0x1
815 #define CORE_TX_BD_FLAGS_IPV6_EXT_SHIFT            5
816 #define CORE_TX_BD_FLAGS_L4_PROTOCOL_MASK          0x1
817 #define CORE_TX_BD_FLAGS_L4_PROTOCOL_SHIFT         6
818 #define CORE_TX_BD_FLAGS_L4_PSEUDO_CSUM_MODE_MASK  0x1
819 #define CORE_TX_BD_FLAGS_L4_PSEUDO_CSUM_MODE_SHIFT 7
820 };
821
822 /*
823  * Core TX BD for Light L2
824  */
825 struct core_tx_bd {
826         struct regpair addr /* Buffer Address */;
827         __le16 nbytes /* Number of Bytes in Buffer */;
828 /* Network packets: VLAN to insert to packet (if insertion flag set) LoopBack
829  * packets: echo data to pass to Rx
830  */
831         __le16 nw_vlan_or_lb_echo;
832         u8 bitfield0;
833 /* Number of BDs that make up one packet - width wide enough to present
834  * X_CORE_LL2_NUM_OF_BDS_ON_ST_CT
835  */
836 #define CORE_TX_BD_NBDS_MASK             0xF
837 #define CORE_TX_BD_NBDS_SHIFT            0
838 /* Use roce_flavor enum - Diffrentiate between Roce flavors is valid when
839  * connType is ROCE (use enum core_roce_flavor_type)
840  */
841 #define CORE_TX_BD_ROCE_FLAV_MASK        0x1
842 #define CORE_TX_BD_ROCE_FLAV_SHIFT       4
843 #define CORE_TX_BD_RESERVED0_MASK        0x7
844 #define CORE_TX_BD_RESERVED0_SHIFT       5
845         struct core_tx_bd_flags bd_flags /* BD Flags */;
846         __le16 bitfield1;
847 #define CORE_TX_BD_L4_HDR_OFFSET_W_MASK  0x3FFF
848 #define CORE_TX_BD_L4_HDR_OFFSET_W_SHIFT 0
849 /* Packet destination - Network, LB (use enum core_tx_dest) */
850 #define CORE_TX_BD_TX_DST_MASK           0x1
851 #define CORE_TX_BD_TX_DST_SHIFT          14
852 #define CORE_TX_BD_RESERVED1_MASK        0x1
853 #define CORE_TX_BD_RESERVED1_SHIFT       15
854 };
855
856 /*
857  * Light L2 TX Destination
858  */
859 enum core_tx_dest {
860         CORE_TX_DEST_NW /* Light L2 TX Destination to the Network */,
861         CORE_TX_DEST_LB /* Light L2 TX Destination to the Loopback */,
862         MAX_CORE_TX_DEST
863 };
864
865 /*
866  * Ramrod data for tx queue start ramrod
867  */
868 struct core_tx_start_ramrod_data {
869         struct regpair pbl_base_addr /* Address of the pbl page */;
870         __le16 mtu /* Maximum transmission unit */;
871         __le16 sb_id /* Status block ID */;
872         u8 sb_index /* Status block protocol index */;
873         u8 stats_en /* Statistics Enable */;
874         u8 stats_id /* Statistics Counter ID */;
875         u8 conn_type /* connection type that loaded ll2 */;
876         __le16 pbl_size /* Number of BD pages pointed by PBL */;
877         __le16 qm_pq_id /* QM PQ ID */;
878         u8 gsi_offload_flag
879             /* set when in GSI offload mode on ROCE connection */;
880         u8 resrved[3];
881 };
882
883 /*
884  * Ramrod data for tx queue stop ramrod
885  */
886 struct core_tx_stop_ramrod_data {
887         __le32 reserved0[2];
888 };
889
890 /*
891  * Enum flag for what type of dcb data to update
892  */
893 enum dcb_dhcp_update_flag {
894 /* use when no change should be done to dcb data */
895         DONT_UPDATE_DCB_DHCP,
896         UPDATE_DCB /* use to update only l2 (vlan) priority */,
897         UPDATE_DSCP /* use to update only l3 dhcp */,
898         UPDATE_DCB_DSCP /* update vlan pri and dhcp */,
899         MAX_DCB_DHCP_UPDATE_FLAG
900 };
901
902 struct eth_mstorm_per_pf_stat {
903         struct regpair gre_discard_pkts /* Dropped GRE RX packets */;
904         struct regpair vxlan_discard_pkts /* Dropped VXLAN RX packets */;
905         struct regpair geneve_discard_pkts /* Dropped GENEVE RX packets */;
906         struct regpair lb_discard_pkts /* Dropped Tx switched packets */;
907 };
908
909 struct eth_mstorm_per_queue_stat {
910         struct regpair ttl0_discard;
911         struct regpair packet_too_big_discard;
912         struct regpair no_buff_discard;
913         struct regpair not_active_discard;
914         struct regpair tpa_coalesced_pkts;
915         struct regpair tpa_coalesced_events;
916         struct regpair tpa_aborts_num;
917         struct regpair tpa_coalesced_bytes;
918 };
919
920 /*
921  * Ethernet TX Per PF
922  */
923 struct eth_pstorm_per_pf_stat {
924 /* number of total ucast bytes sent on loopback port without errors */
925         struct regpair sent_lb_ucast_bytes;
926 /* number of total mcast bytes sent on loopback port without errors */
927         struct regpair sent_lb_mcast_bytes;
928 /* number of total bcast bytes sent on loopback port without errors */
929         struct regpair sent_lb_bcast_bytes;
930 /* number of total ucast packets sent on loopback port without errors */
931         struct regpair sent_lb_ucast_pkts;
932 /* number of total mcast packets sent on loopback port without errors */
933         struct regpair sent_lb_mcast_pkts;
934 /* number of total bcast packets sent on loopback port without errors */
935         struct regpair sent_lb_bcast_pkts;
936         struct regpair sent_gre_bytes /* Sent GRE bytes */;
937         struct regpair sent_vxlan_bytes /* Sent VXLAN bytes */;
938         struct regpair sent_geneve_bytes /* Sent GENEVE bytes */;
939         struct regpair sent_gre_pkts /* Sent GRE packets */;
940         struct regpair sent_vxlan_pkts /* Sent VXLAN packets */;
941         struct regpair sent_geneve_pkts /* Sent GENEVE packets */;
942         struct regpair gre_drop_pkts /* Dropped GRE TX packets */;
943         struct regpair vxlan_drop_pkts /* Dropped VXLAN TX packets */;
944         struct regpair geneve_drop_pkts /* Dropped GENEVE TX packets */;
945 };
946
947 /*
948  * Ethernet TX Per Queue Stats
949  */
950 struct eth_pstorm_per_queue_stat {
951         struct regpair sent_ucast_bytes
952             /* number of total bytes sent without errors */;
953         struct regpair sent_mcast_bytes
954             /* number of total bytes sent without errors */;
955         struct regpair sent_bcast_bytes
956             /* number of total bytes sent without errors */;
957         struct regpair sent_ucast_pkts
958             /* number of total packets sent without errors */;
959         struct regpair sent_mcast_pkts
960             /* number of total packets sent without errors */;
961         struct regpair sent_bcast_pkts
962             /* number of total packets sent without errors */;
963         struct regpair error_drop_pkts
964             /* number of total packets dropped due to errors */;
965 };
966
967 /*
968  * ETH Rx producers data
969  */
970 struct eth_rx_rate_limit {
971         __le16 mult;
972         __le16 cnst
973             /* Constant term to add (or subtract from number of cycles) */;
974         u8 add_sub_cnst /* Add (1) or subtract (0) constant term */;
975         u8 reserved0;
976         __le16 reserved1;
977 };
978
979 struct eth_ustorm_per_pf_stat {
980 /* number of total ucast bytes received on loopback port without errors */
981         struct regpair rcv_lb_ucast_bytes;
982 /* number of total mcast bytes received on loopback port without errors */
983         struct regpair rcv_lb_mcast_bytes;
984 /* number of total bcast bytes received on loopback port without errors */
985         struct regpair rcv_lb_bcast_bytes;
986 /* number of total ucast packets received on loopback port without errors */
987         struct regpair rcv_lb_ucast_pkts;
988 /* number of total mcast packets received on loopback port without errors */
989         struct regpair rcv_lb_mcast_pkts;
990 /* number of total bcast packets received on loopback port without errors */
991         struct regpair rcv_lb_bcast_pkts;
992         struct regpair rcv_gre_bytes /* Received GRE bytes */;
993         struct regpair rcv_vxlan_bytes /* Received VXLAN bytes */;
994         struct regpair rcv_geneve_bytes /* Received GENEVE bytes */;
995         struct regpair rcv_gre_pkts /* Received GRE packets */;
996         struct regpair rcv_vxlan_pkts /* Received VXLAN packets */;
997         struct regpair rcv_geneve_pkts /* Received GENEVE packets */;
998 };
999
1000 struct eth_ustorm_per_queue_stat {
1001         struct regpair rcv_ucast_bytes;
1002         struct regpair rcv_mcast_bytes;
1003         struct regpair rcv_bcast_bytes;
1004         struct regpair rcv_ucast_pkts;
1005         struct regpair rcv_mcast_pkts;
1006         struct regpair rcv_bcast_pkts;
1007 };
1008
1009 /*
1010  * Event Ring Next Page Address
1011  */
1012 struct event_ring_next_addr {
1013         struct regpair addr /* Next Page Address */;
1014         __le32 reserved[2] /* Reserved */;
1015 };
1016
1017 /*
1018  * Event Ring Element
1019  */
1020 union event_ring_element {
1021         struct event_ring_entry entry /* Event Ring Entry */;
1022         struct event_ring_next_addr next_addr /* Event Ring Next Page Address */
1023           ;
1024 };
1025
1026 /*
1027  * Ports mode
1028  */
1029 enum fw_flow_ctrl_mode {
1030         flow_ctrl_pause,
1031         flow_ctrl_pfc,
1032         MAX_FW_FLOW_CTRL_MODE
1033 };
1034
1035 /*
1036  * Major and Minor hsi Versions
1037  */
1038 struct hsi_fp_ver_struct {
1039         u8 minor_ver_arr[2] /* Minor Version of hsi loading pf */;
1040         u8 major_ver_arr[2] /* Major Version of driver loading pf */;
1041 };
1042
1043 /*
1044  * Integration Phase
1045  */
1046 enum integ_phase {
1047         INTEG_PHASE_BB_A0_LATEST = 3 /* BB A0 latest integration phase */,
1048         INTEG_PHASE_BB_B0_NO_MCP = 10 /* BB B0 without MCP */,
1049         INTEG_PHASE_BB_B0_WITH_MCP = 11 /* BB B0 with MCP */,
1050         MAX_INTEG_PHASE
1051 };
1052
1053 /*
1054  * Ports mode
1055  */
1056 enum iwarp_ll2_tx_queues {
1057 /* LL2 queue for OOO packets sent in-order by the driver */
1058         IWARP_LL2_IN_ORDER_TX_QUEUE = 1,
1059 /* LL2 queue for unaligned packets sent aligned by the driver */
1060         IWARP_LL2_ALIGNED_TX_QUEUE,
1061         IWARP_LL2_ERROR /* Error indication */,
1062         MAX_IWARP_LL2_TX_QUEUES
1063 };
1064
1065 /*
1066  * Malicious VF error ID
1067  */
1068 enum malicious_vf_error_id {
1069         MALICIOUS_VF_NO_ERROR /* Zero placeholder value */,
1070         VF_PF_CHANNEL_NOT_READY
1071             /* Writing to VF/PF channel when it is not ready */,
1072         VF_ZONE_MSG_NOT_VALID /* VF channel message is not valid */,
1073         VF_ZONE_FUNC_NOT_ENABLED /* Parent PF of VF channel is not active */,
1074         ETH_PACKET_TOO_SMALL
1075             /* TX packet is shorter then reported on BDs or from minimal size */
1076             ,
1077         ETH_ILLEGAL_VLAN_MODE
1078             /* Tx packet with marked as insert VLAN when its illegal */,
1079         ETH_MTU_VIOLATION /* TX packet is greater then MTU */,
1080         ETH_ILLEGAL_INBAND_TAGS /* TX packet has illegal inband tags marked */,
1081         ETH_VLAN_INSERT_AND_INBAND_VLAN /* Vlan cant be added to inband tag */,
1082         ETH_ILLEGAL_NBDS /* indicated number of BDs for the packet is illegal */
1083             ,
1084         ETH_FIRST_BD_WO_SOP /* 1st BD must have start_bd flag set */,
1085         ETH_INSUFFICIENT_BDS
1086             /* There are not enough BDs for transmission of even one packet */,
1087         ETH_ILLEGAL_LSO_HDR_NBDS /* Header NBDs value is illegal */,
1088         ETH_ILLEGAL_LSO_MSS /* LSO MSS value is more than allowed */,
1089         ETH_ZERO_SIZE_BD
1090             /* empty BD (which not contains control flags) is illegal  */,
1091         ETH_ILLEGAL_LSO_HDR_LEN /* LSO header size is above the limit  */,
1092         ETH_INSUFFICIENT_PAYLOAD
1093             ,
1094         ETH_EDPM_OUT_OF_SYNC /* Valid BDs on local ring after EDPM L2 sync */,
1095         ETH_TUNN_IPV6_EXT_NBD_ERR
1096             /* Tunneled packet with IPv6+Ext without a proper number of BDs */,
1097         ETH_CONTROL_PACKET_VIOLATION /* VF sent control frame such as PFC */,
1098         MAX_MALICIOUS_VF_ERROR_ID
1099 };
1100
1101 /*
1102  * Mstorm non-triggering VF zone
1103  */
1104 struct mstorm_non_trigger_vf_zone {
1105         struct eth_mstorm_per_queue_stat eth_queue_stat
1106             /* VF statistic bucket */;
1107 /* VF RX queues producers */
1108         struct eth_rx_prod_data
1109                 eth_rx_queue_producers[ETH_MAX_NUM_RX_QUEUES_PER_VF_QUAD];
1110 };
1111
1112 /*
1113  * Mstorm VF zone
1114  */
1115 struct mstorm_vf_zone {
1116         struct mstorm_non_trigger_vf_zone non_trigger
1117             /* non-interrupt-triggering zone */;
1118 };
1119
1120 /*
1121  * personality per PF
1122  */
1123 enum personality_type {
1124         BAD_PERSONALITY_TYP,
1125         PERSONALITY_ISCSI /* iSCSI and LL2 */,
1126         PERSONALITY_FCOE /* Fcoe and LL2 */,
1127         PERSONALITY_RDMA_AND_ETH /* Roce or Iwarp, Eth and LL2 */,
1128         PERSONALITY_RDMA /* Roce and LL2 */,
1129         PERSONALITY_CORE /* CORE(LL2) */,
1130         PERSONALITY_ETH /* Ethernet */,
1131         PERSONALITY_TOE /* Toe and LL2 */,
1132         MAX_PERSONALITY_TYPE
1133 };
1134
1135 /*
1136  * tunnel configuration
1137  */
1138 struct pf_start_tunnel_config {
1139         u8 set_vxlan_udp_port_flg /* Set VXLAN tunnel UDP destination port. */;
1140         u8 set_geneve_udp_port_flg /* Set GENEVE tunnel UDP destination port. */
1141           ;
1142         u8 tx_enable_vxlan /* If set, enable VXLAN tunnel in TX path. */;
1143         u8 tx_enable_l2geneve /* If set, enable l2 GENEVE tunnel in TX path. */
1144           ;
1145         u8 tx_enable_ipgeneve /* If set, enable IP GENEVE tunnel in TX path. */
1146           ;
1147         u8 tx_enable_l2gre /* If set, enable l2 GRE tunnel in TX path. */;
1148         u8 tx_enable_ipgre /* If set, enable IP GRE tunnel in TX path. */;
1149         u8 tunnel_clss_vxlan /* Classification scheme for VXLAN tunnel. */;
1150         u8 tunnel_clss_l2geneve
1151             /* Classification scheme for l2 GENEVE tunnel. */;
1152         u8 tunnel_clss_ipgeneve
1153             /* Classification scheme for ip GENEVE tunnel. */;
1154         u8 tunnel_clss_l2gre /* Classification scheme for l2 GRE tunnel. */;
1155         u8 tunnel_clss_ipgre /* Classification scheme for ip GRE tunnel. */;
1156         __le16 vxlan_udp_port /* VXLAN tunnel UDP destination port. */;
1157         __le16 geneve_udp_port /* GENEVE tunnel UDP destination port. */;
1158 };
1159
1160 /*
1161  * Ramrod data for PF start ramrod
1162  */
1163 struct pf_start_ramrod_data {
1164         struct regpair event_ring_pbl_addr /* Address of event ring PBL */;
1165         struct regpair consolid_q_pbl_addr
1166             /* PBL address of consolidation queue */;
1167         struct pf_start_tunnel_config tunnel_config /* tunnel configuration. */
1168           ;
1169         __le16 event_ring_sb_id /* Status block ID */;
1170         u8 base_vf_id;
1171           ;
1172         u8 num_vfs /* Amount of vfs owned by PF */;
1173         u8 event_ring_num_pages /* Number of PBL pages in event ring */;
1174         u8 event_ring_sb_index /* Status block index */;
1175         u8 path_id /* HW path ID (engine ID) */;
1176         u8 warning_as_error /* In FW asserts, treat warning as error */;
1177         u8 dont_log_ramrods
1178             /* If not set - throw a warning for each ramrod (for debug) */;
1179         u8 personality /* define what type of personality is new PF */;
1180         __le16 log_type_mask;
1181         u8 mf_mode /* Multi function mode */;
1182         u8 integ_phase /* Integration phase */;
1183         u8 allow_npar_tx_switching;
1184         u8 inner_to_outer_pri_map[8];
1185         u8 pri_map_valid
1186             /* If inner_to_outer_pri_map is initialize then set pri_map_valid */
1187           ;
1188         __le32 outer_tag;
1189 /* FP HSI version to be used by FW */
1190         struct hsi_fp_ver_struct hsi_fp_ver;
1191 };
1192
1193 /*
1194  * Data for port update ramrod
1195  */
1196 struct protocol_dcb_data {
1197         u8 dcb_enable_flag /* dcbEnable flag value */;
1198         u8 dscp_enable_flag /* If set use dscp value */;
1199         u8 dcb_priority /* dcbPri flag value */;
1200         u8 dcb_tc /* dcb TC value */;
1201         u8 dscp_val /* dscp value to write if dscp_enable_flag is set */;
1202         u8 reserved0;
1203 };
1204
1205 /*
1206  * tunnel configuration
1207  */
1208 struct pf_update_tunnel_config {
1209         u8 update_rx_pf_clss;
1210 /* Update per PORT default tunnel RX classification scheme for traffic with
1211  * unknown unicast outer MAC in NPAR mode.
1212  */
1213         u8 update_rx_def_ucast_clss;
1214 /* Update per PORT default tunnel RX classification scheme for traffic with non
1215  * unicast outer MAC in NPAR mode.
1216  */
1217         u8 update_rx_def_non_ucast_clss;
1218         u8 update_tx_pf_clss;
1219         u8 set_vxlan_udp_port_flg
1220             /* Update VXLAN tunnel UDP destination port. */;
1221         u8 set_geneve_udp_port_flg
1222             /* Update GENEVE tunnel UDP destination port. */;
1223         u8 tx_enable_vxlan /* If set, enable VXLAN tunnel in TX path. */;
1224         u8 tx_enable_l2geneve /* If set, enable l2 GENEVE tunnel in TX path. */
1225           ;
1226         u8 tx_enable_ipgeneve /* If set, enable IP GENEVE tunnel in TX path. */
1227           ;
1228         u8 tx_enable_l2gre /* If set, enable l2 GRE tunnel in TX path. */;
1229         u8 tx_enable_ipgre /* If set, enable IP GRE tunnel in TX path. */;
1230         u8 tunnel_clss_vxlan /* Classification scheme for VXLAN tunnel. */;
1231         u8 tunnel_clss_l2geneve
1232             /* Classification scheme for l2 GENEVE tunnel. */;
1233         u8 tunnel_clss_ipgeneve
1234             /* Classification scheme for ip GENEVE tunnel. */;
1235         u8 tunnel_clss_l2gre /* Classification scheme for l2 GRE tunnel. */;
1236         u8 tunnel_clss_ipgre /* Classification scheme for ip GRE tunnel. */;
1237         __le16 vxlan_udp_port /* VXLAN tunnel UDP destination port. */;
1238         __le16 geneve_udp_port /* GENEVE tunnel UDP destination port. */;
1239         __le16 reserved[2];
1240 };
1241
1242 /*
1243  * Data for port update ramrod
1244  */
1245 struct pf_update_ramrod_data {
1246         u8 pf_id;
1247         u8 update_eth_dcb_data_flag /* Update Eth DCB  data indication */;
1248         u8 update_fcoe_dcb_data_flag /* Update FCOE DCB  data indication */;
1249         u8 update_iscsi_dcb_data_flag /* Update iSCSI DCB  data indication */;
1250         u8 update_roce_dcb_data_flag /* Update ROCE DCB  data indication */;
1251 /* Update RROCE (RoceV2) DCB  data indication */
1252         u8 update_rroce_dcb_data_flag;
1253         u8 update_iwarp_dcb_data_flag /* Update IWARP DCB  data indication */;
1254         u8 update_mf_vlan_flag /* Update MF outer vlan Id */;
1255         struct protocol_dcb_data eth_dcb_data /* core eth related fields */;
1256         struct protocol_dcb_data fcoe_dcb_data /* core fcoe related fields */;
1257         struct protocol_dcb_data iscsi_dcb_data /* core iscsi related fields */
1258           ;
1259         struct protocol_dcb_data roce_dcb_data /* core roce related fields */;
1260         struct protocol_dcb_data iwarp_dcb_data /* core iwarp related fields */
1261           ;
1262 /* core roce related fields */
1263         struct protocol_dcb_data rroce_dcb_data;
1264         __le16 mf_vlan /* new outer vlan id value */;
1265         __le16 reserved;
1266 /* tunnel configuration. */
1267         struct pf_update_tunnel_config tunnel_config;
1268 };
1269
1270 /*
1271  * Ports mode
1272  */
1273 enum ports_mode {
1274         ENGX2_PORTX1 /* 2 engines x 1 port */,
1275         ENGX2_PORTX2 /* 2 engines x 2 ports */,
1276         ENGX1_PORTX1 /* 1 engine  x 1 port */,
1277         ENGX1_PORTX2 /* 1 engine  x 2 ports */,
1278         ENGX1_PORTX4 /* 1 engine  x 4 ports */,
1279         MAX_PORTS_MODE
1280 };
1281
1282 /*
1283  * use to index in hsi_fp_[major|minor]_ver_arr per protocol
1284  */
1285 enum protocol_version_array_key {
1286         ETH_VER_KEY = 0,
1287         ROCE_VER_KEY,
1288         MAX_PROTOCOL_VERSION_ARRAY_KEY
1289 };
1290
1291 /*
1292  * RDMA TX Stats
1293  */
1294 struct rdma_sent_stats {
1295         struct regpair sent_bytes /* number of total RDMA bytes sent */;
1296         struct regpair sent_pkts /* number of total RDMA packets sent */;
1297 };
1298
1299 /*
1300  * Pstorm non-triggering VF zone
1301  */
1302 struct pstorm_non_trigger_vf_zone {
1303         struct eth_pstorm_per_queue_stat eth_queue_stat
1304             /* VF statistic bucket */;
1305         struct rdma_sent_stats rdma_stats /* RoCE sent statistics */;
1306 };
1307
1308 /*
1309  * Pstorm VF zone
1310  */
1311 struct pstorm_vf_zone {
1312         struct pstorm_non_trigger_vf_zone non_trigger
1313             /* non-interrupt-triggering zone */;
1314         struct regpair reserved[7] /* vf_zone size mus be power of 2 */;
1315 };
1316
1317 /*
1318  * Ramrod Header of SPQE
1319  */
1320 struct ramrod_header {
1321         __le32 cid /* Slowpath Connection CID */;
1322         u8 cmd_id /* Ramrod Cmd (Per Protocol Type) */;
1323         u8 protocol_id /* Ramrod Protocol ID */;
1324         __le16 echo /* Ramrod echo */;
1325 };
1326
1327 /*
1328  * RDMA RX Stats
1329  */
1330 struct rdma_rcv_stats {
1331         struct regpair rcv_bytes /* number of total RDMA bytes received */;
1332         struct regpair rcv_pkts /* number of total RDMA packets received */;
1333 };
1334
1335 /*
1336  * Data for update QCN/DCQCN RL ramrod
1337  */
1338 struct rl_update_ramrod_data {
1339         u8 qcn_update_param_flg /* Update QCN global params: timeout. */;
1340 /* Update DCQCN global params: timeout, g, k. */
1341         u8 dcqcn_update_param_flg;
1342         u8 rl_init_flg /* Init RL parameters, when RL disabled. */;
1343         u8 rl_start_flg /* Start RL in IDLE state. Set rate to maximum. */;
1344         u8 rl_stop_flg /* Stop RL. */;
1345         u8 rl_id_first /* ID of first or single RL, that will be updated. */;
1346 /* ID of last RL, that will be updated. If clear, single RL will updated. */
1347         u8 rl_id_last;
1348         u8 rl_dc_qcn_flg /* If set, RL will used for DCQCN. */;
1349         __le32 rl_bc_rate /* Byte Counter Limit. */;
1350         __le16 rl_max_rate /* Maximum rate in 1.6 Mbps resolution. */;
1351         __le16 rl_r_ai /* Active increase rate. */;
1352         __le16 rl_r_hai /* Hyper active increase rate. */;
1353         __le16 dcqcn_g /* DCQCN Alpha update gain in 1/64K resolution . */;
1354         __le32 dcqcn_k_us /* DCQCN Alpha update interval. */;
1355         __le32 dcqcn_timeuot_us /* DCQCN timeout. */;
1356         __le32 qcn_timeuot_us /* QCN timeout. */;
1357         __le32 reserved[2];
1358 };
1359
1360 /*
1361  * Slowpath Element (SPQE)
1362  */
1363 struct slow_path_element {
1364         struct ramrod_header hdr /* Ramrod Header */;
1365         struct regpair data_ptr /* Pointer to the Ramrod Data on the Host */;
1366 };
1367
1368 /*
1369  * Tstorm non-triggering VF zone
1370  */
1371 struct tstorm_non_trigger_vf_zone {
1372         struct rdma_rcv_stats rdma_stats /* RoCE received statistics */;
1373 };
1374
1375 struct tstorm_per_port_stat {
1376         struct regpair trunc_error_discard
1377             /* packet is dropped because it was truncated in NIG */;
1378         struct regpair mac_error_discard
1379             /* packet is dropped because of Ethernet FCS error */;
1380         struct regpair mftag_filter_discard
1381             /* packet is dropped because classification was unsuccessful */;
1382         struct regpair eth_mac_filter_discard;
1383         struct regpair ll2_mac_filter_discard;
1384         struct regpair ll2_conn_disabled_discard;
1385         struct regpair iscsi_irregular_pkt
1386             /* packet is an ISCSI irregular packet */;
1387         struct regpair fcoe_irregular_pkt
1388             /* packet is an FCOE irregular packet */;
1389         struct regpair roce_irregular_pkt
1390             /* packet is an ROCE irregular packet */;
1391         struct regpair eth_irregular_pkt /* packet is an ETH irregular packet */
1392           ;
1393         struct regpair toe_irregular_pkt /* packet is an TOE irregular packet */
1394           ;
1395         struct regpair preroce_irregular_pkt
1396             /* packet is an PREROCE irregular packet */;
1397         struct regpair eth_gre_tunn_filter_discard /* GRE dropped packets */;
1398 /* VXLAN dropped packets */
1399         struct regpair eth_vxlan_tunn_filter_discard;
1400 /* GENEVE dropped packets */
1401         struct regpair eth_geneve_tunn_filter_discard;
1402 };
1403
1404 /*
1405  * Tstorm VF zone
1406  */
1407 struct tstorm_vf_zone {
1408         struct tstorm_non_trigger_vf_zone non_trigger
1409             /* non-interrupt-triggering zone */;
1410 };
1411
1412 /*
1413  * Tunnel classification scheme
1414  */
1415 enum tunnel_clss {
1416         TUNNEL_CLSS_MAC_VLAN =
1417             0
1418             /* Use MAC & VLAN from first L2 header for vport classification. */
1419             ,
1420         TUNNEL_CLSS_MAC_VNI
1421             ,
1422         TUNNEL_CLSS_INNER_MAC_VLAN
1423             /* Use MAC and VLAN from last L2 header for vport classification */
1424             ,
1425         TUNNEL_CLSS_INNER_MAC_VNI
1426             ,
1427 /* Use MAC and VLAN from last L2 header for vport classification. If no exact
1428  * match, use MAC and VLAN from first L2 header for classification.
1429  */
1430         TUNNEL_CLSS_MAC_VLAN_DUAL_STAGE,
1431         MAX_TUNNEL_CLSS
1432 };
1433
1434 /*
1435  * Ustorm non-triggering VF zone
1436  */
1437 struct ustorm_non_trigger_vf_zone {
1438         struct eth_ustorm_per_queue_stat eth_queue_stat
1439             /* VF statistic bucket */;
1440         struct regpair vf_pf_msg_addr /* VF-PF message address */;
1441 };
1442
1443 /*
1444  * Ustorm triggering VF zone
1445  */
1446 struct ustorm_trigger_vf_zone {
1447         u8 vf_pf_msg_valid /* VF-PF message valid flag */;
1448         u8 reserved[7];
1449 };
1450
1451 /*
1452  * Ustorm VF zone
1453  */
1454 struct ustorm_vf_zone {
1455         struct ustorm_non_trigger_vf_zone non_trigger
1456             /* non-interrupt-triggering zone */;
1457         struct ustorm_trigger_vf_zone trigger /* interrupt triggering zone */;
1458 };
1459
1460 /*
1461  * VF-PF channel data
1462  */
1463 struct vf_pf_channel_data {
1464         __le32 ready;
1465         u8 valid;
1466         u8 reserved0;
1467         __le16 reserved1;
1468 };
1469
1470 /*
1471  * Ramrod data for VF start ramrod
1472  */
1473 struct vf_start_ramrod_data {
1474         u8 vf_id /* VF ID */;
1475         u8 enable_flr_ack;
1476         __le16 opaque_fid /* VF opaque FID */;
1477         u8 personality /* define what type of personality is new VF */;
1478         u8 reserved[7];
1479 /* FP HSI version to be used by FW */
1480         struct hsi_fp_ver_struct hsi_fp_ver;
1481 };
1482
1483 /*
1484  * Ramrod data for VF start ramrod
1485  */
1486 struct vf_stop_ramrod_data {
1487         u8 vf_id /* VF ID */;
1488         u8 reserved0;
1489         __le16 reserved1;
1490         __le32 reserved2;
1491 };
1492
1493 /*
1494  * VF zone size mode.
1495  */
1496 enum vf_zone_size_mode {
1497 /* Default VF zone size. Up to 192 VF supported. */
1498         VF_ZONE_SIZE_MODE_DEFAULT,
1499 /* Doubled VF zone size. Up to 96 VF supported. */
1500         VF_ZONE_SIZE_MODE_DOUBLE,
1501 /* Quad VF zone size. Up to 48 VF supported. */
1502         VF_ZONE_SIZE_MODE_QUAD,
1503         MAX_VF_ZONE_SIZE_MODE
1504 };
1505
1506 /*
1507  * Attentions status block
1508  */
1509 struct atten_status_block {
1510         __le32 atten_bits;
1511         __le32 atten_ack;
1512         __le16 reserved0;
1513         __le16 sb_index /* status block running index */;
1514         __le32 reserved1;
1515 };
1516
1517
1518 /*
1519  * Igu cleanup bit values to distinguish between clean or producer consumer
1520  */
1521 enum command_type_bit {
1522         IGU_COMMAND_TYPE_NOP = 0,
1523         IGU_COMMAND_TYPE_SET = 1,
1524         MAX_COMMAND_TYPE_BIT
1525 };
1526
1527 /*
1528  * DMAE command
1529  */
1530 struct dmae_cmd {
1531         __le32 opcode;
1532 #define DMAE_CMD_SRC_MASK              0x1
1533 #define DMAE_CMD_SRC_SHIFT             0
1534 #define DMAE_CMD_DST_MASK              0x3
1535 #define DMAE_CMD_DST_SHIFT             1
1536 #define DMAE_CMD_C_DST_MASK            0x1
1537 #define DMAE_CMD_C_DST_SHIFT           3
1538 #define DMAE_CMD_CRC_RESET_MASK        0x1
1539 #define DMAE_CMD_CRC_RESET_SHIFT       4
1540 #define DMAE_CMD_SRC_ADDR_RESET_MASK   0x1
1541 #define DMAE_CMD_SRC_ADDR_RESET_SHIFT  5
1542 #define DMAE_CMD_DST_ADDR_RESET_MASK   0x1
1543 #define DMAE_CMD_DST_ADDR_RESET_SHIFT  6
1544 #define DMAE_CMD_COMP_FUNC_MASK        0x1
1545 #define DMAE_CMD_COMP_FUNC_SHIFT       7
1546 #define DMAE_CMD_COMP_WORD_EN_MASK     0x1
1547 #define DMAE_CMD_COMP_WORD_EN_SHIFT    8
1548 #define DMAE_CMD_COMP_CRC_EN_MASK      0x1
1549 #define DMAE_CMD_COMP_CRC_EN_SHIFT     9
1550 #define DMAE_CMD_COMP_CRC_OFFSET_MASK  0x7
1551 #define DMAE_CMD_COMP_CRC_OFFSET_SHIFT 10
1552 #define DMAE_CMD_RESERVED1_MASK        0x1
1553 #define DMAE_CMD_RESERVED1_SHIFT       13
1554 #define DMAE_CMD_ENDIANITY_MODE_MASK   0x3
1555 #define DMAE_CMD_ENDIANITY_MODE_SHIFT  14
1556 #define DMAE_CMD_ERR_HANDLING_MASK     0x3
1557 #define DMAE_CMD_ERR_HANDLING_SHIFT    16
1558 #define DMAE_CMD_PORT_ID_MASK          0x3
1559 #define DMAE_CMD_PORT_ID_SHIFT         18
1560 #define DMAE_CMD_SRC_PF_ID_MASK        0xF
1561 #define DMAE_CMD_SRC_PF_ID_SHIFT       20
1562 #define DMAE_CMD_DST_PF_ID_MASK        0xF
1563 #define DMAE_CMD_DST_PF_ID_SHIFT       24
1564 #define DMAE_CMD_SRC_VF_ID_VALID_MASK  0x1
1565 #define DMAE_CMD_SRC_VF_ID_VALID_SHIFT 28
1566 #define DMAE_CMD_DST_VF_ID_VALID_MASK  0x1
1567 #define DMAE_CMD_DST_VF_ID_VALID_SHIFT 29
1568 #define DMAE_CMD_RESERVED2_MASK        0x3
1569 #define DMAE_CMD_RESERVED2_SHIFT       30
1570         __le32 src_addr_lo
1571             /* PCIe source address low in bytes or GRC source address in DW */;
1572         __le32 src_addr_hi;
1573         __le32 dst_addr_lo;
1574         __le32 dst_addr_hi;
1575         __le16 length_dw /* Length in DW */;
1576         __le16 opcode_b;
1577 #define DMAE_CMD_SRC_VF_ID_MASK        0xFF
1578 #define DMAE_CMD_SRC_VF_ID_SHIFT       0
1579 #define DMAE_CMD_DST_VF_ID_MASK        0xFF
1580 #define DMAE_CMD_DST_VF_ID_SHIFT       8
1581         __le32 comp_addr_lo /* PCIe completion address low or grc address */;
1582         __le32 comp_addr_hi;
1583         __le32 comp_val /* Value to write to completion address */;
1584         __le32 crc32 /* crc16 result */;
1585         __le32 crc_32_c /* crc32_c result */;
1586         __le16 crc16 /* crc16 result */;
1587         __le16 crc16_c /* crc16_c result */;
1588         __le16 crc10 /* crc_t10 result */;
1589         __le16 reserved;
1590         __le16 xsum16 /* checksum16 result  */;
1591         __le16 xsum8 /* checksum8 result  */;
1592 };
1593
1594
1595 enum dmae_cmd_comp_crc_en_enum {
1596         dmae_cmd_comp_crc_disabled /* Do not write a CRC word */,
1597         dmae_cmd_comp_crc_enabled /* Write a CRC word */,
1598         MAX_DMAE_CMD_COMP_CRC_EN_ENUM
1599 };
1600
1601
1602 enum dmae_cmd_comp_func_enum {
1603 /* completion word and/or CRC will be sent to SRC-PCI function/SRC VFID */
1604         dmae_cmd_comp_func_to_src,
1605 /* completion word and/or CRC will be sent to DST-PCI function/DST VFID */
1606         dmae_cmd_comp_func_to_dst,
1607         MAX_DMAE_CMD_COMP_FUNC_ENUM
1608 };
1609
1610
1611 enum dmae_cmd_comp_word_en_enum {
1612         dmae_cmd_comp_word_disabled /* Do not write a completion word */,
1613         dmae_cmd_comp_word_enabled /* Write the completion word */,
1614         MAX_DMAE_CMD_COMP_WORD_EN_ENUM
1615 };
1616
1617
1618 enum dmae_cmd_c_dst_enum {
1619         dmae_cmd_c_dst_pcie,
1620         dmae_cmd_c_dst_grc,
1621         MAX_DMAE_CMD_C_DST_ENUM
1622 };
1623
1624
1625 enum dmae_cmd_dst_enum {
1626         dmae_cmd_dst_none_0,
1627         dmae_cmd_dst_pcie,
1628         dmae_cmd_dst_grc,
1629         dmae_cmd_dst_none_3,
1630         MAX_DMAE_CMD_DST_ENUM
1631 };
1632
1633
1634 enum dmae_cmd_error_handling_enum {
1635 /* Send a regular completion (with no error indication) */
1636         dmae_cmd_error_handling_send_regular_comp,
1637 /* Send a completion with an error indication (i.e. set bit 31 of the completion
1638  * word)
1639  */
1640         dmae_cmd_error_handling_send_comp_with_err,
1641         dmae_cmd_error_handling_dont_send_comp /* Do not send a completion */,
1642         MAX_DMAE_CMD_ERROR_HANDLING_ENUM
1643 };
1644
1645
1646 enum dmae_cmd_src_enum {
1647         dmae_cmd_src_pcie /* The source is the PCIe */,
1648         dmae_cmd_src_grc /* The source is the GRC */,
1649         MAX_DMAE_CMD_SRC_ENUM
1650 };
1651
1652 /*
1653  * IGU cleanup command
1654  */
1655 struct igu_cleanup {
1656         __le32 sb_id_and_flags;
1657 #define IGU_CLEANUP_RESERVED0_MASK     0x7FFFFFF
1658 #define IGU_CLEANUP_RESERVED0_SHIFT    0
1659 #define IGU_CLEANUP_CLEANUP_SET_MASK   0x1
1660 #define IGU_CLEANUP_CLEANUP_SET_SHIFT  27
1661 #define IGU_CLEANUP_CLEANUP_TYPE_MASK  0x7
1662 #define IGU_CLEANUP_CLEANUP_TYPE_SHIFT 28
1663 #define IGU_CLEANUP_COMMAND_TYPE_MASK  0x1
1664 #define IGU_CLEANUP_COMMAND_TYPE_SHIFT 31
1665         __le32 reserved1;
1666 };
1667
1668 /*
1669  * IGU firmware driver command
1670  */
1671 union igu_command {
1672         struct igu_prod_cons_update prod_cons_update;
1673         struct igu_cleanup cleanup;
1674 };
1675
1676 /*
1677  * IGU firmware driver command
1678  */
1679 struct igu_command_reg_ctrl {
1680         __le16 opaque_fid;
1681         __le16 igu_command_reg_ctrl_fields;
1682 #define IGU_COMMAND_REG_CTRL_PXP_BAR_ADDR_MASK  0xFFF
1683 #define IGU_COMMAND_REG_CTRL_PXP_BAR_ADDR_SHIFT 0
1684 #define IGU_COMMAND_REG_CTRL_RESERVED_MASK      0x7
1685 #define IGU_COMMAND_REG_CTRL_RESERVED_SHIFT     12
1686 #define IGU_COMMAND_REG_CTRL_COMMAND_TYPE_MASK  0x1
1687 #define IGU_COMMAND_REG_CTRL_COMMAND_TYPE_SHIFT 15
1688 };
1689
1690 /*
1691  * IGU mapping line structure
1692  */
1693 struct igu_mapping_line {
1694         __le32 igu_mapping_line_fields;
1695 #define IGU_MAPPING_LINE_VALID_MASK            0x1
1696 #define IGU_MAPPING_LINE_VALID_SHIFT           0
1697 #define IGU_MAPPING_LINE_VECTOR_NUMBER_MASK    0xFF
1698 #define IGU_MAPPING_LINE_VECTOR_NUMBER_SHIFT   1
1699 #define IGU_MAPPING_LINE_FUNCTION_NUMBER_MASK  0xFF
1700 #define IGU_MAPPING_LINE_FUNCTION_NUMBER_SHIFT 9
1701 #define IGU_MAPPING_LINE_PF_VALID_MASK         0x1
1702 #define IGU_MAPPING_LINE_PF_VALID_SHIFT        17
1703 #define IGU_MAPPING_LINE_IPS_GROUP_MASK        0x3F
1704 #define IGU_MAPPING_LINE_IPS_GROUP_SHIFT       18
1705 #define IGU_MAPPING_LINE_RESERVED_MASK         0xFF
1706 #define IGU_MAPPING_LINE_RESERVED_SHIFT        24
1707 };
1708
1709 /*
1710  * IGU MSIX line structure
1711  */
1712 struct igu_msix_vector {
1713         struct regpair address;
1714         __le32 data;
1715         __le32 msix_vector_fields;
1716 #define IGU_MSIX_VECTOR_MASK_BIT_MASK      0x1
1717 #define IGU_MSIX_VECTOR_MASK_BIT_SHIFT     0
1718 #define IGU_MSIX_VECTOR_RESERVED0_MASK     0x7FFF
1719 #define IGU_MSIX_VECTOR_RESERVED0_SHIFT    1
1720 #define IGU_MSIX_VECTOR_STEERING_TAG_MASK  0xFF
1721 #define IGU_MSIX_VECTOR_STEERING_TAG_SHIFT 16
1722 #define IGU_MSIX_VECTOR_RESERVED1_MASK     0xFF
1723 #define IGU_MSIX_VECTOR_RESERVED1_SHIFT    24
1724 };
1725
1726
1727 struct mstorm_core_conn_ag_ctx {
1728         u8 byte0 /* cdu_validation */;
1729         u8 byte1 /* state */;
1730         u8 flags0;
1731 #define MSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1
1732 #define MSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
1733 #define MSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1
1734 #define MSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
1735 #define MSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3
1736 #define MSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
1737 #define MSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3
1738 #define MSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
1739 #define MSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3
1740 #define MSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
1741         u8 flags1;
1742 #define MSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1
1743 #define MSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
1744 #define MSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1
1745 #define MSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
1746 #define MSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1
1747 #define MSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
1748 #define MSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1
1749 #define MSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 3
1750 #define MSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1
1751 #define MSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 4
1752 #define MSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1
1753 #define MSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 5
1754 #define MSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1
1755 #define MSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 6
1756 #define MSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1
1757 #define MSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 7
1758         __le16 word0 /* word0 */;
1759         __le16 word1 /* word1 */;
1760         __le32 reg0 /* reg0 */;
1761         __le32 reg1 /* reg1 */;
1762 };
1763
1764 /*
1765  * per encapsulation type enabling flags
1766  */
1767 struct prs_reg_encapsulation_type_en {
1768         u8 flags;
1769 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GRE_ENABLE_MASK     0x1
1770 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GRE_ENABLE_SHIFT    0
1771 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GRE_ENABLE_MASK      0x1
1772 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GRE_ENABLE_SHIFT     1
1773 #define PRS_REG_ENCAPSULATION_TYPE_EN_VXLAN_ENABLE_MASK            0x1
1774 #define PRS_REG_ENCAPSULATION_TYPE_EN_VXLAN_ENABLE_SHIFT           2
1775 #define PRS_REG_ENCAPSULATION_TYPE_EN_T_TAG_ENABLE_MASK            0x1
1776 #define PRS_REG_ENCAPSULATION_TYPE_EN_T_TAG_ENABLE_SHIFT           3
1777 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GENEVE_ENABLE_MASK  0x1
1778 #define PRS_REG_ENCAPSULATION_TYPE_EN_ETH_OVER_GENEVE_ENABLE_SHIFT 4
1779 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GENEVE_ENABLE_MASK   0x1
1780 #define PRS_REG_ENCAPSULATION_TYPE_EN_IP_OVER_GENEVE_ENABLE_SHIFT  5
1781 #define PRS_REG_ENCAPSULATION_TYPE_EN_RESERVED_MASK                0x3
1782 #define PRS_REG_ENCAPSULATION_TYPE_EN_RESERVED_SHIFT               6
1783 };
1784
1785 enum pxp_tph_st_hint {
1786         TPH_ST_HINT_BIDIR /* Read/Write access by Host and Device */,
1787         TPH_ST_HINT_REQUESTER /* Read/Write access by Device */,
1788         TPH_ST_HINT_TARGET
1789             /* Device Write and Host Read, or Host Write and Device Read */,
1790         TPH_ST_HINT_TARGET_PRIO,
1791         MAX_PXP_TPH_ST_HINT
1792 };
1793
1794 /*
1795  * QM hardware structure of enable bypass credit mask
1796  */
1797 struct qm_rf_bypass_mask {
1798         u8 flags;
1799 #define QM_RF_BYPASS_MASK_LINEVOQ_MASK    0x1
1800 #define QM_RF_BYPASS_MASK_LINEVOQ_SHIFT   0
1801 #define QM_RF_BYPASS_MASK_RESERVED0_MASK  0x1
1802 #define QM_RF_BYPASS_MASK_RESERVED0_SHIFT 1
1803 #define QM_RF_BYPASS_MASK_PFWFQ_MASK      0x1
1804 #define QM_RF_BYPASS_MASK_PFWFQ_SHIFT     2
1805 #define QM_RF_BYPASS_MASK_VPWFQ_MASK      0x1
1806 #define QM_RF_BYPASS_MASK_VPWFQ_SHIFT     3
1807 #define QM_RF_BYPASS_MASK_PFRL_MASK       0x1
1808 #define QM_RF_BYPASS_MASK_PFRL_SHIFT      4
1809 #define QM_RF_BYPASS_MASK_VPQCNRL_MASK    0x1
1810 #define QM_RF_BYPASS_MASK_VPQCNRL_SHIFT   5
1811 #define QM_RF_BYPASS_MASK_FWPAUSE_MASK    0x1
1812 #define QM_RF_BYPASS_MASK_FWPAUSE_SHIFT   6
1813 #define QM_RF_BYPASS_MASK_RESERVED1_MASK  0x1
1814 #define QM_RF_BYPASS_MASK_RESERVED1_SHIFT 7
1815 };
1816
1817 /*
1818  * QM hardware structure of opportunistic credit mask
1819  */
1820 struct qm_rf_opportunistic_mask {
1821         __le16 flags;
1822 #define QM_RF_OPPORTUNISTIC_MASK_LINEVOQ_MASK     0x1
1823 #define QM_RF_OPPORTUNISTIC_MASK_LINEVOQ_SHIFT    0
1824 #define QM_RF_OPPORTUNISTIC_MASK_BYTEVOQ_MASK     0x1
1825 #define QM_RF_OPPORTUNISTIC_MASK_BYTEVOQ_SHIFT    1
1826 #define QM_RF_OPPORTUNISTIC_MASK_PFWFQ_MASK       0x1
1827 #define QM_RF_OPPORTUNISTIC_MASK_PFWFQ_SHIFT      2
1828 #define QM_RF_OPPORTUNISTIC_MASK_VPWFQ_MASK       0x1
1829 #define QM_RF_OPPORTUNISTIC_MASK_VPWFQ_SHIFT      3
1830 #define QM_RF_OPPORTUNISTIC_MASK_PFRL_MASK        0x1
1831 #define QM_RF_OPPORTUNISTIC_MASK_PFRL_SHIFT       4
1832 #define QM_RF_OPPORTUNISTIC_MASK_VPQCNRL_MASK     0x1
1833 #define QM_RF_OPPORTUNISTIC_MASK_VPQCNRL_SHIFT    5
1834 #define QM_RF_OPPORTUNISTIC_MASK_FWPAUSE_MASK     0x1
1835 #define QM_RF_OPPORTUNISTIC_MASK_FWPAUSE_SHIFT    6
1836 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED0_MASK   0x1
1837 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED0_SHIFT  7
1838 #define QM_RF_OPPORTUNISTIC_MASK_QUEUEEMPTY_MASK  0x1
1839 #define QM_RF_OPPORTUNISTIC_MASK_QUEUEEMPTY_SHIFT 8
1840 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED1_MASK   0x7F
1841 #define QM_RF_OPPORTUNISTIC_MASK_RESERVED1_SHIFT  9
1842 };
1843
1844 /*
1845  * QM hardware structure of QM map memory
1846  */
1847 struct qm_rf_pq_map {
1848         __le32 reg;
1849 #define QM_RF_PQ_MAP_PQ_VALID_MASK          0x1
1850 #define QM_RF_PQ_MAP_PQ_VALID_SHIFT         0
1851 #define QM_RF_PQ_MAP_RL_ID_MASK             0xFF
1852 #define QM_RF_PQ_MAP_RL_ID_SHIFT            1
1853 #define QM_RF_PQ_MAP_VP_PQ_ID_MASK          0x1FF
1854 #define QM_RF_PQ_MAP_VP_PQ_ID_SHIFT         9
1855 #define QM_RF_PQ_MAP_VOQ_MASK               0x1F
1856 #define QM_RF_PQ_MAP_VOQ_SHIFT              18
1857 #define QM_RF_PQ_MAP_WRR_WEIGHT_GROUP_MASK  0x3
1858 #define QM_RF_PQ_MAP_WRR_WEIGHT_GROUP_SHIFT 23
1859 #define QM_RF_PQ_MAP_RL_VALID_MASK          0x1
1860 #define QM_RF_PQ_MAP_RL_VALID_SHIFT         25
1861 #define QM_RF_PQ_MAP_RESERVED_MASK          0x3F
1862 #define QM_RF_PQ_MAP_RESERVED_SHIFT         26
1863 };
1864
1865 /*
1866  * Completion params for aggregated interrupt completion
1867  */
1868 struct sdm_agg_int_comp_params {
1869         __le16 params;
1870 #define SDM_AGG_INT_COMP_PARAMS_AGG_INT_INDEX_MASK      0x3F
1871 #define SDM_AGG_INT_COMP_PARAMS_AGG_INT_INDEX_SHIFT     0
1872 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_ENABLE_MASK  0x1
1873 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_ENABLE_SHIFT 6
1874 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_BIT_MASK     0x1FF
1875 #define SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_BIT_SHIFT    7
1876 };
1877
1878 /*
1879  * SDM operation gen command (generate aggregative interrupt)
1880  */
1881 struct sdm_op_gen {
1882         __le32 command;
1883 #define SDM_OP_GEN_COMP_PARAM_MASK  0xFFFF
1884 #define SDM_OP_GEN_COMP_PARAM_SHIFT 0
1885 #define SDM_OP_GEN_COMP_TYPE_MASK   0xF
1886 #define SDM_OP_GEN_COMP_TYPE_SHIFT  16
1887 #define SDM_OP_GEN_RESERVED_MASK    0xFFF
1888 #define SDM_OP_GEN_RESERVED_SHIFT   20
1889 };
1890
1891 struct ystorm_core_conn_ag_ctx {
1892         u8 byte0 /* cdu_validation */;
1893         u8 byte1 /* state */;
1894         u8 flags0;
1895 #define YSTORM_CORE_CONN_AG_CTX_BIT0_MASK     0x1
1896 #define YSTORM_CORE_CONN_AG_CTX_BIT0_SHIFT    0
1897 #define YSTORM_CORE_CONN_AG_CTX_BIT1_MASK     0x1
1898 #define YSTORM_CORE_CONN_AG_CTX_BIT1_SHIFT    1
1899 #define YSTORM_CORE_CONN_AG_CTX_CF0_MASK      0x3
1900 #define YSTORM_CORE_CONN_AG_CTX_CF0_SHIFT     2
1901 #define YSTORM_CORE_CONN_AG_CTX_CF1_MASK      0x3
1902 #define YSTORM_CORE_CONN_AG_CTX_CF1_SHIFT     4
1903 #define YSTORM_CORE_CONN_AG_CTX_CF2_MASK      0x3
1904 #define YSTORM_CORE_CONN_AG_CTX_CF2_SHIFT     6
1905         u8 flags1;
1906 #define YSTORM_CORE_CONN_AG_CTX_CF0EN_MASK    0x1
1907 #define YSTORM_CORE_CONN_AG_CTX_CF0EN_SHIFT   0
1908 #define YSTORM_CORE_CONN_AG_CTX_CF1EN_MASK    0x1
1909 #define YSTORM_CORE_CONN_AG_CTX_CF1EN_SHIFT   1
1910 #define YSTORM_CORE_CONN_AG_CTX_CF2EN_MASK    0x1
1911 #define YSTORM_CORE_CONN_AG_CTX_CF2EN_SHIFT   2
1912 #define YSTORM_CORE_CONN_AG_CTX_RULE0EN_MASK  0x1
1913 #define YSTORM_CORE_CONN_AG_CTX_RULE0EN_SHIFT 3
1914 #define YSTORM_CORE_CONN_AG_CTX_RULE1EN_MASK  0x1
1915 #define YSTORM_CORE_CONN_AG_CTX_RULE1EN_SHIFT 4
1916 #define YSTORM_CORE_CONN_AG_CTX_RULE2EN_MASK  0x1
1917 #define YSTORM_CORE_CONN_AG_CTX_RULE2EN_SHIFT 5
1918 #define YSTORM_CORE_CONN_AG_CTX_RULE3EN_MASK  0x1
1919 #define YSTORM_CORE_CONN_AG_CTX_RULE3EN_SHIFT 6
1920 #define YSTORM_CORE_CONN_AG_CTX_RULE4EN_MASK  0x1
1921 #define YSTORM_CORE_CONN_AG_CTX_RULE4EN_SHIFT 7
1922         u8 byte2 /* byte2 */;
1923         u8 byte3 /* byte3 */;
1924         __le16 word0 /* word0 */;
1925         __le32 reg0 /* reg0 */;
1926         __le32 reg1 /* reg1 */;
1927         __le16 word1 /* word1 */;
1928         __le16 word2 /* word2 */;
1929         __le16 word3 /* word3 */;
1930         __le16 word4 /* word4 */;
1931         __le32 reg2 /* reg2 */;
1932         __le32 reg3 /* reg3 */;
1933 };
1934
1935 #endif /* __ECORE_HSI_COMMON__ */