1 #ifndef __BDK_CSRS_BGX_H__
2 #define __BDK_CSRS_BGX_H__
3 /* This file is auto-generated. Do not edit */
4
5 /***********************license start***************
6 * Copyright (c) 2003-2017 Cavium Inc. ([email protected]). All rights
7 * reserved.
8 *
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are
12 * met:
13 *
14 * * Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 *
17 * * Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials provided
20 * with the distribution.
21
22 * * Neither the name of Cavium Inc. nor the names of
23 * its contributors may be used to endorse or promote products
24 * derived from this software without specific prior written
25 * permission.
26
27 * This Software, including technical data, may be subject to U.S. export control
28 * laws, including the U.S. Export Administration Act and its associated
29 * regulations, and may be subject to export or import regulations in other
30 * countries.
31
32 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
33 * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
34 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
35 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
36 * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
37 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
38 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
39 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
40 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
41 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
42 ***********************license end**************************************/
43
44
45 /**
46 * @file
47 *
48 * Configuration and status register (CSR) address and type definitions for
49 * Cavium BGX.
50 *
51 * This file is auto generated. Do not edit.
52 *
53 */
54
55 /**
56 * Enumeration bgx_bar_e
57 *
58 * BGX Base Address Register Enumeration
59 * Enumerates the base address registers.
60 */
61 #define BDK_BGX_BAR_E_BGXX_PF_BAR0(a) (0x87e0e0000000ll + 0x1000000ll * (a))
62 #define BDK_BGX_BAR_E_BGXX_PF_BAR0_SIZE 0x400000ull
63 #define BDK_BGX_BAR_E_BGXX_PF_BAR4(a) (0x87e0e0400000ll + 0x1000000ll * (a))
64 #define BDK_BGX_BAR_E_BGXX_PF_BAR4_SIZE 0x400000ull
65
66 /**
67 * Enumeration bgx_int_vec_e
68 *
69 * BGX MSI-X Vector Enumeration
70 * Enumeration the MSI-X interrupt vectors.
71 */
72 #define BDK_BGX_INT_VEC_E_CMRX_INT(a) (0 + 7 * (a))
73 #define BDK_BGX_INT_VEC_E_CMR_MEM_INT (0x1c)
74 #define BDK_BGX_INT_VEC_E_GMPX_GMI_RX_INT(a) (5 + 7 * (a))
75 #define BDK_BGX_INT_VEC_E_GMPX_GMI_TX_INT(a) (6 + 7 * (a))
76 #define BDK_BGX_INT_VEC_E_GMPX_PCS_INT(a) (4 + 7 * (a))
77 #define BDK_BGX_INT_VEC_E_SMUX_RX_INT(a) (2 + 7 * (a))
78 #define BDK_BGX_INT_VEC_E_SMUX_TX_INT(a) (3 + 7 * (a))
79 #define BDK_BGX_INT_VEC_E_SPUX_INT(a) (1 + 7 * (a))
80 #define BDK_BGX_INT_VEC_E_SPU_MEM_INT (0x1d)
81
82 /**
83 * Enumeration bgx_lmac_types_e
84 *
85 * BGX LMAC Type Enumeration
86 * Enumerates the LMAC Types that BGX supports.
87 */
88 #define BDK_BGX_LMAC_TYPES_E_FORTYG_R (4)
89 #define BDK_BGX_LMAC_TYPES_E_QSGMII (6)
90 #define BDK_BGX_LMAC_TYPES_E_RGMII (5)
91 #define BDK_BGX_LMAC_TYPES_E_RXAUI (2)
92 #define BDK_BGX_LMAC_TYPES_E_SGMII (0)
93 #define BDK_BGX_LMAC_TYPES_E_TENG_R (3)
94 #define BDK_BGX_LMAC_TYPES_E_XAUI (1)
95
96 /**
97 * Enumeration bgx_opcode_e
98 *
99 * INTERNAL: BGX Error Opcode Enumeration
100 *
101 * Enumerates the error opcodes created by BGX and presented to NCSI/TNS/NIC.
102 */
103 #define BDK_BGX_OPCODE_E_RE_FCS (7)
104 #define BDK_BGX_OPCODE_E_RE_FCS_RCV (8)
105 #define BDK_BGX_OPCODE_E_RE_JABBER (2)
106 #define BDK_BGX_OPCODE_E_RE_NONE (0)
107 #define BDK_BGX_OPCODE_E_RE_PARTIAL (1)
108 #define BDK_BGX_OPCODE_E_RE_RX_CTL (0xb)
109 #define BDK_BGX_OPCODE_E_RE_SKIP (0xc)
110 #define BDK_BGX_OPCODE_E_RE_TERMINATE (9)
111
112 /**
113 * Enumeration bgx_spu_br_train_cst_e
114 *
115 * BGX Training Coefficient Status Enumeration
116 * 2-bit status for each coefficient as defined in 802.3-2008, Table 72-5.
117 */
118 #define BDK_BGX_SPU_BR_TRAIN_CST_E_MAXIMUM (3)
119 #define BDK_BGX_SPU_BR_TRAIN_CST_E_MINIMUM (2)
120 #define BDK_BGX_SPU_BR_TRAIN_CST_E_NOT_UPDATED (0)
121 #define BDK_BGX_SPU_BR_TRAIN_CST_E_UPDATED (1)
122
123 /**
124 * Enumeration bgx_spu_br_train_cup_e
125 *
126 * BGX Training Coefficient Enumeration
127 * 2-bit command for each coefficient as defined in 802.3-2008, Table 72-4.
128 */
129 #define BDK_BGX_SPU_BR_TRAIN_CUP_E_DECREMENT (1)
130 #define BDK_BGX_SPU_BR_TRAIN_CUP_E_HOLD (0)
131 #define BDK_BGX_SPU_BR_TRAIN_CUP_E_INCREMENT (2)
132 #define BDK_BGX_SPU_BR_TRAIN_CUP_E_RSV_CMD (3)
133
134 /**
135 * Structure bgx_spu_br_lane_train_status_s
136 *
137 * BGX Lane Training Status Structure
138 * This is the group of lane status bits for a single lane in the BASE-R PMD status register
139 * (MDIO address 1.151) as defined in 802.3ba-2010, Table 45-55.
140 */
141 union bdk_bgx_spu_br_lane_train_status_s
142 {
143 uint32_t u;
144 struct bdk_bgx_spu_br_lane_train_status_s_s
145 {
146 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
147 uint32_t reserved_4_31 : 28;
148 uint32_t training_failure : 1; /**< [ 3: 3] Link training failure. */
149 uint32_t training : 1; /**< [ 2: 2] Link training state.
150 0 = Training in progress.
151 1 = Training has completed. */
152 uint32_t frame_lock : 1; /**< [ 1: 1] Frame lock status. Set when training frame delineation has been detected. */
153 uint32_t rx_trained : 1; /**< [ 0: 0] Receiver trained status.
154 0 = Receiver training.
155 1 = Receiver trained and ready to receive data for the lane. */
156 #else /* Word 0 - Little Endian */
157 uint32_t rx_trained : 1; /**< [ 0: 0] Receiver trained status.
158 0 = Receiver training.
159 1 = Receiver trained and ready to receive data for the lane. */
160 uint32_t frame_lock : 1; /**< [ 1: 1] Frame lock status. Set when training frame delineation has been detected. */
161 uint32_t training : 1; /**< [ 2: 2] Link training state.
162 0 = Training in progress.
163 1 = Training has completed. */
164 uint32_t training_failure : 1; /**< [ 3: 3] Link training failure. */
165 uint32_t reserved_4_31 : 28;
166 #endif /* Word 0 - End */
167 } s;
168 /* struct bdk_bgx_spu_br_lane_train_status_s_s cn; */
169 };
170
171 /**
172 * Structure bgx_spu_br_train_cup_s
173 *
174 * BGX Lane Training Coeffiecient Structure
175 * This is the coefficient update field of the BASE-R link training packet as defined in
176 * 802.3-2008, Table 72-4.
177 */
178 union bdk_bgx_spu_br_train_cup_s
179 {
180 uint32_t u;
181 struct bdk_bgx_spu_br_train_cup_s_s
182 {
183 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
184 uint32_t reserved_14_31 : 18;
185 uint32_t preset : 1; /**< [ 13: 13] Preset. Set to indicate that all TX coefficients be set to a state where equalization is
186 turned off, i.e. the precursor (k = -1) and postcursor (k = +1) coefficients should be set
187 to 0 and the main
188 (k = 0) coefficient should be set to its maximum value. */
189 uint32_t init : 1; /**< [ 12: 12] Initialize. Set to indicate that the TX coefficients should be set to meet the conditions
190 defined in 802.3-2008 sub-clause 72.6.10.4.2. */
191 uint32_t reserved_6_11 : 6;
192 uint32_t post_cup : 2; /**< [ 5: 4] Post-cursor (k = +1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
193 BGX_SPU_BR_TRAIN_CUP_E. */
194 uint32_t main_cup : 2; /**< [ 3: 2] Main (k = 0) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
195 BGX_SPU_BR_TRAIN_CUP_E. */
196 uint32_t pre_cup : 2; /**< [ 1: 0] Pre-cursor (k = -1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
197 BGX_SPU_BR_TRAIN_CUP_E. */
198 #else /* Word 0 - Little Endian */
199 uint32_t pre_cup : 2; /**< [ 1: 0] Pre-cursor (k = -1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
200 BGX_SPU_BR_TRAIN_CUP_E. */
201 uint32_t main_cup : 2; /**< [ 3: 2] Main (k = 0) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
202 BGX_SPU_BR_TRAIN_CUP_E. */
203 uint32_t post_cup : 2; /**< [ 5: 4] Post-cursor (k = +1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
204 BGX_SPU_BR_TRAIN_CUP_E. */
205 uint32_t reserved_6_11 : 6;
206 uint32_t init : 1; /**< [ 12: 12] Initialize. Set to indicate that the TX coefficients should be set to meet the conditions
207 defined in 802.3-2008 sub-clause 72.6.10.4.2. */
208 uint32_t preset : 1; /**< [ 13: 13] Preset. Set to indicate that all TX coefficients be set to a state where equalization is
209 turned off, i.e. the precursor (k = -1) and postcursor (k = +1) coefficients should be set
210 to 0 and the main
211 (k = 0) coefficient should be set to its maximum value. */
212 uint32_t reserved_14_31 : 18;
213 #endif /* Word 0 - End */
214 } s;
215 struct bdk_bgx_spu_br_train_cup_s_cn
216 {
217 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
218 uint32_t reserved_16_31 : 16;
219 uint32_t reserved_14_15 : 2;
220 uint32_t preset : 1; /**< [ 13: 13] Preset. Set to indicate that all TX coefficients be set to a state where equalization is
221 turned off, i.e. the precursor (k = -1) and postcursor (k = +1) coefficients should be set
222 to 0 and the main
223 (k = 0) coefficient should be set to its maximum value. */
224 uint32_t init : 1; /**< [ 12: 12] Initialize. Set to indicate that the TX coefficients should be set to meet the conditions
225 defined in 802.3-2008 sub-clause 72.6.10.4.2. */
226 uint32_t reserved_6_11 : 6;
227 uint32_t post_cup : 2; /**< [ 5: 4] Post-cursor (k = +1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
228 BGX_SPU_BR_TRAIN_CUP_E. */
229 uint32_t main_cup : 2; /**< [ 3: 2] Main (k = 0) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
230 BGX_SPU_BR_TRAIN_CUP_E. */
231 uint32_t pre_cup : 2; /**< [ 1: 0] Pre-cursor (k = -1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
232 BGX_SPU_BR_TRAIN_CUP_E. */
233 #else /* Word 0 - Little Endian */
234 uint32_t pre_cup : 2; /**< [ 1: 0] Pre-cursor (k = -1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
235 BGX_SPU_BR_TRAIN_CUP_E. */
236 uint32_t main_cup : 2; /**< [ 3: 2] Main (k = 0) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
237 BGX_SPU_BR_TRAIN_CUP_E. */
238 uint32_t post_cup : 2; /**< [ 5: 4] Post-cursor (k = +1) coefficient update. Valid when PRESET = INIT = 0. Enumerated by
239 BGX_SPU_BR_TRAIN_CUP_E. */
240 uint32_t reserved_6_11 : 6;
241 uint32_t init : 1; /**< [ 12: 12] Initialize. Set to indicate that the TX coefficients should be set to meet the conditions
242 defined in 802.3-2008 sub-clause 72.6.10.4.2. */
243 uint32_t preset : 1; /**< [ 13: 13] Preset. Set to indicate that all TX coefficients be set to a state where equalization is
244 turned off, i.e. the precursor (k = -1) and postcursor (k = +1) coefficients should be set
245 to 0 and the main
246 (k = 0) coefficient should be set to its maximum value. */
247 uint32_t reserved_14_15 : 2;
248 uint32_t reserved_16_31 : 16;
249 #endif /* Word 0 - End */
250 } cn;
251 };
252
253 /**
254 * Structure bgx_spu_br_train_rep_s
255 *
256 * BGX Training Report Structure
257 * This is the status report field of the BASE-R link training packet as defined in 802.3-2008,
258 * Table 72-5.
259 */
260 union bdk_bgx_spu_br_train_rep_s
261 {
262 uint32_t u;
263 struct bdk_bgx_spu_br_train_rep_s_s
264 {
265 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
266 uint32_t reserved_16_31 : 16;
267 uint32_t rx_ready : 1; /**< [ 15: 15] Receiver ready. Set to indicate that the local receiver has determined that training is
268 complete and is prepared to receive data. */
269 uint32_t reserved_6_14 : 9;
270 uint32_t post_cst : 2; /**< [ 5: 4] Post-cursor (k = +1) coefficient status. Valid when PRESET = INIT = 0. Enumerated by
271 BGX_SPU_BR_TRAIN_CST_E. */
272 uint32_t main_cst : 2; /**< [ 3: 2] Main (k = 0) coefficient status. Valid when PRESET = INIT = 0. Enumerated by
273 BGX_SPU_BR_TRAIN_CST_E. */
274 uint32_t pre_cst : 2; /**< [ 1: 0] Pre-cursor (k = -1) coefficient status. Valid when PRESET = INIT = 0. Enumerated by
275 BGX_SPU_BR_TRAIN_CST_E. */
276 #else /* Word 0 - Little Endian */
277 uint32_t pre_cst : 2; /**< [ 1: 0] Pre-cursor (k = -1) coefficient status. Valid when PRESET = INIT = 0. Enumerated by
278 BGX_SPU_BR_TRAIN_CST_E. */
279 uint32_t main_cst : 2; /**< [ 3: 2] Main (k = 0) coefficient status. Valid when PRESET = INIT = 0. Enumerated by
280 BGX_SPU_BR_TRAIN_CST_E. */
281 uint32_t post_cst : 2; /**< [ 5: 4] Post-cursor (k = +1) coefficient status. Valid when PRESET = INIT = 0. Enumerated by
282 BGX_SPU_BR_TRAIN_CST_E. */
283 uint32_t reserved_6_14 : 9;
284 uint32_t rx_ready : 1; /**< [ 15: 15] Receiver ready. Set to indicate that the local receiver has determined that training is
285 complete and is prepared to receive data. */
286 uint32_t reserved_16_31 : 16;
287 #endif /* Word 0 - End */
288 } s;
289 /* struct bdk_bgx_spu_br_train_rep_s_s cn; */
290 };
291
292 /**
293 * Structure bgx_spu_sds_cu_s
294 *
295 * INTERNAL: BGX Training Coeffiecient Structure
296 *
297 * This structure is similar to BGX_SPU_BR_TRAIN_CUP_S format, but with reserved fields removed
298 * and [RCVR_READY] field added.
299 */
300 union bdk_bgx_spu_sds_cu_s
301 {
302 uint32_t u;
303 struct bdk_bgx_spu_sds_cu_s_s
304 {
305 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
306 uint32_t reserved_9_31 : 23;
307 uint32_t rcvr_ready : 1; /**< [ 8: 8] See BGX_SPU_BR_TRAIN_REP_S[RX_READY]. */
308 uint32_t preset : 1; /**< [ 7: 7] See BGX_SPU_BR_TRAIN_CUP_S[PRESET]. */
309 uint32_t initialize : 1; /**< [ 6: 6] See BGX_SPU_BR_TRAIN_CUP_S[INIT]. */
310 uint32_t post_cu : 2; /**< [ 5: 4] See BGX_SPU_BR_TRAIN_CUP_S[POST_CUP]. */
311 uint32_t main_cu : 2; /**< [ 3: 2] See BGX_SPU_BR_TRAIN_CUP_S[MAIN_CUP]. */
312 uint32_t pre_cu : 2; /**< [ 1: 0] See BGX_SPU_BR_TRAIN_CUP_S[PRE_CUP]. */
313 #else /* Word 0 - Little Endian */
314 uint32_t pre_cu : 2; /**< [ 1: 0] See BGX_SPU_BR_TRAIN_CUP_S[PRE_CUP]. */
315 uint32_t main_cu : 2; /**< [ 3: 2] See BGX_SPU_BR_TRAIN_CUP_S[MAIN_CUP]. */
316 uint32_t post_cu : 2; /**< [ 5: 4] See BGX_SPU_BR_TRAIN_CUP_S[POST_CUP]. */
317 uint32_t initialize : 1; /**< [ 6: 6] See BGX_SPU_BR_TRAIN_CUP_S[INIT]. */
318 uint32_t preset : 1; /**< [ 7: 7] See BGX_SPU_BR_TRAIN_CUP_S[PRESET]. */
319 uint32_t rcvr_ready : 1; /**< [ 8: 8] See BGX_SPU_BR_TRAIN_REP_S[RX_READY]. */
320 uint32_t reserved_9_31 : 23;
321 #endif /* Word 0 - End */
322 } s;
323 /* struct bdk_bgx_spu_sds_cu_s_s cn; */
324 };
325
326 /**
327 * Structure bgx_spu_sds_skew_status_s
328 *
329 * BGX Skew Status Structure
330 * Provides receive skew information detected for a physical SerDes lane when it is assigned to a
331 * multilane LMAC/LPCS. Contents are valid when RX deskew is done for the associated LMAC/LPCS.
332 */
333 union bdk_bgx_spu_sds_skew_status_s
334 {
335 uint32_t u;
336 struct bdk_bgx_spu_sds_skew_status_s_s
337 {
338 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
339 uint32_t reserved_25_31 : 7;
340 uint32_t lane_skew : 5; /**< [ 24: 20] Lane skew. The SerDes lane's receive skew/delay in number of code-groups (BASE-X) or
341 blocks (40GBASE-R) relative to the earliest (least delayed) lane of the LMAC/LPCS. */
342 uint32_t reserved_18_19 : 2;
343 uint32_t am_lane_id : 2; /**< [ 17: 16] Alignment Marker ID. Valid for 40GBASE-R only. This is the PCS lane number of the
344 alignment marker received on the SerDes lane. */
345 uint32_t reserved_12_15 : 4;
346 uint32_t am_timestamp : 12; /**< [ 11: 0] Alignment marker PTP timestamp. Valid for 40GBASE-R only. Contains the lower 12 bits of
347 the PTP timestamp of the alignment marker received on the SerDes lane during align/skew
348 detection. */
349 #else /* Word 0 - Little Endian */
350 uint32_t am_timestamp : 12; /**< [ 11: 0] Alignment marker PTP timestamp. Valid for 40GBASE-R only. Contains the lower 12 bits of
351 the PTP timestamp of the alignment marker received on the SerDes lane during align/skew
352 detection. */
353 uint32_t reserved_12_15 : 4;
354 uint32_t am_lane_id : 2; /**< [ 17: 16] Alignment Marker ID. Valid for 40GBASE-R only. This is the PCS lane number of the
355 alignment marker received on the SerDes lane. */
356 uint32_t reserved_18_19 : 2;
357 uint32_t lane_skew : 5; /**< [ 24: 20] Lane skew. The SerDes lane's receive skew/delay in number of code-groups (BASE-X) or
358 blocks (40GBASE-R) relative to the earliest (least delayed) lane of the LMAC/LPCS. */
359 uint32_t reserved_25_31 : 7;
360 #endif /* Word 0 - End */
361 } s;
362 /* struct bdk_bgx_spu_sds_skew_status_s_s cn; */
363 };
364
365 /**
366 * Structure bgx_spu_sds_sr_s
367 *
368 * INTERNAL: BGX Lane Training Coefficient Structure
369 *
370 * Similar to BGX_SPU_BR_TRAIN_REP_S format, but with reserved and RX_READY fields removed.
371 */
372 union bdk_bgx_spu_sds_sr_s
373 {
374 uint32_t u;
375 struct bdk_bgx_spu_sds_sr_s_s
376 {
377 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
378 uint32_t reserved_6_31 : 26;
379 uint32_t post_status : 2; /**< [ 5: 4] See BGX_SPU_BR_TRAIN_REP_S[POST_CST]. */
380 uint32_t main_status : 2; /**< [ 3: 2] See BGX_SPU_BR_TRAIN_REP_S[MAIN_CST]. */
381 uint32_t pre_status : 2; /**< [ 1: 0] See BGX_SPU_BR_TRAIN_REP_S[PRE_CST]. */
382 #else /* Word 0 - Little Endian */
383 uint32_t pre_status : 2; /**< [ 1: 0] See BGX_SPU_BR_TRAIN_REP_S[PRE_CST]. */
384 uint32_t main_status : 2; /**< [ 3: 2] See BGX_SPU_BR_TRAIN_REP_S[MAIN_CST]. */
385 uint32_t post_status : 2; /**< [ 5: 4] See BGX_SPU_BR_TRAIN_REP_S[POST_CST]. */
386 uint32_t reserved_6_31 : 26;
387 #endif /* Word 0 - End */
388 } s;
389 /* struct bdk_bgx_spu_sds_sr_s_s cn; */
390 };
391
392 /**
393 * Register (RSL) bgx#_cmr#_config
394 *
395 * BGX CMR Configuration Registers
396 * Logical MAC/PCS configuration registers; one per LMAC. The maximum number of LMACs (and
397 * maximum LMAC ID) that can be enabled by these registers is limited by
398 * BGX()_CMR_RX_LMACS[LMACS] and BGX()_CMR_TX_LMACS[LMACS]. When multiple LMACs are
399 * enabled, they must be configured with the same [LMAC_TYPE] value.
400 *
401 * Internal:
402 * \<pre\>
403 * Typical configurations:
404 * ---------------------------------------------------------------------------
405 * Configuration LMACS Register [ENABLE] [LMAC_TYPE]
406 * ---------------------------------------------------------------------------
407 * 1x40GBASE-R4 1 BGXn_CMR0_CONFIG 1 4
408 * BGXn_CMR1_CONFIG 0 --
409 * BGXn_CMR2_CONFIG 0 --
410 * BGXn_CMR3_CONFIG 0 --
411 * ---------------------------------------------------------------------------
412 * 4x10GBASE-R 4 BGXn_CMR0_CONFIG 1 3
413 * BGXn_CMR1_CONFIG 1 3
414 * BGXn_CMR2_CONFIG 1 3
415 * BGXn_CMR3_CONFIG 1 3
416 * ---------------------------------------------------------------------------
417 * 2xRXAUI 2 BGXn_CMR0_CONFIG 1 2
418 * BGXn_CMR1_CONFIG 1 2
419 * BGXn_CMR2_CONFIG 0 --
420 * BGXn_CMR3_CONFIG 0 --
421 * ---------------------------------------------------------------------------
422 * 1x10GBASE-X/XAUI/DXAUI 1 BGXn_CMR0_CONFIG 1 1
423 * BGXn_CMR1_CONFIG 0 --
424 * BGXn_CMR2_CONFIG 0 --
425 * BGXn_CMR3_CONFIG 0 --
426 * ---------------------------------------------------------------------------
427 * 4xSGMII/1000BASE-X 4 BGXn_CMR0_CONFIG 1 0
428 * BGXn_CMR1_CONFIG 1 0
429 * BGXn_CMR2_CONFIG 1 0
430 * BGXn_CMR3_CONFIG 1 0
431 * ---------------------------------------------------------------------------
432 * \</pre\>
433 */
434 union bdk_bgxx_cmrx_config
435 {
436 uint64_t u;
437 struct bdk_bgxx_cmrx_config_s
438 {
439 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
440 uint64_t reserved_18_63 : 46;
441 uint64_t p2x_select : 1; /**< [ 17: 17](R/W) Selects interior side P2X interface over which the LMAC will communicate:
442 \<pre\>
443 [P2X_SELECT] Name Connected block
444 -------------------------------------------
445 0 P2X0 NIC
446 1 P2X1 PKO
447 \</pre\> */
448 uint64_t x2p_select : 1; /**< [ 16: 16](R/W) Selects interior side X2P interface over which the LMAC will communicate:
449 \<pre\>
450 [X2P_SELECT] Name Connected block
451 -------------------------------------------
452 0 X2P0 NIC
453 1 X2P1 PKI
454 \</pre\> */
455 uint64_t enable : 1; /**< [ 15: 15](R/W) Logical MAC/PCS enable. This is the master enable for the LMAC. When clear, all the
456 dedicated BGX context state for the LMAC (state machines, FIFOs, counters, etc.) is reset,
457 and LMAC access to shared BGX resources (data path, SerDes lanes) is disabled.
458
459 When set, LMAC operation is enabled, including link bring-up, synchronization, and
460 transmit/receive of idles and fault sequences. Note that configuration registers for an
461 LMAC are not reset when this bit is clear, allowing software to program them before
462 setting this bit to enable the LMAC. This bit together with [LMAC_TYPE] is also used to
463 enable the clocking to the GMP and/or blocks of the Super path (SMU and SPU). CMR clocking
464 is enabled when any of the paths are enabled. */
465 uint64_t data_pkt_rx_en : 1; /**< [ 14: 14](R/W) Data packet receive enable. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 1, the reception of
466 data
467 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 0, the MAC
468 layer
469 drops received data and flow-control packets. */
470 uint64_t data_pkt_tx_en : 1; /**< [ 13: 13](R/W) Data packet transmit enable. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 1, the transmission
471 of
472 data
473 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 0, the MAC
474 layer
475 suppresses the transmission of new data and packets for the LMAC. */
476 uint64_t int_beat_gen : 1; /**< [ 12: 12](R/W) Internal beat generation. This bit is used for debug/test purposes and should be clear
477 during normal operation. When set, the LMAC's PCS layer ignores RXVALID and
478 TXREADY/TXCREDIT from the associated SerDes lanes, internally generates fake (idle)
479 RXVALID and TXCREDIT pulses, and suppresses transmission to the SerDes. */
480 uint64_t mix_en : 1; /**< [ 11: 11](R/W) Must be 0. */
481 uint64_t lmac_type : 3; /**< [ 10: 8](R/W) Logical MAC/PCS/prt type:
482
483 \<pre\>
484 LMAC_TYPE Name Description NUM_PCS_LANES
485 ----------------------------------------------------------
486 0x0 SGMII SGMII/1000BASE-X 1
487 0x1 XAUI 10GBASE-X/XAUI or DXAUI 4
488 0x2 RXAUI Reduced XAUI 2
489 0x3 10G_R 10GBASE-R 1
490 0x4 40G_R 40GBASE-R 4
491 0x5 -- Reserved -
492 0x6 QSGMII QSGMII 1
493 Other -- Reserved -
494 \</pre\>
495
496 NUM_PCS_LANES specifies the number of PCS lanes that are valid for
497 each type. Each valid PCS lane is mapped to a physical SerDes lane
498 based on the programming of [LANE_TO_SDS].
499
500 This field must be programmed to its final value before [ENABLE] is set, and must not
501 be changed when [ENABLE] = 1. */
502 uint64_t lane_to_sds : 8; /**< [ 7: 0](R/W) PCS lane-to-SerDes mapping.
503 This is an array of 2-bit values that map each logical PCS lane to a
504 physical SerDes lane, as follows:
505
506 \<pre\>
507 Bits Description Reset value
508 ------------------------------------------
509 \<7:6\> PCS Lane 3 SerDes ID 0x3
510 \<5:4\> PCS Lane 2 SerDes ID 0x2
511 \<3:2\> PCS Lane 1 SerDes ID 0x1
512 \<1:0\> PCS Lane 0 SerDes ID 0x0
513 \</pre\>
514
515 PCS lanes 0 through NUM_PCS_LANES-1 are valid, where NUM_PCS_LANES is a function of the
516 logical MAC/PCS type (see [LMAC_TYPE]). For example, when [LMAC_TYPE] = SGMII,
517 then NUM_PCS_LANES = 1, PCS lane 0 is valid and the associated physical SerDes lanes
518 are selected by bits \<1:0\>.
519
520 For 40GBASE-R ([LMAC_TYPE] = 40G_R), all four PCS lanes are valid, and the PCS lane IDs
521 determine the block distribution order and associated alignment markers on the transmit
522 side. This is not necessarily the order in which PCS lanes receive data because 802.3
523 allows multilane BASE-R receive lanes to be reordered. When a lane (called service
524 interface in 802.3ba-2010) has achieved alignment marker lock on the receive side (i.e.
525 the associated BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), then the actual
526 detected RX PCS lane number is recorded in the corresponding
527 BGX()_SPU()_BR_LANE_MAP[LNx_MAPPING].
528
529 For QSGMII, [LANE_TO_SDS]\<1:0\> for LMAC 0 selects the physical SerDes lane shared by four
530 LMACs, and [LANE_TO_SDS]\<1:0\> must be unique for each of the four LMACs.
531
532 This field must be programmed to its final value before [ENABLE] is set, and
533 must not be changed when [ENABLE] = 1. */
534 #else /* Word 0 - Little Endian */
535 uint64_t lane_to_sds : 8; /**< [ 7: 0](R/W) PCS lane-to-SerDes mapping.
536 This is an array of 2-bit values that map each logical PCS lane to a
537 physical SerDes lane, as follows:
538
539 \<pre\>
540 Bits Description Reset value
541 ------------------------------------------
542 \<7:6\> PCS Lane 3 SerDes ID 0x3
543 \<5:4\> PCS Lane 2 SerDes ID 0x2
544 \<3:2\> PCS Lane 1 SerDes ID 0x1
545 \<1:0\> PCS Lane 0 SerDes ID 0x0
546 \</pre\>
547
548 PCS lanes 0 through NUM_PCS_LANES-1 are valid, where NUM_PCS_LANES is a function of the
549 logical MAC/PCS type (see [LMAC_TYPE]). For example, when [LMAC_TYPE] = SGMII,
550 then NUM_PCS_LANES = 1, PCS lane 0 is valid and the associated physical SerDes lanes
551 are selected by bits \<1:0\>.
552
553 For 40GBASE-R ([LMAC_TYPE] = 40G_R), all four PCS lanes are valid, and the PCS lane IDs
554 determine the block distribution order and associated alignment markers on the transmit
555 side. This is not necessarily the order in which PCS lanes receive data because 802.3
556 allows multilane BASE-R receive lanes to be reordered. When a lane (called service
557 interface in 802.3ba-2010) has achieved alignment marker lock on the receive side (i.e.
558 the associated BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), then the actual
559 detected RX PCS lane number is recorded in the corresponding
560 BGX()_SPU()_BR_LANE_MAP[LNx_MAPPING].
561
562 For QSGMII, [LANE_TO_SDS]\<1:0\> for LMAC 0 selects the physical SerDes lane shared by four
563 LMACs, and [LANE_TO_SDS]\<1:0\> must be unique for each of the four LMACs.
564
565 This field must be programmed to its final value before [ENABLE] is set, and
566 must not be changed when [ENABLE] = 1. */
567 uint64_t lmac_type : 3; /**< [ 10: 8](R/W) Logical MAC/PCS/prt type:
568
569 \<pre\>
570 LMAC_TYPE Name Description NUM_PCS_LANES
571 ----------------------------------------------------------
572 0x0 SGMII SGMII/1000BASE-X 1
573 0x1 XAUI 10GBASE-X/XAUI or DXAUI 4
574 0x2 RXAUI Reduced XAUI 2
575 0x3 10G_R 10GBASE-R 1
576 0x4 40G_R 40GBASE-R 4
577 0x5 -- Reserved -
578 0x6 QSGMII QSGMII 1
579 Other -- Reserved -
580 \</pre\>
581
582 NUM_PCS_LANES specifies the number of PCS lanes that are valid for
583 each type. Each valid PCS lane is mapped to a physical SerDes lane
584 based on the programming of [LANE_TO_SDS].
585
586 This field must be programmed to its final value before [ENABLE] is set, and must not
587 be changed when [ENABLE] = 1. */
588 uint64_t mix_en : 1; /**< [ 11: 11](R/W) Must be 0. */
589 uint64_t int_beat_gen : 1; /**< [ 12: 12](R/W) Internal beat generation. This bit is used for debug/test purposes and should be clear
590 during normal operation. When set, the LMAC's PCS layer ignores RXVALID and
591 TXREADY/TXCREDIT from the associated SerDes lanes, internally generates fake (idle)
592 RXVALID and TXCREDIT pulses, and suppresses transmission to the SerDes. */
593 uint64_t data_pkt_tx_en : 1; /**< [ 13: 13](R/W) Data packet transmit enable. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 1, the transmission
594 of
595 data
596 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 0, the MAC
597 layer
598 suppresses the transmission of new data and packets for the LMAC. */
599 uint64_t data_pkt_rx_en : 1; /**< [ 14: 14](R/W) Data packet receive enable. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 1, the reception of
600 data
601 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 0, the MAC
602 layer
603 drops received data and flow-control packets. */
604 uint64_t enable : 1; /**< [ 15: 15](R/W) Logical MAC/PCS enable. This is the master enable for the LMAC. When clear, all the
605 dedicated BGX context state for the LMAC (state machines, FIFOs, counters, etc.) is reset,
606 and LMAC access to shared BGX resources (data path, SerDes lanes) is disabled.
607
608 When set, LMAC operation is enabled, including link bring-up, synchronization, and
609 transmit/receive of idles and fault sequences. Note that configuration registers for an
610 LMAC are not reset when this bit is clear, allowing software to program them before
611 setting this bit to enable the LMAC. This bit together with [LMAC_TYPE] is also used to
612 enable the clocking to the GMP and/or blocks of the Super path (SMU and SPU). CMR clocking
613 is enabled when any of the paths are enabled. */
614 uint64_t x2p_select : 1; /**< [ 16: 16](R/W) Selects interior side X2P interface over which the LMAC will communicate:
615 \<pre\>
616 [X2P_SELECT] Name Connected block
617 -------------------------------------------
618 0 X2P0 NIC
619 1 X2P1 PKI
620 \</pre\> */
621 uint64_t p2x_select : 1; /**< [ 17: 17](R/W) Selects interior side P2X interface over which the LMAC will communicate:
622 \<pre\>
623 [P2X_SELECT] Name Connected block
624 -------------------------------------------
625 0 P2X0 NIC
626 1 P2X1 PKO
627 \</pre\> */
628 uint64_t reserved_18_63 : 46;
629 #endif /* Word 0 - End */
630 } s;
631 struct bdk_bgxx_cmrx_config_cn81xx
632 {
633 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
634 uint64_t reserved_18_63 : 46;
635 uint64_t p2x_select : 1; /**< [ 17: 17](R/W) Selects interior side P2X interface over which the LMAC will communicate:
636 \<pre\>
637 [P2X_SELECT] Name Connected block
638 -------------------------------------------
639 0 P2X0 NIC
640 1 P2X1 Reserved
641 \</pre\> */
642 uint64_t x2p_select : 1; /**< [ 16: 16](R/W) Selects interior side X2P interface over which the LMAC will communicate:
643 \<pre\>
644 [X2P_SELECT] Name Connected block
645 -------------------------------------------
646 0 X2P0 NIC
647 1 X2P1 Reserved
648 \</pre\> */
649 uint64_t enable : 1; /**< [ 15: 15](R/W) Logical MAC/PCS enable. This is the master enable for the LMAC. When clear, all the
650 dedicated BGX context state for the LMAC (state machines, FIFOs, counters, etc.) is reset,
651 and LMAC access to shared BGX resources (data path, SerDes lanes) is disabled.
652
653 When set, LMAC operation is enabled, including link bring-up, synchronization, and
654 transmit/receive of idles and fault sequences. Note that configuration registers for an
655 LMAC are not reset when this bit is clear, allowing software to program them before
656 setting this bit to enable the LMAC. This bit together with [LMAC_TYPE] is also used to
657 enable the clocking to the GMP and/or blocks of the Super path (SMU and SPU). CMR clocking
658 is enabled when any of the paths are enabled. */
659 uint64_t data_pkt_rx_en : 1; /**< [ 14: 14](R/W) Data packet receive enable. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 1, the reception of
660 data
661 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 0, the MAC
662 layer
663 drops received data and flow-control packets. */
664 uint64_t data_pkt_tx_en : 1; /**< [ 13: 13](R/W) Data packet transmit enable. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 1, the transmission
665 of
666 data
667 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 0, the MAC
668 layer
669 suppresses the transmission of new data and packets for the LMAC. */
670 uint64_t int_beat_gen : 1; /**< [ 12: 12](R/W) Internal beat generation. This bit is used for debug/test purposes and should be clear
671 during normal operation. When set, the LMAC's PCS layer ignores RXVALID and
672 TXREADY/TXCREDIT from the associated SerDes lanes, internally generates fake (idle)
673 RXVALID and TXCREDIT pulses, and suppresses transmission to the SerDes. */
674 uint64_t mix_en : 1; /**< [ 11: 11](R/W) Must be 0. */
675 uint64_t lmac_type : 3; /**< [ 10: 8](R/W) Logical MAC/PCS/prt type:
676
677 \<pre\>
678 LMAC_TYPE Name Description NUM_PCS_LANES
679 ----------------------------------------------------------
680 0x0 SGMII SGMII/1000BASE-X 1
681 0x1 XAUI 10GBASE-X/XAUI or DXAUI 4
682 0x2 RXAUI Reduced XAUI 2
683 0x3 10G_R 10GBASE-R 1
684 0x4 40G_R 40GBASE-R 4
685 0x5 -- Reserved -
686 0x6 QSGMII QSGMII 1
687 Other -- Reserved -
688 \</pre\>
689
690 NUM_PCS_LANES specifies the number of PCS lanes that are valid for
691 each type. Each valid PCS lane is mapped to a physical SerDes lane
692 based on the programming of [LANE_TO_SDS].
693
694 This field must be programmed to its final value before [ENABLE] is set, and must not
695 be changed when [ENABLE] = 1. */
696 uint64_t lane_to_sds : 8; /**< [ 7: 0](R/W) PCS lane-to-SerDes mapping.
697 This is an array of 2-bit values that map each logical PCS lane to a
698 physical SerDes lane, as follows:
699
700 \<pre\>
701 Bits Description Reset value
702 ------------------------------------------
703 \<7:6\> PCS Lane 3 SerDes ID 0x3
704 \<5:4\> PCS Lane 2 SerDes ID 0x2
705 \<3:2\> PCS Lane 1 SerDes ID 0x1
706 \<1:0\> PCS Lane 0 SerDes ID 0x0
707 \</pre\>
708
709 PCS lanes 0 through NUM_PCS_LANES-1 are valid, where NUM_PCS_LANES is a function of the
710 logical MAC/PCS type (see [LMAC_TYPE]). For example, when [LMAC_TYPE] = SGMII,
711 then NUM_PCS_LANES = 1, PCS lane 0 is valid and the associated physical SerDes lanes
712 are selected by bits \<1:0\>.
713
714 For 40GBASE-R ([LMAC_TYPE] = 40G_R), all four PCS lanes are valid, and the PCS lane IDs
715 determine the block distribution order and associated alignment markers on the transmit
716 side. This is not necessarily the order in which PCS lanes receive data because 802.3
717 allows multilane BASE-R receive lanes to be reordered. When a lane (called service
718 interface in 802.3ba-2010) has achieved alignment marker lock on the receive side (i.e.
719 the associated BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), then the actual
720 detected RX PCS lane number is recorded in the corresponding
721 BGX()_SPU()_BR_LANE_MAP[LNx_MAPPING].
722
723 For QSGMII, [LANE_TO_SDS]\<1:0\> for LMAC 0 selects the physical SerDes lane shared by four
724 LMACs, and [LANE_TO_SDS]\<1:0\> must be unique for each of the four LMACs.
725
726 This field must be programmed to its final value before [ENABLE] is set, and
727 must not be changed when [ENABLE] = 1. */
728 #else /* Word 0 - Little Endian */
729 uint64_t lane_to_sds : 8; /**< [ 7: 0](R/W) PCS lane-to-SerDes mapping.
730 This is an array of 2-bit values that map each logical PCS lane to a
731 physical SerDes lane, as follows:
732
733 \<pre\>
734 Bits Description Reset value
735 ------------------------------------------
736 \<7:6\> PCS Lane 3 SerDes ID 0x3
737 \<5:4\> PCS Lane 2 SerDes ID 0x2
738 \<3:2\> PCS Lane 1 SerDes ID 0x1
739 \<1:0\> PCS Lane 0 SerDes ID 0x0
740 \</pre\>
741
742 PCS lanes 0 through NUM_PCS_LANES-1 are valid, where NUM_PCS_LANES is a function of the
743 logical MAC/PCS type (see [LMAC_TYPE]). For example, when [LMAC_TYPE] = SGMII,
744 then NUM_PCS_LANES = 1, PCS lane 0 is valid and the associated physical SerDes lanes
745 are selected by bits \<1:0\>.
746
747 For 40GBASE-R ([LMAC_TYPE] = 40G_R), all four PCS lanes are valid, and the PCS lane IDs
748 determine the block distribution order and associated alignment markers on the transmit
749 side. This is not necessarily the order in which PCS lanes receive data because 802.3
750 allows multilane BASE-R receive lanes to be reordered. When a lane (called service
751 interface in 802.3ba-2010) has achieved alignment marker lock on the receive side (i.e.
752 the associated BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), then the actual
753 detected RX PCS lane number is recorded in the corresponding
754 BGX()_SPU()_BR_LANE_MAP[LNx_MAPPING].
755
756 For QSGMII, [LANE_TO_SDS]\<1:0\> for LMAC 0 selects the physical SerDes lane shared by four
757 LMACs, and [LANE_TO_SDS]\<1:0\> must be unique for each of the four LMACs.
758
759 This field must be programmed to its final value before [ENABLE] is set, and
760 must not be changed when [ENABLE] = 1. */
761 uint64_t lmac_type : 3; /**< [ 10: 8](R/W) Logical MAC/PCS/prt type:
762
763 \<pre\>
764 LMAC_TYPE Name Description NUM_PCS_LANES
765 ----------------------------------------------------------
766 0x0 SGMII SGMII/1000BASE-X 1
767 0x1 XAUI 10GBASE-X/XAUI or DXAUI 4
768 0x2 RXAUI Reduced XAUI 2
769 0x3 10G_R 10GBASE-R 1
770 0x4 40G_R 40GBASE-R 4
771 0x5 -- Reserved -
772 0x6 QSGMII QSGMII 1
773 Other -- Reserved -
774 \</pre\>
775
776 NUM_PCS_LANES specifies the number of PCS lanes that are valid for
777 each type. Each valid PCS lane is mapped to a physical SerDes lane
778 based on the programming of [LANE_TO_SDS].
779
780 This field must be programmed to its final value before [ENABLE] is set, and must not
781 be changed when [ENABLE] = 1. */
782 uint64_t mix_en : 1; /**< [ 11: 11](R/W) Must be 0. */
783 uint64_t int_beat_gen : 1; /**< [ 12: 12](R/W) Internal beat generation. This bit is used for debug/test purposes and should be clear
784 during normal operation. When set, the LMAC's PCS layer ignores RXVALID and
785 TXREADY/TXCREDIT from the associated SerDes lanes, internally generates fake (idle)
786 RXVALID and TXCREDIT pulses, and suppresses transmission to the SerDes. */
787 uint64_t data_pkt_tx_en : 1; /**< [ 13: 13](R/W) Data packet transmit enable. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 1, the transmission
788 of
789 data
790 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 0, the MAC
791 layer
792 suppresses the transmission of new data and packets for the LMAC. */
793 uint64_t data_pkt_rx_en : 1; /**< [ 14: 14](R/W) Data packet receive enable. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 1, the reception of
794 data
795 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 0, the MAC
796 layer
797 drops received data and flow-control packets. */
798 uint64_t enable : 1; /**< [ 15: 15](R/W) Logical MAC/PCS enable. This is the master enable for the LMAC. When clear, all the
799 dedicated BGX context state for the LMAC (state machines, FIFOs, counters, etc.) is reset,
800 and LMAC access to shared BGX resources (data path, SerDes lanes) is disabled.
801
802 When set, LMAC operation is enabled, including link bring-up, synchronization, and
803 transmit/receive of idles and fault sequences. Note that configuration registers for an
804 LMAC are not reset when this bit is clear, allowing software to program them before
805 setting this bit to enable the LMAC. This bit together with [LMAC_TYPE] is also used to
806 enable the clocking to the GMP and/or blocks of the Super path (SMU and SPU). CMR clocking
807 is enabled when any of the paths are enabled. */
808 uint64_t x2p_select : 1; /**< [ 16: 16](R/W) Selects interior side X2P interface over which the LMAC will communicate:
809 \<pre\>
810 [X2P_SELECT] Name Connected block
811 -------------------------------------------
812 0 X2P0 NIC
813 1 X2P1 Reserved
814 \</pre\> */
815 uint64_t p2x_select : 1; /**< [ 17: 17](R/W) Selects interior side P2X interface over which the LMAC will communicate:
816 \<pre\>
817 [P2X_SELECT] Name Connected block
818 -------------------------------------------
819 0 P2X0 NIC
820 1 P2X1 Reserved
821 \</pre\> */
822 uint64_t reserved_18_63 : 46;
823 #endif /* Word 0 - End */
824 } cn81xx;
825 struct bdk_bgxx_cmrx_config_cn88xx
826 {
827 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
828 uint64_t reserved_16_63 : 48;
829 uint64_t enable : 1; /**< [ 15: 15](R/W) Logical MAC/PCS enable. This is the master enable for the LMAC. When clear, all the
830 dedicated BGX context state for the LMAC (state machines, FIFOs, counters, etc.) is reset,
831 and LMAC access to shared BGX resources (SMU/SPU data path, SerDes lanes) is disabled.
832
833 When set, LMAC operation is enabled, including link bring-up, synchronization, and
834 transmit/receive of idles and fault sequences. Note that configuration registers for an
835 LMAC are not reset when this bit is clear, allowing software to program them before
836 setting this bit to enable the LMAC. This bit together with [LMAC_TYPE] is also used to
837 enable the clocking to the GMP and/or blocks of the Super path (SMU and SPU). CMR clocking
838 is enabled when any of the paths are enabled. */
839 uint64_t data_pkt_rx_en : 1; /**< [ 14: 14](R/W) Data packet receive enable. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 1, the reception of
840 data
841 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 0, the MAC
842 layer
843 drops received data and flow-control packets. */
844 uint64_t data_pkt_tx_en : 1; /**< [ 13: 13](R/W) Data packet transmit enable. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 1, the transmission
845 of
846 data
847 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 0, the MAC
848 layer
849 suppresses the transmission of new data and packets for the LMAC. */
850 uint64_t int_beat_gen : 1; /**< [ 12: 12](R/W) Internal beat generation. This bit is used for debug/test purposes and should be clear
851 during normal operation. When set, the LMAC's PCS layer ignores RXVALID and
852 TXREADY/TXCREDIT from the associated SerDes lanes, internally generates fake (idle)
853 RXVALID and TXCREDIT pulses, and suppresses transmission to the SerDes. */
854 uint64_t mix_en : 1; /**< [ 11: 11](R/W) Must be 0. */
855 uint64_t lmac_type : 3; /**< [ 10: 8](R/W) Logical MAC/PCS/prt type:
856
857 \<pre\>
858 LMAC_TYPE Name Description NUM_PCS_LANES
859 ----------------------------------------------------------
860 0x0 SGMII SGMII/1000BASE-X 1
861 0x1 XAUI 10GBASE-X/XAUI or DXAUI 4
862 0x2 RXAUI Reduced XAUI 2
863 0x3 10G_R 10GBASE-R 1
864 0x4 40G_R 40GBASE-R 4
865 Other -- Reserved -
866 \</pre\>
867
868 NUM_PCS_LANES specifies the number of PCS lanes that are valid for
869 each type. Each valid PCS lane is mapped to a physical SerDes lane
870 based on the programming of [LANE_TO_SDS].
871
872 This field must be programmed to its final value before [ENABLE] is set, and must not
873 be changed when [ENABLE] = 1. */
874 uint64_t lane_to_sds : 8; /**< [ 7: 0](R/W) PCS lane-to-SerDes mapping.
875 This is an array of 2-bit values that map each logical PCS lane to a
876 physical SerDes lane, as follows:
877
878 \<pre\>
879 Bits Description Reset value
880 ------------------------------------------
881 \<7:6\> PCS Lane 3 SerDes ID 0x3
882 \<5:4\> PCS Lane 2 SerDes ID 0x2
883 \<3:2\> PCS Lane 1 SerDes ID 0x1
884 \<1:0\> PCS Lane 0 SerDes ID 0x0
885 \</pre\>
886
887 PCS lanes 0 through NUM_PCS_LANES-1 are valid, where NUM_PCS_LANES is a function of the
888 logical MAC/PCS type (see [LMAC_TYPE]). For example, when [LMAC_TYPE] = SGMII,
889 then NUM_PCS_LANES = 1, PCS lane 0 is valid and the associated physical SerDes lanes
890 are selected by bits \<1:0\>.
891
892 For 40GBASE-R ([LMAC_TYPE] = 40G_R), all four PCS lanes are valid, and the PCS lane IDs
893 determine the block distribution order and associated alignment markers on the transmit
894 side. This is not necessarily the order in which PCS lanes receive data because 802.3
895 allows multilane BASE-R receive lanes to be reordered. When a lane (called service
896 interface in 802.3ba-2010) has achieved alignment marker lock on the receive side (i.e.
897 the associated BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), then the actual
898 detected RX PCS lane number is recorded in the corresponding
899 BGX()_SPU()_BR_LANE_MAP[LNx_MAPPING].
900
901 This field must be programmed to its final value before [ENABLE] is set, and must not
902 be changed when [ENABLE] = 1. */
903 #else /* Word 0 - Little Endian */
904 uint64_t lane_to_sds : 8; /**< [ 7: 0](R/W) PCS lane-to-SerDes mapping.
905 This is an array of 2-bit values that map each logical PCS lane to a
906 physical SerDes lane, as follows:
907
908 \<pre\>
909 Bits Description Reset value
910 ------------------------------------------
911 \<7:6\> PCS Lane 3 SerDes ID 0x3
912 \<5:4\> PCS Lane 2 SerDes ID 0x2
913 \<3:2\> PCS Lane 1 SerDes ID 0x1
914 \<1:0\> PCS Lane 0 SerDes ID 0x0
915 \</pre\>
916
917 PCS lanes 0 through NUM_PCS_LANES-1 are valid, where NUM_PCS_LANES is a function of the
918 logical MAC/PCS type (see [LMAC_TYPE]). For example, when [LMAC_TYPE] = SGMII,
919 then NUM_PCS_LANES = 1, PCS lane 0 is valid and the associated physical SerDes lanes
920 are selected by bits \<1:0\>.
921
922 For 40GBASE-R ([LMAC_TYPE] = 40G_R), all four PCS lanes are valid, and the PCS lane IDs
923 determine the block distribution order and associated alignment markers on the transmit
924 side. This is not necessarily the order in which PCS lanes receive data because 802.3
925 allows multilane BASE-R receive lanes to be reordered. When a lane (called service
926 interface in 802.3ba-2010) has achieved alignment marker lock on the receive side (i.e.
927 the associated BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), then the actual
928 detected RX PCS lane number is recorded in the corresponding
929 BGX()_SPU()_BR_LANE_MAP[LNx_MAPPING].
930
931 This field must be programmed to its final value before [ENABLE] is set, and must not
932 be changed when [ENABLE] = 1. */
933 uint64_t lmac_type : 3; /**< [ 10: 8](R/W) Logical MAC/PCS/prt type:
934
935 \<pre\>
936 LMAC_TYPE Name Description NUM_PCS_LANES
937 ----------------------------------------------------------
938 0x0 SGMII SGMII/1000BASE-X 1
939 0x1 XAUI 10GBASE-X/XAUI or DXAUI 4
940 0x2 RXAUI Reduced XAUI 2
941 0x3 10G_R 10GBASE-R 1
942 0x4 40G_R 40GBASE-R 4
943 Other -- Reserved -
944 \</pre\>
945
946 NUM_PCS_LANES specifies the number of PCS lanes that are valid for
947 each type. Each valid PCS lane is mapped to a physical SerDes lane
948 based on the programming of [LANE_TO_SDS].
949
950 This field must be programmed to its final value before [ENABLE] is set, and must not
951 be changed when [ENABLE] = 1. */
952 uint64_t mix_en : 1; /**< [ 11: 11](R/W) Must be 0. */
953 uint64_t int_beat_gen : 1; /**< [ 12: 12](R/W) Internal beat generation. This bit is used for debug/test purposes and should be clear
954 during normal operation. When set, the LMAC's PCS layer ignores RXVALID and
955 TXREADY/TXCREDIT from the associated SerDes lanes, internally generates fake (idle)
956 RXVALID and TXCREDIT pulses, and suppresses transmission to the SerDes. */
957 uint64_t data_pkt_tx_en : 1; /**< [ 13: 13](R/W) Data packet transmit enable. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 1, the transmission
958 of
959 data
960 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_TX_EN] = 0, the MAC
961 layer
962 suppresses the transmission of new data and packets for the LMAC. */
963 uint64_t data_pkt_rx_en : 1; /**< [ 14: 14](R/W) Data packet receive enable. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 1, the reception of
964 data
965 packets is enabled in the MAC layer. When [ENABLE] = 1 and [DATA_PKT_RX_EN] = 0, the MAC
966 layer
967 drops received data and flow-control packets. */
968 uint64_t enable : 1; /**< [ 15: 15](R/W) Logical MAC/PCS enable. This is the master enable for the LMAC. When clear, all the
969 dedicated BGX context state for the LMAC (state machines, FIFOs, counters, etc.) is reset,
970 and LMAC access to shared BGX resources (SMU/SPU data path, SerDes lanes) is disabled.
971
972 When set, LMAC operation is enabled, including link bring-up, synchronization, and
973 transmit/receive of idles and fault sequences. Note that configuration registers for an
974 LMAC are not reset when this bit is clear, allowing software to program them before
975 setting this bit to enable the LMAC. This bit together with [LMAC_TYPE] is also used to
976 enable the clocking to the GMP and/or blocks of the Super path (SMU and SPU). CMR clocking
977 is enabled when any of the paths are enabled. */
978 uint64_t reserved_16_63 : 48;
979 #endif /* Word 0 - End */
980 } cn88xx;
981 /* struct bdk_bgxx_cmrx_config_s cn83xx; */
982 };
983 typedef union bdk_bgxx_cmrx_config bdk_bgxx_cmrx_config_t;
984
985 static inline uint64_t BDK_BGXX_CMRX_CONFIG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_CONFIG(unsigned long a,unsigned long b)986 static inline uint64_t BDK_BGXX_CMRX_CONFIG(unsigned long a, unsigned long b)
987 {
988 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
989 return 0x87e0e0000000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
990 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
991 return 0x87e0e0000000ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
992 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
993 return 0x87e0e0000000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
994 __bdk_csr_fatal("BGXX_CMRX_CONFIG", 2, a, b, 0, 0);
995 }
996
997 #define typedef_BDK_BGXX_CMRX_CONFIG(a,b) bdk_bgxx_cmrx_config_t
998 #define bustype_BDK_BGXX_CMRX_CONFIG(a,b) BDK_CSR_TYPE_RSL
999 #define basename_BDK_BGXX_CMRX_CONFIG(a,b) "BGXX_CMRX_CONFIG"
1000 #define device_bar_BDK_BGXX_CMRX_CONFIG(a,b) 0x0 /* PF_BAR0 */
1001 #define busnum_BDK_BGXX_CMRX_CONFIG(a,b) (a)
1002 #define arguments_BDK_BGXX_CMRX_CONFIG(a,b) (a),(b),-1,-1
1003
1004 /**
1005 * Register (RSL) bgx#_cmr#_int
1006 *
1007 * BGX CMR Interrupt Register
1008 */
1009 union bdk_bgxx_cmrx_int
1010 {
1011 uint64_t u;
1012 struct bdk_bgxx_cmrx_int_s
1013 {
1014 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1015 uint64_t reserved_4_63 : 60;
1016 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) TX channel out-of-range from NIC interface.
1017 Reported on this LMAC for ids in the range of LMAC_ID+4, LMAC_ID+8 and LMAC_ID+12.
1018 Reported regardless of LMAC enable or P2X_SELECT association for this LMAC. */
1019 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reserved. */
1020 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1021 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1022 #else /* Word 0 - Little Endian */
1023 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1024 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1025 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reserved. */
1026 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) TX channel out-of-range from NIC interface.
1027 Reported on this LMAC for ids in the range of LMAC_ID+4, LMAC_ID+8 and LMAC_ID+12.
1028 Reported regardless of LMAC enable or P2X_SELECT association for this LMAC. */
1029 uint64_t reserved_4_63 : 60;
1030 #endif /* Word 0 - End */
1031 } s;
1032 struct bdk_bgxx_cmrx_int_cn81xx
1033 {
1034 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1035 uint64_t reserved_4_63 : 60;
1036 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) TX channel out-of-range from NIC interface. */
1037 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reserved. */
1038 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1039 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1040 #else /* Word 0 - Little Endian */
1041 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1042 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1043 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reserved. */
1044 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) TX channel out-of-range from NIC interface. */
1045 uint64_t reserved_4_63 : 60;
1046 #endif /* Word 0 - End */
1047 } cn81xx;
1048 struct bdk_bgxx_cmrx_int_cn88xx
1049 {
1050 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1051 uint64_t reserved_3_63 : 61;
1052 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) TX channel out-of-range from TNS/NIC interface. */
1053 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1054 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1055 #else /* Word 0 - Little Endian */
1056 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1057 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1058 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) TX channel out-of-range from TNS/NIC interface. */
1059 uint64_t reserved_3_63 : 61;
1060 #endif /* Word 0 - End */
1061 } cn88xx;
1062 struct bdk_bgxx_cmrx_int_cn83xx
1063 {
1064 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1065 uint64_t reserved_4_63 : 60;
1066 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) TX channel out-of-range from NIC interface.
1067 Reported on this LMAC for ids in the range of LMAC_ID+4, LMAC_ID+8 and LMAC_ID+12.
1068 Reported regardless of LMAC enable or P2X_SELECT association for this LMAC. */
1069 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) TX channel out-of-range from PKO interface.
1070 Reported on this LMAC for ids in the range of LMAC_ID+4, LMAC_ID+8 and LMAC_ID+12.
1071 Reported regardless of LMAC enable or P2X_SELECT association for this LMAC. */
1072 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1073 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1074 #else /* Word 0 - Little Endian */
1075 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) RX PAUSE packet was dropped due to full RXB FIFO or during partner reset. */
1076 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) RX overflow. */
1077 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) TX channel out-of-range from PKO interface.
1078 Reported on this LMAC for ids in the range of LMAC_ID+4, LMAC_ID+8 and LMAC_ID+12.
1079 Reported regardless of LMAC enable or P2X_SELECT association for this LMAC. */
1080 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) TX channel out-of-range from NIC interface.
1081 Reported on this LMAC for ids in the range of LMAC_ID+4, LMAC_ID+8 and LMAC_ID+12.
1082 Reported regardless of LMAC enable or P2X_SELECT association for this LMAC. */
1083 uint64_t reserved_4_63 : 60;
1084 #endif /* Word 0 - End */
1085 } cn83xx;
1086 };
1087 typedef union bdk_bgxx_cmrx_int bdk_bgxx_cmrx_int_t;
1088
1089 static inline uint64_t BDK_BGXX_CMRX_INT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_INT(unsigned long a,unsigned long b)1090 static inline uint64_t BDK_BGXX_CMRX_INT(unsigned long a, unsigned long b)
1091 {
1092 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1093 return 0x87e0e0000040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1094 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1095 return 0x87e0e0000040ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1096 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1097 return 0x87e0e0000040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1098 __bdk_csr_fatal("BGXX_CMRX_INT", 2, a, b, 0, 0);
1099 }
1100
1101 #define typedef_BDK_BGXX_CMRX_INT(a,b) bdk_bgxx_cmrx_int_t
1102 #define bustype_BDK_BGXX_CMRX_INT(a,b) BDK_CSR_TYPE_RSL
1103 #define basename_BDK_BGXX_CMRX_INT(a,b) "BGXX_CMRX_INT"
1104 #define device_bar_BDK_BGXX_CMRX_INT(a,b) 0x0 /* PF_BAR0 */
1105 #define busnum_BDK_BGXX_CMRX_INT(a,b) (a)
1106 #define arguments_BDK_BGXX_CMRX_INT(a,b) (a),(b),-1,-1
1107
1108 /**
1109 * Register (RSL) bgx#_cmr#_int_ena_w1c
1110 *
1111 * BGX CMR Interrupt Enable Clear Register
1112 * This register clears interrupt enable bits.
1113 */
1114 union bdk_bgxx_cmrx_int_ena_w1c
1115 {
1116 uint64_t u;
1117 struct bdk_bgxx_cmrx_int_ena_w1c_s
1118 {
1119 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1120 uint64_t reserved_4_63 : 60;
1121 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1122 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1123 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1124 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1125 #else /* Word 0 - Little Endian */
1126 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1127 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1128 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1129 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1130 uint64_t reserved_4_63 : 60;
1131 #endif /* Word 0 - End */
1132 } s;
1133 struct bdk_bgxx_cmrx_int_ena_w1c_cn81xx
1134 {
1135 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1136 uint64_t reserved_4_63 : 60;
1137 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[NIC_NXC]. */
1138 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1139 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1140 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1141 #else /* Word 0 - Little Endian */
1142 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1143 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1144 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1145 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[NIC_NXC]. */
1146 uint64_t reserved_4_63 : 60;
1147 #endif /* Word 0 - End */
1148 } cn81xx;
1149 struct bdk_bgxx_cmrx_int_ena_w1c_cn88xx
1150 {
1151 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1152 uint64_t reserved_3_63 : 61;
1153 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1154 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1155 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1156 #else /* Word 0 - Little Endian */
1157 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1158 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1159 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1160 uint64_t reserved_3_63 : 61;
1161 #endif /* Word 0 - End */
1162 } cn88xx;
1163 struct bdk_bgxx_cmrx_int_ena_w1c_cn83xx
1164 {
1165 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1166 uint64_t reserved_4_63 : 60;
1167 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1168 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[PKO_NXC]. */
1169 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[OVERFLW]. */
1170 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[PAUSE_DRP]. */
1171 #else /* Word 0 - Little Endian */
1172 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[PAUSE_DRP]. */
1173 uint64_t overflw : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[OVERFLW]. */
1174 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[PKO_NXC]. */
1175 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1176 uint64_t reserved_4_63 : 60;
1177 #endif /* Word 0 - End */
1178 } cn83xx;
1179 };
1180 typedef union bdk_bgxx_cmrx_int_ena_w1c bdk_bgxx_cmrx_int_ena_w1c_t;
1181
1182 static inline uint64_t BDK_BGXX_CMRX_INT_ENA_W1C(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_INT_ENA_W1C(unsigned long a,unsigned long b)1183 static inline uint64_t BDK_BGXX_CMRX_INT_ENA_W1C(unsigned long a, unsigned long b)
1184 {
1185 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1186 return 0x87e0e0000050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1187 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1188 return 0x87e0e0000050ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1189 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1190 return 0x87e0e0000050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1191 __bdk_csr_fatal("BGXX_CMRX_INT_ENA_W1C", 2, a, b, 0, 0);
1192 }
1193
1194 #define typedef_BDK_BGXX_CMRX_INT_ENA_W1C(a,b) bdk_bgxx_cmrx_int_ena_w1c_t
1195 #define bustype_BDK_BGXX_CMRX_INT_ENA_W1C(a,b) BDK_CSR_TYPE_RSL
1196 #define basename_BDK_BGXX_CMRX_INT_ENA_W1C(a,b) "BGXX_CMRX_INT_ENA_W1C"
1197 #define device_bar_BDK_BGXX_CMRX_INT_ENA_W1C(a,b) 0x0 /* PF_BAR0 */
1198 #define busnum_BDK_BGXX_CMRX_INT_ENA_W1C(a,b) (a)
1199 #define arguments_BDK_BGXX_CMRX_INT_ENA_W1C(a,b) (a),(b),-1,-1
1200
1201 /**
1202 * Register (RSL) bgx#_cmr#_int_ena_w1s
1203 *
1204 * BGX CMR Interrupt Enable Set Register
1205 * This register sets interrupt enable bits.
1206 */
1207 union bdk_bgxx_cmrx_int_ena_w1s
1208 {
1209 uint64_t u;
1210 struct bdk_bgxx_cmrx_int_ena_w1s_s
1211 {
1212 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1213 uint64_t reserved_4_63 : 60;
1214 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1215 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1216 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1217 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1218 #else /* Word 0 - Little Endian */
1219 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1220 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1221 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1222 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1223 uint64_t reserved_4_63 : 60;
1224 #endif /* Word 0 - End */
1225 } s;
1226 struct bdk_bgxx_cmrx_int_ena_w1s_cn81xx
1227 {
1228 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1229 uint64_t reserved_4_63 : 60;
1230 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[NIC_NXC]. */
1231 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1232 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1233 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1234 #else /* Word 0 - Little Endian */
1235 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1236 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1237 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1238 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[NIC_NXC]. */
1239 uint64_t reserved_4_63 : 60;
1240 #endif /* Word 0 - End */
1241 } cn81xx;
1242 struct bdk_bgxx_cmrx_int_ena_w1s_cn88xx
1243 {
1244 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1245 uint64_t reserved_3_63 : 61;
1246 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1247 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1248 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1249 #else /* Word 0 - Little Endian */
1250 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1251 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1252 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1253 uint64_t reserved_3_63 : 61;
1254 #endif /* Word 0 - End */
1255 } cn88xx;
1256 struct bdk_bgxx_cmrx_int_ena_w1s_cn83xx
1257 {
1258 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1259 uint64_t reserved_4_63 : 60;
1260 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1261 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[PKO_NXC]. */
1262 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[OVERFLW]. */
1263 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[PAUSE_DRP]. */
1264 #else /* Word 0 - Little Endian */
1265 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[PAUSE_DRP]. */
1266 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[OVERFLW]. */
1267 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[PKO_NXC]. */
1268 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1269 uint64_t reserved_4_63 : 60;
1270 #endif /* Word 0 - End */
1271 } cn83xx;
1272 };
1273 typedef union bdk_bgxx_cmrx_int_ena_w1s bdk_bgxx_cmrx_int_ena_w1s_t;
1274
1275 static inline uint64_t BDK_BGXX_CMRX_INT_ENA_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_INT_ENA_W1S(unsigned long a,unsigned long b)1276 static inline uint64_t BDK_BGXX_CMRX_INT_ENA_W1S(unsigned long a, unsigned long b)
1277 {
1278 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1279 return 0x87e0e0000058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1280 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1281 return 0x87e0e0000058ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1282 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1283 return 0x87e0e0000058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1284 __bdk_csr_fatal("BGXX_CMRX_INT_ENA_W1S", 2, a, b, 0, 0);
1285 }
1286
1287 #define typedef_BDK_BGXX_CMRX_INT_ENA_W1S(a,b) bdk_bgxx_cmrx_int_ena_w1s_t
1288 #define bustype_BDK_BGXX_CMRX_INT_ENA_W1S(a,b) BDK_CSR_TYPE_RSL
1289 #define basename_BDK_BGXX_CMRX_INT_ENA_W1S(a,b) "BGXX_CMRX_INT_ENA_W1S"
1290 #define device_bar_BDK_BGXX_CMRX_INT_ENA_W1S(a,b) 0x0 /* PF_BAR0 */
1291 #define busnum_BDK_BGXX_CMRX_INT_ENA_W1S(a,b) (a)
1292 #define arguments_BDK_BGXX_CMRX_INT_ENA_W1S(a,b) (a),(b),-1,-1
1293
1294 /**
1295 * Register (RSL) bgx#_cmr#_int_w1s
1296 *
1297 * BGX CMR Interrupt Set Register
1298 * This register sets interrupt bits.
1299 */
1300 union bdk_bgxx_cmrx_int_w1s
1301 {
1302 uint64_t u;
1303 struct bdk_bgxx_cmrx_int_w1s_s
1304 {
1305 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1306 uint64_t reserved_4_63 : 60;
1307 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1308 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1309 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1310 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1311 #else /* Word 0 - Little Endian */
1312 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1313 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1314 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1315 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1316 uint64_t reserved_4_63 : 60;
1317 #endif /* Word 0 - End */
1318 } s;
1319 struct bdk_bgxx_cmrx_int_w1s_cn81xx
1320 {
1321 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1322 uint64_t reserved_4_63 : 60;
1323 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[NIC_NXC]. */
1324 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1325 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1326 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1327 #else /* Word 0 - Little Endian */
1328 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1329 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1330 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1331 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[NIC_NXC]. */
1332 uint64_t reserved_4_63 : 60;
1333 #endif /* Word 0 - End */
1334 } cn81xx;
1335 struct bdk_bgxx_cmrx_int_w1s_cn88xx
1336 {
1337 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1338 uint64_t reserved_3_63 : 61;
1339 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1340 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1341 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1342 #else /* Word 0 - Little Endian */
1343 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PAUSE_DRP]. */
1344 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[OVERFLW]. */
1345 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR(0..3)_INT[PKO_NXC]. */
1346 uint64_t reserved_3_63 : 61;
1347 #endif /* Word 0 - End */
1348 } cn88xx;
1349 struct bdk_bgxx_cmrx_int_w1s_cn83xx
1350 {
1351 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1352 uint64_t reserved_4_63 : 60;
1353 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1354 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[PKO_NXC]. */
1355 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[OVERFLW]. */
1356 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[PAUSE_DRP]. */
1357 #else /* Word 0 - Little Endian */
1358 uint64_t pause_drp : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[PAUSE_DRP]. */
1359 uint64_t overflw : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[OVERFLW]. */
1360 uint64_t pko_nxc : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[PKO_NXC]. */
1361 uint64_t nic_nxc : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_CMR(0..3)_INT[NIC_NXC]. */
1362 uint64_t reserved_4_63 : 60;
1363 #endif /* Word 0 - End */
1364 } cn83xx;
1365 };
1366 typedef union bdk_bgxx_cmrx_int_w1s bdk_bgxx_cmrx_int_w1s_t;
1367
1368 static inline uint64_t BDK_BGXX_CMRX_INT_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_INT_W1S(unsigned long a,unsigned long b)1369 static inline uint64_t BDK_BGXX_CMRX_INT_W1S(unsigned long a, unsigned long b)
1370 {
1371 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1372 return 0x87e0e0000048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1373 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1374 return 0x87e0e0000048ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1375 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1376 return 0x87e0e0000048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1377 __bdk_csr_fatal("BGXX_CMRX_INT_W1S", 2, a, b, 0, 0);
1378 }
1379
1380 #define typedef_BDK_BGXX_CMRX_INT_W1S(a,b) bdk_bgxx_cmrx_int_w1s_t
1381 #define bustype_BDK_BGXX_CMRX_INT_W1S(a,b) BDK_CSR_TYPE_RSL
1382 #define basename_BDK_BGXX_CMRX_INT_W1S(a,b) "BGXX_CMRX_INT_W1S"
1383 #define device_bar_BDK_BGXX_CMRX_INT_W1S(a,b) 0x0 /* PF_BAR0 */
1384 #define busnum_BDK_BGXX_CMRX_INT_W1S(a,b) (a)
1385 #define arguments_BDK_BGXX_CMRX_INT_W1S(a,b) (a),(b),-1,-1
1386
1387 /**
1388 * Register (RSL) bgx#_cmr#_prt_cbfc_ctl
1389 *
1390 * BGX CMR LMAC PFC Control Registers
1391 * See XOFF definition listed under BGX()_SMU()_CBFC_CTL.
1392 */
1393 union bdk_bgxx_cmrx_prt_cbfc_ctl
1394 {
1395 uint64_t u;
1396 struct bdk_bgxx_cmrx_prt_cbfc_ctl_s
1397 {
1398 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1399 uint64_t reserved_32_63 : 32;
1400 uint64_t phys_bp : 16; /**< [ 31: 16](R/W) When the hardware is backpressuring any LMACs. (from either DRF or PFC packets or
1401 BGX()_CMR()_TX_OVR_BP[TX_CHAN_BP]) and all channels indicated by [PHYS_BP] are
1402 backpressured,
1403 simulate physical backpressure by deferring all packets on the transmitter.
1404 If LMAC_TYPE != SGMII/QSGMII, BGX()_SMU()_CBFC_CTL[RX_EN] or
1405 BGX()_SMU()_HG2_CONTROL[HG2RX_EN]
1406 additionally need to be set. */
1407 uint64_t reserved_0_15 : 16;
1408 #else /* Word 0 - Little Endian */
1409 uint64_t reserved_0_15 : 16;
1410 uint64_t phys_bp : 16; /**< [ 31: 16](R/W) When the hardware is backpressuring any LMACs. (from either DRF or PFC packets or
1411 BGX()_CMR()_TX_OVR_BP[TX_CHAN_BP]) and all channels indicated by [PHYS_BP] are
1412 backpressured,
1413 simulate physical backpressure by deferring all packets on the transmitter.
1414 If LMAC_TYPE != SGMII/QSGMII, BGX()_SMU()_CBFC_CTL[RX_EN] or
1415 BGX()_SMU()_HG2_CONTROL[HG2RX_EN]
1416 additionally need to be set. */
1417 uint64_t reserved_32_63 : 32;
1418 #endif /* Word 0 - End */
1419 } s;
1420 /* struct bdk_bgxx_cmrx_prt_cbfc_ctl_s cn81xx; */
1421 struct bdk_bgxx_cmrx_prt_cbfc_ctl_cn88xx
1422 {
1423 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1424 uint64_t reserved_32_63 : 32;
1425 uint64_t phys_bp : 16; /**< [ 31: 16](R/W) If LMAC_TYPE != SGMII, and BGX()_SMU()_CBFC_CTL[RX_EN] or
1426 BGX()_SMU()_HG2_CONTROL[HG2RX_EN] is set and the hardware is backpressuring any LMACs.
1427 (from either PFC packets or BGX()_CMR()_TX_OVR_BP[TX_CHAN_BP]) and all
1428 channels indicated by [PHYS_BP] are backpressured, simulate physical backpressure
1429 by deferring all packets on the transmitter. */
1430 uint64_t reserved_0_15 : 16;
1431 #else /* Word 0 - Little Endian */
1432 uint64_t reserved_0_15 : 16;
1433 uint64_t phys_bp : 16; /**< [ 31: 16](R/W) If LMAC_TYPE != SGMII, and BGX()_SMU()_CBFC_CTL[RX_EN] or
1434 BGX()_SMU()_HG2_CONTROL[HG2RX_EN] is set and the hardware is backpressuring any LMACs.
1435 (from either PFC packets or BGX()_CMR()_TX_OVR_BP[TX_CHAN_BP]) and all
1436 channels indicated by [PHYS_BP] are backpressured, simulate physical backpressure
1437 by deferring all packets on the transmitter. */
1438 uint64_t reserved_32_63 : 32;
1439 #endif /* Word 0 - End */
1440 } cn88xx;
1441 struct bdk_bgxx_cmrx_prt_cbfc_ctl_cn83xx
1442 {
1443 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1444 uint64_t reserved_32_63 : 32;
1445 uint64_t phys_bp : 16; /**< [ 31: 16](R/W) When the hardware is backpressuring any LMACs. (from either DFC or PFC packets or
1446 BGX()_CMR()_TX_OVR_BP[TX_CHAN_BP]) and all channels indicated by [PHYS_BP] are
1447 backpressured,
1448 simulate physical backpressure by deferring all packets on the transmitter.
1449 (i.e. signal to the mac an assertion of physical backpressure).
1450 If LMAC_TYPE != SGMII/QSGMII, BGX()_SMU()_CBFC_CTL[RX_EN] or
1451 BGX()_SMU()_HG2_CONTROL[HG2RX_EN]
1452 additionally need to be set. */
1453 uint64_t reserved_0_15 : 16;
1454 #else /* Word 0 - Little Endian */
1455 uint64_t reserved_0_15 : 16;
1456 uint64_t phys_bp : 16; /**< [ 31: 16](R/W) When the hardware is backpressuring any LMACs. (from either DFC or PFC packets or
1457 BGX()_CMR()_TX_OVR_BP[TX_CHAN_BP]) and all channels indicated by [PHYS_BP] are
1458 backpressured,
1459 simulate physical backpressure by deferring all packets on the transmitter.
1460 (i.e. signal to the mac an assertion of physical backpressure).
1461 If LMAC_TYPE != SGMII/QSGMII, BGX()_SMU()_CBFC_CTL[RX_EN] or
1462 BGX()_SMU()_HG2_CONTROL[HG2RX_EN]
1463 additionally need to be set. */
1464 uint64_t reserved_32_63 : 32;
1465 #endif /* Word 0 - End */
1466 } cn83xx;
1467 };
1468 typedef union bdk_bgxx_cmrx_prt_cbfc_ctl bdk_bgxx_cmrx_prt_cbfc_ctl_t;
1469
1470 static inline uint64_t BDK_BGXX_CMRX_PRT_CBFC_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_PRT_CBFC_CTL(unsigned long a,unsigned long b)1471 static inline uint64_t BDK_BGXX_CMRX_PRT_CBFC_CTL(unsigned long a, unsigned long b)
1472 {
1473 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1474 return 0x87e0e0000508ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1475 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1476 return 0x87e0e0000508ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1477 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1478 return 0x87e0e0000508ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1479 __bdk_csr_fatal("BGXX_CMRX_PRT_CBFC_CTL", 2, a, b, 0, 0);
1480 }
1481
1482 #define typedef_BDK_BGXX_CMRX_PRT_CBFC_CTL(a,b) bdk_bgxx_cmrx_prt_cbfc_ctl_t
1483 #define bustype_BDK_BGXX_CMRX_PRT_CBFC_CTL(a,b) BDK_CSR_TYPE_RSL
1484 #define basename_BDK_BGXX_CMRX_PRT_CBFC_CTL(a,b) "BGXX_CMRX_PRT_CBFC_CTL"
1485 #define device_bar_BDK_BGXX_CMRX_PRT_CBFC_CTL(a,b) 0x0 /* PF_BAR0 */
1486 #define busnum_BDK_BGXX_CMRX_PRT_CBFC_CTL(a,b) (a)
1487 #define arguments_BDK_BGXX_CMRX_PRT_CBFC_CTL(a,b) (a),(b),-1,-1
1488
1489 /**
1490 * Register (RSL) bgx#_cmr#_rx_bp_drop
1491 *
1492 * BGX Receive Backpressure Drop Register
1493 */
1494 union bdk_bgxx_cmrx_rx_bp_drop
1495 {
1496 uint64_t u;
1497 struct bdk_bgxx_cmrx_rx_bp_drop_s
1498 {
1499 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1500 uint64_t reserved_7_63 : 57;
1501 uint64_t mark : 7; /**< [ 6: 0](R/W) Number of eight-byte cycles to reserve in the RX FIFO. When the number of free
1502 entries in the RX FIFO is less than or equal to [MARK], incoming packet data is
1503 dropped. [MARK] additionally indicates the number of entries to reserve in the RX FIFO for
1504 closing partially received packets. [MARK] should typically be programmed to its reset
1505 value; failure to program correctly can lead to system instability. */
1506 #else /* Word 0 - Little Endian */
1507 uint64_t mark : 7; /**< [ 6: 0](R/W) Number of eight-byte cycles to reserve in the RX FIFO. When the number of free
1508 entries in the RX FIFO is less than or equal to [MARK], incoming packet data is
1509 dropped. [MARK] additionally indicates the number of entries to reserve in the RX FIFO for
1510 closing partially received packets. [MARK] should typically be programmed to its reset
1511 value; failure to program correctly can lead to system instability. */
1512 uint64_t reserved_7_63 : 57;
1513 #endif /* Word 0 - End */
1514 } s;
1515 /* struct bdk_bgxx_cmrx_rx_bp_drop_s cn; */
1516 };
1517 typedef union bdk_bgxx_cmrx_rx_bp_drop bdk_bgxx_cmrx_rx_bp_drop_t;
1518
1519 static inline uint64_t BDK_BGXX_CMRX_RX_BP_DROP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_BP_DROP(unsigned long a,unsigned long b)1520 static inline uint64_t BDK_BGXX_CMRX_RX_BP_DROP(unsigned long a, unsigned long b)
1521 {
1522 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1523 return 0x87e0e00000c8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1524 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1525 return 0x87e0e00000c8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1526 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1527 return 0x87e0e00000c8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1528 __bdk_csr_fatal("BGXX_CMRX_RX_BP_DROP", 2, a, b, 0, 0);
1529 }
1530
1531 #define typedef_BDK_BGXX_CMRX_RX_BP_DROP(a,b) bdk_bgxx_cmrx_rx_bp_drop_t
1532 #define bustype_BDK_BGXX_CMRX_RX_BP_DROP(a,b) BDK_CSR_TYPE_RSL
1533 #define basename_BDK_BGXX_CMRX_RX_BP_DROP(a,b) "BGXX_CMRX_RX_BP_DROP"
1534 #define device_bar_BDK_BGXX_CMRX_RX_BP_DROP(a,b) 0x0 /* PF_BAR0 */
1535 #define busnum_BDK_BGXX_CMRX_RX_BP_DROP(a,b) (a)
1536 #define arguments_BDK_BGXX_CMRX_RX_BP_DROP(a,b) (a),(b),-1,-1
1537
1538 /**
1539 * Register (RSL) bgx#_cmr#_rx_bp_off
1540 *
1541 * BGX Receive Backpressure Off Register
1542 */
1543 union bdk_bgxx_cmrx_rx_bp_off
1544 {
1545 uint64_t u;
1546 struct bdk_bgxx_cmrx_rx_bp_off_s
1547 {
1548 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1549 uint64_t reserved_7_63 : 57;
1550 uint64_t mark : 7; /**< [ 6: 0](R/W) Low watermark (number of eight-byte cycles to deassert backpressure). Level is also used
1551 to exit the overflow dropping state. */
1552 #else /* Word 0 - Little Endian */
1553 uint64_t mark : 7; /**< [ 6: 0](R/W) Low watermark (number of eight-byte cycles to deassert backpressure). Level is also used
1554 to exit the overflow dropping state. */
1555 uint64_t reserved_7_63 : 57;
1556 #endif /* Word 0 - End */
1557 } s;
1558 /* struct bdk_bgxx_cmrx_rx_bp_off_s cn; */
1559 };
1560 typedef union bdk_bgxx_cmrx_rx_bp_off bdk_bgxx_cmrx_rx_bp_off_t;
1561
1562 static inline uint64_t BDK_BGXX_CMRX_RX_BP_OFF(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_BP_OFF(unsigned long a,unsigned long b)1563 static inline uint64_t BDK_BGXX_CMRX_RX_BP_OFF(unsigned long a, unsigned long b)
1564 {
1565 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1566 return 0x87e0e00000d8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1567 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1568 return 0x87e0e00000d8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1569 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1570 return 0x87e0e00000d8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1571 __bdk_csr_fatal("BGXX_CMRX_RX_BP_OFF", 2, a, b, 0, 0);
1572 }
1573
1574 #define typedef_BDK_BGXX_CMRX_RX_BP_OFF(a,b) bdk_bgxx_cmrx_rx_bp_off_t
1575 #define bustype_BDK_BGXX_CMRX_RX_BP_OFF(a,b) BDK_CSR_TYPE_RSL
1576 #define basename_BDK_BGXX_CMRX_RX_BP_OFF(a,b) "BGXX_CMRX_RX_BP_OFF"
1577 #define device_bar_BDK_BGXX_CMRX_RX_BP_OFF(a,b) 0x0 /* PF_BAR0 */
1578 #define busnum_BDK_BGXX_CMRX_RX_BP_OFF(a,b) (a)
1579 #define arguments_BDK_BGXX_CMRX_RX_BP_OFF(a,b) (a),(b),-1,-1
1580
1581 /**
1582 * Register (RSL) bgx#_cmr#_rx_bp_on
1583 *
1584 * BGX Receive Backpressure On Register
1585 */
1586 union bdk_bgxx_cmrx_rx_bp_on
1587 {
1588 uint64_t u;
1589 struct bdk_bgxx_cmrx_rx_bp_on_s
1590 {
1591 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1592 uint64_t reserved_12_63 : 52;
1593 uint64_t mark : 12; /**< [ 11: 0](R/W) High watermark. Buffer depth in multiple of 16-bytes, at which BGX will
1594 assert backpressure for each individual LMAC. Must satisfy:
1595
1596 BGX()_CMR()_RX_BP_OFF[MARK] \<= BGX()_CMR()_RX_BP_ON[MARK] \<
1597 (FIFO_SIZE - BGX()_CMR()_RX_BP_DROP[MARK]).
1598
1599 A value of 0x0 immediately asserts backpressure.
1600
1601 The recommended value is 1/4th the size of the per-LMAC RX FIFO_SIZE as
1602 determined by BGX()_CMR_RX_LMACS[LMACS]. For example in SGMII mode with
1603 four LMACs of type SGMII, where BGX()_CMR_RX_LMACS[LMACS]=0x4, there is
1604 16 KB of buffering. The recommended 1/4th size of that 16 KB is 4 KB, which
1605 in units of 16 bytes gives [MARK] = 0x100 (the reset value). */
1606 #else /* Word 0 - Little Endian */
1607 uint64_t mark : 12; /**< [ 11: 0](R/W) High watermark. Buffer depth in multiple of 16-bytes, at which BGX will
1608 assert backpressure for each individual LMAC. Must satisfy:
1609
1610 BGX()_CMR()_RX_BP_OFF[MARK] \<= BGX()_CMR()_RX_BP_ON[MARK] \<
1611 (FIFO_SIZE - BGX()_CMR()_RX_BP_DROP[MARK]).
1612
1613 A value of 0x0 immediately asserts backpressure.
1614
1615 The recommended value is 1/4th the size of the per-LMAC RX FIFO_SIZE as
1616 determined by BGX()_CMR_RX_LMACS[LMACS]. For example in SGMII mode with
1617 four LMACs of type SGMII, where BGX()_CMR_RX_LMACS[LMACS]=0x4, there is
1618 16 KB of buffering. The recommended 1/4th size of that 16 KB is 4 KB, which
1619 in units of 16 bytes gives [MARK] = 0x100 (the reset value). */
1620 uint64_t reserved_12_63 : 52;
1621 #endif /* Word 0 - End */
1622 } s;
1623 /* struct bdk_bgxx_cmrx_rx_bp_on_s cn; */
1624 };
1625 typedef union bdk_bgxx_cmrx_rx_bp_on bdk_bgxx_cmrx_rx_bp_on_t;
1626
1627 static inline uint64_t BDK_BGXX_CMRX_RX_BP_ON(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_BP_ON(unsigned long a,unsigned long b)1628 static inline uint64_t BDK_BGXX_CMRX_RX_BP_ON(unsigned long a, unsigned long b)
1629 {
1630 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1631 return 0x87e0e00000d0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1632 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1633 return 0x87e0e00000d0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1634 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1635 return 0x87e0e00000d0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1636 __bdk_csr_fatal("BGXX_CMRX_RX_BP_ON", 2, a, b, 0, 0);
1637 }
1638
1639 #define typedef_BDK_BGXX_CMRX_RX_BP_ON(a,b) bdk_bgxx_cmrx_rx_bp_on_t
1640 #define bustype_BDK_BGXX_CMRX_RX_BP_ON(a,b) BDK_CSR_TYPE_RSL
1641 #define basename_BDK_BGXX_CMRX_RX_BP_ON(a,b) "BGXX_CMRX_RX_BP_ON"
1642 #define device_bar_BDK_BGXX_CMRX_RX_BP_ON(a,b) 0x0 /* PF_BAR0 */
1643 #define busnum_BDK_BGXX_CMRX_RX_BP_ON(a,b) (a)
1644 #define arguments_BDK_BGXX_CMRX_RX_BP_ON(a,b) (a),(b),-1,-1
1645
1646 /**
1647 * Register (RSL) bgx#_cmr#_rx_bp_status
1648 *
1649 * BGX CMR Receive Backpressure Status Registers
1650 */
1651 union bdk_bgxx_cmrx_rx_bp_status
1652 {
1653 uint64_t u;
1654 struct bdk_bgxx_cmrx_rx_bp_status_s
1655 {
1656 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1657 uint64_t reserved_1_63 : 63;
1658 uint64_t bp : 1; /**< [ 0: 0](RO/H) Per-LMAC backpressure status.
1659 0 = LMAC is not backpressured.
1660 1 = LMAC is backpressured. */
1661 #else /* Word 0 - Little Endian */
1662 uint64_t bp : 1; /**< [ 0: 0](RO/H) Per-LMAC backpressure status.
1663 0 = LMAC is not backpressured.
1664 1 = LMAC is backpressured. */
1665 uint64_t reserved_1_63 : 63;
1666 #endif /* Word 0 - End */
1667 } s;
1668 /* struct bdk_bgxx_cmrx_rx_bp_status_s cn; */
1669 };
1670 typedef union bdk_bgxx_cmrx_rx_bp_status bdk_bgxx_cmrx_rx_bp_status_t;
1671
1672 static inline uint64_t BDK_BGXX_CMRX_RX_BP_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_BP_STATUS(unsigned long a,unsigned long b)1673 static inline uint64_t BDK_BGXX_CMRX_RX_BP_STATUS(unsigned long a, unsigned long b)
1674 {
1675 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1676 return 0x87e0e00000f0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1677 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1678 return 0x87e0e00000f0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1679 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1680 return 0x87e0e00000f0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1681 __bdk_csr_fatal("BGXX_CMRX_RX_BP_STATUS", 2, a, b, 0, 0);
1682 }
1683
1684 #define typedef_BDK_BGXX_CMRX_RX_BP_STATUS(a,b) bdk_bgxx_cmrx_rx_bp_status_t
1685 #define bustype_BDK_BGXX_CMRX_RX_BP_STATUS(a,b) BDK_CSR_TYPE_RSL
1686 #define basename_BDK_BGXX_CMRX_RX_BP_STATUS(a,b) "BGXX_CMRX_RX_BP_STATUS"
1687 #define device_bar_BDK_BGXX_CMRX_RX_BP_STATUS(a,b) 0x0 /* PF_BAR0 */
1688 #define busnum_BDK_BGXX_CMRX_RX_BP_STATUS(a,b) (a)
1689 #define arguments_BDK_BGXX_CMRX_RX_BP_STATUS(a,b) (a),(b),-1,-1
1690
1691 /**
1692 * Register (RSL) bgx#_cmr#_rx_dmac_ctl
1693 *
1694 * BGX CMR Receive DMAC Address-Control Register
1695 * Internal:
1696 * "* ALGORITHM
1697 * Here is some pseudo code that represents the address filter behavior.
1698 * dmac_addr_filter(uint8 prt, uint48 dmac) {
1699 * for (lmac=0, lmac\<4, lmac++) {
1700 * if (is_bcst(dmac)) // broadcast accept
1701 * return (BGX()_CMR({lmac})_RX_DMAC_CTL[BCST_ACCEPT] ? ACCEPT : REJECT);
1702 * if (is_mcst(dmac) && BGX()_CMR({lmac})_RX_DMAC_CTL[MCST_MODE] == 0) // multicast reject
1703 * return REJECT;
1704 * if (is_mcst(dmac) && BGX()_CMR({lmac})_RX_DMAC_CTL[MCST_MODE] == 1) // multicast accept
1705 * return ACCEPT;
1706 * else // DMAC CAM filter
1707 * cam_hit = 0;
1708 * for (i=0; i\<32; i++) {
1709 * cam = BGX()_CMR_RX_DMAC({i})_CAM;
1710 * if (cam[EN] && cam[ID] == {lmac} && cam[ADR] == dmac) {
1711 * cam_hit = 1;
1712 * break;
1713 * }
1714 * }
1715 * if (cam_hit) {
1716 * return (BGX()_CMR({lmac})_RX_DMAC_CTL[CAM_ACCEPT] ? ACCEPT : REJECT);
1717 * else
1718 * return (BGX()_CMR({lmac})_RX_DMAC_CTL[CAM_ACCEPT] ? REJECT : ACCEPT);
1719 * }
1720 * }"
1721 */
1722 union bdk_bgxx_cmrx_rx_dmac_ctl
1723 {
1724 uint64_t u;
1725 struct bdk_bgxx_cmrx_rx_dmac_ctl_s
1726 {
1727 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1728 uint64_t reserved_4_63 : 60;
1729 uint64_t cam_accept : 1; /**< [ 3: 3](R/W) Allow or deny DMAC address filter.
1730 0 = Reject the packet on DMAC CAM address match.
1731 1 = Accept the packet on DMAC CAM address match. */
1732 uint64_t mcst_mode : 2; /**< [ 2: 1](R/W) Multicast mode.
1733 0x0 = Force reject all multicast packets.
1734 0x1 = Force accept all multicast packets.
1735 0x2 = Use the address filter CAM.
1736 0x3 = Reserved. */
1737 uint64_t bcst_accept : 1; /**< [ 0: 0](R/W) Allow or deny broadcast packets.
1738 0 = Reject all broadcast packets.
1739 1 = Accept all broadcast packets. */
1740 #else /* Word 0 - Little Endian */
1741 uint64_t bcst_accept : 1; /**< [ 0: 0](R/W) Allow or deny broadcast packets.
1742 0 = Reject all broadcast packets.
1743 1 = Accept all broadcast packets. */
1744 uint64_t mcst_mode : 2; /**< [ 2: 1](R/W) Multicast mode.
1745 0x0 = Force reject all multicast packets.
1746 0x1 = Force accept all multicast packets.
1747 0x2 = Use the address filter CAM.
1748 0x3 = Reserved. */
1749 uint64_t cam_accept : 1; /**< [ 3: 3](R/W) Allow or deny DMAC address filter.
1750 0 = Reject the packet on DMAC CAM address match.
1751 1 = Accept the packet on DMAC CAM address match. */
1752 uint64_t reserved_4_63 : 60;
1753 #endif /* Word 0 - End */
1754 } s;
1755 /* struct bdk_bgxx_cmrx_rx_dmac_ctl_s cn; */
1756 };
1757 typedef union bdk_bgxx_cmrx_rx_dmac_ctl bdk_bgxx_cmrx_rx_dmac_ctl_t;
1758
1759 static inline uint64_t BDK_BGXX_CMRX_RX_DMAC_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_DMAC_CTL(unsigned long a,unsigned long b)1760 static inline uint64_t BDK_BGXX_CMRX_RX_DMAC_CTL(unsigned long a, unsigned long b)
1761 {
1762 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1763 return 0x87e0e00000e8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1764 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1765 return 0x87e0e00000e8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1766 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1767 return 0x87e0e00000e8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1768 __bdk_csr_fatal("BGXX_CMRX_RX_DMAC_CTL", 2, a, b, 0, 0);
1769 }
1770
1771 #define typedef_BDK_BGXX_CMRX_RX_DMAC_CTL(a,b) bdk_bgxx_cmrx_rx_dmac_ctl_t
1772 #define bustype_BDK_BGXX_CMRX_RX_DMAC_CTL(a,b) BDK_CSR_TYPE_RSL
1773 #define basename_BDK_BGXX_CMRX_RX_DMAC_CTL(a,b) "BGXX_CMRX_RX_DMAC_CTL"
1774 #define device_bar_BDK_BGXX_CMRX_RX_DMAC_CTL(a,b) 0x0 /* PF_BAR0 */
1775 #define busnum_BDK_BGXX_CMRX_RX_DMAC_CTL(a,b) (a)
1776 #define arguments_BDK_BGXX_CMRX_RX_DMAC_CTL(a,b) (a),(b),-1,-1
1777
1778 /**
1779 * Register (RSL) bgx#_cmr#_rx_fifo_len
1780 *
1781 * BGX CMR Receive FIFO Length Registers
1782 */
1783 union bdk_bgxx_cmrx_rx_fifo_len
1784 {
1785 uint64_t u;
1786 struct bdk_bgxx_cmrx_rx_fifo_len_s
1787 {
1788 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1789 uint64_t reserved_14_63 : 50;
1790 uint64_t busy : 1; /**< [ 13: 13](RO/H) Indicates if GMP and CMR are busy processing a packet. Used when bringing an LMAC
1791 down since in low bandwidth cases, as the FIFO length may often appear to be 0x0. */
1792 uint64_t fifo_len : 13; /**< [ 12: 0](RO/H) Per-LMAC FIFO length. Useful for determining if FIFO is empty when bringing an LMAC down. */
1793 #else /* Word 0 - Little Endian */
1794 uint64_t fifo_len : 13; /**< [ 12: 0](RO/H) Per-LMAC FIFO length. Useful for determining if FIFO is empty when bringing an LMAC down. */
1795 uint64_t busy : 1; /**< [ 13: 13](RO/H) Indicates if GMP and CMR are busy processing a packet. Used when bringing an LMAC
1796 down since in low bandwidth cases, as the FIFO length may often appear to be 0x0. */
1797 uint64_t reserved_14_63 : 50;
1798 #endif /* Word 0 - End */
1799 } s;
1800 /* struct bdk_bgxx_cmrx_rx_fifo_len_s cn81xx; */
1801 struct bdk_bgxx_cmrx_rx_fifo_len_cn88xx
1802 {
1803 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1804 uint64_t reserved_13_63 : 51;
1805 uint64_t fifo_len : 13; /**< [ 12: 0](RO/H) Per-LMAC FIFO length. Useful for determining if FIFO is empty when bringing an LMAC down. */
1806 #else /* Word 0 - Little Endian */
1807 uint64_t fifo_len : 13; /**< [ 12: 0](RO/H) Per-LMAC FIFO length. Useful for determining if FIFO is empty when bringing an LMAC down. */
1808 uint64_t reserved_13_63 : 51;
1809 #endif /* Word 0 - End */
1810 } cn88xx;
1811 /* struct bdk_bgxx_cmrx_rx_fifo_len_s cn83xx; */
1812 };
1813 typedef union bdk_bgxx_cmrx_rx_fifo_len bdk_bgxx_cmrx_rx_fifo_len_t;
1814
1815 static inline uint64_t BDK_BGXX_CMRX_RX_FIFO_LEN(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_FIFO_LEN(unsigned long a,unsigned long b)1816 static inline uint64_t BDK_BGXX_CMRX_RX_FIFO_LEN(unsigned long a, unsigned long b)
1817 {
1818 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1819 return 0x87e0e0000108ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1820 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1821 return 0x87e0e0000108ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1822 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1823 return 0x87e0e0000108ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1824 __bdk_csr_fatal("BGXX_CMRX_RX_FIFO_LEN", 2, a, b, 0, 0);
1825 }
1826
1827 #define typedef_BDK_BGXX_CMRX_RX_FIFO_LEN(a,b) bdk_bgxx_cmrx_rx_fifo_len_t
1828 #define bustype_BDK_BGXX_CMRX_RX_FIFO_LEN(a,b) BDK_CSR_TYPE_RSL
1829 #define basename_BDK_BGXX_CMRX_RX_FIFO_LEN(a,b) "BGXX_CMRX_RX_FIFO_LEN"
1830 #define device_bar_BDK_BGXX_CMRX_RX_FIFO_LEN(a,b) 0x0 /* PF_BAR0 */
1831 #define busnum_BDK_BGXX_CMRX_RX_FIFO_LEN(a,b) (a)
1832 #define arguments_BDK_BGXX_CMRX_RX_FIFO_LEN(a,b) (a),(b),-1,-1
1833
1834 /**
1835 * Register (RSL) bgx#_cmr#_rx_id_map
1836 *
1837 * BGX CMR Receive ID Map Register
1838 * These registers set the RX LMAC ID mapping for X2P/NIC.
1839 */
1840 union bdk_bgxx_cmrx_rx_id_map
1841 {
1842 uint64_t u;
1843 struct bdk_bgxx_cmrx_rx_id_map_s
1844 {
1845 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1846 uint64_t reserved_15_63 : 49;
1847 uint64_t rid : 7; /**< [ 14: 8](R/W) Reserved.
1848 Internal:
1849 Defeatured. Reassembly ID for Octeon PKI; not used in CN8XXX.
1850 Reassembly ID map for this LMAC. A shared pool of 96 reassembly IDs (RIDs) exists for all
1851 MACs.
1852
1853 The RID for this LMAC must be constrained such that it does not overlap with any other MAC
1854 in the system. Its reset value has been chosen such that this condition is satisfied:
1855
1856 _ RID reset value = 4*(BGX_ID + 1) + LMAC_ID
1857
1858 Changes to RID must only occur when the LMAC is quiescent (i.e. the LMAC receive interface
1859 is down and the RX FIFO is empty). */
1860 uint64_t unused : 2; /**< [ 7: 6](RAZ) Reserved. */
1861 uint64_t pknd : 6; /**< [ 5: 0](R/W) Port kind for this LMAC. */
1862 #else /* Word 0 - Little Endian */
1863 uint64_t pknd : 6; /**< [ 5: 0](R/W) Port kind for this LMAC. */
1864 uint64_t unused : 2; /**< [ 7: 6](RAZ) Reserved. */
1865 uint64_t rid : 7; /**< [ 14: 8](R/W) Reserved.
1866 Internal:
1867 Defeatured. Reassembly ID for Octeon PKI; not used in CN8XXX.
1868 Reassembly ID map for this LMAC. A shared pool of 96 reassembly IDs (RIDs) exists for all
1869 MACs.
1870
1871 The RID for this LMAC must be constrained such that it does not overlap with any other MAC
1872 in the system. Its reset value has been chosen such that this condition is satisfied:
1873
1874 _ RID reset value = 4*(BGX_ID + 1) + LMAC_ID
1875
1876 Changes to RID must only occur when the LMAC is quiescent (i.e. the LMAC receive interface
1877 is down and the RX FIFO is empty). */
1878 uint64_t reserved_15_63 : 49;
1879 #endif /* Word 0 - End */
1880 } s;
1881 /* struct bdk_bgxx_cmrx_rx_id_map_s cn; */
1882 };
1883 typedef union bdk_bgxx_cmrx_rx_id_map bdk_bgxx_cmrx_rx_id_map_t;
1884
1885 static inline uint64_t BDK_BGXX_CMRX_RX_ID_MAP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_ID_MAP(unsigned long a,unsigned long b)1886 static inline uint64_t BDK_BGXX_CMRX_RX_ID_MAP(unsigned long a, unsigned long b)
1887 {
1888 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1889 return 0x87e0e0000060ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1890 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1891 return 0x87e0e0000060ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1892 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1893 return 0x87e0e0000060ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1894 __bdk_csr_fatal("BGXX_CMRX_RX_ID_MAP", 2, a, b, 0, 0);
1895 }
1896
1897 #define typedef_BDK_BGXX_CMRX_RX_ID_MAP(a,b) bdk_bgxx_cmrx_rx_id_map_t
1898 #define bustype_BDK_BGXX_CMRX_RX_ID_MAP(a,b) BDK_CSR_TYPE_RSL
1899 #define basename_BDK_BGXX_CMRX_RX_ID_MAP(a,b) "BGXX_CMRX_RX_ID_MAP"
1900 #define device_bar_BDK_BGXX_CMRX_RX_ID_MAP(a,b) 0x0 /* PF_BAR0 */
1901 #define busnum_BDK_BGXX_CMRX_RX_ID_MAP(a,b) (a)
1902 #define arguments_BDK_BGXX_CMRX_RX_ID_MAP(a,b) (a),(b),-1,-1
1903
1904 /**
1905 * Register (RSL) bgx#_cmr#_rx_logl_xoff
1906 *
1907 * BGX CMR Receive Logical XOFF Registers
1908 */
1909 union bdk_bgxx_cmrx_rx_logl_xoff
1910 {
1911 uint64_t u;
1912 struct bdk_bgxx_cmrx_rx_logl_xoff_s
1913 {
1914 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1915 uint64_t reserved_16_63 : 48;
1916 uint64_t xoff : 16; /**< [ 15: 0](R/W1S/H) Together with BGX()_CMR()_RX_LOGL_XON, defines type of channel backpressure to
1917 apply to the MAC. In the case of SMU, Do not write when HiGig2 is
1918 enabled. Writing 1 sets the same physical register as that which is cleared by
1919 BGX()_CMR()_RX_LOGL_XON[XON]. An XOFF value of 1 will cause a backpressure on
1920 the MAC. */
1921 #else /* Word 0 - Little Endian */
1922 uint64_t xoff : 16; /**< [ 15: 0](R/W1S/H) Together with BGX()_CMR()_RX_LOGL_XON, defines type of channel backpressure to
1923 apply to the MAC. In the case of SMU, Do not write when HiGig2 is
1924 enabled. Writing 1 sets the same physical register as that which is cleared by
1925 BGX()_CMR()_RX_LOGL_XON[XON]. An XOFF value of 1 will cause a backpressure on
1926 the MAC. */
1927 uint64_t reserved_16_63 : 48;
1928 #endif /* Word 0 - End */
1929 } s;
1930 /* struct bdk_bgxx_cmrx_rx_logl_xoff_s cn; */
1931 };
1932 typedef union bdk_bgxx_cmrx_rx_logl_xoff bdk_bgxx_cmrx_rx_logl_xoff_t;
1933
1934 static inline uint64_t BDK_BGXX_CMRX_RX_LOGL_XOFF(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_LOGL_XOFF(unsigned long a,unsigned long b)1935 static inline uint64_t BDK_BGXX_CMRX_RX_LOGL_XOFF(unsigned long a, unsigned long b)
1936 {
1937 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
1938 return 0x87e0e00000f8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1939 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1940 return 0x87e0e00000f8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
1941 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
1942 return 0x87e0e00000f8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
1943 __bdk_csr_fatal("BGXX_CMRX_RX_LOGL_XOFF", 2, a, b, 0, 0);
1944 }
1945
1946 #define typedef_BDK_BGXX_CMRX_RX_LOGL_XOFF(a,b) bdk_bgxx_cmrx_rx_logl_xoff_t
1947 #define bustype_BDK_BGXX_CMRX_RX_LOGL_XOFF(a,b) BDK_CSR_TYPE_RSL
1948 #define basename_BDK_BGXX_CMRX_RX_LOGL_XOFF(a,b) "BGXX_CMRX_RX_LOGL_XOFF"
1949 #define device_bar_BDK_BGXX_CMRX_RX_LOGL_XOFF(a,b) 0x0 /* PF_BAR0 */
1950 #define busnum_BDK_BGXX_CMRX_RX_LOGL_XOFF(a,b) (a)
1951 #define arguments_BDK_BGXX_CMRX_RX_LOGL_XOFF(a,b) (a),(b),-1,-1
1952
1953 /**
1954 * Register (RSL) bgx#_cmr#_rx_logl_xon
1955 *
1956 * BGX CMR Receive Logical XON Registers
1957 */
1958 union bdk_bgxx_cmrx_rx_logl_xon
1959 {
1960 uint64_t u;
1961 struct bdk_bgxx_cmrx_rx_logl_xon_s
1962 {
1963 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1964 uint64_t reserved_16_63 : 48;
1965 uint64_t xon : 16; /**< [ 15: 0](R/W1C/H) Together with BGX()_CMR()_RX_LOGL_XOFF, defines type of channel backpressure to
1966 apply. Do not write when HiGig2 is enabled. Writing 1 clears the same physical register as
1967 that which is set by XOFF. An XON value of 1 means only NIC channel BP can cause a
1968 backpressure on the MAC. */
1969 #else /* Word 0 - Little Endian */
1970 uint64_t xon : 16; /**< [ 15: 0](R/W1C/H) Together with BGX()_CMR()_RX_LOGL_XOFF, defines type of channel backpressure to
1971 apply. Do not write when HiGig2 is enabled. Writing 1 clears the same physical register as
1972 that which is set by XOFF. An XON value of 1 means only NIC channel BP can cause a
1973 backpressure on the MAC. */
1974 uint64_t reserved_16_63 : 48;
1975 #endif /* Word 0 - End */
1976 } s;
1977 /* struct bdk_bgxx_cmrx_rx_logl_xon_s cn81xx; */
1978 struct bdk_bgxx_cmrx_rx_logl_xon_cn88xx
1979 {
1980 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1981 uint64_t reserved_16_63 : 48;
1982 uint64_t xon : 16; /**< [ 15: 0](R/W1C/H) Together with BGX()_CMR()_RX_LOGL_XOFF, defines type of channel backpressure to
1983 apply. Do not write when HiGig2 is enabled. Writing 1 clears the same physical register as
1984 that which is set by XOFF. An XON value of 1 means only NIC channel BP can cause a
1985 backpressure on SMU. */
1986 #else /* Word 0 - Little Endian */
1987 uint64_t xon : 16; /**< [ 15: 0](R/W1C/H) Together with BGX()_CMR()_RX_LOGL_XOFF, defines type of channel backpressure to
1988 apply. Do not write when HiGig2 is enabled. Writing 1 clears the same physical register as
1989 that which is set by XOFF. An XON value of 1 means only NIC channel BP can cause a
1990 backpressure on SMU. */
1991 uint64_t reserved_16_63 : 48;
1992 #endif /* Word 0 - End */
1993 } cn88xx;
1994 /* struct bdk_bgxx_cmrx_rx_logl_xon_s cn83xx; */
1995 };
1996 typedef union bdk_bgxx_cmrx_rx_logl_xon bdk_bgxx_cmrx_rx_logl_xon_t;
1997
1998 static inline uint64_t BDK_BGXX_CMRX_RX_LOGL_XON(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_LOGL_XON(unsigned long a,unsigned long b)1999 static inline uint64_t BDK_BGXX_CMRX_RX_LOGL_XON(unsigned long a, unsigned long b)
2000 {
2001 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2002 return 0x87e0e0000100ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2003 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2004 return 0x87e0e0000100ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2005 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2006 return 0x87e0e0000100ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2007 __bdk_csr_fatal("BGXX_CMRX_RX_LOGL_XON", 2, a, b, 0, 0);
2008 }
2009
2010 #define typedef_BDK_BGXX_CMRX_RX_LOGL_XON(a,b) bdk_bgxx_cmrx_rx_logl_xon_t
2011 #define bustype_BDK_BGXX_CMRX_RX_LOGL_XON(a,b) BDK_CSR_TYPE_RSL
2012 #define basename_BDK_BGXX_CMRX_RX_LOGL_XON(a,b) "BGXX_CMRX_RX_LOGL_XON"
2013 #define device_bar_BDK_BGXX_CMRX_RX_LOGL_XON(a,b) 0x0 /* PF_BAR0 */
2014 #define busnum_BDK_BGXX_CMRX_RX_LOGL_XON(a,b) (a)
2015 #define arguments_BDK_BGXX_CMRX_RX_LOGL_XON(a,b) (a),(b),-1,-1
2016
2017 /**
2018 * Register (RSL) bgx#_cmr#_rx_pause_drop_time
2019 *
2020 * BGX CMR Receive Pause Drop-Time Register
2021 */
2022 union bdk_bgxx_cmrx_rx_pause_drop_time
2023 {
2024 uint64_t u;
2025 struct bdk_bgxx_cmrx_rx_pause_drop_time_s
2026 {
2027 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2028 uint64_t reserved_16_63 : 48;
2029 uint64_t pause_time : 16; /**< [ 15: 0](R/W1C/H) Time extracted from the dropped PAUSE packet dropped due to RXB FIFO full or during partner reset. */
2030 #else /* Word 0 - Little Endian */
2031 uint64_t pause_time : 16; /**< [ 15: 0](R/W1C/H) Time extracted from the dropped PAUSE packet dropped due to RXB FIFO full or during partner reset. */
2032 uint64_t reserved_16_63 : 48;
2033 #endif /* Word 0 - End */
2034 } s;
2035 /* struct bdk_bgxx_cmrx_rx_pause_drop_time_s cn; */
2036 };
2037 typedef union bdk_bgxx_cmrx_rx_pause_drop_time bdk_bgxx_cmrx_rx_pause_drop_time_t;
2038
2039 static inline uint64_t BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(unsigned long a,unsigned long b)2040 static inline uint64_t BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(unsigned long a, unsigned long b)
2041 {
2042 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2043 return 0x87e0e0000068ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2044 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2045 return 0x87e0e0000068ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2046 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2047 return 0x87e0e0000068ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2048 __bdk_csr_fatal("BGXX_CMRX_RX_PAUSE_DROP_TIME", 2, a, b, 0, 0);
2049 }
2050
2051 #define typedef_BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(a,b) bdk_bgxx_cmrx_rx_pause_drop_time_t
2052 #define bustype_BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(a,b) BDK_CSR_TYPE_RSL
2053 #define basename_BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(a,b) "BGXX_CMRX_RX_PAUSE_DROP_TIME"
2054 #define device_bar_BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(a,b) 0x0 /* PF_BAR0 */
2055 #define busnum_BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(a,b) (a)
2056 #define arguments_BDK_BGXX_CMRX_RX_PAUSE_DROP_TIME(a,b) (a),(b),-1,-1
2057
2058 /**
2059 * Register (RSL) bgx#_cmr#_rx_stat0
2060 *
2061 * BGX Receive Status Register 0
2062 * These registers provide a count of received packets that meet the following conditions:
2063 * * are not recognized as PAUSE packets.
2064 * * are not dropped due DMAC filtering.
2065 * * are not dropped due FIFO full status.
2066 * * do not have any other OPCODE (FCS, Length, etc).
2067 */
2068 union bdk_bgxx_cmrx_rx_stat0
2069 {
2070 uint64_t u;
2071 struct bdk_bgxx_cmrx_rx_stat0_s
2072 {
2073 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2074 uint64_t reserved_48_63 : 16;
2075 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of received packets. [CNT] will wrap and is cleared if LMAC is disabled with
2076 BGX()_CMR()_CONFIG[ENABLE]=0. */
2077 #else /* Word 0 - Little Endian */
2078 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of received packets. [CNT] will wrap and is cleared if LMAC is disabled with
2079 BGX()_CMR()_CONFIG[ENABLE]=0. */
2080 uint64_t reserved_48_63 : 16;
2081 #endif /* Word 0 - End */
2082 } s;
2083 /* struct bdk_bgxx_cmrx_rx_stat0_s cn; */
2084 };
2085 typedef union bdk_bgxx_cmrx_rx_stat0 bdk_bgxx_cmrx_rx_stat0_t;
2086
2087 static inline uint64_t BDK_BGXX_CMRX_RX_STAT0(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT0(unsigned long a,unsigned long b)2088 static inline uint64_t BDK_BGXX_CMRX_RX_STAT0(unsigned long a, unsigned long b)
2089 {
2090 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2091 return 0x87e0e0000070ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2092 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2093 return 0x87e0e0000070ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2094 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2095 return 0x87e0e0000070ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2096 __bdk_csr_fatal("BGXX_CMRX_RX_STAT0", 2, a, b, 0, 0);
2097 }
2098
2099 #define typedef_BDK_BGXX_CMRX_RX_STAT0(a,b) bdk_bgxx_cmrx_rx_stat0_t
2100 #define bustype_BDK_BGXX_CMRX_RX_STAT0(a,b) BDK_CSR_TYPE_RSL
2101 #define basename_BDK_BGXX_CMRX_RX_STAT0(a,b) "BGXX_CMRX_RX_STAT0"
2102 #define device_bar_BDK_BGXX_CMRX_RX_STAT0(a,b) 0x0 /* PF_BAR0 */
2103 #define busnum_BDK_BGXX_CMRX_RX_STAT0(a,b) (a)
2104 #define arguments_BDK_BGXX_CMRX_RX_STAT0(a,b) (a),(b),-1,-1
2105
2106 /**
2107 * Register (RSL) bgx#_cmr#_rx_stat1
2108 *
2109 * BGX Receive Status Register 1
2110 * These registers provide a count of octets of received packets.
2111 */
2112 union bdk_bgxx_cmrx_rx_stat1
2113 {
2114 uint64_t u;
2115 struct bdk_bgxx_cmrx_rx_stat1_s
2116 {
2117 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2118 uint64_t reserved_48_63 : 16;
2119 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of received packets. [CNT] will wrap and is cleared if LMAC is disabled with
2120 BGX()_CMR()_CONFIG[ENABLE]=0. */
2121 #else /* Word 0 - Little Endian */
2122 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of received packets. [CNT] will wrap and is cleared if LMAC is disabled with
2123 BGX()_CMR()_CONFIG[ENABLE]=0. */
2124 uint64_t reserved_48_63 : 16;
2125 #endif /* Word 0 - End */
2126 } s;
2127 /* struct bdk_bgxx_cmrx_rx_stat1_s cn; */
2128 };
2129 typedef union bdk_bgxx_cmrx_rx_stat1 bdk_bgxx_cmrx_rx_stat1_t;
2130
2131 static inline uint64_t BDK_BGXX_CMRX_RX_STAT1(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT1(unsigned long a,unsigned long b)2132 static inline uint64_t BDK_BGXX_CMRX_RX_STAT1(unsigned long a, unsigned long b)
2133 {
2134 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2135 return 0x87e0e0000078ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2136 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2137 return 0x87e0e0000078ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2138 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2139 return 0x87e0e0000078ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2140 __bdk_csr_fatal("BGXX_CMRX_RX_STAT1", 2, a, b, 0, 0);
2141 }
2142
2143 #define typedef_BDK_BGXX_CMRX_RX_STAT1(a,b) bdk_bgxx_cmrx_rx_stat1_t
2144 #define bustype_BDK_BGXX_CMRX_RX_STAT1(a,b) BDK_CSR_TYPE_RSL
2145 #define basename_BDK_BGXX_CMRX_RX_STAT1(a,b) "BGXX_CMRX_RX_STAT1"
2146 #define device_bar_BDK_BGXX_CMRX_RX_STAT1(a,b) 0x0 /* PF_BAR0 */
2147 #define busnum_BDK_BGXX_CMRX_RX_STAT1(a,b) (a)
2148 #define arguments_BDK_BGXX_CMRX_RX_STAT1(a,b) (a),(b),-1,-1
2149
2150 /**
2151 * Register (RSL) bgx#_cmr#_rx_stat2
2152 *
2153 * BGX Receive Status Register 2
2154 * These registers provide a count of all packets received that were recognized as flow-control
2155 * or PAUSE packets. PAUSE packets with any kind of error are counted in
2156 * BGX()_CMR()_RX_STAT8 (error stats register). Pause packets can be optionally dropped
2157 * or forwarded based on BGX()_SMU()_RX_FRM_CTL[CTL_DRP]. This count increments
2158 * regardless of whether the packet is dropped. PAUSE packets are never counted in
2159 * BGX()_CMR()_RX_STAT0.
2160 */
2161 union bdk_bgxx_cmrx_rx_stat2
2162 {
2163 uint64_t u;
2164 struct bdk_bgxx_cmrx_rx_stat2_s
2165 {
2166 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2167 uint64_t reserved_48_63 : 16;
2168 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of received PAUSE packets. [CNT] will wrap and is cleared if LMAC is disabled with
2169 BGX()_CMR()_CONFIG[ENABLE]=0. */
2170 #else /* Word 0 - Little Endian */
2171 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of received PAUSE packets. [CNT] will wrap and is cleared if LMAC is disabled with
2172 BGX()_CMR()_CONFIG[ENABLE]=0. */
2173 uint64_t reserved_48_63 : 16;
2174 #endif /* Word 0 - End */
2175 } s;
2176 /* struct bdk_bgxx_cmrx_rx_stat2_s cn; */
2177 };
2178 typedef union bdk_bgxx_cmrx_rx_stat2 bdk_bgxx_cmrx_rx_stat2_t;
2179
2180 static inline uint64_t BDK_BGXX_CMRX_RX_STAT2(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT2(unsigned long a,unsigned long b)2181 static inline uint64_t BDK_BGXX_CMRX_RX_STAT2(unsigned long a, unsigned long b)
2182 {
2183 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2184 return 0x87e0e0000080ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2185 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2186 return 0x87e0e0000080ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2187 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2188 return 0x87e0e0000080ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2189 __bdk_csr_fatal("BGXX_CMRX_RX_STAT2", 2, a, b, 0, 0);
2190 }
2191
2192 #define typedef_BDK_BGXX_CMRX_RX_STAT2(a,b) bdk_bgxx_cmrx_rx_stat2_t
2193 #define bustype_BDK_BGXX_CMRX_RX_STAT2(a,b) BDK_CSR_TYPE_RSL
2194 #define basename_BDK_BGXX_CMRX_RX_STAT2(a,b) "BGXX_CMRX_RX_STAT2"
2195 #define device_bar_BDK_BGXX_CMRX_RX_STAT2(a,b) 0x0 /* PF_BAR0 */
2196 #define busnum_BDK_BGXX_CMRX_RX_STAT2(a,b) (a)
2197 #define arguments_BDK_BGXX_CMRX_RX_STAT2(a,b) (a),(b),-1,-1
2198
2199 /**
2200 * Register (RSL) bgx#_cmr#_rx_stat3
2201 *
2202 * BGX Receive Status Register 3
2203 * These registers provide a count of octets of received PAUSE and control packets.
2204 */
2205 union bdk_bgxx_cmrx_rx_stat3
2206 {
2207 uint64_t u;
2208 struct bdk_bgxx_cmrx_rx_stat3_s
2209 {
2210 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2211 uint64_t reserved_48_63 : 16;
2212 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of received PAUSE packets. [CNT] will wrap and is cleared if LMAC is disabled
2213 with BGX()_CMR()_CONFIG[ENABLE]=0. */
2214 #else /* Word 0 - Little Endian */
2215 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of received PAUSE packets. [CNT] will wrap and is cleared if LMAC is disabled
2216 with BGX()_CMR()_CONFIG[ENABLE]=0. */
2217 uint64_t reserved_48_63 : 16;
2218 #endif /* Word 0 - End */
2219 } s;
2220 /* struct bdk_bgxx_cmrx_rx_stat3_s cn; */
2221 };
2222 typedef union bdk_bgxx_cmrx_rx_stat3 bdk_bgxx_cmrx_rx_stat3_t;
2223
2224 static inline uint64_t BDK_BGXX_CMRX_RX_STAT3(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT3(unsigned long a,unsigned long b)2225 static inline uint64_t BDK_BGXX_CMRX_RX_STAT3(unsigned long a, unsigned long b)
2226 {
2227 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2228 return 0x87e0e0000088ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2229 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2230 return 0x87e0e0000088ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2231 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2232 return 0x87e0e0000088ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2233 __bdk_csr_fatal("BGXX_CMRX_RX_STAT3", 2, a, b, 0, 0);
2234 }
2235
2236 #define typedef_BDK_BGXX_CMRX_RX_STAT3(a,b) bdk_bgxx_cmrx_rx_stat3_t
2237 #define bustype_BDK_BGXX_CMRX_RX_STAT3(a,b) BDK_CSR_TYPE_RSL
2238 #define basename_BDK_BGXX_CMRX_RX_STAT3(a,b) "BGXX_CMRX_RX_STAT3"
2239 #define device_bar_BDK_BGXX_CMRX_RX_STAT3(a,b) 0x0 /* PF_BAR0 */
2240 #define busnum_BDK_BGXX_CMRX_RX_STAT3(a,b) (a)
2241 #define arguments_BDK_BGXX_CMRX_RX_STAT3(a,b) (a),(b),-1,-1
2242
2243 /**
2244 * Register (RSL) bgx#_cmr#_rx_stat4
2245 *
2246 * BGX Receive Status Register 4
2247 * These registers provide a count of all packets received that were dropped by the DMAC filter.
2248 * Packets that match the DMAC are dropped and counted here regardless of whether they were ERR
2249 * packets, but does not include those reported in BGX()_CMR()_RX_STAT6. These packets
2250 * are never counted in BGX()_CMR()_RX_STAT0. Eight-byte packets as the result of
2251 * truncation or other means are not dropped by CNXXXX and will never appear in this count.
2252 */
2253 union bdk_bgxx_cmrx_rx_stat4
2254 {
2255 uint64_t u;
2256 struct bdk_bgxx_cmrx_rx_stat4_s
2257 {
2258 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2259 uint64_t reserved_48_63 : 16;
2260 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of filtered DMAC packets. [CNT] will wrap and is cleared if LMAC is disabled with
2261 BGX()_CMR()_CONFIG[ENABLE]=0. */
2262 #else /* Word 0 - Little Endian */
2263 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of filtered DMAC packets. [CNT] will wrap and is cleared if LMAC is disabled with
2264 BGX()_CMR()_CONFIG[ENABLE]=0. */
2265 uint64_t reserved_48_63 : 16;
2266 #endif /* Word 0 - End */
2267 } s;
2268 /* struct bdk_bgxx_cmrx_rx_stat4_s cn; */
2269 };
2270 typedef union bdk_bgxx_cmrx_rx_stat4 bdk_bgxx_cmrx_rx_stat4_t;
2271
2272 static inline uint64_t BDK_BGXX_CMRX_RX_STAT4(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT4(unsigned long a,unsigned long b)2273 static inline uint64_t BDK_BGXX_CMRX_RX_STAT4(unsigned long a, unsigned long b)
2274 {
2275 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2276 return 0x87e0e0000090ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2277 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2278 return 0x87e0e0000090ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2279 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2280 return 0x87e0e0000090ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2281 __bdk_csr_fatal("BGXX_CMRX_RX_STAT4", 2, a, b, 0, 0);
2282 }
2283
2284 #define typedef_BDK_BGXX_CMRX_RX_STAT4(a,b) bdk_bgxx_cmrx_rx_stat4_t
2285 #define bustype_BDK_BGXX_CMRX_RX_STAT4(a,b) BDK_CSR_TYPE_RSL
2286 #define basename_BDK_BGXX_CMRX_RX_STAT4(a,b) "BGXX_CMRX_RX_STAT4"
2287 #define device_bar_BDK_BGXX_CMRX_RX_STAT4(a,b) 0x0 /* PF_BAR0 */
2288 #define busnum_BDK_BGXX_CMRX_RX_STAT4(a,b) (a)
2289 #define arguments_BDK_BGXX_CMRX_RX_STAT4(a,b) (a),(b),-1,-1
2290
2291 /**
2292 * Register (RSL) bgx#_cmr#_rx_stat5
2293 *
2294 * BGX Receive Status Register 5
2295 * These registers provide a count of octets of filtered DMAC packets.
2296 */
2297 union bdk_bgxx_cmrx_rx_stat5
2298 {
2299 uint64_t u;
2300 struct bdk_bgxx_cmrx_rx_stat5_s
2301 {
2302 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2303 uint64_t reserved_48_63 : 16;
2304 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of filtered DMAC packets. [CNT] will wrap and is cleared if LMAC is disabled
2305 with BGX()_CMR()_CONFIG[ENABLE]=0. */
2306 #else /* Word 0 - Little Endian */
2307 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of filtered DMAC packets. [CNT] will wrap and is cleared if LMAC is disabled
2308 with BGX()_CMR()_CONFIG[ENABLE]=0. */
2309 uint64_t reserved_48_63 : 16;
2310 #endif /* Word 0 - End */
2311 } s;
2312 /* struct bdk_bgxx_cmrx_rx_stat5_s cn; */
2313 };
2314 typedef union bdk_bgxx_cmrx_rx_stat5 bdk_bgxx_cmrx_rx_stat5_t;
2315
2316 static inline uint64_t BDK_BGXX_CMRX_RX_STAT5(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT5(unsigned long a,unsigned long b)2317 static inline uint64_t BDK_BGXX_CMRX_RX_STAT5(unsigned long a, unsigned long b)
2318 {
2319 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2320 return 0x87e0e0000098ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2321 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2322 return 0x87e0e0000098ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2323 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2324 return 0x87e0e0000098ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2325 __bdk_csr_fatal("BGXX_CMRX_RX_STAT5", 2, a, b, 0, 0);
2326 }
2327
2328 #define typedef_BDK_BGXX_CMRX_RX_STAT5(a,b) bdk_bgxx_cmrx_rx_stat5_t
2329 #define bustype_BDK_BGXX_CMRX_RX_STAT5(a,b) BDK_CSR_TYPE_RSL
2330 #define basename_BDK_BGXX_CMRX_RX_STAT5(a,b) "BGXX_CMRX_RX_STAT5"
2331 #define device_bar_BDK_BGXX_CMRX_RX_STAT5(a,b) 0x0 /* PF_BAR0 */
2332 #define busnum_BDK_BGXX_CMRX_RX_STAT5(a,b) (a)
2333 #define arguments_BDK_BGXX_CMRX_RX_STAT5(a,b) (a),(b),-1,-1
2334
2335 /**
2336 * Register (RSL) bgx#_cmr#_rx_stat6
2337 *
2338 * BGX Receive Status Register 6
2339 * These registers provide a count of all packets received that were dropped due to a full
2340 * receive FIFO. They do not count any packet that is truncated at the point of overflow and sent
2341 * on to the NIC. These registers count all entire packets dropped by the FIFO for a given LMAC
2342 * regardless of DMAC or PAUSE type.
2343 */
2344 union bdk_bgxx_cmrx_rx_stat6
2345 {
2346 uint64_t u;
2347 struct bdk_bgxx_cmrx_rx_stat6_s
2348 {
2349 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2350 uint64_t reserved_48_63 : 16;
2351 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of dropped packets. [CNT] will wrap and is cleared if LMAC is disabled with
2352 BGX()_CMR()_CONFIG[ENABLE]=0. */
2353 #else /* Word 0 - Little Endian */
2354 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of dropped packets. [CNT] will wrap and is cleared if LMAC is disabled with
2355 BGX()_CMR()_CONFIG[ENABLE]=0. */
2356 uint64_t reserved_48_63 : 16;
2357 #endif /* Word 0 - End */
2358 } s;
2359 /* struct bdk_bgxx_cmrx_rx_stat6_s cn; */
2360 };
2361 typedef union bdk_bgxx_cmrx_rx_stat6 bdk_bgxx_cmrx_rx_stat6_t;
2362
2363 static inline uint64_t BDK_BGXX_CMRX_RX_STAT6(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT6(unsigned long a,unsigned long b)2364 static inline uint64_t BDK_BGXX_CMRX_RX_STAT6(unsigned long a, unsigned long b)
2365 {
2366 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2367 return 0x87e0e00000a0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2368 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2369 return 0x87e0e00000a0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2370 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2371 return 0x87e0e00000a0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2372 __bdk_csr_fatal("BGXX_CMRX_RX_STAT6", 2, a, b, 0, 0);
2373 }
2374
2375 #define typedef_BDK_BGXX_CMRX_RX_STAT6(a,b) bdk_bgxx_cmrx_rx_stat6_t
2376 #define bustype_BDK_BGXX_CMRX_RX_STAT6(a,b) BDK_CSR_TYPE_RSL
2377 #define basename_BDK_BGXX_CMRX_RX_STAT6(a,b) "BGXX_CMRX_RX_STAT6"
2378 #define device_bar_BDK_BGXX_CMRX_RX_STAT6(a,b) 0x0 /* PF_BAR0 */
2379 #define busnum_BDK_BGXX_CMRX_RX_STAT6(a,b) (a)
2380 #define arguments_BDK_BGXX_CMRX_RX_STAT6(a,b) (a),(b),-1,-1
2381
2382 /**
2383 * Register (RSL) bgx#_cmr#_rx_stat7
2384 *
2385 * BGX Receive Status Register 7
2386 * These registers provide a count of octets of received packets that were dropped due to a full
2387 * receive FIFO.
2388 */
2389 union bdk_bgxx_cmrx_rx_stat7
2390 {
2391 uint64_t u;
2392 struct bdk_bgxx_cmrx_rx_stat7_s
2393 {
2394 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2395 uint64_t reserved_48_63 : 16;
2396 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of dropped packets. [CNT] will wrap and is cleared if LMAC is disabled with
2397 BGX()_CMR()_CONFIG[ENABLE]=0. */
2398 #else /* Word 0 - Little Endian */
2399 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of dropped packets. [CNT] will wrap and is cleared if LMAC is disabled with
2400 BGX()_CMR()_CONFIG[ENABLE]=0. */
2401 uint64_t reserved_48_63 : 16;
2402 #endif /* Word 0 - End */
2403 } s;
2404 /* struct bdk_bgxx_cmrx_rx_stat7_s cn; */
2405 };
2406 typedef union bdk_bgxx_cmrx_rx_stat7 bdk_bgxx_cmrx_rx_stat7_t;
2407
2408 static inline uint64_t BDK_BGXX_CMRX_RX_STAT7(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT7(unsigned long a,unsigned long b)2409 static inline uint64_t BDK_BGXX_CMRX_RX_STAT7(unsigned long a, unsigned long b)
2410 {
2411 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2412 return 0x87e0e00000a8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2413 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2414 return 0x87e0e00000a8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2415 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2416 return 0x87e0e00000a8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2417 __bdk_csr_fatal("BGXX_CMRX_RX_STAT7", 2, a, b, 0, 0);
2418 }
2419
2420 #define typedef_BDK_BGXX_CMRX_RX_STAT7(a,b) bdk_bgxx_cmrx_rx_stat7_t
2421 #define bustype_BDK_BGXX_CMRX_RX_STAT7(a,b) BDK_CSR_TYPE_RSL
2422 #define basename_BDK_BGXX_CMRX_RX_STAT7(a,b) "BGXX_CMRX_RX_STAT7"
2423 #define device_bar_BDK_BGXX_CMRX_RX_STAT7(a,b) 0x0 /* PF_BAR0 */
2424 #define busnum_BDK_BGXX_CMRX_RX_STAT7(a,b) (a)
2425 #define arguments_BDK_BGXX_CMRX_RX_STAT7(a,b) (a),(b),-1,-1
2426
2427 /**
2428 * Register (RSL) bgx#_cmr#_rx_stat8
2429 *
2430 * BGX Receive Status Register 8
2431 * These registers provide a count of all packets received with some error that were not dropped
2432 * either due to the DMAC filter or lack of room in the receive FIFO.
2433 * This does not include packets which were counted in
2434 * BGX()_CMR()_RX_STAT2, BGX()_CMR()_RX_STAT4 nor
2435 * BGX()_CMR()_RX_STAT6.
2436 *
2437 * Which statistics are updated on control packet errors and drops are shown below:
2438 *
2439 * \<pre\>
2440 * if dropped {
2441 * if !errored STAT8
2442 * if overflow STAT6
2443 * else if dmac drop STAT4
2444 * else if filter drop STAT2
2445 * } else {
2446 * if errored STAT2
2447 * else STAT8
2448 * }
2449 * \</pre\>
2450 */
2451 union bdk_bgxx_cmrx_rx_stat8
2452 {
2453 uint64_t u;
2454 struct bdk_bgxx_cmrx_rx_stat8_s
2455 {
2456 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2457 uint64_t reserved_48_63 : 16;
2458 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of error packets. [CNT] will wrap and is cleared if LMAC is disabled with
2459 BGX()_CMR()_CONFIG[ENABLE]=0. */
2460 #else /* Word 0 - Little Endian */
2461 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of error packets. [CNT] will wrap and is cleared if LMAC is disabled with
2462 BGX()_CMR()_CONFIG[ENABLE]=0. */
2463 uint64_t reserved_48_63 : 16;
2464 #endif /* Word 0 - End */
2465 } s;
2466 /* struct bdk_bgxx_cmrx_rx_stat8_s cn; */
2467 };
2468 typedef union bdk_bgxx_cmrx_rx_stat8 bdk_bgxx_cmrx_rx_stat8_t;
2469
2470 static inline uint64_t BDK_BGXX_CMRX_RX_STAT8(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_STAT8(unsigned long a,unsigned long b)2471 static inline uint64_t BDK_BGXX_CMRX_RX_STAT8(unsigned long a, unsigned long b)
2472 {
2473 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2474 return 0x87e0e00000b0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2475 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2476 return 0x87e0e00000b0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2477 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2478 return 0x87e0e00000b0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2479 __bdk_csr_fatal("BGXX_CMRX_RX_STAT8", 2, a, b, 0, 0);
2480 }
2481
2482 #define typedef_BDK_BGXX_CMRX_RX_STAT8(a,b) bdk_bgxx_cmrx_rx_stat8_t
2483 #define bustype_BDK_BGXX_CMRX_RX_STAT8(a,b) BDK_CSR_TYPE_RSL
2484 #define basename_BDK_BGXX_CMRX_RX_STAT8(a,b) "BGXX_CMRX_RX_STAT8"
2485 #define device_bar_BDK_BGXX_CMRX_RX_STAT8(a,b) 0x0 /* PF_BAR0 */
2486 #define busnum_BDK_BGXX_CMRX_RX_STAT8(a,b) (a)
2487 #define arguments_BDK_BGXX_CMRX_RX_STAT8(a,b) (a),(b),-1,-1
2488
2489 /**
2490 * Register (RSL) bgx#_cmr#_rx_weight
2491 *
2492 * BGX CMR Receive-Weight Register
2493 */
2494 union bdk_bgxx_cmrx_rx_weight
2495 {
2496 uint64_t u;
2497 struct bdk_bgxx_cmrx_rx_weight_s
2498 {
2499 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2500 uint64_t reserved_4_63 : 60;
2501 uint64_t weight : 4; /**< [ 3: 0](R/W) For the weighted round robin algorithm in CMR RXB, weight to assign for this LMAC relative
2502 to other LMAC weights. Defaults to round-robin (non-weighted minimum setting of 0x1). A
2503 setting of 0x0 effectively takes the LMAC out of eligibility. */
2504 #else /* Word 0 - Little Endian */
2505 uint64_t weight : 4; /**< [ 3: 0](R/W) For the weighted round robin algorithm in CMR RXB, weight to assign for this LMAC relative
2506 to other LMAC weights. Defaults to round-robin (non-weighted minimum setting of 0x1). A
2507 setting of 0x0 effectively takes the LMAC out of eligibility. */
2508 uint64_t reserved_4_63 : 60;
2509 #endif /* Word 0 - End */
2510 } s;
2511 /* struct bdk_bgxx_cmrx_rx_weight_s cn; */
2512 };
2513 typedef union bdk_bgxx_cmrx_rx_weight bdk_bgxx_cmrx_rx_weight_t;
2514
2515 static inline uint64_t BDK_BGXX_CMRX_RX_WEIGHT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_RX_WEIGHT(unsigned long a,unsigned long b)2516 static inline uint64_t BDK_BGXX_CMRX_RX_WEIGHT(unsigned long a, unsigned long b)
2517 {
2518 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2519 return 0x87e0e00000e0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2520 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2521 return 0x87e0e00000e0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2522 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2523 return 0x87e0e00000e0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2524 __bdk_csr_fatal("BGXX_CMRX_RX_WEIGHT", 2, a, b, 0, 0);
2525 }
2526
2527 #define typedef_BDK_BGXX_CMRX_RX_WEIGHT(a,b) bdk_bgxx_cmrx_rx_weight_t
2528 #define bustype_BDK_BGXX_CMRX_RX_WEIGHT(a,b) BDK_CSR_TYPE_RSL
2529 #define basename_BDK_BGXX_CMRX_RX_WEIGHT(a,b) "BGXX_CMRX_RX_WEIGHT"
2530 #define device_bar_BDK_BGXX_CMRX_RX_WEIGHT(a,b) 0x0 /* PF_BAR0 */
2531 #define busnum_BDK_BGXX_CMRX_RX_WEIGHT(a,b) (a)
2532 #define arguments_BDK_BGXX_CMRX_RX_WEIGHT(a,b) (a),(b),-1,-1
2533
2534 /**
2535 * Register (RSL) bgx#_cmr#_tx_channel
2536 *
2537 * BGX CMR Transmit-Channels Registers
2538 */
2539 union bdk_bgxx_cmrx_tx_channel
2540 {
2541 uint64_t u;
2542 struct bdk_bgxx_cmrx_tx_channel_s
2543 {
2544 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2545 uint64_t reserved_32_63 : 32;
2546 uint64_t msk : 16; /**< [ 31: 16](R/W) Backpressure channel mask. BGX can completely ignore the channel backpressure for channel
2547 specified by this field. Any channel in which MSK\<n\> is set never sends backpressure
2548 information to NIC. */
2549 uint64_t dis : 16; /**< [ 15: 0](R/W) Credit return backpressure disable. BGX stops returning channel credits for any
2550 channel that is backpressured. These bits can be used to override that. If
2551 [DIS]\<n\> is set, channel credits may flow back regardless of the backpressure
2552 for that channel. */
2553 #else /* Word 0 - Little Endian */
2554 uint64_t dis : 16; /**< [ 15: 0](R/W) Credit return backpressure disable. BGX stops returning channel credits for any
2555 channel that is backpressured. These bits can be used to override that. If
2556 [DIS]\<n\> is set, channel credits may flow back regardless of the backpressure
2557 for that channel. */
2558 uint64_t msk : 16; /**< [ 31: 16](R/W) Backpressure channel mask. BGX can completely ignore the channel backpressure for channel
2559 specified by this field. Any channel in which MSK\<n\> is set never sends backpressure
2560 information to NIC. */
2561 uint64_t reserved_32_63 : 32;
2562 #endif /* Word 0 - End */
2563 } s;
2564 /* struct bdk_bgxx_cmrx_tx_channel_s cn81xx; */
2565 struct bdk_bgxx_cmrx_tx_channel_cn88xx
2566 {
2567 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2568 uint64_t reserved_32_63 : 32;
2569 uint64_t msk : 16; /**< [ 31: 16](R/W) Backpressure channel mask. BGX can completely ignore the channel backpressure for channel
2570 specified by this field. Any channel in which MSK\<n\> is set never sends backpressure
2571 information to TNS/NIC. */
2572 uint64_t dis : 16; /**< [ 15: 0](R/W) Credit return backpressure disable. BGX stops returning channel credits for any
2573 channel that is backpressured. These bits can be used to override that. If
2574 [DIS]\<n\> is set, channel credits may flow back regardless of the backpressure
2575 for that channel. */
2576 #else /* Word 0 - Little Endian */
2577 uint64_t dis : 16; /**< [ 15: 0](R/W) Credit return backpressure disable. BGX stops returning channel credits for any
2578 channel that is backpressured. These bits can be used to override that. If
2579 [DIS]\<n\> is set, channel credits may flow back regardless of the backpressure
2580 for that channel. */
2581 uint64_t msk : 16; /**< [ 31: 16](R/W) Backpressure channel mask. BGX can completely ignore the channel backpressure for channel
2582 specified by this field. Any channel in which MSK\<n\> is set never sends backpressure
2583 information to TNS/NIC. */
2584 uint64_t reserved_32_63 : 32;
2585 #endif /* Word 0 - End */
2586 } cn88xx;
2587 struct bdk_bgxx_cmrx_tx_channel_cn83xx
2588 {
2589 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2590 uint64_t reserved_32_63 : 32;
2591 uint64_t msk : 16; /**< [ 31: 16](R/W) Backpressure channel mask. BGX can completely ignore the channel backpressure for channel
2592 specified by this field. Any channel in which MSK\<n\> is set never sends backpressure
2593 information to PKO. */
2594 uint64_t dis : 16; /**< [ 15: 0](R/W) Credit return backpressure disable. BGX stops returning channel credits for any
2595 channel that is backpressured. These bits can be used to override that. If
2596 [DIS]\<n\> is set, channel credits may flow back regardless of the backpressure
2597 for that channel. */
2598 #else /* Word 0 - Little Endian */
2599 uint64_t dis : 16; /**< [ 15: 0](R/W) Credit return backpressure disable. BGX stops returning channel credits for any
2600 channel that is backpressured. These bits can be used to override that. If
2601 [DIS]\<n\> is set, channel credits may flow back regardless of the backpressure
2602 for that channel. */
2603 uint64_t msk : 16; /**< [ 31: 16](R/W) Backpressure channel mask. BGX can completely ignore the channel backpressure for channel
2604 specified by this field. Any channel in which MSK\<n\> is set never sends backpressure
2605 information to PKO. */
2606 uint64_t reserved_32_63 : 32;
2607 #endif /* Word 0 - End */
2608 } cn83xx;
2609 };
2610 typedef union bdk_bgxx_cmrx_tx_channel bdk_bgxx_cmrx_tx_channel_t;
2611
2612 static inline uint64_t BDK_BGXX_CMRX_TX_CHANNEL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_CHANNEL(unsigned long a,unsigned long b)2613 static inline uint64_t BDK_BGXX_CMRX_TX_CHANNEL(unsigned long a, unsigned long b)
2614 {
2615 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2616 return 0x87e0e0000500ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2617 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2618 return 0x87e0e0000500ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2619 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2620 return 0x87e0e0000500ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2621 __bdk_csr_fatal("BGXX_CMRX_TX_CHANNEL", 2, a, b, 0, 0);
2622 }
2623
2624 #define typedef_BDK_BGXX_CMRX_TX_CHANNEL(a,b) bdk_bgxx_cmrx_tx_channel_t
2625 #define bustype_BDK_BGXX_CMRX_TX_CHANNEL(a,b) BDK_CSR_TYPE_RSL
2626 #define basename_BDK_BGXX_CMRX_TX_CHANNEL(a,b) "BGXX_CMRX_TX_CHANNEL"
2627 #define device_bar_BDK_BGXX_CMRX_TX_CHANNEL(a,b) 0x0 /* PF_BAR0 */
2628 #define busnum_BDK_BGXX_CMRX_TX_CHANNEL(a,b) (a)
2629 #define arguments_BDK_BGXX_CMRX_TX_CHANNEL(a,b) (a),(b),-1,-1
2630
2631 /**
2632 * Register (RSL) bgx#_cmr#_tx_fifo_len
2633 *
2634 * BGX CMR Transmit FIFO Length Registers
2635 */
2636 union bdk_bgxx_cmrx_tx_fifo_len
2637 {
2638 uint64_t u;
2639 struct bdk_bgxx_cmrx_tx_fifo_len_s
2640 {
2641 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2642 uint64_t reserved_15_63 : 49;
2643 uint64_t lmac_idle : 1; /**< [ 14: 14](RO/H) Idle signal to identify when all credits and other pipeline buffers are also cleared out
2644 and LMAC can be considered IDLE in the BGX CMR TX. */
2645 uint64_t fifo_len : 14; /**< [ 13: 0](RO/H) Per-LMAC TXB main FIFO length. Useful for determining if main FIFO is empty when bringing
2646 an LMAC down. */
2647 #else /* Word 0 - Little Endian */
2648 uint64_t fifo_len : 14; /**< [ 13: 0](RO/H) Per-LMAC TXB main FIFO length. Useful for determining if main FIFO is empty when bringing
2649 an LMAC down. */
2650 uint64_t lmac_idle : 1; /**< [ 14: 14](RO/H) Idle signal to identify when all credits and other pipeline buffers are also cleared out
2651 and LMAC can be considered IDLE in the BGX CMR TX. */
2652 uint64_t reserved_15_63 : 49;
2653 #endif /* Word 0 - End */
2654 } s;
2655 /* struct bdk_bgxx_cmrx_tx_fifo_len_s cn; */
2656 };
2657 typedef union bdk_bgxx_cmrx_tx_fifo_len bdk_bgxx_cmrx_tx_fifo_len_t;
2658
2659 static inline uint64_t BDK_BGXX_CMRX_TX_FIFO_LEN(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_FIFO_LEN(unsigned long a,unsigned long b)2660 static inline uint64_t BDK_BGXX_CMRX_TX_FIFO_LEN(unsigned long a, unsigned long b)
2661 {
2662 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2663 return 0x87e0e0000518ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2664 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2665 return 0x87e0e0000518ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2666 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2667 return 0x87e0e0000518ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2668 __bdk_csr_fatal("BGXX_CMRX_TX_FIFO_LEN", 2, a, b, 0, 0);
2669 }
2670
2671 #define typedef_BDK_BGXX_CMRX_TX_FIFO_LEN(a,b) bdk_bgxx_cmrx_tx_fifo_len_t
2672 #define bustype_BDK_BGXX_CMRX_TX_FIFO_LEN(a,b) BDK_CSR_TYPE_RSL
2673 #define basename_BDK_BGXX_CMRX_TX_FIFO_LEN(a,b) "BGXX_CMRX_TX_FIFO_LEN"
2674 #define device_bar_BDK_BGXX_CMRX_TX_FIFO_LEN(a,b) 0x0 /* PF_BAR0 */
2675 #define busnum_BDK_BGXX_CMRX_TX_FIFO_LEN(a,b) (a)
2676 #define arguments_BDK_BGXX_CMRX_TX_FIFO_LEN(a,b) (a),(b),-1,-1
2677
2678 /**
2679 * Register (RSL) bgx#_cmr#_tx_hg2_status
2680 *
2681 * BGX CMR Transmit HiGig2 Status Registers
2682 */
2683 union bdk_bgxx_cmrx_tx_hg2_status
2684 {
2685 uint64_t u;
2686 struct bdk_bgxx_cmrx_tx_hg2_status_s
2687 {
2688 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2689 uint64_t reserved_32_63 : 32;
2690 uint64_t xof : 16; /**< [ 31: 16](RO/H) 16-bit XOF back pressure vector from HiGig2 message packet or from PFC packets. Non-
2691 zero only when logical back pressure is active. All bits are 0 when [LGTIM2GO] = 0x0. */
2692 uint64_t lgtim2go : 16; /**< [ 15: 0](RO/H) Logical packet flow back pressure time remaining. Initial value set from XOF time field of
2693 HiGig2 message packet received or a function of the enabled and current timers for
2694 PFC packets. Nonzero only when logical back pressure is active. */
2695 #else /* Word 0 - Little Endian */
2696 uint64_t lgtim2go : 16; /**< [ 15: 0](RO/H) Logical packet flow back pressure time remaining. Initial value set from XOF time field of
2697 HiGig2 message packet received or a function of the enabled and current timers for
2698 PFC packets. Nonzero only when logical back pressure is active. */
2699 uint64_t xof : 16; /**< [ 31: 16](RO/H) 16-bit XOF back pressure vector from HiGig2 message packet or from PFC packets. Non-
2700 zero only when logical back pressure is active. All bits are 0 when [LGTIM2GO] = 0x0. */
2701 uint64_t reserved_32_63 : 32;
2702 #endif /* Word 0 - End */
2703 } s;
2704 /* struct bdk_bgxx_cmrx_tx_hg2_status_s cn; */
2705 };
2706 typedef union bdk_bgxx_cmrx_tx_hg2_status bdk_bgxx_cmrx_tx_hg2_status_t;
2707
2708 static inline uint64_t BDK_BGXX_CMRX_TX_HG2_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_HG2_STATUS(unsigned long a,unsigned long b)2709 static inline uint64_t BDK_BGXX_CMRX_TX_HG2_STATUS(unsigned long a, unsigned long b)
2710 {
2711 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2712 return 0x87e0e0000510ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2713 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2714 return 0x87e0e0000510ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2715 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2716 return 0x87e0e0000510ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2717 __bdk_csr_fatal("BGXX_CMRX_TX_HG2_STATUS", 2, a, b, 0, 0);
2718 }
2719
2720 #define typedef_BDK_BGXX_CMRX_TX_HG2_STATUS(a,b) bdk_bgxx_cmrx_tx_hg2_status_t
2721 #define bustype_BDK_BGXX_CMRX_TX_HG2_STATUS(a,b) BDK_CSR_TYPE_RSL
2722 #define basename_BDK_BGXX_CMRX_TX_HG2_STATUS(a,b) "BGXX_CMRX_TX_HG2_STATUS"
2723 #define device_bar_BDK_BGXX_CMRX_TX_HG2_STATUS(a,b) 0x0 /* PF_BAR0 */
2724 #define busnum_BDK_BGXX_CMRX_TX_HG2_STATUS(a,b) (a)
2725 #define arguments_BDK_BGXX_CMRX_TX_HG2_STATUS(a,b) (a),(b),-1,-1
2726
2727 /**
2728 * Register (RSL) bgx#_cmr#_tx_ovr_bp
2729 *
2730 * BGX CMR Transmit-Channels Backpressure Override Registers
2731 */
2732 union bdk_bgxx_cmrx_tx_ovr_bp
2733 {
2734 uint64_t u;
2735 struct bdk_bgxx_cmrx_tx_ovr_bp_s
2736 {
2737 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2738 uint64_t reserved_16_63 : 48;
2739 uint64_t tx_chan_bp : 16; /**< [ 15: 0](R/W) Per-channel backpressure status sent to NIC. Also see BGX()_PRT_CBFC_CTL for details on
2740 impact to physical backpressure.
2741 0 = Channel is available.
2742 1 = Channel is backpressured. */
2743 #else /* Word 0 - Little Endian */
2744 uint64_t tx_chan_bp : 16; /**< [ 15: 0](R/W) Per-channel backpressure status sent to NIC. Also see BGX()_PRT_CBFC_CTL for details on
2745 impact to physical backpressure.
2746 0 = Channel is available.
2747 1 = Channel is backpressured. */
2748 uint64_t reserved_16_63 : 48;
2749 #endif /* Word 0 - End */
2750 } s;
2751 /* struct bdk_bgxx_cmrx_tx_ovr_bp_s cn81xx; */
2752 struct bdk_bgxx_cmrx_tx_ovr_bp_cn88xx
2753 {
2754 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2755 uint64_t reserved_16_63 : 48;
2756 uint64_t tx_chan_bp : 16; /**< [ 15: 0](R/W) Per-channel backpressure status sent to TNS/NIC.
2757 0 = Channel is available.
2758 1 = Channel is backpressured. */
2759 #else /* Word 0 - Little Endian */
2760 uint64_t tx_chan_bp : 16; /**< [ 15: 0](R/W) Per-channel backpressure status sent to TNS/NIC.
2761 0 = Channel is available.
2762 1 = Channel is backpressured. */
2763 uint64_t reserved_16_63 : 48;
2764 #endif /* Word 0 - End */
2765 } cn88xx;
2766 struct bdk_bgxx_cmrx_tx_ovr_bp_cn83xx
2767 {
2768 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2769 uint64_t reserved_16_63 : 48;
2770 uint64_t tx_chan_bp : 16; /**< [ 15: 0](R/W) Per-channel backpressure status sent to PKO/NIC. Also see BGX()_PRT_CBFC_CTL for
2771 details on impact to physical backpressure.
2772 0 = Channel is available.
2773 1 = Channel is backpressured. */
2774 #else /* Word 0 - Little Endian */
2775 uint64_t tx_chan_bp : 16; /**< [ 15: 0](R/W) Per-channel backpressure status sent to PKO/NIC. Also see BGX()_PRT_CBFC_CTL for
2776 details on impact to physical backpressure.
2777 0 = Channel is available.
2778 1 = Channel is backpressured. */
2779 uint64_t reserved_16_63 : 48;
2780 #endif /* Word 0 - End */
2781 } cn83xx;
2782 };
2783 typedef union bdk_bgxx_cmrx_tx_ovr_bp bdk_bgxx_cmrx_tx_ovr_bp_t;
2784
2785 static inline uint64_t BDK_BGXX_CMRX_TX_OVR_BP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_OVR_BP(unsigned long a,unsigned long b)2786 static inline uint64_t BDK_BGXX_CMRX_TX_OVR_BP(unsigned long a, unsigned long b)
2787 {
2788 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2789 return 0x87e0e0000520ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2790 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2791 return 0x87e0e0000520ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2792 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2793 return 0x87e0e0000520ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2794 __bdk_csr_fatal("BGXX_CMRX_TX_OVR_BP", 2, a, b, 0, 0);
2795 }
2796
2797 #define typedef_BDK_BGXX_CMRX_TX_OVR_BP(a,b) bdk_bgxx_cmrx_tx_ovr_bp_t
2798 #define bustype_BDK_BGXX_CMRX_TX_OVR_BP(a,b) BDK_CSR_TYPE_RSL
2799 #define basename_BDK_BGXX_CMRX_TX_OVR_BP(a,b) "BGXX_CMRX_TX_OVR_BP"
2800 #define device_bar_BDK_BGXX_CMRX_TX_OVR_BP(a,b) 0x0 /* PF_BAR0 */
2801 #define busnum_BDK_BGXX_CMRX_TX_OVR_BP(a,b) (a)
2802 #define arguments_BDK_BGXX_CMRX_TX_OVR_BP(a,b) (a),(b),-1,-1
2803
2804 /**
2805 * Register (RSL) bgx#_cmr#_tx_stat0
2806 *
2807 * BGX CMR Transmit Statistics Registers 0
2808 */
2809 union bdk_bgxx_cmrx_tx_stat0
2810 {
2811 uint64_t u;
2812 struct bdk_bgxx_cmrx_tx_stat0_s
2813 {
2814 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2815 uint64_t reserved_48_63 : 16;
2816 uint64_t xscol : 48; /**< [ 47: 0](R/W/H) Number of packets dropped (never successfully sent) due to excessive collision. Defined by
2817 BGX()_GMP_GMI_TX_COL_ATTEMPT[LIMIT]. Half-duplex mode only and does not account for late
2818 collisions.
2819
2820 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2821 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2822 #else /* Word 0 - Little Endian */
2823 uint64_t xscol : 48; /**< [ 47: 0](R/W/H) Number of packets dropped (never successfully sent) due to excessive collision. Defined by
2824 BGX()_GMP_GMI_TX_COL_ATTEMPT[LIMIT]. Half-duplex mode only and does not account for late
2825 collisions.
2826
2827 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2828 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2829 uint64_t reserved_48_63 : 16;
2830 #endif /* Word 0 - End */
2831 } s;
2832 /* struct bdk_bgxx_cmrx_tx_stat0_s cn; */
2833 };
2834 typedef union bdk_bgxx_cmrx_tx_stat0 bdk_bgxx_cmrx_tx_stat0_t;
2835
2836 static inline uint64_t BDK_BGXX_CMRX_TX_STAT0(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT0(unsigned long a,unsigned long b)2837 static inline uint64_t BDK_BGXX_CMRX_TX_STAT0(unsigned long a, unsigned long b)
2838 {
2839 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2840 return 0x87e0e0000600ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2841 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2842 return 0x87e0e0000600ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2843 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2844 return 0x87e0e0000600ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2845 __bdk_csr_fatal("BGXX_CMRX_TX_STAT0", 2, a, b, 0, 0);
2846 }
2847
2848 #define typedef_BDK_BGXX_CMRX_TX_STAT0(a,b) bdk_bgxx_cmrx_tx_stat0_t
2849 #define bustype_BDK_BGXX_CMRX_TX_STAT0(a,b) BDK_CSR_TYPE_RSL
2850 #define basename_BDK_BGXX_CMRX_TX_STAT0(a,b) "BGXX_CMRX_TX_STAT0"
2851 #define device_bar_BDK_BGXX_CMRX_TX_STAT0(a,b) 0x0 /* PF_BAR0 */
2852 #define busnum_BDK_BGXX_CMRX_TX_STAT0(a,b) (a)
2853 #define arguments_BDK_BGXX_CMRX_TX_STAT0(a,b) (a),(b),-1,-1
2854
2855 /**
2856 * Register (RSL) bgx#_cmr#_tx_stat1
2857 *
2858 * BGX CMR Transmit Statistics Registers 1
2859 */
2860 union bdk_bgxx_cmrx_tx_stat1
2861 {
2862 uint64_t u;
2863 struct bdk_bgxx_cmrx_tx_stat1_s
2864 {
2865 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2866 uint64_t reserved_48_63 : 16;
2867 uint64_t xsdef : 48; /**< [ 47: 0](R/W/H) A count of the number of times any frame was deferred for an excessive period of time.
2868 See maxDeferTime in the IEEE 802.3 specification. Half-duplex mode only and not updated
2869 for late collisions.
2870
2871 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2872 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2873 #else /* Word 0 - Little Endian */
2874 uint64_t xsdef : 48; /**< [ 47: 0](R/W/H) A count of the number of times any frame was deferred for an excessive period of time.
2875 See maxDeferTime in the IEEE 802.3 specification. Half-duplex mode only and not updated
2876 for late collisions.
2877
2878 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2879 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2880 uint64_t reserved_48_63 : 16;
2881 #endif /* Word 0 - End */
2882 } s;
2883 /* struct bdk_bgxx_cmrx_tx_stat1_s cn; */
2884 };
2885 typedef union bdk_bgxx_cmrx_tx_stat1 bdk_bgxx_cmrx_tx_stat1_t;
2886
2887 static inline uint64_t BDK_BGXX_CMRX_TX_STAT1(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT1(unsigned long a,unsigned long b)2888 static inline uint64_t BDK_BGXX_CMRX_TX_STAT1(unsigned long a, unsigned long b)
2889 {
2890 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2891 return 0x87e0e0000608ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2892 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2893 return 0x87e0e0000608ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2894 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2895 return 0x87e0e0000608ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2896 __bdk_csr_fatal("BGXX_CMRX_TX_STAT1", 2, a, b, 0, 0);
2897 }
2898
2899 #define typedef_BDK_BGXX_CMRX_TX_STAT1(a,b) bdk_bgxx_cmrx_tx_stat1_t
2900 #define bustype_BDK_BGXX_CMRX_TX_STAT1(a,b) BDK_CSR_TYPE_RSL
2901 #define basename_BDK_BGXX_CMRX_TX_STAT1(a,b) "BGXX_CMRX_TX_STAT1"
2902 #define device_bar_BDK_BGXX_CMRX_TX_STAT1(a,b) 0x0 /* PF_BAR0 */
2903 #define busnum_BDK_BGXX_CMRX_TX_STAT1(a,b) (a)
2904 #define arguments_BDK_BGXX_CMRX_TX_STAT1(a,b) (a),(b),-1,-1
2905
2906 /**
2907 * Register (RSL) bgx#_cmr#_tx_stat10
2908 *
2909 * BGX CMR Transmit Statistics Registers 10
2910 */
2911 union bdk_bgxx_cmrx_tx_stat10
2912 {
2913 uint64_t u;
2914 struct bdk_bgxx_cmrx_tx_stat10_s
2915 {
2916 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2917 uint64_t reserved_48_63 : 16;
2918 uint64_t hist4 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 256-511. Packet length is the sum of
2919 all data transmitted on the wire for the given packet including packet data, pad bytes,
2920 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
2921
2922 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2923 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2924 #else /* Word 0 - Little Endian */
2925 uint64_t hist4 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 256-511. Packet length is the sum of
2926 all data transmitted on the wire for the given packet including packet data, pad bytes,
2927 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
2928
2929 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2930 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2931 uint64_t reserved_48_63 : 16;
2932 #endif /* Word 0 - End */
2933 } s;
2934 /* struct bdk_bgxx_cmrx_tx_stat10_s cn; */
2935 };
2936 typedef union bdk_bgxx_cmrx_tx_stat10 bdk_bgxx_cmrx_tx_stat10_t;
2937
2938 static inline uint64_t BDK_BGXX_CMRX_TX_STAT10(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT10(unsigned long a,unsigned long b)2939 static inline uint64_t BDK_BGXX_CMRX_TX_STAT10(unsigned long a, unsigned long b)
2940 {
2941 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2942 return 0x87e0e0000650ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2943 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2944 return 0x87e0e0000650ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2945 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2946 return 0x87e0e0000650ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2947 __bdk_csr_fatal("BGXX_CMRX_TX_STAT10", 2, a, b, 0, 0);
2948 }
2949
2950 #define typedef_BDK_BGXX_CMRX_TX_STAT10(a,b) bdk_bgxx_cmrx_tx_stat10_t
2951 #define bustype_BDK_BGXX_CMRX_TX_STAT10(a,b) BDK_CSR_TYPE_RSL
2952 #define basename_BDK_BGXX_CMRX_TX_STAT10(a,b) "BGXX_CMRX_TX_STAT10"
2953 #define device_bar_BDK_BGXX_CMRX_TX_STAT10(a,b) 0x0 /* PF_BAR0 */
2954 #define busnum_BDK_BGXX_CMRX_TX_STAT10(a,b) (a)
2955 #define arguments_BDK_BGXX_CMRX_TX_STAT10(a,b) (a),(b),-1,-1
2956
2957 /**
2958 * Register (RSL) bgx#_cmr#_tx_stat11
2959 *
2960 * BGX CMR Transmit Statistics Registers 11
2961 */
2962 union bdk_bgxx_cmrx_tx_stat11
2963 {
2964 uint64_t u;
2965 struct bdk_bgxx_cmrx_tx_stat11_s
2966 {
2967 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2968 uint64_t reserved_48_63 : 16;
2969 uint64_t hist5 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 512-1023. Packet length is the sum of
2970 all data transmitted on the wire for the given packet including packet data, pad bytes,
2971 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
2972
2973 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2974 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2975 #else /* Word 0 - Little Endian */
2976 uint64_t hist5 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 512-1023. Packet length is the sum of
2977 all data transmitted on the wire for the given packet including packet data, pad bytes,
2978 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
2979
2980 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
2981 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
2982 uint64_t reserved_48_63 : 16;
2983 #endif /* Word 0 - End */
2984 } s;
2985 /* struct bdk_bgxx_cmrx_tx_stat11_s cn; */
2986 };
2987 typedef union bdk_bgxx_cmrx_tx_stat11 bdk_bgxx_cmrx_tx_stat11_t;
2988
2989 static inline uint64_t BDK_BGXX_CMRX_TX_STAT11(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT11(unsigned long a,unsigned long b)2990 static inline uint64_t BDK_BGXX_CMRX_TX_STAT11(unsigned long a, unsigned long b)
2991 {
2992 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
2993 return 0x87e0e0000658ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2994 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
2995 return 0x87e0e0000658ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
2996 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
2997 return 0x87e0e0000658ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
2998 __bdk_csr_fatal("BGXX_CMRX_TX_STAT11", 2, a, b, 0, 0);
2999 }
3000
3001 #define typedef_BDK_BGXX_CMRX_TX_STAT11(a,b) bdk_bgxx_cmrx_tx_stat11_t
3002 #define bustype_BDK_BGXX_CMRX_TX_STAT11(a,b) BDK_CSR_TYPE_RSL
3003 #define basename_BDK_BGXX_CMRX_TX_STAT11(a,b) "BGXX_CMRX_TX_STAT11"
3004 #define device_bar_BDK_BGXX_CMRX_TX_STAT11(a,b) 0x0 /* PF_BAR0 */
3005 #define busnum_BDK_BGXX_CMRX_TX_STAT11(a,b) (a)
3006 #define arguments_BDK_BGXX_CMRX_TX_STAT11(a,b) (a),(b),-1,-1
3007
3008 /**
3009 * Register (RSL) bgx#_cmr#_tx_stat12
3010 *
3011 * BGX CMR Transmit Statistics Registers 12
3012 */
3013 union bdk_bgxx_cmrx_tx_stat12
3014 {
3015 uint64_t u;
3016 struct bdk_bgxx_cmrx_tx_stat12_s
3017 {
3018 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3019 uint64_t reserved_48_63 : 16;
3020 uint64_t hist6 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 1024-1518. Packet length is the sum of
3021 all data transmitted on the wire for the given packet including packet data, pad bytes,
3022 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3023
3024 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3025 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3026 #else /* Word 0 - Little Endian */
3027 uint64_t hist6 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 1024-1518. Packet length is the sum of
3028 all data transmitted on the wire for the given packet including packet data, pad bytes,
3029 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3030
3031 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3032 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3033 uint64_t reserved_48_63 : 16;
3034 #endif /* Word 0 - End */
3035 } s;
3036 /* struct bdk_bgxx_cmrx_tx_stat12_s cn; */
3037 };
3038 typedef union bdk_bgxx_cmrx_tx_stat12 bdk_bgxx_cmrx_tx_stat12_t;
3039
3040 static inline uint64_t BDK_BGXX_CMRX_TX_STAT12(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT12(unsigned long a,unsigned long b)3041 static inline uint64_t BDK_BGXX_CMRX_TX_STAT12(unsigned long a, unsigned long b)
3042 {
3043 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3044 return 0x87e0e0000660ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3045 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3046 return 0x87e0e0000660ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3047 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3048 return 0x87e0e0000660ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3049 __bdk_csr_fatal("BGXX_CMRX_TX_STAT12", 2, a, b, 0, 0);
3050 }
3051
3052 #define typedef_BDK_BGXX_CMRX_TX_STAT12(a,b) bdk_bgxx_cmrx_tx_stat12_t
3053 #define bustype_BDK_BGXX_CMRX_TX_STAT12(a,b) BDK_CSR_TYPE_RSL
3054 #define basename_BDK_BGXX_CMRX_TX_STAT12(a,b) "BGXX_CMRX_TX_STAT12"
3055 #define device_bar_BDK_BGXX_CMRX_TX_STAT12(a,b) 0x0 /* PF_BAR0 */
3056 #define busnum_BDK_BGXX_CMRX_TX_STAT12(a,b) (a)
3057 #define arguments_BDK_BGXX_CMRX_TX_STAT12(a,b) (a),(b),-1,-1
3058
3059 /**
3060 * Register (RSL) bgx#_cmr#_tx_stat13
3061 *
3062 * BGX CMR Transmit Statistics Registers 13
3063 */
3064 union bdk_bgxx_cmrx_tx_stat13
3065 {
3066 uint64_t u;
3067 struct bdk_bgxx_cmrx_tx_stat13_s
3068 {
3069 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3070 uint64_t reserved_48_63 : 16;
3071 uint64_t hist7 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count \> 1518. Packet length is the sum of all data
3072 transmitted on the wire for the given packet including packet data, pad bytes, FCS bytes,
3073 and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3074
3075 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3076 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3077 #else /* Word 0 - Little Endian */
3078 uint64_t hist7 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count \> 1518. Packet length is the sum of all data
3079 transmitted on the wire for the given packet including packet data, pad bytes, FCS bytes,
3080 and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3081
3082 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3083 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3084 uint64_t reserved_48_63 : 16;
3085 #endif /* Word 0 - End */
3086 } s;
3087 /* struct bdk_bgxx_cmrx_tx_stat13_s cn; */
3088 };
3089 typedef union bdk_bgxx_cmrx_tx_stat13 bdk_bgxx_cmrx_tx_stat13_t;
3090
3091 static inline uint64_t BDK_BGXX_CMRX_TX_STAT13(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT13(unsigned long a,unsigned long b)3092 static inline uint64_t BDK_BGXX_CMRX_TX_STAT13(unsigned long a, unsigned long b)
3093 {
3094 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3095 return 0x87e0e0000668ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3096 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3097 return 0x87e0e0000668ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3098 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3099 return 0x87e0e0000668ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3100 __bdk_csr_fatal("BGXX_CMRX_TX_STAT13", 2, a, b, 0, 0);
3101 }
3102
3103 #define typedef_BDK_BGXX_CMRX_TX_STAT13(a,b) bdk_bgxx_cmrx_tx_stat13_t
3104 #define bustype_BDK_BGXX_CMRX_TX_STAT13(a,b) BDK_CSR_TYPE_RSL
3105 #define basename_BDK_BGXX_CMRX_TX_STAT13(a,b) "BGXX_CMRX_TX_STAT13"
3106 #define device_bar_BDK_BGXX_CMRX_TX_STAT13(a,b) 0x0 /* PF_BAR0 */
3107 #define busnum_BDK_BGXX_CMRX_TX_STAT13(a,b) (a)
3108 #define arguments_BDK_BGXX_CMRX_TX_STAT13(a,b) (a),(b),-1,-1
3109
3110 /**
3111 * Register (RSL) bgx#_cmr#_tx_stat14
3112 *
3113 * BGX CMR Transmit Statistics Registers 14
3114 */
3115 union bdk_bgxx_cmrx_tx_stat14
3116 {
3117 uint64_t u;
3118 struct bdk_bgxx_cmrx_tx_stat14_s
3119 {
3120 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3121 uint64_t reserved_48_63 : 16;
3122 uint64_t bcst : 48; /**< [ 47: 0](R/W/H) Number of packets sent to broadcast DMAC, excluding PAUSE or PFC control packets generated
3123 by BGX. Does not include MCST packets.
3124
3125 Not cleared on read; cleared on a write with 0x0. Counters will wrap.
3126
3127 Note that BGX determines if the packet is MCST or BCST from the DMAC of the packet. BGX
3128 assumes that the DMAC lies in the first six bytes of the packet as per the 802.3 frame
3129 definition. If the system requires additional data before the L2 header, the MCST and BCST
3130 counters may not reflect reality and should be ignored by software. Cleared if LMAC is
3131 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3132 #else /* Word 0 - Little Endian */
3133 uint64_t bcst : 48; /**< [ 47: 0](R/W/H) Number of packets sent to broadcast DMAC, excluding PAUSE or PFC control packets generated
3134 by BGX. Does not include MCST packets.
3135
3136 Not cleared on read; cleared on a write with 0x0. Counters will wrap.
3137
3138 Note that BGX determines if the packet is MCST or BCST from the DMAC of the packet. BGX
3139 assumes that the DMAC lies in the first six bytes of the packet as per the 802.3 frame
3140 definition. If the system requires additional data before the L2 header, the MCST and BCST
3141 counters may not reflect reality and should be ignored by software. Cleared if LMAC is
3142 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3143 uint64_t reserved_48_63 : 16;
3144 #endif /* Word 0 - End */
3145 } s;
3146 /* struct bdk_bgxx_cmrx_tx_stat14_s cn; */
3147 };
3148 typedef union bdk_bgxx_cmrx_tx_stat14 bdk_bgxx_cmrx_tx_stat14_t;
3149
3150 static inline uint64_t BDK_BGXX_CMRX_TX_STAT14(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT14(unsigned long a,unsigned long b)3151 static inline uint64_t BDK_BGXX_CMRX_TX_STAT14(unsigned long a, unsigned long b)
3152 {
3153 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3154 return 0x87e0e0000670ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3155 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3156 return 0x87e0e0000670ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3157 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3158 return 0x87e0e0000670ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3159 __bdk_csr_fatal("BGXX_CMRX_TX_STAT14", 2, a, b, 0, 0);
3160 }
3161
3162 #define typedef_BDK_BGXX_CMRX_TX_STAT14(a,b) bdk_bgxx_cmrx_tx_stat14_t
3163 #define bustype_BDK_BGXX_CMRX_TX_STAT14(a,b) BDK_CSR_TYPE_RSL
3164 #define basename_BDK_BGXX_CMRX_TX_STAT14(a,b) "BGXX_CMRX_TX_STAT14"
3165 #define device_bar_BDK_BGXX_CMRX_TX_STAT14(a,b) 0x0 /* PF_BAR0 */
3166 #define busnum_BDK_BGXX_CMRX_TX_STAT14(a,b) (a)
3167 #define arguments_BDK_BGXX_CMRX_TX_STAT14(a,b) (a),(b),-1,-1
3168
3169 /**
3170 * Register (RSL) bgx#_cmr#_tx_stat15
3171 *
3172 * BGX CMR Transmit Statistics Registers 15
3173 */
3174 union bdk_bgxx_cmrx_tx_stat15
3175 {
3176 uint64_t u;
3177 struct bdk_bgxx_cmrx_tx_stat15_s
3178 {
3179 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3180 uint64_t reserved_48_63 : 16;
3181 uint64_t mcst : 48; /**< [ 47: 0](R/W/H) Number of packets sent to multicast DMAC, excluding PAUSE or PFC control packets generated
3182 by BGX. Does not include BCST packets.
3183
3184 Not cleared on read; cleared on a write with 0x0. Counters will wrap.
3185
3186 Note that BGX determines if the packet is MCST or BCST from the DMAC of the packet. BGX
3187 assumes that the DMAC lies in the first six bytes of the packet as per the 802.3 frame
3188 definition. If the system requires additional data before the L2 header, then the MCST and
3189 BCST counters may not reflect reality and should be ignored by software. Cleared if LMAC
3190 is disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3191 #else /* Word 0 - Little Endian */
3192 uint64_t mcst : 48; /**< [ 47: 0](R/W/H) Number of packets sent to multicast DMAC, excluding PAUSE or PFC control packets generated
3193 by BGX. Does not include BCST packets.
3194
3195 Not cleared on read; cleared on a write with 0x0. Counters will wrap.
3196
3197 Note that BGX determines if the packet is MCST or BCST from the DMAC of the packet. BGX
3198 assumes that the DMAC lies in the first six bytes of the packet as per the 802.3 frame
3199 definition. If the system requires additional data before the L2 header, then the MCST and
3200 BCST counters may not reflect reality and should be ignored by software. Cleared if LMAC
3201 is disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3202 uint64_t reserved_48_63 : 16;
3203 #endif /* Word 0 - End */
3204 } s;
3205 /* struct bdk_bgxx_cmrx_tx_stat15_s cn; */
3206 };
3207 typedef union bdk_bgxx_cmrx_tx_stat15 bdk_bgxx_cmrx_tx_stat15_t;
3208
3209 static inline uint64_t BDK_BGXX_CMRX_TX_STAT15(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT15(unsigned long a,unsigned long b)3210 static inline uint64_t BDK_BGXX_CMRX_TX_STAT15(unsigned long a, unsigned long b)
3211 {
3212 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3213 return 0x87e0e0000678ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3214 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3215 return 0x87e0e0000678ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3216 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3217 return 0x87e0e0000678ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3218 __bdk_csr_fatal("BGXX_CMRX_TX_STAT15", 2, a, b, 0, 0);
3219 }
3220
3221 #define typedef_BDK_BGXX_CMRX_TX_STAT15(a,b) bdk_bgxx_cmrx_tx_stat15_t
3222 #define bustype_BDK_BGXX_CMRX_TX_STAT15(a,b) BDK_CSR_TYPE_RSL
3223 #define basename_BDK_BGXX_CMRX_TX_STAT15(a,b) "BGXX_CMRX_TX_STAT15"
3224 #define device_bar_BDK_BGXX_CMRX_TX_STAT15(a,b) 0x0 /* PF_BAR0 */
3225 #define busnum_BDK_BGXX_CMRX_TX_STAT15(a,b) (a)
3226 #define arguments_BDK_BGXX_CMRX_TX_STAT15(a,b) (a),(b),-1,-1
3227
3228 /**
3229 * Register (RSL) bgx#_cmr#_tx_stat16
3230 *
3231 * BGX CMR Transmit Statistics Registers 16
3232 */
3233 union bdk_bgxx_cmrx_tx_stat16
3234 {
3235 uint64_t u;
3236 struct bdk_bgxx_cmrx_tx_stat16_s
3237 {
3238 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3239 uint64_t reserved_48_63 : 16;
3240 uint64_t undflw : 48; /**< [ 47: 0](R/W/H) Number of underflow packets.
3241
3242 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3243 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3244 #else /* Word 0 - Little Endian */
3245 uint64_t undflw : 48; /**< [ 47: 0](R/W/H) Number of underflow packets.
3246
3247 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3248 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3249 uint64_t reserved_48_63 : 16;
3250 #endif /* Word 0 - End */
3251 } s;
3252 /* struct bdk_bgxx_cmrx_tx_stat16_s cn; */
3253 };
3254 typedef union bdk_bgxx_cmrx_tx_stat16 bdk_bgxx_cmrx_tx_stat16_t;
3255
3256 static inline uint64_t BDK_BGXX_CMRX_TX_STAT16(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT16(unsigned long a,unsigned long b)3257 static inline uint64_t BDK_BGXX_CMRX_TX_STAT16(unsigned long a, unsigned long b)
3258 {
3259 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3260 return 0x87e0e0000680ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3261 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3262 return 0x87e0e0000680ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3263 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3264 return 0x87e0e0000680ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3265 __bdk_csr_fatal("BGXX_CMRX_TX_STAT16", 2, a, b, 0, 0);
3266 }
3267
3268 #define typedef_BDK_BGXX_CMRX_TX_STAT16(a,b) bdk_bgxx_cmrx_tx_stat16_t
3269 #define bustype_BDK_BGXX_CMRX_TX_STAT16(a,b) BDK_CSR_TYPE_RSL
3270 #define basename_BDK_BGXX_CMRX_TX_STAT16(a,b) "BGXX_CMRX_TX_STAT16"
3271 #define device_bar_BDK_BGXX_CMRX_TX_STAT16(a,b) 0x0 /* PF_BAR0 */
3272 #define busnum_BDK_BGXX_CMRX_TX_STAT16(a,b) (a)
3273 #define arguments_BDK_BGXX_CMRX_TX_STAT16(a,b) (a),(b),-1,-1
3274
3275 /**
3276 * Register (RSL) bgx#_cmr#_tx_stat17
3277 *
3278 * BGX CMR Transmit Statistics Registers 17
3279 */
3280 union bdk_bgxx_cmrx_tx_stat17
3281 {
3282 uint64_t u;
3283 struct bdk_bgxx_cmrx_tx_stat17_s
3284 {
3285 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3286 uint64_t reserved_48_63 : 16;
3287 uint64_t ctl : 48; /**< [ 47: 0](R/W/H) Number of PAUSE or PFC control packets generated by BGX. It does not include control
3288 packets forwarded or generated by the cores. Does not track the number of generated HG2
3289 messages.
3290
3291 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3292 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3293 #else /* Word 0 - Little Endian */
3294 uint64_t ctl : 48; /**< [ 47: 0](R/W/H) Number of PAUSE or PFC control packets generated by BGX. It does not include control
3295 packets forwarded or generated by the cores. Does not track the number of generated HG2
3296 messages.
3297
3298 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3299 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3300 uint64_t reserved_48_63 : 16;
3301 #endif /* Word 0 - End */
3302 } s;
3303 /* struct bdk_bgxx_cmrx_tx_stat17_s cn; */
3304 };
3305 typedef union bdk_bgxx_cmrx_tx_stat17 bdk_bgxx_cmrx_tx_stat17_t;
3306
3307 static inline uint64_t BDK_BGXX_CMRX_TX_STAT17(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT17(unsigned long a,unsigned long b)3308 static inline uint64_t BDK_BGXX_CMRX_TX_STAT17(unsigned long a, unsigned long b)
3309 {
3310 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3311 return 0x87e0e0000688ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3312 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3313 return 0x87e0e0000688ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3314 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3315 return 0x87e0e0000688ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3316 __bdk_csr_fatal("BGXX_CMRX_TX_STAT17", 2, a, b, 0, 0);
3317 }
3318
3319 #define typedef_BDK_BGXX_CMRX_TX_STAT17(a,b) bdk_bgxx_cmrx_tx_stat17_t
3320 #define bustype_BDK_BGXX_CMRX_TX_STAT17(a,b) BDK_CSR_TYPE_RSL
3321 #define basename_BDK_BGXX_CMRX_TX_STAT17(a,b) "BGXX_CMRX_TX_STAT17"
3322 #define device_bar_BDK_BGXX_CMRX_TX_STAT17(a,b) 0x0 /* PF_BAR0 */
3323 #define busnum_BDK_BGXX_CMRX_TX_STAT17(a,b) (a)
3324 #define arguments_BDK_BGXX_CMRX_TX_STAT17(a,b) (a),(b),-1,-1
3325
3326 /**
3327 * Register (RSL) bgx#_cmr#_tx_stat2
3328 *
3329 * BGX CMR Transmit Statistics Registers 2
3330 */
3331 union bdk_bgxx_cmrx_tx_stat2
3332 {
3333 uint64_t u;
3334 struct bdk_bgxx_cmrx_tx_stat2_s
3335 {
3336 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3337 uint64_t reserved_48_63 : 16;
3338 uint64_t mcol : 48; /**< [ 47: 0](R/W/H) Number of packets sent with multiple collisions. Must be less than
3339 BGX()_GMP_GMI_TX_COL_ATTEMPT[LIMIT]. Half-duplex mode only and not updated
3340 for late collisions.
3341
3342 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3343 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3344 #else /* Word 0 - Little Endian */
3345 uint64_t mcol : 48; /**< [ 47: 0](R/W/H) Number of packets sent with multiple collisions. Must be less than
3346 BGX()_GMP_GMI_TX_COL_ATTEMPT[LIMIT]. Half-duplex mode only and not updated
3347 for late collisions.
3348
3349 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3350 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3351 uint64_t reserved_48_63 : 16;
3352 #endif /* Word 0 - End */
3353 } s;
3354 /* struct bdk_bgxx_cmrx_tx_stat2_s cn; */
3355 };
3356 typedef union bdk_bgxx_cmrx_tx_stat2 bdk_bgxx_cmrx_tx_stat2_t;
3357
3358 static inline uint64_t BDK_BGXX_CMRX_TX_STAT2(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT2(unsigned long a,unsigned long b)3359 static inline uint64_t BDK_BGXX_CMRX_TX_STAT2(unsigned long a, unsigned long b)
3360 {
3361 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3362 return 0x87e0e0000610ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3363 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3364 return 0x87e0e0000610ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3365 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3366 return 0x87e0e0000610ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3367 __bdk_csr_fatal("BGXX_CMRX_TX_STAT2", 2, a, b, 0, 0);
3368 }
3369
3370 #define typedef_BDK_BGXX_CMRX_TX_STAT2(a,b) bdk_bgxx_cmrx_tx_stat2_t
3371 #define bustype_BDK_BGXX_CMRX_TX_STAT2(a,b) BDK_CSR_TYPE_RSL
3372 #define basename_BDK_BGXX_CMRX_TX_STAT2(a,b) "BGXX_CMRX_TX_STAT2"
3373 #define device_bar_BDK_BGXX_CMRX_TX_STAT2(a,b) 0x0 /* PF_BAR0 */
3374 #define busnum_BDK_BGXX_CMRX_TX_STAT2(a,b) (a)
3375 #define arguments_BDK_BGXX_CMRX_TX_STAT2(a,b) (a),(b),-1,-1
3376
3377 /**
3378 * Register (RSL) bgx#_cmr#_tx_stat3
3379 *
3380 * BGX CMR Transmit Statistics Registers 3
3381 */
3382 union bdk_bgxx_cmrx_tx_stat3
3383 {
3384 uint64_t u;
3385 struct bdk_bgxx_cmrx_tx_stat3_s
3386 {
3387 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3388 uint64_t reserved_48_63 : 16;
3389 uint64_t scol : 48; /**< [ 47: 0](R/W/H) Number of packets sent with a single collision. Half-duplex mode only and not updated
3390 for late collisions.
3391
3392 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3393 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3394 #else /* Word 0 - Little Endian */
3395 uint64_t scol : 48; /**< [ 47: 0](R/W/H) Number of packets sent with a single collision. Half-duplex mode only and not updated
3396 for late collisions.
3397
3398 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3399 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3400 uint64_t reserved_48_63 : 16;
3401 #endif /* Word 0 - End */
3402 } s;
3403 /* struct bdk_bgxx_cmrx_tx_stat3_s cn; */
3404 };
3405 typedef union bdk_bgxx_cmrx_tx_stat3 bdk_bgxx_cmrx_tx_stat3_t;
3406
3407 static inline uint64_t BDK_BGXX_CMRX_TX_STAT3(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT3(unsigned long a,unsigned long b)3408 static inline uint64_t BDK_BGXX_CMRX_TX_STAT3(unsigned long a, unsigned long b)
3409 {
3410 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3411 return 0x87e0e0000618ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3412 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3413 return 0x87e0e0000618ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3414 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3415 return 0x87e0e0000618ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3416 __bdk_csr_fatal("BGXX_CMRX_TX_STAT3", 2, a, b, 0, 0);
3417 }
3418
3419 #define typedef_BDK_BGXX_CMRX_TX_STAT3(a,b) bdk_bgxx_cmrx_tx_stat3_t
3420 #define bustype_BDK_BGXX_CMRX_TX_STAT3(a,b) BDK_CSR_TYPE_RSL
3421 #define basename_BDK_BGXX_CMRX_TX_STAT3(a,b) "BGXX_CMRX_TX_STAT3"
3422 #define device_bar_BDK_BGXX_CMRX_TX_STAT3(a,b) 0x0 /* PF_BAR0 */
3423 #define busnum_BDK_BGXX_CMRX_TX_STAT3(a,b) (a)
3424 #define arguments_BDK_BGXX_CMRX_TX_STAT3(a,b) (a),(b),-1,-1
3425
3426 /**
3427 * Register (RSL) bgx#_cmr#_tx_stat4
3428 *
3429 * BGX CMR Transmit Statistics Registers 4
3430 */
3431 union bdk_bgxx_cmrx_tx_stat4
3432 {
3433 uint64_t u;
3434 struct bdk_bgxx_cmrx_tx_stat4_s
3435 {
3436 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3437 uint64_t reserved_48_63 : 16;
3438 uint64_t octs : 48; /**< [ 47: 0](R/W/H) Number of total octets sent on the interface, excluding PAUSE or PFC control packets
3439 generated by BGX. Does not count octets from frames that were truncated due to collisions
3440 in half-duplex mode.
3441 Octet counts are the sum of all data transmitted on the wire including packet data, pad
3442 bytes, FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND
3443 cycles.
3444
3445 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3446 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3447 #else /* Word 0 - Little Endian */
3448 uint64_t octs : 48; /**< [ 47: 0](R/W/H) Number of total octets sent on the interface, excluding PAUSE or PFC control packets
3449 generated by BGX. Does not count octets from frames that were truncated due to collisions
3450 in half-duplex mode.
3451 Octet counts are the sum of all data transmitted on the wire including packet data, pad
3452 bytes, FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND
3453 cycles.
3454
3455 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3456 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3457 uint64_t reserved_48_63 : 16;
3458 #endif /* Word 0 - End */
3459 } s;
3460 /* struct bdk_bgxx_cmrx_tx_stat4_s cn; */
3461 };
3462 typedef union bdk_bgxx_cmrx_tx_stat4 bdk_bgxx_cmrx_tx_stat4_t;
3463
3464 static inline uint64_t BDK_BGXX_CMRX_TX_STAT4(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT4(unsigned long a,unsigned long b)3465 static inline uint64_t BDK_BGXX_CMRX_TX_STAT4(unsigned long a, unsigned long b)
3466 {
3467 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3468 return 0x87e0e0000620ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3469 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3470 return 0x87e0e0000620ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3471 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3472 return 0x87e0e0000620ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3473 __bdk_csr_fatal("BGXX_CMRX_TX_STAT4", 2, a, b, 0, 0);
3474 }
3475
3476 #define typedef_BDK_BGXX_CMRX_TX_STAT4(a,b) bdk_bgxx_cmrx_tx_stat4_t
3477 #define bustype_BDK_BGXX_CMRX_TX_STAT4(a,b) BDK_CSR_TYPE_RSL
3478 #define basename_BDK_BGXX_CMRX_TX_STAT4(a,b) "BGXX_CMRX_TX_STAT4"
3479 #define device_bar_BDK_BGXX_CMRX_TX_STAT4(a,b) 0x0 /* PF_BAR0 */
3480 #define busnum_BDK_BGXX_CMRX_TX_STAT4(a,b) (a)
3481 #define arguments_BDK_BGXX_CMRX_TX_STAT4(a,b) (a),(b),-1,-1
3482
3483 /**
3484 * Register (RSL) bgx#_cmr#_tx_stat5
3485 *
3486 * BGX CMR Transmit Statistics Registers 5
3487 */
3488 union bdk_bgxx_cmrx_tx_stat5
3489 {
3490 uint64_t u;
3491 struct bdk_bgxx_cmrx_tx_stat5_s
3492 {
3493 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3494 uint64_t reserved_48_63 : 16;
3495 uint64_t pkts : 48; /**< [ 47: 0](R/W/H) Number of total frames sent on the interface, excluding PAUSE or PFC control packets
3496 generated by BGX. Does not count octets from frames that were truncated due to collisions
3497 in half-duplex mode.
3498
3499 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3500 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3501 #else /* Word 0 - Little Endian */
3502 uint64_t pkts : 48; /**< [ 47: 0](R/W/H) Number of total frames sent on the interface, excluding PAUSE or PFC control packets
3503 generated by BGX. Does not count octets from frames that were truncated due to collisions
3504 in half-duplex mode.
3505
3506 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3507 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3508 uint64_t reserved_48_63 : 16;
3509 #endif /* Word 0 - End */
3510 } s;
3511 /* struct bdk_bgxx_cmrx_tx_stat5_s cn; */
3512 };
3513 typedef union bdk_bgxx_cmrx_tx_stat5 bdk_bgxx_cmrx_tx_stat5_t;
3514
3515 static inline uint64_t BDK_BGXX_CMRX_TX_STAT5(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT5(unsigned long a,unsigned long b)3516 static inline uint64_t BDK_BGXX_CMRX_TX_STAT5(unsigned long a, unsigned long b)
3517 {
3518 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3519 return 0x87e0e0000628ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3520 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3521 return 0x87e0e0000628ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3522 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3523 return 0x87e0e0000628ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3524 __bdk_csr_fatal("BGXX_CMRX_TX_STAT5", 2, a, b, 0, 0);
3525 }
3526
3527 #define typedef_BDK_BGXX_CMRX_TX_STAT5(a,b) bdk_bgxx_cmrx_tx_stat5_t
3528 #define bustype_BDK_BGXX_CMRX_TX_STAT5(a,b) BDK_CSR_TYPE_RSL
3529 #define basename_BDK_BGXX_CMRX_TX_STAT5(a,b) "BGXX_CMRX_TX_STAT5"
3530 #define device_bar_BDK_BGXX_CMRX_TX_STAT5(a,b) 0x0 /* PF_BAR0 */
3531 #define busnum_BDK_BGXX_CMRX_TX_STAT5(a,b) (a)
3532 #define arguments_BDK_BGXX_CMRX_TX_STAT5(a,b) (a),(b),-1,-1
3533
3534 /**
3535 * Register (RSL) bgx#_cmr#_tx_stat6
3536 *
3537 * BGX CMR Transmit Statistics Registers 6
3538 */
3539 union bdk_bgxx_cmrx_tx_stat6
3540 {
3541 uint64_t u;
3542 struct bdk_bgxx_cmrx_tx_stat6_s
3543 {
3544 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3545 uint64_t reserved_48_63 : 16;
3546 uint64_t hist0 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count \< 64, excluding PAUSE or PFC control packets
3547 generated by BGX. Packet length is the sum of all data transmitted on the wire for the
3548 given packet including packet data, pad bytes, FCS bytes, and JAM bytes. The octet counts
3549 do not include PREAMBLE byte or EXTEND cycles.
3550
3551 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3552 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3553 #else /* Word 0 - Little Endian */
3554 uint64_t hist0 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count \< 64, excluding PAUSE or PFC control packets
3555 generated by BGX. Packet length is the sum of all data transmitted on the wire for the
3556 given packet including packet data, pad bytes, FCS bytes, and JAM bytes. The octet counts
3557 do not include PREAMBLE byte or EXTEND cycles.
3558
3559 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3560 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3561 uint64_t reserved_48_63 : 16;
3562 #endif /* Word 0 - End */
3563 } s;
3564 /* struct bdk_bgxx_cmrx_tx_stat6_s cn; */
3565 };
3566 typedef union bdk_bgxx_cmrx_tx_stat6 bdk_bgxx_cmrx_tx_stat6_t;
3567
3568 static inline uint64_t BDK_BGXX_CMRX_TX_STAT6(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT6(unsigned long a,unsigned long b)3569 static inline uint64_t BDK_BGXX_CMRX_TX_STAT6(unsigned long a, unsigned long b)
3570 {
3571 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3572 return 0x87e0e0000630ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3573 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3574 return 0x87e0e0000630ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3575 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3576 return 0x87e0e0000630ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3577 __bdk_csr_fatal("BGXX_CMRX_TX_STAT6", 2, a, b, 0, 0);
3578 }
3579
3580 #define typedef_BDK_BGXX_CMRX_TX_STAT6(a,b) bdk_bgxx_cmrx_tx_stat6_t
3581 #define bustype_BDK_BGXX_CMRX_TX_STAT6(a,b) BDK_CSR_TYPE_RSL
3582 #define basename_BDK_BGXX_CMRX_TX_STAT6(a,b) "BGXX_CMRX_TX_STAT6"
3583 #define device_bar_BDK_BGXX_CMRX_TX_STAT6(a,b) 0x0 /* PF_BAR0 */
3584 #define busnum_BDK_BGXX_CMRX_TX_STAT6(a,b) (a)
3585 #define arguments_BDK_BGXX_CMRX_TX_STAT6(a,b) (a),(b),-1,-1
3586
3587 /**
3588 * Register (RSL) bgx#_cmr#_tx_stat7
3589 *
3590 * BGX CMR Transmit Statistics Registers 7
3591 */
3592 union bdk_bgxx_cmrx_tx_stat7
3593 {
3594 uint64_t u;
3595 struct bdk_bgxx_cmrx_tx_stat7_s
3596 {
3597 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3598 uint64_t reserved_48_63 : 16;
3599 uint64_t hist1 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count of 64, excluding PAUSE or PFC control packets
3600 generated by BGX. Packet length is the sum of all data transmitted on the wire for the
3601 given packet including packet data, pad bytes, FCS bytes, and JAM bytes. The octet counts
3602 do not include PREAMBLE byte or EXTEND cycles.
3603
3604 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3605 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3606 #else /* Word 0 - Little Endian */
3607 uint64_t hist1 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count of 64, excluding PAUSE or PFC control packets
3608 generated by BGX. Packet length is the sum of all data transmitted on the wire for the
3609 given packet including packet data, pad bytes, FCS bytes, and JAM bytes. The octet counts
3610 do not include PREAMBLE byte or EXTEND cycles.
3611
3612 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3613 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3614 uint64_t reserved_48_63 : 16;
3615 #endif /* Word 0 - End */
3616 } s;
3617 /* struct bdk_bgxx_cmrx_tx_stat7_s cn; */
3618 };
3619 typedef union bdk_bgxx_cmrx_tx_stat7 bdk_bgxx_cmrx_tx_stat7_t;
3620
3621 static inline uint64_t BDK_BGXX_CMRX_TX_STAT7(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT7(unsigned long a,unsigned long b)3622 static inline uint64_t BDK_BGXX_CMRX_TX_STAT7(unsigned long a, unsigned long b)
3623 {
3624 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3625 return 0x87e0e0000638ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3626 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3627 return 0x87e0e0000638ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3628 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3629 return 0x87e0e0000638ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3630 __bdk_csr_fatal("BGXX_CMRX_TX_STAT7", 2, a, b, 0, 0);
3631 }
3632
3633 #define typedef_BDK_BGXX_CMRX_TX_STAT7(a,b) bdk_bgxx_cmrx_tx_stat7_t
3634 #define bustype_BDK_BGXX_CMRX_TX_STAT7(a,b) BDK_CSR_TYPE_RSL
3635 #define basename_BDK_BGXX_CMRX_TX_STAT7(a,b) "BGXX_CMRX_TX_STAT7"
3636 #define device_bar_BDK_BGXX_CMRX_TX_STAT7(a,b) 0x0 /* PF_BAR0 */
3637 #define busnum_BDK_BGXX_CMRX_TX_STAT7(a,b) (a)
3638 #define arguments_BDK_BGXX_CMRX_TX_STAT7(a,b) (a),(b),-1,-1
3639
3640 /**
3641 * Register (RSL) bgx#_cmr#_tx_stat8
3642 *
3643 * BGX CMR Transmit Statistics Registers 8
3644 */
3645 union bdk_bgxx_cmrx_tx_stat8
3646 {
3647 uint64_t u;
3648 struct bdk_bgxx_cmrx_tx_stat8_s
3649 {
3650 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3651 uint64_t reserved_48_63 : 16;
3652 uint64_t hist2 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 65-127. Packet length is the sum of all
3653 data transmitted on the wire for the given packet including packet data, pad bytes, FCS
3654 bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3655
3656 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3657 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3658 #else /* Word 0 - Little Endian */
3659 uint64_t hist2 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 65-127. Packet length is the sum of all
3660 data transmitted on the wire for the given packet including packet data, pad bytes, FCS
3661 bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3662
3663 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3664 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3665 uint64_t reserved_48_63 : 16;
3666 #endif /* Word 0 - End */
3667 } s;
3668 /* struct bdk_bgxx_cmrx_tx_stat8_s cn; */
3669 };
3670 typedef union bdk_bgxx_cmrx_tx_stat8 bdk_bgxx_cmrx_tx_stat8_t;
3671
3672 static inline uint64_t BDK_BGXX_CMRX_TX_STAT8(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT8(unsigned long a,unsigned long b)3673 static inline uint64_t BDK_BGXX_CMRX_TX_STAT8(unsigned long a, unsigned long b)
3674 {
3675 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3676 return 0x87e0e0000640ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3677 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3678 return 0x87e0e0000640ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3679 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3680 return 0x87e0e0000640ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3681 __bdk_csr_fatal("BGXX_CMRX_TX_STAT8", 2, a, b, 0, 0);
3682 }
3683
3684 #define typedef_BDK_BGXX_CMRX_TX_STAT8(a,b) bdk_bgxx_cmrx_tx_stat8_t
3685 #define bustype_BDK_BGXX_CMRX_TX_STAT8(a,b) BDK_CSR_TYPE_RSL
3686 #define basename_BDK_BGXX_CMRX_TX_STAT8(a,b) "BGXX_CMRX_TX_STAT8"
3687 #define device_bar_BDK_BGXX_CMRX_TX_STAT8(a,b) 0x0 /* PF_BAR0 */
3688 #define busnum_BDK_BGXX_CMRX_TX_STAT8(a,b) (a)
3689 #define arguments_BDK_BGXX_CMRX_TX_STAT8(a,b) (a),(b),-1,-1
3690
3691 /**
3692 * Register (RSL) bgx#_cmr#_tx_stat9
3693 *
3694 * BGX CMR Transmit Statistics Registers 9
3695 */
3696 union bdk_bgxx_cmrx_tx_stat9
3697 {
3698 uint64_t u;
3699 struct bdk_bgxx_cmrx_tx_stat9_s
3700 {
3701 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3702 uint64_t reserved_48_63 : 16;
3703 uint64_t hist3 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 128-255. Packet length is the sum of
3704 all data transmitted on the wire for the given packet including packet data, pad bytes,
3705 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3706
3707 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3708 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3709 #else /* Word 0 - Little Endian */
3710 uint64_t hist3 : 48; /**< [ 47: 0](R/W/H) Number of packets sent with an octet count between 128-255. Packet length is the sum of
3711 all data transmitted on the wire for the given packet including packet data, pad bytes,
3712 FCS bytes, and JAM bytes. The octet counts do not include PREAMBLE byte or EXTEND cycles.
3713
3714 Not cleared on read; cleared on a write with 0x0. Counters will wrap. Cleared if LMAC is
3715 disabled with BGX()_CMR()_CONFIG[ENABLE]=0. */
3716 uint64_t reserved_48_63 : 16;
3717 #endif /* Word 0 - End */
3718 } s;
3719 /* struct bdk_bgxx_cmrx_tx_stat9_s cn; */
3720 };
3721 typedef union bdk_bgxx_cmrx_tx_stat9 bdk_bgxx_cmrx_tx_stat9_t;
3722
3723 static inline uint64_t BDK_BGXX_CMRX_TX_STAT9(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMRX_TX_STAT9(unsigned long a,unsigned long b)3724 static inline uint64_t BDK_BGXX_CMRX_TX_STAT9(unsigned long a, unsigned long b)
3725 {
3726 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
3727 return 0x87e0e0000648ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3728 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
3729 return 0x87e0e0000648ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
3730 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
3731 return 0x87e0e0000648ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
3732 __bdk_csr_fatal("BGXX_CMRX_TX_STAT9", 2, a, b, 0, 0);
3733 }
3734
3735 #define typedef_BDK_BGXX_CMRX_TX_STAT9(a,b) bdk_bgxx_cmrx_tx_stat9_t
3736 #define bustype_BDK_BGXX_CMRX_TX_STAT9(a,b) BDK_CSR_TYPE_RSL
3737 #define basename_BDK_BGXX_CMRX_TX_STAT9(a,b) "BGXX_CMRX_TX_STAT9"
3738 #define device_bar_BDK_BGXX_CMRX_TX_STAT9(a,b) 0x0 /* PF_BAR0 */
3739 #define busnum_BDK_BGXX_CMRX_TX_STAT9(a,b) (a)
3740 #define arguments_BDK_BGXX_CMRX_TX_STAT9(a,b) (a),(b),-1,-1
3741
3742 /**
3743 * Register (RSL) bgx#_cmr_bad
3744 *
3745 * BGX CMR Bad Registers
3746 */
3747 union bdk_bgxx_cmr_bad
3748 {
3749 uint64_t u;
3750 struct bdk_bgxx_cmr_bad_s
3751 {
3752 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3753 uint64_t reserved_1_63 : 63;
3754 uint64_t rxb_nxl : 1; /**< [ 0: 0](R/W1C/H) Receive side LMAC ID \> BGX()_CMR_RX_LMACS. */
3755 #else /* Word 0 - Little Endian */
3756 uint64_t rxb_nxl : 1; /**< [ 0: 0](R/W1C/H) Receive side LMAC ID \> BGX()_CMR_RX_LMACS. */
3757 uint64_t reserved_1_63 : 63;
3758 #endif /* Word 0 - End */
3759 } s;
3760 /* struct bdk_bgxx_cmr_bad_s cn; */
3761 };
3762 typedef union bdk_bgxx_cmr_bad bdk_bgxx_cmr_bad_t;
3763
3764 static inline uint64_t BDK_BGXX_CMR_BAD(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_BAD(unsigned long a)3765 static inline uint64_t BDK_BGXX_CMR_BAD(unsigned long a)
3766 {
3767 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
3768 return 0x87e0e0001020ll + 0x1000000ll * ((a) & 0x1);
3769 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
3770 return 0x87e0e0001020ll + 0x1000000ll * ((a) & 0x3);
3771 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
3772 return 0x87e0e0001020ll + 0x1000000ll * ((a) & 0x1);
3773 __bdk_csr_fatal("BGXX_CMR_BAD", 1, a, 0, 0, 0);
3774 }
3775
3776 #define typedef_BDK_BGXX_CMR_BAD(a) bdk_bgxx_cmr_bad_t
3777 #define bustype_BDK_BGXX_CMR_BAD(a) BDK_CSR_TYPE_RSL
3778 #define basename_BDK_BGXX_CMR_BAD(a) "BGXX_CMR_BAD"
3779 #define device_bar_BDK_BGXX_CMR_BAD(a) 0x0 /* PF_BAR0 */
3780 #define busnum_BDK_BGXX_CMR_BAD(a) (a)
3781 #define arguments_BDK_BGXX_CMR_BAD(a) (a),-1,-1,-1
3782
3783 /**
3784 * Register (RSL) bgx#_cmr_bist_status
3785 *
3786 * BGX Built-in Self-Test Registers
3787 */
3788 union bdk_bgxx_cmr_bist_status
3789 {
3790 uint64_t u;
3791 struct bdk_bgxx_cmr_bist_status_s
3792 {
3793 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3794 uint64_t reserved_27_63 : 37;
3795 uint64_t status : 27; /**< [ 26: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
3796 run.'
3797
3798 Internal:
3799 "\<0\> = bgx#.rxb.infif_gmp.
3800 \<1\> = bgx#.rxb.infif_smu.
3801 \<2\> = bgx#.rxb.fif_bnk00.
3802 \<3\> = bgx#.rxb.fif_bnk01.
3803 \<4\> = bgx#.rxb.fif_bnk10.
3804 \<5\> = bgx#.rxb.fif_bnk11.
3805 \<6\> = bgx#.rxb.pki_skd_fif.
3806 \<7\> = bgx#.rxb.nic_skd_fif.
3807 \<8\> = bgx#.rxb_mix0_fif.
3808 \<9\> = bgx#.rxb_mix1_fif.
3809 \<10\> = 0.
3810 \<11\> = bgx#.txb_fif_bnk0.
3811 \<12\> = bgx#.txb_fif_bnk1.
3812 \<13\> = bgx#.txb_skd_m0_pko_fif.
3813 \<14\> = bgx#.txb_skd_m1_pko_fif.
3814 \<15\> = bgx#.txb_skd_m2_pko_fif.
3815 \<16\> = bgx#.txb_skd_m3_pko_fif.
3816 \<17\> = bgx#.txb_skd_m0_nic_fif.
3817 \<18\> = bgx#.txb_skd_m1_nic_fif.
3818 \<19\> = bgx#.txb_skd_m2_nic_fif.
3819 \<20\> = bgx#.txb_skd_m3_nic_fif.
3820 \<21\> = bgx#.txb_mix0_fif.
3821 \<22\> = bgx#.txb_mix1_fif.
3822 \<23\> = bgx#.txb_ncsi_fif.
3823 \<24\> = 0." */
3824 #else /* Word 0 - Little Endian */
3825 uint64_t status : 27; /**< [ 26: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
3826 run.'
3827
3828 Internal:
3829 "\<0\> = bgx#.rxb.infif_gmp.
3830 \<1\> = bgx#.rxb.infif_smu.
3831 \<2\> = bgx#.rxb.fif_bnk00.
3832 \<3\> = bgx#.rxb.fif_bnk01.
3833 \<4\> = bgx#.rxb.fif_bnk10.
3834 \<5\> = bgx#.rxb.fif_bnk11.
3835 \<6\> = bgx#.rxb.pki_skd_fif.
3836 \<7\> = bgx#.rxb.nic_skd_fif.
3837 \<8\> = bgx#.rxb_mix0_fif.
3838 \<9\> = bgx#.rxb_mix1_fif.
3839 \<10\> = 0.
3840 \<11\> = bgx#.txb_fif_bnk0.
3841 \<12\> = bgx#.txb_fif_bnk1.
3842 \<13\> = bgx#.txb_skd_m0_pko_fif.
3843 \<14\> = bgx#.txb_skd_m1_pko_fif.
3844 \<15\> = bgx#.txb_skd_m2_pko_fif.
3845 \<16\> = bgx#.txb_skd_m3_pko_fif.
3846 \<17\> = bgx#.txb_skd_m0_nic_fif.
3847 \<18\> = bgx#.txb_skd_m1_nic_fif.
3848 \<19\> = bgx#.txb_skd_m2_nic_fif.
3849 \<20\> = bgx#.txb_skd_m3_nic_fif.
3850 \<21\> = bgx#.txb_mix0_fif.
3851 \<22\> = bgx#.txb_mix1_fif.
3852 \<23\> = bgx#.txb_ncsi_fif.
3853 \<24\> = 0." */
3854 uint64_t reserved_27_63 : 37;
3855 #endif /* Word 0 - End */
3856 } s;
3857 struct bdk_bgxx_cmr_bist_status_cn81xx
3858 {
3859 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3860 uint64_t reserved_25_63 : 39;
3861 uint64_t status : 25; /**< [ 24: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
3862 run.'
3863
3864 Internal:
3865 "\<0\> = bgx#.rxb.infif_gmp.
3866 \<1\> = bgx#.rxb.infif_smu.
3867 \<2\> = bgx#.rxb.fif_bnk00.
3868 \<3\> = bgx#.rxb.fif_bnk01.
3869 \<4\> = bgx#.rxb.fif_bnk10.
3870 \<5\> = bgx#.rxb.fif_bnk11.
3871 \<6\> = bgx#.rxb.pki_skd_fif.
3872 \<7\> = bgx#.rxb.nic_skd_fif.
3873 \<8\> = bgx#.rxb_mix0_fif.
3874 \<9\> = bgx#.rxb_mix1_fif.
3875 \<10\> = 0.
3876 \<11\> = bgx#.txb_fif_bnk0.
3877 \<12\> = bgx#.txb_fif_bnk1.
3878 \<13\> = bgx#.txb_skd_m0_pko_fif.
3879 \<14\> = bgx#.txb_skd_m1_pko_fif.
3880 \<15\> = bgx#.txb_skd_m2_pko_fif.
3881 \<16\> = bgx#.txb_skd_m3_pko_fif.
3882 \<17\> = bgx#.txb_skd_m0_nic_fif.
3883 \<18\> = bgx#.txb_skd_m1_nic_fif.
3884 \<19\> = bgx#.txb_skd_m2_nic_fif.
3885 \<20\> = bgx#.txb_skd_m3_nic_fif.
3886 \<21\> = bgx#.txb_mix0_fif.
3887 \<22\> = bgx#.txb_mix1_fif.
3888 \<23\> = bgx#.txb_ncsi_fif.
3889 \<24\> = 0." */
3890 #else /* Word 0 - Little Endian */
3891 uint64_t status : 25; /**< [ 24: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
3892 run.'
3893
3894 Internal:
3895 "\<0\> = bgx#.rxb.infif_gmp.
3896 \<1\> = bgx#.rxb.infif_smu.
3897 \<2\> = bgx#.rxb.fif_bnk00.
3898 \<3\> = bgx#.rxb.fif_bnk01.
3899 \<4\> = bgx#.rxb.fif_bnk10.
3900 \<5\> = bgx#.rxb.fif_bnk11.
3901 \<6\> = bgx#.rxb.pki_skd_fif.
3902 \<7\> = bgx#.rxb.nic_skd_fif.
3903 \<8\> = bgx#.rxb_mix0_fif.
3904 \<9\> = bgx#.rxb_mix1_fif.
3905 \<10\> = 0.
3906 \<11\> = bgx#.txb_fif_bnk0.
3907 \<12\> = bgx#.txb_fif_bnk1.
3908 \<13\> = bgx#.txb_skd_m0_pko_fif.
3909 \<14\> = bgx#.txb_skd_m1_pko_fif.
3910 \<15\> = bgx#.txb_skd_m2_pko_fif.
3911 \<16\> = bgx#.txb_skd_m3_pko_fif.
3912 \<17\> = bgx#.txb_skd_m0_nic_fif.
3913 \<18\> = bgx#.txb_skd_m1_nic_fif.
3914 \<19\> = bgx#.txb_skd_m2_nic_fif.
3915 \<20\> = bgx#.txb_skd_m3_nic_fif.
3916 \<21\> = bgx#.txb_mix0_fif.
3917 \<22\> = bgx#.txb_mix1_fif.
3918 \<23\> = bgx#.txb_ncsi_fif.
3919 \<24\> = 0." */
3920 uint64_t reserved_25_63 : 39;
3921 #endif /* Word 0 - End */
3922 } cn81xx;
3923 struct bdk_bgxx_cmr_bist_status_cn88xx
3924 {
3925 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3926 uint64_t reserved_25_63 : 39;
3927 uint64_t status : 25; /**< [ 24: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
3928 run.'
3929
3930 Internal:
3931 "\<0\> = bgx#.rxb.infif_gmp.
3932 \<1\> = bgx#.rxb.infif_smu.
3933 \<2\> = bgx#.rxb.fif_bnk00.
3934 \<3\> = bgx#.rxb.fif_bnk01.
3935 \<4\> = bgx#.rxb.fif_bnk10.
3936 \<5\> = bgx#.rxb.fif_bnk11.
3937 \<6\> = bgx#.rxb.skd_fif.
3938 \<7\> = bgx#.rxb_mix0_fif.
3939 \<8\> = bgx#.rxb_mix1_fif.
3940 \<9\> = 0.
3941 \<10\> = bgx#.txb_fif_bnk0.
3942 \<11\> = bgx#.txb_fif_bnk1.
3943 \<12\> = bgx#.txb_skd_m0_fif.
3944 \<13\> = bgx#.txb_skd_m1_fif.
3945 \<14\> = bgx#.txb_skd_m2_fif.
3946 \<15\> = bgx#.txb_skd_m3_fif.
3947 \<16\> = bgx#.txb_mix0_fif.
3948 \<17\> = bgx#.txb_mix1_fif.
3949 \<18\> = bgx#.txb_ncsi_fif.
3950 \<24:19\> = 0x0." */
3951 #else /* Word 0 - Little Endian */
3952 uint64_t status : 25; /**< [ 24: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
3953 run.'
3954
3955 Internal:
3956 "\<0\> = bgx#.rxb.infif_gmp.
3957 \<1\> = bgx#.rxb.infif_smu.
3958 \<2\> = bgx#.rxb.fif_bnk00.
3959 \<3\> = bgx#.rxb.fif_bnk01.
3960 \<4\> = bgx#.rxb.fif_bnk10.
3961 \<5\> = bgx#.rxb.fif_bnk11.
3962 \<6\> = bgx#.rxb.skd_fif.
3963 \<7\> = bgx#.rxb_mix0_fif.
3964 \<8\> = bgx#.rxb_mix1_fif.
3965 \<9\> = 0.
3966 \<10\> = bgx#.txb_fif_bnk0.
3967 \<11\> = bgx#.txb_fif_bnk1.
3968 \<12\> = bgx#.txb_skd_m0_fif.
3969 \<13\> = bgx#.txb_skd_m1_fif.
3970 \<14\> = bgx#.txb_skd_m2_fif.
3971 \<15\> = bgx#.txb_skd_m3_fif.
3972 \<16\> = bgx#.txb_mix0_fif.
3973 \<17\> = bgx#.txb_mix1_fif.
3974 \<18\> = bgx#.txb_ncsi_fif.
3975 \<24:19\> = 0x0." */
3976 uint64_t reserved_25_63 : 39;
3977 #endif /* Word 0 - End */
3978 } cn88xx;
3979 struct bdk_bgxx_cmr_bist_status_cn83xx
3980 {
3981 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
3982 uint64_t reserved_27_63 : 37;
3983 uint64_t status : 27; /**< [ 26: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
3984 run.'
3985
3986 Internal:
3987 "\<0\> = bgx#.rxb.infif_gmp.
3988 \<1\> = bgx#.rxb.infif_smu.
3989 \<2\> = bgx#.rxb.fif_bnk00.
3990 \<3\> = bgx#.rxb.fif_bnk01.
3991 \<4\> = bgx#.rxb.fif_bnk10.
3992 \<5\> = bgx#.rxb.fif_bnk11.
3993 \<6\> = bgx#.rxb.pki_skd_fif.
3994 \<7\> = bgx#.rxb.nic_skd_fif.
3995 \<8\> = bgx#.rxb_mix0_fif.
3996 \<9\> = bgx#.rxb_mix1_fif.
3997 \<10\> = 0.
3998 \<11\> = bgx#.txb_fif_mem0.
3999 \<12\> = bgx#.txb_fif_mem1.
4000 \<13\> = bgx#.txb_fif_mem2.
4001 \<14\> = bgx#.txb_fif_mem3.
4002 \<15\> = bgx#.txb_skd_m0_pko_fif.
4003 \<16\> = bgx#.txb_skd_m1_pko_fif.
4004 \<17\> = bgx#.txb_skd_m2_pko_fif.
4005 \<18\> = bgx#.txb_skd_m3_pko_fif.
4006 \<19\> = bgx#.txb_skd_m0_nic_fif.
4007 \<20\> = bgx#.txb_skd_m1_nic_fif.
4008 \<21\> = bgx#.txb_skd_m2_nic_fif.
4009 \<22\> = bgx#.txb_skd_m3_nic_fif.
4010 \<23\> = bgx#.txb_mix0_fif.
4011 \<24\> = bgx#.txb_mix1_fif.
4012 \<25\> = bgx#.txb_ncsi_fif.
4013 \<26\> = 0." */
4014 #else /* Word 0 - Little Endian */
4015 uint64_t status : 27; /**< [ 26: 0](RO/H) '"BIST results. Hardware sets a bit to 1 for memory that fails; 0 indicates pass or never
4016 run.'
4017
4018 Internal:
4019 "\<0\> = bgx#.rxb.infif_gmp.
4020 \<1\> = bgx#.rxb.infif_smu.
4021 \<2\> = bgx#.rxb.fif_bnk00.
4022 \<3\> = bgx#.rxb.fif_bnk01.
4023 \<4\> = bgx#.rxb.fif_bnk10.
4024 \<5\> = bgx#.rxb.fif_bnk11.
4025 \<6\> = bgx#.rxb.pki_skd_fif.
4026 \<7\> = bgx#.rxb.nic_skd_fif.
4027 \<8\> = bgx#.rxb_mix0_fif.
4028 \<9\> = bgx#.rxb_mix1_fif.
4029 \<10\> = 0.
4030 \<11\> = bgx#.txb_fif_mem0.
4031 \<12\> = bgx#.txb_fif_mem1.
4032 \<13\> = bgx#.txb_fif_mem2.
4033 \<14\> = bgx#.txb_fif_mem3.
4034 \<15\> = bgx#.txb_skd_m0_pko_fif.
4035 \<16\> = bgx#.txb_skd_m1_pko_fif.
4036 \<17\> = bgx#.txb_skd_m2_pko_fif.
4037 \<18\> = bgx#.txb_skd_m3_pko_fif.
4038 \<19\> = bgx#.txb_skd_m0_nic_fif.
4039 \<20\> = bgx#.txb_skd_m1_nic_fif.
4040 \<21\> = bgx#.txb_skd_m2_nic_fif.
4041 \<22\> = bgx#.txb_skd_m3_nic_fif.
4042 \<23\> = bgx#.txb_mix0_fif.
4043 \<24\> = bgx#.txb_mix1_fif.
4044 \<25\> = bgx#.txb_ncsi_fif.
4045 \<26\> = 0." */
4046 uint64_t reserved_27_63 : 37;
4047 #endif /* Word 0 - End */
4048 } cn83xx;
4049 };
4050 typedef union bdk_bgxx_cmr_bist_status bdk_bgxx_cmr_bist_status_t;
4051
4052 static inline uint64_t BDK_BGXX_CMR_BIST_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_BIST_STATUS(unsigned long a)4053 static inline uint64_t BDK_BGXX_CMR_BIST_STATUS(unsigned long a)
4054 {
4055 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
4056 return 0x87e0e0000460ll + 0x1000000ll * ((a) & 0x1);
4057 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
4058 return 0x87e0e0000460ll + 0x1000000ll * ((a) & 0x3);
4059 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
4060 return 0x87e0e0000460ll + 0x1000000ll * ((a) & 0x1);
4061 __bdk_csr_fatal("BGXX_CMR_BIST_STATUS", 1, a, 0, 0, 0);
4062 }
4063
4064 #define typedef_BDK_BGXX_CMR_BIST_STATUS(a) bdk_bgxx_cmr_bist_status_t
4065 #define bustype_BDK_BGXX_CMR_BIST_STATUS(a) BDK_CSR_TYPE_RSL
4066 #define basename_BDK_BGXX_CMR_BIST_STATUS(a) "BGXX_CMR_BIST_STATUS"
4067 #define device_bar_BDK_BGXX_CMR_BIST_STATUS(a) 0x0 /* PF_BAR0 */
4068 #define busnum_BDK_BGXX_CMR_BIST_STATUS(a) (a)
4069 #define arguments_BDK_BGXX_CMR_BIST_STATUS(a) (a),-1,-1,-1
4070
4071 /**
4072 * Register (RSL) bgx#_cmr_chan_msk_and
4073 *
4074 * BGX CMR Backpressure Channel Mask AND Registers
4075 */
4076 union bdk_bgxx_cmr_chan_msk_and
4077 {
4078 uint64_t u;
4079 struct bdk_bgxx_cmr_chan_msk_and_s
4080 {
4081 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4082 uint64_t msk_and : 64; /**< [ 63: 0](R/W) Assert physical backpressure when the backpressure channel vector combined with [MSK_AND]
4083 indicates backpressure as follows:
4084 _ phys_bp_msk_and = [MSK_AND]\<x:y\> != 0 && (chan_vector\<x:y\> & [MSK_AND]\<x:y\>) ==
4085 [MSK_AND]\<x:y\>
4086 _ phys_bp = phys_bp_msk_or || phys_bp_msk_and
4087
4088 x/y are as follows:
4089 _ LMAC 0: \<x:y\> = \<15:0\>.
4090 _ LMAC 1: \<x:y\> = \<31:16\>.
4091 _ LMAC 2: \<x:y\> = \<47:32\>.
4092 _ LMAC 3: \<x:y\> = \<63:48\>. */
4093 #else /* Word 0 - Little Endian */
4094 uint64_t msk_and : 64; /**< [ 63: 0](R/W) Assert physical backpressure when the backpressure channel vector combined with [MSK_AND]
4095 indicates backpressure as follows:
4096 _ phys_bp_msk_and = [MSK_AND]\<x:y\> != 0 && (chan_vector\<x:y\> & [MSK_AND]\<x:y\>) ==
4097 [MSK_AND]\<x:y\>
4098 _ phys_bp = phys_bp_msk_or || phys_bp_msk_and
4099
4100 x/y are as follows:
4101 _ LMAC 0: \<x:y\> = \<15:0\>.
4102 _ LMAC 1: \<x:y\> = \<31:16\>.
4103 _ LMAC 2: \<x:y\> = \<47:32\>.
4104 _ LMAC 3: \<x:y\> = \<63:48\>. */
4105 #endif /* Word 0 - End */
4106 } s;
4107 /* struct bdk_bgxx_cmr_chan_msk_and_s cn; */
4108 };
4109 typedef union bdk_bgxx_cmr_chan_msk_and bdk_bgxx_cmr_chan_msk_and_t;
4110
4111 static inline uint64_t BDK_BGXX_CMR_CHAN_MSK_AND(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_CHAN_MSK_AND(unsigned long a)4112 static inline uint64_t BDK_BGXX_CMR_CHAN_MSK_AND(unsigned long a)
4113 {
4114 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
4115 return 0x87e0e0000450ll + 0x1000000ll * ((a) & 0x1);
4116 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
4117 return 0x87e0e0000450ll + 0x1000000ll * ((a) & 0x3);
4118 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
4119 return 0x87e0e0000450ll + 0x1000000ll * ((a) & 0x1);
4120 __bdk_csr_fatal("BGXX_CMR_CHAN_MSK_AND", 1, a, 0, 0, 0);
4121 }
4122
4123 #define typedef_BDK_BGXX_CMR_CHAN_MSK_AND(a) bdk_bgxx_cmr_chan_msk_and_t
4124 #define bustype_BDK_BGXX_CMR_CHAN_MSK_AND(a) BDK_CSR_TYPE_RSL
4125 #define basename_BDK_BGXX_CMR_CHAN_MSK_AND(a) "BGXX_CMR_CHAN_MSK_AND"
4126 #define device_bar_BDK_BGXX_CMR_CHAN_MSK_AND(a) 0x0 /* PF_BAR0 */
4127 #define busnum_BDK_BGXX_CMR_CHAN_MSK_AND(a) (a)
4128 #define arguments_BDK_BGXX_CMR_CHAN_MSK_AND(a) (a),-1,-1,-1
4129
4130 /**
4131 * Register (RSL) bgx#_cmr_chan_msk_or
4132 *
4133 * BGX Backpressure Channel Mask OR Registers
4134 */
4135 union bdk_bgxx_cmr_chan_msk_or
4136 {
4137 uint64_t u;
4138 struct bdk_bgxx_cmr_chan_msk_or_s
4139 {
4140 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4141 uint64_t msk_or : 64; /**< [ 63: 0](R/W) Assert physical backpressure when the backpressure channel vector combined with [MSK_OR]
4142 indicates backpressure as follows:
4143
4144 _ phys_bp_msk_or = (chan_vector\<x:y\> & [MSK_OR]\<x:y\>) != 0
4145 _ phys_bp = phys_bp_msk_or || phys_bp_msk_and
4146
4147 x/y are as follows:
4148 _ LMAC 0: \<x:y\> = \<15:0\>.
4149 _ LMAC 1: \<x:y\> = \<31:16\>.
4150 _ LMAC 2: \<x:y\> = \<47:32\>.
4151 _ LMAC 3: \<x:y\> = \<63:48\>. */
4152 #else /* Word 0 - Little Endian */
4153 uint64_t msk_or : 64; /**< [ 63: 0](R/W) Assert physical backpressure when the backpressure channel vector combined with [MSK_OR]
4154 indicates backpressure as follows:
4155
4156 _ phys_bp_msk_or = (chan_vector\<x:y\> & [MSK_OR]\<x:y\>) != 0
4157 _ phys_bp = phys_bp_msk_or || phys_bp_msk_and
4158
4159 x/y are as follows:
4160 _ LMAC 0: \<x:y\> = \<15:0\>.
4161 _ LMAC 1: \<x:y\> = \<31:16\>.
4162 _ LMAC 2: \<x:y\> = \<47:32\>.
4163 _ LMAC 3: \<x:y\> = \<63:48\>. */
4164 #endif /* Word 0 - End */
4165 } s;
4166 /* struct bdk_bgxx_cmr_chan_msk_or_s cn; */
4167 };
4168 typedef union bdk_bgxx_cmr_chan_msk_or bdk_bgxx_cmr_chan_msk_or_t;
4169
4170 static inline uint64_t BDK_BGXX_CMR_CHAN_MSK_OR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_CHAN_MSK_OR(unsigned long a)4171 static inline uint64_t BDK_BGXX_CMR_CHAN_MSK_OR(unsigned long a)
4172 {
4173 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
4174 return 0x87e0e0000458ll + 0x1000000ll * ((a) & 0x1);
4175 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
4176 return 0x87e0e0000458ll + 0x1000000ll * ((a) & 0x3);
4177 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
4178 return 0x87e0e0000458ll + 0x1000000ll * ((a) & 0x1);
4179 __bdk_csr_fatal("BGXX_CMR_CHAN_MSK_OR", 1, a, 0, 0, 0);
4180 }
4181
4182 #define typedef_BDK_BGXX_CMR_CHAN_MSK_OR(a) bdk_bgxx_cmr_chan_msk_or_t
4183 #define bustype_BDK_BGXX_CMR_CHAN_MSK_OR(a) BDK_CSR_TYPE_RSL
4184 #define basename_BDK_BGXX_CMR_CHAN_MSK_OR(a) "BGXX_CMR_CHAN_MSK_OR"
4185 #define device_bar_BDK_BGXX_CMR_CHAN_MSK_OR(a) 0x0 /* PF_BAR0 */
4186 #define busnum_BDK_BGXX_CMR_CHAN_MSK_OR(a) (a)
4187 #define arguments_BDK_BGXX_CMR_CHAN_MSK_OR(a) (a),-1,-1,-1
4188
4189 /**
4190 * Register (RSL) bgx#_cmr_eco
4191 *
4192 * INTERNAL: BGX ECO Registers
4193 */
4194 union bdk_bgxx_cmr_eco
4195 {
4196 uint64_t u;
4197 struct bdk_bgxx_cmr_eco_s
4198 {
4199 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4200 uint64_t eco_ro : 32; /**< [ 63: 32](RO) Internal:
4201 Reserved for ECO usage. */
4202 uint64_t eco_rw : 32; /**< [ 31: 0](R/W) Internal:
4203 Reserved for ECO usage. */
4204 #else /* Word 0 - Little Endian */
4205 uint64_t eco_rw : 32; /**< [ 31: 0](R/W) Internal:
4206 Reserved for ECO usage. */
4207 uint64_t eco_ro : 32; /**< [ 63: 32](RO) Internal:
4208 Reserved for ECO usage. */
4209 #endif /* Word 0 - End */
4210 } s;
4211 /* struct bdk_bgxx_cmr_eco_s cn; */
4212 };
4213 typedef union bdk_bgxx_cmr_eco bdk_bgxx_cmr_eco_t;
4214
4215 static inline uint64_t BDK_BGXX_CMR_ECO(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_ECO(unsigned long a)4216 static inline uint64_t BDK_BGXX_CMR_ECO(unsigned long a)
4217 {
4218 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
4219 return 0x87e0e0001028ll + 0x1000000ll * ((a) & 0x1);
4220 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
4221 return 0x87e0e0001028ll + 0x1000000ll * ((a) & 0x3);
4222 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX_PASS2_X) && (a<=1))
4223 return 0x87e0e0001028ll + 0x1000000ll * ((a) & 0x1);
4224 __bdk_csr_fatal("BGXX_CMR_ECO", 1, a, 0, 0, 0);
4225 }
4226
4227 #define typedef_BDK_BGXX_CMR_ECO(a) bdk_bgxx_cmr_eco_t
4228 #define bustype_BDK_BGXX_CMR_ECO(a) BDK_CSR_TYPE_RSL
4229 #define basename_BDK_BGXX_CMR_ECO(a) "BGXX_CMR_ECO"
4230 #define device_bar_BDK_BGXX_CMR_ECO(a) 0x0 /* PF_BAR0 */
4231 #define busnum_BDK_BGXX_CMR_ECO(a) (a)
4232 #define arguments_BDK_BGXX_CMR_ECO(a) (a),-1,-1,-1
4233
4234 /**
4235 * Register (RSL) bgx#_cmr_global_config
4236 *
4237 * BGX CMR Global Configuration Register
4238 * These registers configure the global CMR, PCS, and MAC.
4239 */
4240 union bdk_bgxx_cmr_global_config
4241 {
4242 uint64_t u;
4243 struct bdk_bgxx_cmr_global_config_s
4244 {
4245 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4246 uint64_t reserved_12_63 : 52;
4247 uint64_t cmr_x2p1_reset : 1; /**< [ 11: 11](R/W) If the master block connected to X2P interface 1 is reset, software also needs
4248 to reset the X2P interface in the BGX by setting this bit. It resets the X2P
4249 interface state in the BGX (skid FIFO and pending requests to the master block)
4250 and prevents the RXB FIFOs for all LMACs from pushing data to the
4251 interface. Because the X2P and NCSI interfaces share the main RXB FIFOs it will
4252 also impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP]
4253 bit first before setting this bit.
4254
4255 Clearing this does not reset the X2P interface nor NCSI interface. After the
4256 master block comes out of reset, software should clear this bit. */
4257 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4258 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4259 commanded by the
4260 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4261 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4262 configure
4263 the rest of the BGX csr for pass through traffic.
4264
4265 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4266 should traffic be flowing. This bit will not reset the main RXB fifos. */
4267 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4268 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4269 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4270 to the NCSI interface while performing a X2P partner reset.
4271 0 = Allow traffic to flow through the NCSI block. */
4272 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4273 is
4274 also the LMAC_ID that is eligible for steering. */
4275 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4276 bytes, the packet will be removed.
4277 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4278 uint64_t interleave_mode : 1; /**< [ 5: 5](R/W) A setting of 0 means the BGX will operate in non-interleaved mode where there is 1 packet
4279 from a given lmac in flight on the X2P interface to TNS/NIC. A setting of 1 means the BGX
4280 will operate in interleaved mode where each valid consecutive cycle on the X2P interface
4281 may contain words from different lmacs. In other words there will be multiple packets in
4282 flight from different lmacs at the same time. */
4283 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4284 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4285 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC block is reset, software also needs to reset the X2P interface in the
4286 BGX by
4287 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4288 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4289 interface.
4290
4291 Setting this bit to 0 does not reset the X2P interface.
4292 After NIC comes out of reset, software should clear this bit. */
4293 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4294 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4295 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4296 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4297 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4298 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4299 #else /* Word 0 - Little Endian */
4300 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4301 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4302 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4303 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4304 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4305 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4306 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC block is reset, software also needs to reset the X2P interface in the
4307 BGX by
4308 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4309 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4310 interface.
4311
4312 Setting this bit to 0 does not reset the X2P interface.
4313 After NIC comes out of reset, software should clear this bit. */
4314 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4315 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4316 uint64_t interleave_mode : 1; /**< [ 5: 5](R/W) A setting of 0 means the BGX will operate in non-interleaved mode where there is 1 packet
4317 from a given lmac in flight on the X2P interface to TNS/NIC. A setting of 1 means the BGX
4318 will operate in interleaved mode where each valid consecutive cycle on the X2P interface
4319 may contain words from different lmacs. In other words there will be multiple packets in
4320 flight from different lmacs at the same time. */
4321 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4322 bytes, the packet will be removed.
4323 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4324 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4325 is
4326 also the LMAC_ID that is eligible for steering. */
4327 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4328 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4329 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4330 to the NCSI interface while performing a X2P partner reset.
4331 0 = Allow traffic to flow through the NCSI block. */
4332 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4333 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4334 commanded by the
4335 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4336 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4337 configure
4338 the rest of the BGX csr for pass through traffic.
4339
4340 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4341 should traffic be flowing. This bit will not reset the main RXB fifos. */
4342 uint64_t cmr_x2p1_reset : 1; /**< [ 11: 11](R/W) If the master block connected to X2P interface 1 is reset, software also needs
4343 to reset the X2P interface in the BGX by setting this bit. It resets the X2P
4344 interface state in the BGX (skid FIFO and pending requests to the master block)
4345 and prevents the RXB FIFOs for all LMACs from pushing data to the
4346 interface. Because the X2P and NCSI interfaces share the main RXB FIFOs it will
4347 also impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP]
4348 bit first before setting this bit.
4349
4350 Clearing this does not reset the X2P interface nor NCSI interface. After the
4351 master block comes out of reset, software should clear this bit. */
4352 uint64_t reserved_12_63 : 52;
4353 #endif /* Word 0 - End */
4354 } s;
4355 struct bdk_bgxx_cmr_global_config_cn88xxp1
4356 {
4357 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4358 uint64_t reserved_11_63 : 53;
4359 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4360 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4361 commanded by the
4362 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4363 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4364 configure
4365 the rest of the BGX csr for pass through traffic.
4366
4367 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4368 should traffic be flowing. This bit will not reset the main RXB fifos. */
4369 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4370 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4371 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4372 to the NCSI interface while performing a X2P partner reset.
4373 0 = Allow traffic to flow through the NCSI block. */
4374 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4375 is
4376 also the LMAC_ID that is eligible for steering. */
4377 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4378 bytes, the packet will be removed.
4379 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4380 uint64_t interleave_mode : 1; /**< [ 5: 5](R/W) A setting of 0 means the BGX will operate in non-interleaved mode where there is 1 packet
4381 from a given lmac in flight on the X2P interface to TNS/NIC. A setting of 1 means the BGX
4382 will operate in interleaved mode where each valid consecutive cycle on the X2P interface
4383 may contain words from different lmacs. In other words there will be multiple packets in
4384 flight from different lmacs at the same time. */
4385 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4386 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4387 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC or TNS block is reset, software also needs to reset the X2P interface in the
4388 BGX by
4389 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4390 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4391 interface. Because the X2P and NCSI interfaces share the main RXB fifos it will also
4392 impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP] bit first before
4393 setting this bit.
4394
4395 Setting this bit to 0 does not reset the X2P interface nor NCSI interface.
4396 After NIC/TNS comes out of reset, software should clear this bit. */
4397 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4398 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4399 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4400 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4401 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4402 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4403 #else /* Word 0 - Little Endian */
4404 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4405 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4406 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4407 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4408 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4409 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4410 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC or TNS block is reset, software also needs to reset the X2P interface in the
4411 BGX by
4412 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4413 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4414 interface. Because the X2P and NCSI interfaces share the main RXB fifos it will also
4415 impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP] bit first before
4416 setting this bit.
4417
4418 Setting this bit to 0 does not reset the X2P interface nor NCSI interface.
4419 After NIC/TNS comes out of reset, software should clear this bit. */
4420 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4421 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4422 uint64_t interleave_mode : 1; /**< [ 5: 5](R/W) A setting of 0 means the BGX will operate in non-interleaved mode where there is 1 packet
4423 from a given lmac in flight on the X2P interface to TNS/NIC. A setting of 1 means the BGX
4424 will operate in interleaved mode where each valid consecutive cycle on the X2P interface
4425 may contain words from different lmacs. In other words there will be multiple packets in
4426 flight from different lmacs at the same time. */
4427 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4428 bytes, the packet will be removed.
4429 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4430 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4431 is
4432 also the LMAC_ID that is eligible for steering. */
4433 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4434 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4435 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4436 to the NCSI interface while performing a X2P partner reset.
4437 0 = Allow traffic to flow through the NCSI block. */
4438 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4439 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4440 commanded by the
4441 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4442 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4443 configure
4444 the rest of the BGX csr for pass through traffic.
4445
4446 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4447 should traffic be flowing. This bit will not reset the main RXB fifos. */
4448 uint64_t reserved_11_63 : 53;
4449 #endif /* Word 0 - End */
4450 } cn88xxp1;
4451 struct bdk_bgxx_cmr_global_config_cn81xx
4452 {
4453 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4454 uint64_t reserved_11_63 : 53;
4455 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Reserved. */
4456 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) Reserved. */
4457 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Reserved. */
4458 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4459 bytes, the packet will be removed.
4460 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4461 uint64_t interleave_mode : 1; /**< [ 5: 5](RAZ) Reserved. */
4462 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4463 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4464 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC block is reset, software also needs to reset the X2P interface in the
4465 BGX by
4466 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4467 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4468 interface.
4469
4470 Setting this bit to 0 does not reset the X2P interface.
4471 After NIC comes out of reset, software should clear this bit. */
4472 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4473 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4474 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4475 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4476 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4477 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4478 #else /* Word 0 - Little Endian */
4479 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4480 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4481 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4482 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4483 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4484 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4485 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC block is reset, software also needs to reset the X2P interface in the
4486 BGX by
4487 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4488 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4489 interface.
4490
4491 Setting this bit to 0 does not reset the X2P interface.
4492 After NIC comes out of reset, software should clear this bit. */
4493 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4494 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4495 uint64_t interleave_mode : 1; /**< [ 5: 5](RAZ) Reserved. */
4496 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4497 bytes, the packet will be removed.
4498 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4499 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Reserved. */
4500 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) Reserved. */
4501 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Reserved. */
4502 uint64_t reserved_11_63 : 53;
4503 #endif /* Word 0 - End */
4504 } cn81xx;
4505 struct bdk_bgxx_cmr_global_config_cn83xx
4506 {
4507 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4508 uint64_t reserved_12_63 : 52;
4509 uint64_t cmr_x2p1_reset : 1; /**< [ 11: 11](R/W) If the master block connected to X2P interface 1 is reset, software also needs
4510 to reset the X2P interface in the BGX by setting this bit. It resets the X2P
4511 interface state in the BGX (skid FIFO and pending requests to the master block)
4512 and prevents the RXB FIFOs for all LMACs from pushing data to the
4513 interface. Because the X2P and NCSI interfaces share the main RXB FIFOs it will
4514 also impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP]
4515 bit first before setting this bit.
4516
4517 Clearing this does not reset the X2P interface nor NCSI interface. After the
4518 master block comes out of reset, software should clear this bit. */
4519 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4520 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4521 commanded by the
4522 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4523 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4524 configure
4525 the rest of the BGX csr for pass through traffic.
4526
4527 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4528 should traffic be flowing. This bit will not reset the main RXB fifos. */
4529 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4530 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4531 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4532 to the NCSI interface while performing a X2P partner reset.
4533 0 = Allow traffic to flow through the NCSI block. */
4534 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4535 is
4536 also the LMAC_ID that is eligible for steering. */
4537 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4538 bytes, the packet will be removed.
4539 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4540 uint64_t interleave_mode : 1; /**< [ 5: 5](RAZ) Reserved. */
4541 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4542 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4543 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the master block connected to X2P interface 0 is reset, software also needs
4544 to reset the X2P interface in the BGX by setting this bit. It resets the X2P
4545 interface state in the BGX (skid FIFO and pending requests to the master block)
4546 and prevents the RXB FIFOs for all LMACs from pushing data to the
4547 interface. Because the X2P and NCSI interfaces share the main RXB FIFOs it will
4548 also impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP]
4549 bit first before setting this bit.
4550
4551 Clearing this does not reset the X2P interface nor NCSI interface. After the
4552 master block comes out of reset, software should clear this bit. */
4553 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4554 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4555 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4556 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4557 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4558 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4559 #else /* Word 0 - Little Endian */
4560 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4561 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4562 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4563 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4564 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4565 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4566 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the master block connected to X2P interface 0 is reset, software also needs
4567 to reset the X2P interface in the BGX by setting this bit. It resets the X2P
4568 interface state in the BGX (skid FIFO and pending requests to the master block)
4569 and prevents the RXB FIFOs for all LMACs from pushing data to the
4570 interface. Because the X2P and NCSI interfaces share the main RXB FIFOs it will
4571 also impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP]
4572 bit first before setting this bit.
4573
4574 Clearing this does not reset the X2P interface nor NCSI interface. After the
4575 master block comes out of reset, software should clear this bit. */
4576 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4577 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4578 uint64_t interleave_mode : 1; /**< [ 5: 5](RAZ) Reserved. */
4579 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4580 bytes, the packet will be removed.
4581 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4582 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4583 is
4584 also the LMAC_ID that is eligible for steering. */
4585 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4586 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4587 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4588 to the NCSI interface while performing a X2P partner reset.
4589 0 = Allow traffic to flow through the NCSI block. */
4590 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4591 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4592 commanded by the
4593 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4594 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4595 configure
4596 the rest of the BGX csr for pass through traffic.
4597
4598 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4599 should traffic be flowing. This bit will not reset the main RXB fifos. */
4600 uint64_t cmr_x2p1_reset : 1; /**< [ 11: 11](R/W) If the master block connected to X2P interface 1 is reset, software also needs
4601 to reset the X2P interface in the BGX by setting this bit. It resets the X2P
4602 interface state in the BGX (skid FIFO and pending requests to the master block)
4603 and prevents the RXB FIFOs for all LMACs from pushing data to the
4604 interface. Because the X2P and NCSI interfaces share the main RXB FIFOs it will
4605 also impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP]
4606 bit first before setting this bit.
4607
4608 Clearing this does not reset the X2P interface nor NCSI interface. After the
4609 master block comes out of reset, software should clear this bit. */
4610 uint64_t reserved_12_63 : 52;
4611 #endif /* Word 0 - End */
4612 } cn83xx;
4613 struct bdk_bgxx_cmr_global_config_cn88xxp2
4614 {
4615 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4616 uint64_t reserved_11_63 : 53;
4617 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4618 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4619 commanded by the
4620 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4621 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4622 configure
4623 the rest of the BGX csr for pass through traffic.
4624
4625 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4626 should traffic be flowing. This bit will not reset the main RXB fifos. */
4627 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4628 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4629 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4630 to the NCSI interface while performing a X2P partner reset.
4631 0 = Allow traffic to flow through the NCSI block. */
4632 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4633 is
4634 also the LMAC_ID that is eligible for steering. */
4635 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4636 bytes, the packet will be removed.
4637 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4638 uint64_t interleave_mode : 1; /**< [ 5: 5](RAZ) Reserved. */
4639 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4640 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4641 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC or TNS block is reset, software also needs to reset the X2P interface in the
4642 BGX by
4643 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4644 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4645 interface. Because the X2P and NCSI interfaces share the main RXB fifos it will also
4646 impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP] bit first before
4647 setting this bit.
4648
4649 Setting this bit to 0 does not reset the X2P interface nor NCSI interface.
4650 After NIC/TNS comes out of reset, software should clear this bit. */
4651 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4652 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4653 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4654 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4655 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4656 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4657 #else /* Word 0 - Little Endian */
4658 uint64_t pmux_sds_sel : 1; /**< [ 0: 0](R/W) SerDes/GSER output select. Must be 0. */
4659 uint64_t bgx_clk_enable : 1; /**< [ 1: 1](R/W) The global clock enable for BGX. Setting this bit overrides clock enables set by
4660 BGX()_CMR()_CONFIG[ENABLE] and BGX()_CMR()_CONFIG[LMAC_TYPE], essentially
4661 turning on clocks for the entire BGX. Setting this bit to 0 results in not overriding
4662 clock enables set by BGX()_CMR()_CONFIG[ENABLE] and
4663 BGX()_CMR()_CONFIG[LMAC_TYPE]. */
4664 uint64_t cmr_x2p_reset : 1; /**< [ 2: 2](R/W) If the NIC or TNS block is reset, software also needs to reset the X2P interface in the
4665 BGX by
4666 setting this bit to 1. It resets the X2P interface state in the BGX (skid FIFO and pending
4667 requests to NIC) and prevents the RXB FIFOs for all LMACs from pushing data to the
4668 interface. Because the X2P and NCSI interfaces share the main RXB fifos it will also
4669 impact the NCSI interface therefore it is required to set [CMR_NCSI_DROP] bit first before
4670 setting this bit.
4671
4672 Setting this bit to 0 does not reset the X2P interface nor NCSI interface.
4673 After NIC/TNS comes out of reset, software should clear this bit. */
4674 uint64_t cmr_mix0_reset : 1; /**< [ 3: 3](R/W) Must be 0. */
4675 uint64_t cmr_mix1_reset : 1; /**< [ 4: 4](R/W) Must be 0. */
4676 uint64_t interleave_mode : 1; /**< [ 5: 5](RAZ) Reserved. */
4677 uint64_t fcs_strip : 1; /**< [ 6: 6](R/W) A setting of 1 means the BGX strip the FCS bytes of every packet. For packets less than 4
4678 bytes, the packet will be removed.
4679 A setting of 0 means the BGX will not modify or remove the FCS bytes. */
4680 uint64_t ncsi_lmac_id : 2; /**< [ 8: 7](R/W) Logical MAC ID that carries NCSI traffic for both RX and TX side of CMR. On the RX side
4681 is
4682 also the LMAC_ID that is eligible for steering. */
4683 uint64_t cmr_ncsi_drop : 1; /**< [ 9: 9](R/W) NCSI drop.
4684 1 = Cleanly drop traffic going into the NCSI block of BGX. Must set asserted
4685 with with [CMR_X2P_RESET]=1 (in the same write operation) to avoid partial packets
4686 to the NCSI interface while performing a X2P partner reset.
4687 0 = Allow traffic to flow through the NCSI block. */
4688 uint64_t cmr_ncsi_reset : 1; /**< [ 10: 10](R/W) Interface reset for the CMR NCSI block.
4689 Upon power up the CMR NCSI is in reset and the companion CNXXXX NCSI block will be
4690 commanded by the
4691 external BMC to enable one of the CNXXXX BGX NCSI interfaces for passing network traffic.
4692 Only one NCSI interface can be enabled in CNXXXX. The BMC/NCSI will then proceed to
4693 configure
4694 the rest of the BGX csr for pass through traffic.
4695
4696 When set, will reset the CMR NCSI interface effectively disabling it at a traffic boundary
4697 should traffic be flowing. This bit will not reset the main RXB fifos. */
4698 uint64_t reserved_11_63 : 53;
4699 #endif /* Word 0 - End */
4700 } cn88xxp2;
4701 };
4702 typedef union bdk_bgxx_cmr_global_config bdk_bgxx_cmr_global_config_t;
4703
4704 static inline uint64_t BDK_BGXX_CMR_GLOBAL_CONFIG(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_GLOBAL_CONFIG(unsigned long a)4705 static inline uint64_t BDK_BGXX_CMR_GLOBAL_CONFIG(unsigned long a)
4706 {
4707 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
4708 return 0x87e0e0000008ll + 0x1000000ll * ((a) & 0x1);
4709 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
4710 return 0x87e0e0000008ll + 0x1000000ll * ((a) & 0x3);
4711 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
4712 return 0x87e0e0000008ll + 0x1000000ll * ((a) & 0x1);
4713 __bdk_csr_fatal("BGXX_CMR_GLOBAL_CONFIG", 1, a, 0, 0, 0);
4714 }
4715
4716 #define typedef_BDK_BGXX_CMR_GLOBAL_CONFIG(a) bdk_bgxx_cmr_global_config_t
4717 #define bustype_BDK_BGXX_CMR_GLOBAL_CONFIG(a) BDK_CSR_TYPE_RSL
4718 #define basename_BDK_BGXX_CMR_GLOBAL_CONFIG(a) "BGXX_CMR_GLOBAL_CONFIG"
4719 #define device_bar_BDK_BGXX_CMR_GLOBAL_CONFIG(a) 0x0 /* PF_BAR0 */
4720 #define busnum_BDK_BGXX_CMR_GLOBAL_CONFIG(a) (a)
4721 #define arguments_BDK_BGXX_CMR_GLOBAL_CONFIG(a) (a),-1,-1,-1
4722
4723 /**
4724 * Register (RSL) bgx#_cmr_mem_ctrl
4725 *
4726 * BGX CMR Memory Control Register
4727 */
4728 union bdk_bgxx_cmr_mem_ctrl
4729 {
4730 uint64_t u;
4731 struct bdk_bgxx_cmr_mem_ctrl_s
4732 {
4733 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4734 uint64_t reserved_42_63 : 22;
4735 uint64_t txb_fif_m3_syn : 2; /**< [ 41: 40](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem3. */
4736 uint64_t txb_fif_m3_cdis : 1; /**< [ 39: 39](R/W) ECC-correction disable for the TXB main mem3. */
4737 uint64_t txb_fif_m2_syn : 2; /**< [ 38: 37](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem2. */
4738 uint64_t txb_fif_m2_cdis : 1; /**< [ 36: 36](R/W) ECC-correction disable for the TXB main mem2. */
4739 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4740 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) ECC-correction disable for the TXB SKID FIFO */
4741 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4742 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4743 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4744 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4745 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4746 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4747 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4748 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4749 uint64_t reserved_15_20 : 6;
4750 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4751 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4752 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4753 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4754 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4755 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4756 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4757 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4758 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4759 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4760 #else /* Word 0 - Little Endian */
4761 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4762 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4763 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4764 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4765 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4766 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4767 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4768 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4769 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4770 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4771 uint64_t reserved_15_20 : 6;
4772 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4773 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4774 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4775 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4776 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4777 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4778 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4779 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4780 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) ECC-correction disable for the TXB SKID FIFO */
4781 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4782 uint64_t txb_fif_m2_cdis : 1; /**< [ 36: 36](R/W) ECC-correction disable for the TXB main mem2. */
4783 uint64_t txb_fif_m2_syn : 2; /**< [ 38: 37](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem2. */
4784 uint64_t txb_fif_m3_cdis : 1; /**< [ 39: 39](R/W) ECC-correction disable for the TXB main mem3. */
4785 uint64_t txb_fif_m3_syn : 2; /**< [ 41: 40](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem3. */
4786 uint64_t reserved_42_63 : 22;
4787 #endif /* Word 0 - End */
4788 } s;
4789 struct bdk_bgxx_cmr_mem_ctrl_cn81xx
4790 {
4791 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4792 uint64_t reserved_36_63 : 28;
4793 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Reserved. */
4794 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) Reserved. */
4795 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4796 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4797 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4798 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4799 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4800 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4801 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4802 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4803 uint64_t txb_fif_bk1_syn : 2; /**< [ 20: 19](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank1. */
4804 uint64_t txb_fif_bk1_cdis : 1; /**< [ 18: 18](R/W) ECC-correction disable for the TXB main bank1. */
4805 uint64_t txb_fif_bk0_syn : 2; /**< [ 17: 16](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank0. */
4806 uint64_t txb_fif_bk0_cdis : 1; /**< [ 15: 15](R/W) ECC-correction disable for the TXB main bank0. */
4807 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4808 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4809 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4810 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4811 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4812 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4813 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4814 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4815 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4816 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4817 #else /* Word 0 - Little Endian */
4818 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4819 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4820 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4821 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4822 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4823 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4824 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4825 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4826 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4827 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4828 uint64_t txb_fif_bk0_cdis : 1; /**< [ 15: 15](R/W) ECC-correction disable for the TXB main bank0. */
4829 uint64_t txb_fif_bk0_syn : 2; /**< [ 17: 16](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank0. */
4830 uint64_t txb_fif_bk1_cdis : 1; /**< [ 18: 18](R/W) ECC-correction disable for the TXB main bank1. */
4831 uint64_t txb_fif_bk1_syn : 2; /**< [ 20: 19](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank1. */
4832 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4833 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4834 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4835 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4836 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4837 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4838 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4839 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4840 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) Reserved. */
4841 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Reserved. */
4842 uint64_t reserved_36_63 : 28;
4843 #endif /* Word 0 - End */
4844 } cn81xx;
4845 struct bdk_bgxx_cmr_mem_ctrl_cn88xx
4846 {
4847 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4848 uint64_t reserved_36_63 : 28;
4849 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4850 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) ECC-correction disable for the TXB SKID FIFO */
4851 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4852 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4853 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4854 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4855 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4856 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4857 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4858 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4859 uint64_t txb_fif_bk1_syn : 2; /**< [ 20: 19](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank1. */
4860 uint64_t txb_fif_bk1_cdis : 1; /**< [ 18: 18](R/W) ECC-correction disable for the TXB main bank1. */
4861 uint64_t txb_fif_bk0_syn : 2; /**< [ 17: 16](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank0. */
4862 uint64_t txb_fif_bk0_cdis : 1; /**< [ 15: 15](R/W) ECC-correction disable for the TXB main bank0. */
4863 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4864 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4865 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4866 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4867 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4868 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4869 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4870 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4871 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4872 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4873 #else /* Word 0 - Little Endian */
4874 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4875 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4876 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4877 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4878 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4879 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4880 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4881 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4882 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4883 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4884 uint64_t txb_fif_bk0_cdis : 1; /**< [ 15: 15](R/W) ECC-correction disable for the TXB main bank0. */
4885 uint64_t txb_fif_bk0_syn : 2; /**< [ 17: 16](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank0. */
4886 uint64_t txb_fif_bk1_cdis : 1; /**< [ 18: 18](R/W) ECC-correction disable for the TXB main bank1. */
4887 uint64_t txb_fif_bk1_syn : 2; /**< [ 20: 19](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main bank1. */
4888 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4889 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4890 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4891 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4892 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4893 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4894 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4895 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4896 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) ECC-correction disable for the TXB SKID FIFO */
4897 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4898 uint64_t reserved_36_63 : 28;
4899 #endif /* Word 0 - End */
4900 } cn88xx;
4901 struct bdk_bgxx_cmr_mem_ctrl_cn83xx
4902 {
4903 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4904 uint64_t reserved_42_63 : 22;
4905 uint64_t txb_fif_m3_syn : 2; /**< [ 41: 40](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem3. */
4906 uint64_t txb_fif_m3_cdis : 1; /**< [ 39: 39](R/W) ECC-correction disable for the TXB main mem3. */
4907 uint64_t txb_fif_m2_syn : 2; /**< [ 38: 37](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem2. */
4908 uint64_t txb_fif_m2_cdis : 1; /**< [ 36: 36](R/W) ECC-correction disable for the TXB main mem2. */
4909 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4910 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) ECC-correction disable for the TXB SKID FIFO */
4911 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4912 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4913 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4914 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4915 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4916 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4917 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4918 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4919 uint64_t txb_fif_m1_syn : 2; /**< [ 20: 19](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem1. */
4920 uint64_t txb_fif_m1_cdis : 1; /**< [ 18: 18](R/W) ECC-correction disable for the TXB main mem1. */
4921 uint64_t txb_fif_m0_syn : 2; /**< [ 17: 16](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem0. */
4922 uint64_t txb_fif_m0_cdis : 1; /**< [ 15: 15](R/W) ECC-correction disable for the TXB main mem0. */
4923 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4924 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4925 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4926 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4927 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4928 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4929 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4930 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4931 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4932 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4933 #else /* Word 0 - Little Endian */
4934 uint64_t rxb_fif_bk0_cdis0 : 1; /**< [ 0: 0](R/W) ECC-correction disable for the RXB main bank0 srf0. */
4935 uint64_t rxb_fif_bk0_syn0 : 2; /**< [ 2: 1](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf0. */
4936 uint64_t rxb_fif_bk0_cdis1 : 1; /**< [ 3: 3](R/W) ECC-correction disable for the RXB main bank0 srf1. */
4937 uint64_t rxb_fif_bk0_syn1 : 2; /**< [ 5: 4](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank0 srf1. */
4938 uint64_t rxb_fif_bk1_cdis0 : 1; /**< [ 6: 6](R/W) ECC-correction disable for the RXB main bank1 srf0. */
4939 uint64_t rxb_fif_bk1_syn0 : 2; /**< [ 8: 7](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf0. */
4940 uint64_t rxb_fif_bk1_cdis1 : 1; /**< [ 9: 9](R/W) ECC-correction disable for the RXB main bank1 srf1. */
4941 uint64_t rxb_fif_bk1_syn1 : 2; /**< [ 11: 10](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB main bank1 srf1. */
4942 uint64_t rxb_skid_cor_dis : 1; /**< [ 12: 12](R/W) ECC-correction disable for the RXB SKID FIFO. */
4943 uint64_t rxb_skid_synd : 2; /**< [ 14: 13](R/W) Syndrome to flip and generate single-bit/double-bit error for RXB SKID FIFO. */
4944 uint64_t txb_fif_m0_cdis : 1; /**< [ 15: 15](R/W) ECC-correction disable for the TXB main mem0. */
4945 uint64_t txb_fif_m0_syn : 2; /**< [ 17: 16](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem0. */
4946 uint64_t txb_fif_m1_cdis : 1; /**< [ 18: 18](R/W) ECC-correction disable for the TXB main mem1. */
4947 uint64_t txb_fif_m1_syn : 2; /**< [ 20: 19](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem1. */
4948 uint64_t txb_skid_m0_cor_dis : 1; /**< [ 21: 21](R/W) ECC-correction disable for the TXB SKID FIFO. */
4949 uint64_t txb_skid_m0_synd : 2; /**< [ 23: 22](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO. */
4950 uint64_t txb_skid_m1_cor_dis : 1; /**< [ 24: 24](R/W) ECC-correction disable for the TXB SKID FIFO */
4951 uint64_t txb_skid_m1_synd : 2; /**< [ 26: 25](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4952 uint64_t txb_skid_m2_cor_dis : 1; /**< [ 27: 27](R/W) ECC-correction disable for the TXB SKID FIFO */
4953 uint64_t txb_skid_m2_synd : 2; /**< [ 29: 28](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4954 uint64_t txb_skid_m3_cor_dis : 1; /**< [ 30: 30](R/W) ECC-correction disable for the TXB SKID FIFO */
4955 uint64_t txb_skid_m3_synd : 2; /**< [ 32: 31](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4956 uint64_t txb_ncsi_cor_dis : 1; /**< [ 33: 33](R/W) ECC-correction disable for the TXB SKID FIFO */
4957 uint64_t txb_ncsi_synd : 2; /**< [ 35: 34](R/W) Syndrome to flip and generate single-bit/double-bit for TXB SKID FIFO */
4958 uint64_t txb_fif_m2_cdis : 1; /**< [ 36: 36](R/W) ECC-correction disable for the TXB main mem2. */
4959 uint64_t txb_fif_m2_syn : 2; /**< [ 38: 37](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem2. */
4960 uint64_t txb_fif_m3_cdis : 1; /**< [ 39: 39](R/W) ECC-correction disable for the TXB main mem3. */
4961 uint64_t txb_fif_m3_syn : 2; /**< [ 41: 40](R/W) Syndrome to flip and generate single-bit/double-bit error for TXB main mem3. */
4962 uint64_t reserved_42_63 : 22;
4963 #endif /* Word 0 - End */
4964 } cn83xx;
4965 };
4966 typedef union bdk_bgxx_cmr_mem_ctrl bdk_bgxx_cmr_mem_ctrl_t;
4967
4968 static inline uint64_t BDK_BGXX_CMR_MEM_CTRL(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_MEM_CTRL(unsigned long a)4969 static inline uint64_t BDK_BGXX_CMR_MEM_CTRL(unsigned long a)
4970 {
4971 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
4972 return 0x87e0e0000030ll + 0x1000000ll * ((a) & 0x1);
4973 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
4974 return 0x87e0e0000030ll + 0x1000000ll * ((a) & 0x3);
4975 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
4976 return 0x87e0e0000030ll + 0x1000000ll * ((a) & 0x1);
4977 __bdk_csr_fatal("BGXX_CMR_MEM_CTRL", 1, a, 0, 0, 0);
4978 }
4979
4980 #define typedef_BDK_BGXX_CMR_MEM_CTRL(a) bdk_bgxx_cmr_mem_ctrl_t
4981 #define bustype_BDK_BGXX_CMR_MEM_CTRL(a) BDK_CSR_TYPE_RSL
4982 #define basename_BDK_BGXX_CMR_MEM_CTRL(a) "BGXX_CMR_MEM_CTRL"
4983 #define device_bar_BDK_BGXX_CMR_MEM_CTRL(a) 0x0 /* PF_BAR0 */
4984 #define busnum_BDK_BGXX_CMR_MEM_CTRL(a) (a)
4985 #define arguments_BDK_BGXX_CMR_MEM_CTRL(a) (a),-1,-1,-1
4986
4987 /**
4988 * Register (RSL) bgx#_cmr_mem_int
4989 *
4990 * BGX CMR Memory Interrupt Register
4991 */
4992 union bdk_bgxx_cmr_mem_int
4993 {
4994 uint64_t u;
4995 struct bdk_bgxx_cmr_mem_int_s
4996 {
4997 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
4998 uint64_t reserved_40_63 : 24;
4999 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) TXB Main FIFO Mem3 single-bit error. */
5000 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) TXB Main FIFO Mem3 double-bit error. */
5001 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) TXB Main FIFO Mem2 single-bit error. */
5002 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) TXB Main FIFO Mem2 double-bit error. */
5003 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5004 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5005 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) TXB SKID FIFO single-bit error */
5006 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5007 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5008 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5009 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5010 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5011 uint64_t reserved_8_27 : 20;
5012 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5013 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5014 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5015 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5016 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5017 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5018 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5019 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5020 #else /* Word 0 - Little Endian */
5021 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5022 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5023 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5024 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5025 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5026 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5027 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5028 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5029 uint64_t reserved_8_27 : 20;
5030 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5031 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5032 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5033 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5034 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5035 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) TXB SKID FIFO single-bit error */
5036 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5037 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5038 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) TXB Main FIFO Mem2 double-bit error. */
5039 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) TXB Main FIFO Mem2 single-bit error. */
5040 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) TXB Main FIFO Mem3 double-bit error. */
5041 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) TXB Main FIFO Mem3 single-bit error. */
5042 uint64_t reserved_40_63 : 24;
5043 #endif /* Word 0 - End */
5044 } s;
5045 struct bdk_bgxx_cmr_mem_int_cn81xx
5046 {
5047 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5048 uint64_t reserved_36_63 : 28;
5049 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5050 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5051 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) TXB SKID FIFO single-bit error */
5052 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5053 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5054 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5055 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5056 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5057 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) Reserved. */
5058 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) Reserved. */
5059 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) Reserved. */
5060 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) Reserved. */
5061 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) Reserved. */
5062 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) Reserved. */
5063 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) Reserved. */
5064 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) Reserved. */
5065 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) RX SMU INFIFO overflow. */
5066 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) RX GMP INFIFO overflow. */
5067 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) Reserved. */
5068 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) Reserved. */
5069 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1C/H) TXB Main FIFO Bank1 single-bit error. */
5070 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1C/H) TXB Main FIFO Bank1 double-bit error. */
5071 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1C/H) TXB Main FIFO Bank0 single-bit error. */
5072 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1C/H) TXB Main FIFO Bank0 double-bit error. */
5073 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) RXB NIC SKID FIFO single-bit error. */
5074 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) RXB NIC SKID FIFO double-bit error. */
5075 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) RXB PKI SKID FIFO single-bit error. */
5076 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) RXB PKI SKID FIFO double-bit error. */
5077 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5078 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5079 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5080 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5081 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5082 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5083 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5084 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5085 #else /* Word 0 - Little Endian */
5086 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5087 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5088 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5089 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5090 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5091 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5092 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5093 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5094 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) RXB PKI SKID FIFO double-bit error. */
5095 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) RXB PKI SKID FIFO single-bit error. */
5096 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) RXB NIC SKID FIFO double-bit error. */
5097 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) RXB NIC SKID FIFO single-bit error. */
5098 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1C/H) TXB Main FIFO Bank0 double-bit error. */
5099 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1C/H) TXB Main FIFO Bank0 single-bit error. */
5100 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1C/H) TXB Main FIFO Bank1 double-bit error. */
5101 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1C/H) TXB Main FIFO Bank1 single-bit error. */
5102 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) Reserved. */
5103 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) Reserved. */
5104 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) RX GMP INFIFO overflow. */
5105 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) RX SMU INFIFO overflow. */
5106 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) Reserved. */
5107 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) Reserved. */
5108 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) Reserved. */
5109 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) Reserved. */
5110 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) Reserved. */
5111 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) Reserved. */
5112 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) Reserved. */
5113 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) Reserved. */
5114 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5115 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5116 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5117 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5118 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5119 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) TXB SKID FIFO single-bit error */
5120 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5121 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5122 uint64_t reserved_36_63 : 28;
5123 #endif /* Word 0 - End */
5124 } cn81xx;
5125 struct bdk_bgxx_cmr_mem_int_cn88xx
5126 {
5127 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5128 uint64_t reserved_26_63 : 38;
5129 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1C/H) TXB SKID FIFO single-bit error */
5130 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1C/H) TXB SKID FIFO double-bit error */
5131 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1C/H) TXB SKID FIFO single-bit error */
5132 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1C/H) TXB SKID FIFO double-bit error */
5133 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1C/H) TXB SKID FIFO single-bit error */
5134 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1C/H) TXB SKID FIFO double-bit error */
5135 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1C/H) TXB SKID FIFO single-bit error */
5136 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1C/H) TXB SKID FIFO double-bit error */
5137 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1C/H) RX SMU INFIFO overflow. */
5138 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1C/H) RX GMP INFIFO overflow. */
5139 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1C/H) TXB SKID FIFO single-bit error. */
5140 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1C/H) TXB SKID FIFO double-bit error. */
5141 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1C/H) TXB Main FIFO Bank1 single-bit error. */
5142 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1C/H) TXB Main FIFO Bank1 double-bit error. */
5143 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1C/H) TXB Main FIFO Bank0 single-bit error. */
5144 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1C/H) TXB Main FIFO Bank0 double-bit error. */
5145 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) RXB SKID FIFO single-bit error. */
5146 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) RXB SKID FIFO double-bit error. */
5147 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5148 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5149 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5150 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5151 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5152 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5153 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5154 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5155 #else /* Word 0 - Little Endian */
5156 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5157 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5158 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5159 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5160 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5161 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5162 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5163 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5164 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) RXB SKID FIFO double-bit error. */
5165 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) RXB SKID FIFO single-bit error. */
5166 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1C/H) TXB Main FIFO Bank0 double-bit error. */
5167 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1C/H) TXB Main FIFO Bank0 single-bit error. */
5168 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1C/H) TXB Main FIFO Bank1 double-bit error. */
5169 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1C/H) TXB Main FIFO Bank1 single-bit error. */
5170 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1C/H) TXB SKID FIFO double-bit error. */
5171 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1C/H) TXB SKID FIFO single-bit error. */
5172 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1C/H) RX GMP INFIFO overflow. */
5173 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1C/H) RX SMU INFIFO overflow. */
5174 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1C/H) TXB SKID FIFO double-bit error */
5175 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1C/H) TXB SKID FIFO single-bit error */
5176 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1C/H) TXB SKID FIFO double-bit error */
5177 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1C/H) TXB SKID FIFO single-bit error */
5178 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1C/H) TXB SKID FIFO double-bit error */
5179 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1C/H) TXB SKID FIFO single-bit error */
5180 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1C/H) TXB SKID FIFO double-bit error */
5181 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1C/H) TXB SKID FIFO single-bit error */
5182 uint64_t reserved_26_63 : 38;
5183 #endif /* Word 0 - End */
5184 } cn88xx;
5185 struct bdk_bgxx_cmr_mem_int_cn83xx
5186 {
5187 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5188 uint64_t reserved_40_63 : 24;
5189 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) TXB Main FIFO Mem3 single-bit error. */
5190 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) TXB Main FIFO Mem3 double-bit error. */
5191 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) TXB Main FIFO Mem2 single-bit error. */
5192 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) TXB Main FIFO Mem2 double-bit error. */
5193 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5194 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5195 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) TXB SKID FIFO single-bit error */
5196 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5197 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5198 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5199 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5200 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5201 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) TXB SKID NCSI FIFO single-bit error */
5202 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) TXB SKID NCSI FIFO double-bit error */
5203 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) TXB SKID PKO FIFO single-bit error */
5204 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) TXB SKID PKO FIFO double-bit error */
5205 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) TXB SKID PKO FIFO single-bit error */
5206 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) TXB SKID PKO FIFO double-bit error */
5207 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) TXB SKID PKO FIFO single-bit error */
5208 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) TXB SKID PKO FIFO double-bit error */
5209 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) RX SMU INFIFO overflow. */
5210 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) RX GMP INFIFO overflow. */
5211 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) TXB SKID PKO FIFO single-bit error. */
5212 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) TXB SKID PKO FIFO double-bit error. */
5213 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1C/H) TXB Main FIFO Mem1 single-bit error. */
5214 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1C/H) TXB Main FIFO Mem1 double-bit error. */
5215 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1C/H) TXB Main FIFO Mem0 single-bit error. */
5216 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1C/H) TXB Main FIFO Mem0 double-bit error. */
5217 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) RXB NIC SKID FIFO single-bit error. */
5218 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) RXB NIC SKID FIFO double-bit error. */
5219 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) RXB PKI SKID FIFO single-bit error. */
5220 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) RXB PKI SKID FIFO double-bit error. */
5221 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5222 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5223 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5224 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5225 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5226 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5227 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5228 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5229 #else /* Word 0 - Little Endian */
5230 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) RXB main FIFO bank0 srf0 double-bit error. */
5231 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) RXB main FIFO bank0 srf0 single-bit error. */
5232 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) RXB main FIFO bank0 srf1 double-bit error. */
5233 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) RXB main FIFO bank0 srf1 single-bit error. */
5234 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) RXB main FIFO bank1 srf0 double-bit error. */
5235 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) RXB main FIFO bank1 srf0 single-bit error. */
5236 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) RXB main FIFO bank1 srf1 double-bit error. */
5237 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) RXB main FIFO bank1 srf1 single-bit error. */
5238 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) RXB PKI SKID FIFO double-bit error. */
5239 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) RXB PKI SKID FIFO single-bit error. */
5240 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) RXB NIC SKID FIFO double-bit error. */
5241 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) RXB NIC SKID FIFO single-bit error. */
5242 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1C/H) TXB Main FIFO Mem0 double-bit error. */
5243 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1C/H) TXB Main FIFO Mem0 single-bit error. */
5244 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1C/H) TXB Main FIFO Mem1 double-bit error. */
5245 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1C/H) TXB Main FIFO Mem1 single-bit error. */
5246 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) TXB SKID PKO FIFO double-bit error. */
5247 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) TXB SKID PKO FIFO single-bit error. */
5248 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) RX GMP INFIFO overflow. */
5249 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) RX SMU INFIFO overflow. */
5250 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) TXB SKID PKO FIFO double-bit error */
5251 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) TXB SKID PKO FIFO single-bit error */
5252 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) TXB SKID PKO FIFO double-bit error */
5253 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) TXB SKID PKO FIFO single-bit error */
5254 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) TXB SKID PKO FIFO double-bit error */
5255 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) TXB SKID PKO FIFO single-bit error */
5256 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) TXB SKID NCSI FIFO double-bit error */
5257 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) TXB SKID NCSI FIFO single-bit error */
5258 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5259 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5260 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5261 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5262 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5263 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) TXB SKID FIFO single-bit error */
5264 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) TXB SKID NIC FIFO double-bit error */
5265 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) TXB SKID NIC FIFO single-bit error */
5266 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) TXB Main FIFO Mem2 double-bit error. */
5267 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) TXB Main FIFO Mem2 single-bit error. */
5268 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) TXB Main FIFO Mem3 double-bit error. */
5269 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) TXB Main FIFO Mem3 single-bit error. */
5270 uint64_t reserved_40_63 : 24;
5271 #endif /* Word 0 - End */
5272 } cn83xx;
5273 };
5274 typedef union bdk_bgxx_cmr_mem_int bdk_bgxx_cmr_mem_int_t;
5275
5276 static inline uint64_t BDK_BGXX_CMR_MEM_INT(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_MEM_INT(unsigned long a)5277 static inline uint64_t BDK_BGXX_CMR_MEM_INT(unsigned long a)
5278 {
5279 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
5280 return 0x87e0e0000010ll + 0x1000000ll * ((a) & 0x1);
5281 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
5282 return 0x87e0e0000010ll + 0x1000000ll * ((a) & 0x3);
5283 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
5284 return 0x87e0e0000010ll + 0x1000000ll * ((a) & 0x1);
5285 __bdk_csr_fatal("BGXX_CMR_MEM_INT", 1, a, 0, 0, 0);
5286 }
5287
5288 #define typedef_BDK_BGXX_CMR_MEM_INT(a) bdk_bgxx_cmr_mem_int_t
5289 #define bustype_BDK_BGXX_CMR_MEM_INT(a) BDK_CSR_TYPE_RSL
5290 #define basename_BDK_BGXX_CMR_MEM_INT(a) "BGXX_CMR_MEM_INT"
5291 #define device_bar_BDK_BGXX_CMR_MEM_INT(a) 0x0 /* PF_BAR0 */
5292 #define busnum_BDK_BGXX_CMR_MEM_INT(a) (a)
5293 #define arguments_BDK_BGXX_CMR_MEM_INT(a) (a),-1,-1,-1
5294
5295 /**
5296 * Register (RSL) bgx#_cmr_mem_int_ena_w1c
5297 *
5298 * BGX CMR Memory Interrupt Enable Clear Register
5299 * This register clears interrupt enable bits.
5300 */
5301 union bdk_bgxx_cmr_mem_int_ena_w1c
5302 {
5303 uint64_t u;
5304 struct bdk_bgxx_cmr_mem_int_ena_w1c_s
5305 {
5306 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5307 uint64_t reserved_40_63 : 24;
5308 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5309 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5310 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5311 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5312 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5313 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5314 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5315 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5316 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5317 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5318 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5319 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5320 uint64_t reserved_20_27 : 8;
5321 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5322 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5323 uint64_t reserved_8_17 : 10;
5324 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5325 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5326 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5327 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5328 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5329 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5330 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5331 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5332 #else /* Word 0 - Little Endian */
5333 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5334 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5335 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5336 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5337 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5338 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5339 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5340 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5341 uint64_t reserved_8_17 : 10;
5342 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5343 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5344 uint64_t reserved_20_27 : 8;
5345 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5346 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5347 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5348 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5349 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5350 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5351 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5352 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5353 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5354 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5355 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5356 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5357 uint64_t reserved_40_63 : 24;
5358 #endif /* Word 0 - End */
5359 } s;
5360 struct bdk_bgxx_cmr_mem_int_ena_w1c_cn81xx
5361 {
5362 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5363 uint64_t reserved_36_63 : 28;
5364 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5365 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5366 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5367 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5368 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5369 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5370 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5371 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5372 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5373 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5374 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5375 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5376 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5377 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5378 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5379 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5380 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5381 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5382 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5383 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5384 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5385 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5386 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5387 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5388 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5389 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5390 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5391 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5392 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5393 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5394 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5395 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5396 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5397 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5398 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5399 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5400 #else /* Word 0 - Little Endian */
5401 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5402 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5403 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5404 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5405 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5406 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5407 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5408 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5409 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5410 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5411 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5412 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5413 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5414 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5415 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5416 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5417 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5418 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5419 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5420 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5421 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5422 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5423 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5424 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5425 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5426 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5427 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5428 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5429 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5430 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5431 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5432 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5433 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5434 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5435 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5436 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5437 uint64_t reserved_36_63 : 28;
5438 #endif /* Word 0 - End */
5439 } cn81xx;
5440 struct bdk_bgxx_cmr_mem_int_ena_w1c_cn88xx
5441 {
5442 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5443 uint64_t reserved_26_63 : 38;
5444 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5445 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5446 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_SBE]. */
5447 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_DBE]. */
5448 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_SBE]. */
5449 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_DBE]. */
5450 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5451 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5452 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5453 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5454 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_SBE]. */
5455 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_DBE]. */
5456 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5457 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5458 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5459 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5460 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_SBE]. */
5461 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_DBE]. */
5462 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5463 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5464 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5465 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5466 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5467 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5468 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5469 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5470 #else /* Word 0 - Little Endian */
5471 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5472 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5473 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5474 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5475 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5476 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5477 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5478 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5479 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_DBE]. */
5480 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_SBE]. */
5481 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5482 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5483 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5484 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5485 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_DBE]. */
5486 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_SBE]. */
5487 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5488 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5489 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5490 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5491 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_DBE]. */
5492 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_SBE]. */
5493 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_DBE]. */
5494 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_SBE]. */
5495 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5496 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1C/H) Reads or clears enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5497 uint64_t reserved_26_63 : 38;
5498 #endif /* Word 0 - End */
5499 } cn88xx;
5500 struct bdk_bgxx_cmr_mem_int_ena_w1c_cn83xx
5501 {
5502 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5503 uint64_t reserved_40_63 : 24;
5504 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5505 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5506 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5507 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5508 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5509 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5510 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5511 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5512 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5513 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5514 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5515 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5516 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5517 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5518 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5519 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5520 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5521 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5522 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5523 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5524 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5525 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5526 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5527 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5528 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_SBE]. */
5529 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_DBE]. */
5530 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_SBE]. */
5531 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_DBE]. */
5532 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5533 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5534 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5535 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5536 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5537 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5538 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5539 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5540 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5541 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5542 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5543 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5544 #else /* Word 0 - Little Endian */
5545 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5546 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5547 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5548 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5549 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5550 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5551 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5552 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5553 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5554 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5555 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5556 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5557 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_DBE]. */
5558 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_SBE]. */
5559 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_DBE]. */
5560 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_SBE]. */
5561 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5562 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5563 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5564 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5565 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5566 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5567 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5568 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5569 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5570 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5571 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5572 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5573 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5574 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5575 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5576 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5577 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5578 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5579 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5580 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5581 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5582 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5583 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5584 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1C/H) Reads or clears enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5585 uint64_t reserved_40_63 : 24;
5586 #endif /* Word 0 - End */
5587 } cn83xx;
5588 };
5589 typedef union bdk_bgxx_cmr_mem_int_ena_w1c bdk_bgxx_cmr_mem_int_ena_w1c_t;
5590
5591 static inline uint64_t BDK_BGXX_CMR_MEM_INT_ENA_W1C(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_MEM_INT_ENA_W1C(unsigned long a)5592 static inline uint64_t BDK_BGXX_CMR_MEM_INT_ENA_W1C(unsigned long a)
5593 {
5594 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
5595 return 0x87e0e0000020ll + 0x1000000ll * ((a) & 0x1);
5596 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
5597 return 0x87e0e0000020ll + 0x1000000ll * ((a) & 0x3);
5598 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
5599 return 0x87e0e0000020ll + 0x1000000ll * ((a) & 0x1);
5600 __bdk_csr_fatal("BGXX_CMR_MEM_INT_ENA_W1C", 1, a, 0, 0, 0);
5601 }
5602
5603 #define typedef_BDK_BGXX_CMR_MEM_INT_ENA_W1C(a) bdk_bgxx_cmr_mem_int_ena_w1c_t
5604 #define bustype_BDK_BGXX_CMR_MEM_INT_ENA_W1C(a) BDK_CSR_TYPE_RSL
5605 #define basename_BDK_BGXX_CMR_MEM_INT_ENA_W1C(a) "BGXX_CMR_MEM_INT_ENA_W1C"
5606 #define device_bar_BDK_BGXX_CMR_MEM_INT_ENA_W1C(a) 0x0 /* PF_BAR0 */
5607 #define busnum_BDK_BGXX_CMR_MEM_INT_ENA_W1C(a) (a)
5608 #define arguments_BDK_BGXX_CMR_MEM_INT_ENA_W1C(a) (a),-1,-1,-1
5609
5610 /**
5611 * Register (RSL) bgx#_cmr_mem_int_ena_w1s
5612 *
5613 * BGX CMR Memory Interrupt Enable Set Register
5614 * This register sets interrupt enable bits.
5615 */
5616 union bdk_bgxx_cmr_mem_int_ena_w1s
5617 {
5618 uint64_t u;
5619 struct bdk_bgxx_cmr_mem_int_ena_w1s_s
5620 {
5621 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5622 uint64_t reserved_40_63 : 24;
5623 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5624 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5625 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5626 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5627 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5628 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5629 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5630 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5631 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5632 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5633 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5634 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5635 uint64_t reserved_20_27 : 8;
5636 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5637 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5638 uint64_t reserved_8_17 : 10;
5639 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5640 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5641 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5642 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5643 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5644 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5645 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5646 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5647 #else /* Word 0 - Little Endian */
5648 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5649 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5650 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5651 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5652 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5653 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5654 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5655 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5656 uint64_t reserved_8_17 : 10;
5657 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5658 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5659 uint64_t reserved_20_27 : 8;
5660 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5661 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5662 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5663 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5664 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5665 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5666 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5667 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5668 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5669 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5670 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5671 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5672 uint64_t reserved_40_63 : 24;
5673 #endif /* Word 0 - End */
5674 } s;
5675 struct bdk_bgxx_cmr_mem_int_ena_w1s_cn81xx
5676 {
5677 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5678 uint64_t reserved_36_63 : 28;
5679 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5680 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5681 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5682 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5683 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5684 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5685 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5686 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5687 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5688 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5689 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5690 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5691 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5692 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5693 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5694 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5695 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5696 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5697 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5698 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5699 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5700 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5701 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5702 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5703 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5704 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5705 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5706 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5707 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5708 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5709 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5710 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5711 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5712 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5713 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5714 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5715 #else /* Word 0 - Little Endian */
5716 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5717 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5718 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5719 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5720 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5721 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5722 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5723 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5724 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5725 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5726 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5727 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5728 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5729 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5730 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5731 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5732 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5733 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5734 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5735 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5736 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5737 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5738 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5739 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5740 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5741 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5742 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5743 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5744 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5745 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5746 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5747 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5748 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5749 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5750 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5751 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5752 uint64_t reserved_36_63 : 28;
5753 #endif /* Word 0 - End */
5754 } cn81xx;
5755 struct bdk_bgxx_cmr_mem_int_ena_w1s_cn88xx
5756 {
5757 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5758 uint64_t reserved_26_63 : 38;
5759 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5760 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5761 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_SBE]. */
5762 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_DBE]. */
5763 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_SBE]. */
5764 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_DBE]. */
5765 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5766 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5767 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5768 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5769 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_SBE]. */
5770 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_DBE]. */
5771 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5772 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5773 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5774 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5775 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_SBE]. */
5776 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_DBE]. */
5777 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5778 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5779 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5780 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5781 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5782 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5783 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5784 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5785 #else /* Word 0 - Little Endian */
5786 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5787 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5788 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5789 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5790 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5791 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5792 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5793 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5794 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_DBE]. */
5795 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[RXB_SKID_SBE]. */
5796 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
5797 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
5798 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
5799 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
5800 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_DBE]. */
5801 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_SBE]. */
5802 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5803 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5804 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5805 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5806 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_DBE]. */
5807 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_SBE]. */
5808 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_DBE]. */
5809 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_SBE]. */
5810 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5811 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets enable for BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5812 uint64_t reserved_26_63 : 38;
5813 #endif /* Word 0 - End */
5814 } cn88xx;
5815 struct bdk_bgxx_cmr_mem_int_ena_w1s_cn83xx
5816 {
5817 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5818 uint64_t reserved_40_63 : 24;
5819 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5820 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5821 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5822 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5823 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5824 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5825 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5826 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5827 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5828 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5829 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5830 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5831 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5832 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5833 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5834 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5835 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5836 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5837 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5838 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5839 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5840 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5841 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5842 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5843 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_SBE]. */
5844 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_DBE]. */
5845 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_SBE]. */
5846 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_DBE]. */
5847 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5848 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5849 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5850 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5851 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5852 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5853 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5854 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5855 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5856 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5857 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5858 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5859 #else /* Word 0 - Little Endian */
5860 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5861 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5862 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5863 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5864 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5865 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5866 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5867 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5868 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
5869 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
5870 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
5871 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
5872 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_DBE]. */
5873 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_SBE]. */
5874 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_DBE]. */
5875 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_SBE]. */
5876 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
5877 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
5878 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[GMP_IN_OVERFL]. */
5879 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[SMU_IN_OVERFL]. */
5880 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
5881 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
5882 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
5883 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
5884 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
5885 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
5886 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_DBE]. */
5887 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_NCSI_SBE]. */
5888 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5889 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5890 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5891 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5892 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5893 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5894 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5895 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5896 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5897 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5898 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5899 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets enable for BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5900 uint64_t reserved_40_63 : 24;
5901 #endif /* Word 0 - End */
5902 } cn83xx;
5903 };
5904 typedef union bdk_bgxx_cmr_mem_int_ena_w1s bdk_bgxx_cmr_mem_int_ena_w1s_t;
5905
5906 static inline uint64_t BDK_BGXX_CMR_MEM_INT_ENA_W1S(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_MEM_INT_ENA_W1S(unsigned long a)5907 static inline uint64_t BDK_BGXX_CMR_MEM_INT_ENA_W1S(unsigned long a)
5908 {
5909 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
5910 return 0x87e0e0000028ll + 0x1000000ll * ((a) & 0x1);
5911 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
5912 return 0x87e0e0000028ll + 0x1000000ll * ((a) & 0x3);
5913 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
5914 return 0x87e0e0000028ll + 0x1000000ll * ((a) & 0x1);
5915 __bdk_csr_fatal("BGXX_CMR_MEM_INT_ENA_W1S", 1, a, 0, 0, 0);
5916 }
5917
5918 #define typedef_BDK_BGXX_CMR_MEM_INT_ENA_W1S(a) bdk_bgxx_cmr_mem_int_ena_w1s_t
5919 #define bustype_BDK_BGXX_CMR_MEM_INT_ENA_W1S(a) BDK_CSR_TYPE_RSL
5920 #define basename_BDK_BGXX_CMR_MEM_INT_ENA_W1S(a) "BGXX_CMR_MEM_INT_ENA_W1S"
5921 #define device_bar_BDK_BGXX_CMR_MEM_INT_ENA_W1S(a) 0x0 /* PF_BAR0 */
5922 #define busnum_BDK_BGXX_CMR_MEM_INT_ENA_W1S(a) (a)
5923 #define arguments_BDK_BGXX_CMR_MEM_INT_ENA_W1S(a) (a),-1,-1,-1
5924
5925 /**
5926 * Register (RSL) bgx#_cmr_mem_int_w1s
5927 *
5928 * BGX CMR Memory Interrupt Set Register
5929 * This register sets interrupt bits.
5930 */
5931 union bdk_bgxx_cmr_mem_int_w1s
5932 {
5933 uint64_t u;
5934 struct bdk_bgxx_cmr_mem_int_w1s_s
5935 {
5936 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5937 uint64_t reserved_40_63 : 24;
5938 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5939 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5940 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5941 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5942 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5943 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5944 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5945 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5946 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5947 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5948 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5949 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5950 uint64_t reserved_20_27 : 8;
5951 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5952 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5953 uint64_t reserved_8_17 : 10;
5954 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5955 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5956 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5957 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5958 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5959 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5960 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5961 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5962 #else /* Word 0 - Little Endian */
5963 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
5964 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
5965 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
5966 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
5967 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
5968 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
5969 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
5970 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
5971 uint64_t reserved_8_17 : 10;
5972 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
5973 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
5974 uint64_t reserved_20_27 : 8;
5975 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
5976 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
5977 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
5978 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5979 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5980 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5981 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5982 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5983 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
5984 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
5985 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
5986 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
5987 uint64_t reserved_40_63 : 24;
5988 #endif /* Word 0 - End */
5989 } s;
5990 struct bdk_bgxx_cmr_mem_int_w1s_cn81xx
5991 {
5992 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
5993 uint64_t reserved_36_63 : 28;
5994 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
5995 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
5996 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
5997 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
5998 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
5999 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
6000 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
6001 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
6002 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
6003 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
6004 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
6005 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
6006 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
6007 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
6008 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
6009 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
6010 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
6011 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
6012 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
6013 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
6014 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
6015 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
6016 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
6017 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
6018 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
6019 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
6020 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
6021 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
6022 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
6023 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
6024 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
6025 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
6026 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
6027 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
6028 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
6029 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
6030 #else /* Word 0 - Little Endian */
6031 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
6032 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
6033 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
6034 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
6035 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
6036 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
6037 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
6038 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
6039 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
6040 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
6041 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
6042 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
6043 uint64_t txb_fif_bk0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
6044 uint64_t txb_fif_bk0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
6045 uint64_t txb_fif_bk1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
6046 uint64_t txb_fif_bk1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
6047 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
6048 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
6049 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
6050 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
6051 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
6052 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
6053 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
6054 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
6055 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
6056 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
6057 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
6058 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
6059 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
6060 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
6061 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
6062 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
6063 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
6064 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
6065 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
6066 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
6067 uint64_t reserved_36_63 : 28;
6068 #endif /* Word 0 - End */
6069 } cn81xx;
6070 struct bdk_bgxx_cmr_mem_int_w1s_cn88xx
6071 {
6072 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6073 uint64_t reserved_26_63 : 38;
6074 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
6075 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
6076 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_SBE]. */
6077 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_DBE]. */
6078 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_SBE]. */
6079 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_DBE]. */
6080 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
6081 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
6082 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
6083 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
6084 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_SBE]. */
6085 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_DBE]. */
6086 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
6087 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
6088 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
6089 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
6090 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_SKID_SBE]. */
6091 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_SKID_DBE]. */
6092 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
6093 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
6094 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
6095 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
6096 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
6097 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
6098 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
6099 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
6100 #else /* Word 0 - Little Endian */
6101 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
6102 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
6103 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
6104 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
6105 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
6106 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
6107 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
6108 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
6109 uint64_t rxb_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_SKID_DBE]. */
6110 uint64_t rxb_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[RXB_SKID_SBE]. */
6111 uint64_t txb_fif_bk0_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_DBE]. */
6112 uint64_t txb_fif_bk0_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK0_SBE]. */
6113 uint64_t txb_fif_bk1_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_DBE]. */
6114 uint64_t txb_fif_bk1_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_FIF_BK1_SBE]. */
6115 uint64_t txb_skid_m0_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_DBE]. */
6116 uint64_t txb_skid_m0_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M0_SBE]. */
6117 uint64_t gmp_in_overfl : 1; /**< [ 16: 16](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[GMP_IN_OVERFL]. */
6118 uint64_t smu_in_overfl : 1; /**< [ 17: 17](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[SMU_IN_OVERFL]. */
6119 uint64_t txb_skid_m1_dbe : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_DBE]. */
6120 uint64_t txb_skid_m1_sbe : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M1_SBE]. */
6121 uint64_t txb_skid_m2_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_DBE]. */
6122 uint64_t txb_skid_m2_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M2_SBE]. */
6123 uint64_t txb_skid_m3_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_DBE]. */
6124 uint64_t txb_skid_m3_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_SKID_M3_SBE]. */
6125 uint64_t txb_ncsi_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_DBE]. */
6126 uint64_t txb_ncsi_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets BGX(0..1)_CMR_MEM_INT[TXB_NCSI_SBE]. */
6127 uint64_t reserved_26_63 : 38;
6128 #endif /* Word 0 - End */
6129 } cn88xx;
6130 struct bdk_bgxx_cmr_mem_int_w1s_cn83xx
6131 {
6132 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6133 uint64_t reserved_40_63 : 24;
6134 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
6135 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
6136 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
6137 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
6138 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
6139 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
6140 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
6141 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
6142 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
6143 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
6144 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
6145 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
6146 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_NCSI_SBE]. */
6147 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_NCSI_DBE]. */
6148 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
6149 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
6150 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
6151 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
6152 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
6153 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
6154 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[SMU_IN_OVERFL]. */
6155 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[GMP_IN_OVERFL]. */
6156 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
6157 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
6158 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_SBE]. */
6159 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_DBE]. */
6160 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_SBE]. */
6161 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_DBE]. */
6162 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
6163 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
6164 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
6165 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
6166 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
6167 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
6168 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
6169 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
6170 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
6171 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
6172 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
6173 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
6174 #else /* Word 0 - Little Endian */
6175 uint64_t rxb_fif_bk0_dbe0 : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE0]. */
6176 uint64_t rxb_fif_bk0_sbe0 : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE0]. */
6177 uint64_t rxb_fif_bk0_dbe1 : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_DBE1]. */
6178 uint64_t rxb_fif_bk0_sbe1 : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK0_SBE1]. */
6179 uint64_t rxb_fif_bk1_dbe0 : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE0]. */
6180 uint64_t rxb_fif_bk1_sbe0 : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE0]. */
6181 uint64_t rxb_fif_bk1_dbe1 : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_DBE1]. */
6182 uint64_t rxb_fif_bk1_sbe1 : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_FIF_BK1_SBE1]. */
6183 uint64_t rxb_pki_skid_dbe : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_DBE]. */
6184 uint64_t rxb_pki_skid_sbe : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_PKI_SKID_SBE]. */
6185 uint64_t rxb_nic_skid_dbe : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_DBE]. */
6186 uint64_t rxb_nic_skid_sbe : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[RXB_NIC_SKID_SBE]. */
6187 uint64_t txb_fif_m0_dbe : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_DBE]. */
6188 uint64_t txb_fif_m0_sbe : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M0_SBE]. */
6189 uint64_t txb_fif_m1_dbe : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_DBE]. */
6190 uint64_t txb_fif_m1_sbe : 1; /**< [ 15: 15](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M1_SBE]. */
6191 uint64_t txb_skid_m0_pko_dbe : 1; /**< [ 16: 16](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_DBE]. */
6192 uint64_t txb_skid_m0_pko_sbe : 1; /**< [ 17: 17](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_PKO_SBE]. */
6193 uint64_t gmp_in_overfl : 1; /**< [ 18: 18](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[GMP_IN_OVERFL]. */
6194 uint64_t smu_in_overfl : 1; /**< [ 19: 19](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[SMU_IN_OVERFL]. */
6195 uint64_t txb_skid_m1_pko_dbe : 1; /**< [ 20: 20](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_DBE]. */
6196 uint64_t txb_skid_m1_pko_sbe : 1; /**< [ 21: 21](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_PKO_SBE]. */
6197 uint64_t txb_skid_m2_pko_dbe : 1; /**< [ 22: 22](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_DBE]. */
6198 uint64_t txb_skid_m2_pko_sbe : 1; /**< [ 23: 23](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_PKO_SBE]. */
6199 uint64_t txb_skid_m3_pko_dbe : 1; /**< [ 24: 24](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_DBE]. */
6200 uint64_t txb_skid_m3_pko_sbe : 1; /**< [ 25: 25](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_PKO_SBE]. */
6201 uint64_t txb_ncsi_dbe : 1; /**< [ 26: 26](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_NCSI_DBE]. */
6202 uint64_t txb_ncsi_sbe : 1; /**< [ 27: 27](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_NCSI_SBE]. */
6203 uint64_t txb_skid_m0_nic_dbe : 1; /**< [ 28: 28](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_DBE]. */
6204 uint64_t txb_skid_m0_nic_sbe : 1; /**< [ 29: 29](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M0_NIC_SBE]. */
6205 uint64_t txb_skid_m1_nic_dbe : 1; /**< [ 30: 30](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_DBE]. */
6206 uint64_t txb_skid_m1_nic_sbe : 1; /**< [ 31: 31](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M1_NIC_SBE]. */
6207 uint64_t txb_skid_m2_nic_dbe : 1; /**< [ 32: 32](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_DBE]. */
6208 uint64_t txb_skid_m2_nic_sbe : 1; /**< [ 33: 33](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M2_NIC_SBE]. */
6209 uint64_t txb_skid_m3_nic_dbe : 1; /**< [ 34: 34](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_DBE]. */
6210 uint64_t txb_skid_m3_nic_sbe : 1; /**< [ 35: 35](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_SKID_M3_NIC_SBE]. */
6211 uint64_t txb_fif_m2_dbe : 1; /**< [ 36: 36](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_DBE]. */
6212 uint64_t txb_fif_m2_sbe : 1; /**< [ 37: 37](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M2_SBE]. */
6213 uint64_t txb_fif_m3_dbe : 1; /**< [ 38: 38](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_DBE]. */
6214 uint64_t txb_fif_m3_sbe : 1; /**< [ 39: 39](R/W1S/H) Reads or sets BGX(0..3)_CMR_MEM_INT[TXB_FIF_M3_SBE]. */
6215 uint64_t reserved_40_63 : 24;
6216 #endif /* Word 0 - End */
6217 } cn83xx;
6218 };
6219 typedef union bdk_bgxx_cmr_mem_int_w1s bdk_bgxx_cmr_mem_int_w1s_t;
6220
6221 static inline uint64_t BDK_BGXX_CMR_MEM_INT_W1S(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_MEM_INT_W1S(unsigned long a)6222 static inline uint64_t BDK_BGXX_CMR_MEM_INT_W1S(unsigned long a)
6223 {
6224 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6225 return 0x87e0e0000018ll + 0x1000000ll * ((a) & 0x1);
6226 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6227 return 0x87e0e0000018ll + 0x1000000ll * ((a) & 0x3);
6228 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
6229 return 0x87e0e0000018ll + 0x1000000ll * ((a) & 0x1);
6230 __bdk_csr_fatal("BGXX_CMR_MEM_INT_W1S", 1, a, 0, 0, 0);
6231 }
6232
6233 #define typedef_BDK_BGXX_CMR_MEM_INT_W1S(a) bdk_bgxx_cmr_mem_int_w1s_t
6234 #define bustype_BDK_BGXX_CMR_MEM_INT_W1S(a) BDK_CSR_TYPE_RSL
6235 #define basename_BDK_BGXX_CMR_MEM_INT_W1S(a) "BGXX_CMR_MEM_INT_W1S"
6236 #define device_bar_BDK_BGXX_CMR_MEM_INT_W1S(a) 0x0 /* PF_BAR0 */
6237 #define busnum_BDK_BGXX_CMR_MEM_INT_W1S(a) (a)
6238 #define arguments_BDK_BGXX_CMR_MEM_INT_W1S(a) (a),-1,-1,-1
6239
6240 /**
6241 * Register (RSL) bgx#_cmr_nic_nxc_adr
6242 *
6243 * BGX CMR NIC NXC Exception Registers
6244 */
6245 union bdk_bgxx_cmr_nic_nxc_adr
6246 {
6247 uint64_t u;
6248 struct bdk_bgxx_cmr_nic_nxc_adr_s
6249 {
6250 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6251 uint64_t reserved_16_63 : 48;
6252 uint64_t lmac_id : 4; /**< [ 15: 12](RO/H) Logged LMAC ID associated with NXC exceptions associated with NIC. */
6253 uint64_t channel : 12; /**< [ 11: 0](RO/H) Logged channel for NXC exceptions associated with NIC. */
6254 #else /* Word 0 - Little Endian */
6255 uint64_t channel : 12; /**< [ 11: 0](RO/H) Logged channel for NXC exceptions associated with NIC. */
6256 uint64_t lmac_id : 4; /**< [ 15: 12](RO/H) Logged LMAC ID associated with NXC exceptions associated with NIC. */
6257 uint64_t reserved_16_63 : 48;
6258 #endif /* Word 0 - End */
6259 } s;
6260 /* struct bdk_bgxx_cmr_nic_nxc_adr_s cn; */
6261 };
6262 typedef union bdk_bgxx_cmr_nic_nxc_adr bdk_bgxx_cmr_nic_nxc_adr_t;
6263
6264 static inline uint64_t BDK_BGXX_CMR_NIC_NXC_ADR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_NIC_NXC_ADR(unsigned long a)6265 static inline uint64_t BDK_BGXX_CMR_NIC_NXC_ADR(unsigned long a)
6266 {
6267 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6268 return 0x87e0e0001030ll + 0x1000000ll * ((a) & 0x1);
6269 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6270 return 0x87e0e0001030ll + 0x1000000ll * ((a) & 0x3);
6271 __bdk_csr_fatal("BGXX_CMR_NIC_NXC_ADR", 1, a, 0, 0, 0);
6272 }
6273
6274 #define typedef_BDK_BGXX_CMR_NIC_NXC_ADR(a) bdk_bgxx_cmr_nic_nxc_adr_t
6275 #define bustype_BDK_BGXX_CMR_NIC_NXC_ADR(a) BDK_CSR_TYPE_RSL
6276 #define basename_BDK_BGXX_CMR_NIC_NXC_ADR(a) "BGXX_CMR_NIC_NXC_ADR"
6277 #define device_bar_BDK_BGXX_CMR_NIC_NXC_ADR(a) 0x0 /* PF_BAR0 */
6278 #define busnum_BDK_BGXX_CMR_NIC_NXC_ADR(a) (a)
6279 #define arguments_BDK_BGXX_CMR_NIC_NXC_ADR(a) (a),-1,-1,-1
6280
6281 /**
6282 * Register (RSL) bgx#_cmr_nxc_adr
6283 *
6284 * BGX CMR NCX Exception Registers
6285 */
6286 union bdk_bgxx_cmr_nxc_adr
6287 {
6288 uint64_t u;
6289 struct bdk_bgxx_cmr_nxc_adr_s
6290 {
6291 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6292 uint64_t reserved_16_63 : 48;
6293 uint64_t lmac_id : 4; /**< [ 15: 12](RO/H) Logged LMAC ID associated with NXC exceptions. */
6294 uint64_t channel : 12; /**< [ 11: 0](RO/H) Logged channel for NXC exceptions. */
6295 #else /* Word 0 - Little Endian */
6296 uint64_t channel : 12; /**< [ 11: 0](RO/H) Logged channel for NXC exceptions. */
6297 uint64_t lmac_id : 4; /**< [ 15: 12](RO/H) Logged LMAC ID associated with NXC exceptions. */
6298 uint64_t reserved_16_63 : 48;
6299 #endif /* Word 0 - End */
6300 } s;
6301 /* struct bdk_bgxx_cmr_nxc_adr_s cn; */
6302 };
6303 typedef union bdk_bgxx_cmr_nxc_adr bdk_bgxx_cmr_nxc_adr_t;
6304
6305 static inline uint64_t BDK_BGXX_CMR_NXC_ADR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_NXC_ADR(unsigned long a)6306 static inline uint64_t BDK_BGXX_CMR_NXC_ADR(unsigned long a)
6307 {
6308 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
6309 return 0x87e0e0001018ll + 0x1000000ll * ((a) & 0x1);
6310 __bdk_csr_fatal("BGXX_CMR_NXC_ADR", 1, a, 0, 0, 0);
6311 }
6312
6313 #define typedef_BDK_BGXX_CMR_NXC_ADR(a) bdk_bgxx_cmr_nxc_adr_t
6314 #define bustype_BDK_BGXX_CMR_NXC_ADR(a) BDK_CSR_TYPE_RSL
6315 #define basename_BDK_BGXX_CMR_NXC_ADR(a) "BGXX_CMR_NXC_ADR"
6316 #define device_bar_BDK_BGXX_CMR_NXC_ADR(a) 0x0 /* PF_BAR0 */
6317 #define busnum_BDK_BGXX_CMR_NXC_ADR(a) (a)
6318 #define arguments_BDK_BGXX_CMR_NXC_ADR(a) (a),-1,-1,-1
6319
6320 /**
6321 * Register (RSL) bgx#_cmr_pko_nxc_adr
6322 *
6323 * BGX CMR PKO NXC Exception Registers
6324 */
6325 union bdk_bgxx_cmr_pko_nxc_adr
6326 {
6327 uint64_t u;
6328 struct bdk_bgxx_cmr_pko_nxc_adr_s
6329 {
6330 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6331 uint64_t reserved_16_63 : 48;
6332 uint64_t lmac_id : 4; /**< [ 15: 12](RO/H) Logged LMAC ID associated with NXC exceptions associated with PKO. */
6333 uint64_t channel : 12; /**< [ 11: 0](RO/H) Logged channel for NXC exceptions associated with PKO. */
6334 #else /* Word 0 - Little Endian */
6335 uint64_t channel : 12; /**< [ 11: 0](RO/H) Logged channel for NXC exceptions associated with PKO. */
6336 uint64_t lmac_id : 4; /**< [ 15: 12](RO/H) Logged LMAC ID associated with NXC exceptions associated with PKO. */
6337 uint64_t reserved_16_63 : 48;
6338 #endif /* Word 0 - End */
6339 } s;
6340 /* struct bdk_bgxx_cmr_pko_nxc_adr_s cn; */
6341 };
6342 typedef union bdk_bgxx_cmr_pko_nxc_adr bdk_bgxx_cmr_pko_nxc_adr_t;
6343
6344 static inline uint64_t BDK_BGXX_CMR_PKO_NXC_ADR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_PKO_NXC_ADR(unsigned long a)6345 static inline uint64_t BDK_BGXX_CMR_PKO_NXC_ADR(unsigned long a)
6346 {
6347 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6348 return 0x87e0e0001018ll + 0x1000000ll * ((a) & 0x1);
6349 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6350 return 0x87e0e0001018ll + 0x1000000ll * ((a) & 0x3);
6351 __bdk_csr_fatal("BGXX_CMR_PKO_NXC_ADR", 1, a, 0, 0, 0);
6352 }
6353
6354 #define typedef_BDK_BGXX_CMR_PKO_NXC_ADR(a) bdk_bgxx_cmr_pko_nxc_adr_t
6355 #define bustype_BDK_BGXX_CMR_PKO_NXC_ADR(a) BDK_CSR_TYPE_RSL
6356 #define basename_BDK_BGXX_CMR_PKO_NXC_ADR(a) "BGXX_CMR_PKO_NXC_ADR"
6357 #define device_bar_BDK_BGXX_CMR_PKO_NXC_ADR(a) 0x0 /* PF_BAR0 */
6358 #define busnum_BDK_BGXX_CMR_PKO_NXC_ADR(a) (a)
6359 #define arguments_BDK_BGXX_CMR_PKO_NXC_ADR(a) (a),-1,-1,-1
6360
6361 /**
6362 * Register (RSL) bgx#_cmr_rx_dmac#_cam
6363 *
6364 * BGX CMR Receive CAM Registers
6365 * These registers provide access to the 32 DMAC CAM entries in BGX.
6366 */
6367 union bdk_bgxx_cmr_rx_dmacx_cam
6368 {
6369 uint64_t u;
6370 struct bdk_bgxx_cmr_rx_dmacx_cam_s
6371 {
6372 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6373 uint64_t reserved_51_63 : 13;
6374 uint64_t id : 2; /**< [ 50: 49](R/W) Logical MAC ID that this DMAC CAM address applies to. BGX has 32 DMAC CAM entries that can
6375 be accessed with the BGX()_CMR_RX_DMAC()_CAM CSRs. These 32 DMAC entries can be used by
6376 any of the four SGMII MACs or the 10G/40G MACs using these register bits.
6377
6378 A typical configuration is to provide eight CAM entries per LMAC ID, which is configured
6379 using the following settings:
6380 * LMAC interface 0: BGX()_CMR_RX_DMAC(0..7)_CAM[ID] = 0x0.
6381 * LMAC interface 1: BGX()_CMR_RX_DMAC(8..15)_CAM[ID] = 0x1.
6382 * LMAC interface 2: BGX()_CMR_RX_DMAC(16..23)_CAM[ID] = 0x2.
6383 * LMAC interface 3: BGX()_CMR_RX_DMAC(24..31)_CAM[ID] = 0x3. */
6384 uint64_t en : 1; /**< [ 48: 48](R/W) CAM entry enable for this DMAC address.
6385 1 = Include this address in the matching algorithm.
6386 0 = Don't include this address in the matching algorithm. */
6387 uint64_t adr : 48; /**< [ 47: 0](R/W) DMAC address in the CAM used for matching. Specified in network byte order, i.e.
6388 ADR\<47:40\> is for the first DMAC byte on the wire. The CAM matches against unicast or
6389 multicast DMAC addresses. All BGX()_CMR_RX_DMAC()_CAM CSRs can be used in any of the LMAC
6390 combinations such that any BGX MAC can use any of the 32 common DMAC entries. */
6391 #else /* Word 0 - Little Endian */
6392 uint64_t adr : 48; /**< [ 47: 0](R/W) DMAC address in the CAM used for matching. Specified in network byte order, i.e.
6393 ADR\<47:40\> is for the first DMAC byte on the wire. The CAM matches against unicast or
6394 multicast DMAC addresses. All BGX()_CMR_RX_DMAC()_CAM CSRs can be used in any of the LMAC
6395 combinations such that any BGX MAC can use any of the 32 common DMAC entries. */
6396 uint64_t en : 1; /**< [ 48: 48](R/W) CAM entry enable for this DMAC address.
6397 1 = Include this address in the matching algorithm.
6398 0 = Don't include this address in the matching algorithm. */
6399 uint64_t id : 2; /**< [ 50: 49](R/W) Logical MAC ID that this DMAC CAM address applies to. BGX has 32 DMAC CAM entries that can
6400 be accessed with the BGX()_CMR_RX_DMAC()_CAM CSRs. These 32 DMAC entries can be used by
6401 any of the four SGMII MACs or the 10G/40G MACs using these register bits.
6402
6403 A typical configuration is to provide eight CAM entries per LMAC ID, which is configured
6404 using the following settings:
6405 * LMAC interface 0: BGX()_CMR_RX_DMAC(0..7)_CAM[ID] = 0x0.
6406 * LMAC interface 1: BGX()_CMR_RX_DMAC(8..15)_CAM[ID] = 0x1.
6407 * LMAC interface 2: BGX()_CMR_RX_DMAC(16..23)_CAM[ID] = 0x2.
6408 * LMAC interface 3: BGX()_CMR_RX_DMAC(24..31)_CAM[ID] = 0x3. */
6409 uint64_t reserved_51_63 : 13;
6410 #endif /* Word 0 - End */
6411 } s;
6412 /* struct bdk_bgxx_cmr_rx_dmacx_cam_s cn; */
6413 };
6414 typedef union bdk_bgxx_cmr_rx_dmacx_cam bdk_bgxx_cmr_rx_dmacx_cam_t;
6415
6416 static inline uint64_t BDK_BGXX_CMR_RX_DMACX_CAM(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_DMACX_CAM(unsigned long a,unsigned long b)6417 static inline uint64_t BDK_BGXX_CMR_RX_DMACX_CAM(unsigned long a, unsigned long b)
6418 {
6419 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=31)))
6420 return 0x87e0e0000200ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x1f);
6421 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=31)))
6422 return 0x87e0e0000200ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x1f);
6423 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=31)))
6424 return 0x87e0e0000200ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x1f);
6425 __bdk_csr_fatal("BGXX_CMR_RX_DMACX_CAM", 2, a, b, 0, 0);
6426 }
6427
6428 #define typedef_BDK_BGXX_CMR_RX_DMACX_CAM(a,b) bdk_bgxx_cmr_rx_dmacx_cam_t
6429 #define bustype_BDK_BGXX_CMR_RX_DMACX_CAM(a,b) BDK_CSR_TYPE_RSL
6430 #define basename_BDK_BGXX_CMR_RX_DMACX_CAM(a,b) "BGXX_CMR_RX_DMACX_CAM"
6431 #define device_bar_BDK_BGXX_CMR_RX_DMACX_CAM(a,b) 0x0 /* PF_BAR0 */
6432 #define busnum_BDK_BGXX_CMR_RX_DMACX_CAM(a,b) (a)
6433 #define arguments_BDK_BGXX_CMR_RX_DMACX_CAM(a,b) (a),(b),-1,-1
6434
6435 /**
6436 * Register (RSL) bgx#_cmr_rx_lmacs
6437 *
6438 * BGX CMR Receive Logical MACs Registers
6439 */
6440 union bdk_bgxx_cmr_rx_lmacs
6441 {
6442 uint64_t u;
6443 struct bdk_bgxx_cmr_rx_lmacs_s
6444 {
6445 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6446 uint64_t reserved_3_63 : 61;
6447 uint64_t lmacs : 3; /**< [ 2: 0](R/W) Number of LMACS. Specifies the number of LMACs that can be enabled.
6448 This determines the logical RX buffer size per LMAC and the maximum
6449 LMAC ID that can be used:
6450
6451 0x0 = Reserved.
6452 0x1 = BGX()_CONST[TX_FIFOSZ] bytes per LMAC, maximum LMAC ID is 0.
6453 0x2 = BGX()_CONST[TX_FIFOSZ]/2 bytes per LMAC, maximum LMAC ID is 1.
6454 0x3 = BGX()_CONST[TX_FIFOSZ]/4 bytes per LMAC, maximum LMAC ID is 2.
6455 0x4 = BGX()_CONST[TX_FIFOSZ]/4 bytes per LMAC, maximum LMAC ID is 3.
6456 0x5-0x7 = Reserved.
6457
6458 Note the maximum LMAC ID is determined by the smaller of
6459 BGX()_CMR_RX_LMACS[LMACS] and BGX()_CMR_TX_LMACS[LMACS]. The two fields
6460 should be set to the same value for normal operation. */
6461 #else /* Word 0 - Little Endian */
6462 uint64_t lmacs : 3; /**< [ 2: 0](R/W) Number of LMACS. Specifies the number of LMACs that can be enabled.
6463 This determines the logical RX buffer size per LMAC and the maximum
6464 LMAC ID that can be used:
6465
6466 0x0 = Reserved.
6467 0x1 = BGX()_CONST[TX_FIFOSZ] bytes per LMAC, maximum LMAC ID is 0.
6468 0x2 = BGX()_CONST[TX_FIFOSZ]/2 bytes per LMAC, maximum LMAC ID is 1.
6469 0x3 = BGX()_CONST[TX_FIFOSZ]/4 bytes per LMAC, maximum LMAC ID is 2.
6470 0x4 = BGX()_CONST[TX_FIFOSZ]/4 bytes per LMAC, maximum LMAC ID is 3.
6471 0x5-0x7 = Reserved.
6472
6473 Note the maximum LMAC ID is determined by the smaller of
6474 BGX()_CMR_RX_LMACS[LMACS] and BGX()_CMR_TX_LMACS[LMACS]. The two fields
6475 should be set to the same value for normal operation. */
6476 uint64_t reserved_3_63 : 61;
6477 #endif /* Word 0 - End */
6478 } s;
6479 /* struct bdk_bgxx_cmr_rx_lmacs_s cn81xx; */
6480 struct bdk_bgxx_cmr_rx_lmacs_cn88xx
6481 {
6482 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6483 uint64_t reserved_3_63 : 61;
6484 uint64_t lmacs : 3; /**< [ 2: 0](R/W) Number of LMACS. Specifies the number of LMACs that can be enabled.
6485 This determines the logical RX buffer size per LMAC and the maximum
6486 LMAC ID that can be used:
6487
6488 0x0 = Reserved.
6489 0x1 = 64 KB per LMAC, maximum LMAC ID is 0.
6490 0x2 = 32 KB per LMAC, maximum LMAC ID is 1.
6491 0x3 = 16 KB per LMAC, maximum LMAC ID is 2.
6492 0x4 = 16 KB per LMAC, maximum LMAC ID is 3.
6493 0x5-0x7 = Reserved.
6494
6495 Note the maximum LMAC ID is determined by the smaller of
6496 BGX()_CMR_RX_LMACS[LMACS] and BGX()_CMR_TX_LMACS[LMACS]. The two fields
6497 should be set to the same value for normal operation. */
6498 #else /* Word 0 - Little Endian */
6499 uint64_t lmacs : 3; /**< [ 2: 0](R/W) Number of LMACS. Specifies the number of LMACs that can be enabled.
6500 This determines the logical RX buffer size per LMAC and the maximum
6501 LMAC ID that can be used:
6502
6503 0x0 = Reserved.
6504 0x1 = 64 KB per LMAC, maximum LMAC ID is 0.
6505 0x2 = 32 KB per LMAC, maximum LMAC ID is 1.
6506 0x3 = 16 KB per LMAC, maximum LMAC ID is 2.
6507 0x4 = 16 KB per LMAC, maximum LMAC ID is 3.
6508 0x5-0x7 = Reserved.
6509
6510 Note the maximum LMAC ID is determined by the smaller of
6511 BGX()_CMR_RX_LMACS[LMACS] and BGX()_CMR_TX_LMACS[LMACS]. The two fields
6512 should be set to the same value for normal operation. */
6513 uint64_t reserved_3_63 : 61;
6514 #endif /* Word 0 - End */
6515 } cn88xx;
6516 /* struct bdk_bgxx_cmr_rx_lmacs_s cn83xx; */
6517 };
6518 typedef union bdk_bgxx_cmr_rx_lmacs bdk_bgxx_cmr_rx_lmacs_t;
6519
6520 static inline uint64_t BDK_BGXX_CMR_RX_LMACS(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_LMACS(unsigned long a)6521 static inline uint64_t BDK_BGXX_CMR_RX_LMACS(unsigned long a)
6522 {
6523 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6524 return 0x87e0e0000468ll + 0x1000000ll * ((a) & 0x1);
6525 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6526 return 0x87e0e0000468ll + 0x1000000ll * ((a) & 0x3);
6527 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
6528 return 0x87e0e0000468ll + 0x1000000ll * ((a) & 0x1);
6529 __bdk_csr_fatal("BGXX_CMR_RX_LMACS", 1, a, 0, 0, 0);
6530 }
6531
6532 #define typedef_BDK_BGXX_CMR_RX_LMACS(a) bdk_bgxx_cmr_rx_lmacs_t
6533 #define bustype_BDK_BGXX_CMR_RX_LMACS(a) BDK_CSR_TYPE_RSL
6534 #define basename_BDK_BGXX_CMR_RX_LMACS(a) "BGXX_CMR_RX_LMACS"
6535 #define device_bar_BDK_BGXX_CMR_RX_LMACS(a) 0x0 /* PF_BAR0 */
6536 #define busnum_BDK_BGXX_CMR_RX_LMACS(a) (a)
6537 #define arguments_BDK_BGXX_CMR_RX_LMACS(a) (a),-1,-1,-1
6538
6539 /**
6540 * Register (RSL) bgx#_cmr_rx_ovr_bp
6541 *
6542 * BGX CMR Receive-Ports Backpressure Override Registers
6543 * BGX()_CMR_RX_OVR_BP[EN\<0\>] must be set to one and BGX()_CMR_RX_OVR_BP[BP\<0\>] must be
6544 * cleared to zero (to forcibly disable hardware-automatic 802.3 PAUSE packet generation) with
6545 * the HiGig2 Protocol when BGX()_SMU()_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is
6546 * indicated by BGX()_SMU()_TX_CTL[HG_EN]=1 and BGX()_SMU()_RX_UDD_SKP[LEN]=16).
6547 * Hardware can only auto-generate backpressure through HiGig2 messages (optionally, when
6548 * BGX()_SMU()_HG2_CONTROL[HG2TX_EN]=1) with the HiGig2 protocol.
6549 */
6550 union bdk_bgxx_cmr_rx_ovr_bp
6551 {
6552 uint64_t u;
6553 struct bdk_bgxx_cmr_rx_ovr_bp_s
6554 {
6555 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6556 uint64_t reserved_12_63 : 52;
6557 uint64_t en : 4; /**< [ 11: 8](R/W) Per-LMAC enable backpressure override.
6558 0 = Don't enable.
6559 1 = Enable override.
6560
6561 Bit\<8\> represents LMAC 0, ..., bit\<11\> represents LMAC 3. */
6562 uint64_t bp : 4; /**< [ 7: 4](R/W) Per-LMAC backpressure status to use:
6563 0 = LMAC is available.
6564 1 = LMAC should be backpressured.
6565
6566 Bit\<4\> represents LMAC 0, ..., bit\<7\> represents LMAC 3. */
6567 uint64_t ign_fifo_bp : 4; /**< [ 3: 0](R/W) Ignore BGX()_CMR()_RX_BP_ON[MARK] when computing backpressure. CMR does not backpressure
6568 the
6569 MAC due to the FIFO length passing BGX()_CMR()_RX_BP_ON[MARK]. */
6570 #else /* Word 0 - Little Endian */
6571 uint64_t ign_fifo_bp : 4; /**< [ 3: 0](R/W) Ignore BGX()_CMR()_RX_BP_ON[MARK] when computing backpressure. CMR does not backpressure
6572 the
6573 MAC due to the FIFO length passing BGX()_CMR()_RX_BP_ON[MARK]. */
6574 uint64_t bp : 4; /**< [ 7: 4](R/W) Per-LMAC backpressure status to use:
6575 0 = LMAC is available.
6576 1 = LMAC should be backpressured.
6577
6578 Bit\<4\> represents LMAC 0, ..., bit\<7\> represents LMAC 3. */
6579 uint64_t en : 4; /**< [ 11: 8](R/W) Per-LMAC enable backpressure override.
6580 0 = Don't enable.
6581 1 = Enable override.
6582
6583 Bit\<8\> represents LMAC 0, ..., bit\<11\> represents LMAC 3. */
6584 uint64_t reserved_12_63 : 52;
6585 #endif /* Word 0 - End */
6586 } s;
6587 /* struct bdk_bgxx_cmr_rx_ovr_bp_s cn; */
6588 };
6589 typedef union bdk_bgxx_cmr_rx_ovr_bp bdk_bgxx_cmr_rx_ovr_bp_t;
6590
6591 static inline uint64_t BDK_BGXX_CMR_RX_OVR_BP(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_OVR_BP(unsigned long a)6592 static inline uint64_t BDK_BGXX_CMR_RX_OVR_BP(unsigned long a)
6593 {
6594 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6595 return 0x87e0e0000470ll + 0x1000000ll * ((a) & 0x1);
6596 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6597 return 0x87e0e0000470ll + 0x1000000ll * ((a) & 0x3);
6598 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
6599 return 0x87e0e0000470ll + 0x1000000ll * ((a) & 0x1);
6600 __bdk_csr_fatal("BGXX_CMR_RX_OVR_BP", 1, a, 0, 0, 0);
6601 }
6602
6603 #define typedef_BDK_BGXX_CMR_RX_OVR_BP(a) bdk_bgxx_cmr_rx_ovr_bp_t
6604 #define bustype_BDK_BGXX_CMR_RX_OVR_BP(a) BDK_CSR_TYPE_RSL
6605 #define basename_BDK_BGXX_CMR_RX_OVR_BP(a) "BGXX_CMR_RX_OVR_BP"
6606 #define device_bar_BDK_BGXX_CMR_RX_OVR_BP(a) 0x0 /* PF_BAR0 */
6607 #define busnum_BDK_BGXX_CMR_RX_OVR_BP(a) (a)
6608 #define arguments_BDK_BGXX_CMR_RX_OVR_BP(a) (a),-1,-1,-1
6609
6610 /**
6611 * Register (RSL) bgx#_cmr_rx_stat10
6612 *
6613 * BGX Receive Status Register 10
6614 * This register provide a count of octets of dropped at the NCSI interface.
6615 */
6616 union bdk_bgxx_cmr_rx_stat10
6617 {
6618 uint64_t u;
6619 struct bdk_bgxx_cmr_rx_stat10_s
6620 {
6621 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6622 uint64_t reserved_48_63 : 16;
6623 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of dropped NCSI packets. CNT will wrap and is cleared if the NCSI interface is
6624 reset with BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6625 #else /* Word 0 - Little Endian */
6626 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of dropped NCSI packets. CNT will wrap and is cleared if the NCSI interface is
6627 reset with BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6628 uint64_t reserved_48_63 : 16;
6629 #endif /* Word 0 - End */
6630 } s;
6631 struct bdk_bgxx_cmr_rx_stat10_cn81xx
6632 {
6633 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6634 uint64_t reserved_48_63 : 16;
6635 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of dropped NCSI packets. [CNT] will wrap and is cleared if NCSI is reset with
6636 BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6637 #else /* Word 0 - Little Endian */
6638 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Octet count of dropped NCSI packets. [CNT] will wrap and is cleared if NCSI is reset with
6639 BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6640 uint64_t reserved_48_63 : 16;
6641 #endif /* Word 0 - End */
6642 } cn81xx;
6643 /* struct bdk_bgxx_cmr_rx_stat10_s cn88xx; */
6644 /* struct bdk_bgxx_cmr_rx_stat10_cn81xx cn83xx; */
6645 };
6646 typedef union bdk_bgxx_cmr_rx_stat10 bdk_bgxx_cmr_rx_stat10_t;
6647
6648 static inline uint64_t BDK_BGXX_CMR_RX_STAT10(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_STAT10(unsigned long a)6649 static inline uint64_t BDK_BGXX_CMR_RX_STAT10(unsigned long a)
6650 {
6651 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6652 return 0x87e0e00000c0ll + 0x1000000ll * ((a) & 0x1);
6653 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6654 return 0x87e0e00000c0ll + 0x1000000ll * ((a) & 0x3);
6655 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
6656 return 0x87e0e00000c0ll + 0x1000000ll * ((a) & 0x1);
6657 __bdk_csr_fatal("BGXX_CMR_RX_STAT10", 1, a, 0, 0, 0);
6658 }
6659
6660 #define typedef_BDK_BGXX_CMR_RX_STAT10(a) bdk_bgxx_cmr_rx_stat10_t
6661 #define bustype_BDK_BGXX_CMR_RX_STAT10(a) BDK_CSR_TYPE_RSL
6662 #define basename_BDK_BGXX_CMR_RX_STAT10(a) "BGXX_CMR_RX_STAT10"
6663 #define device_bar_BDK_BGXX_CMR_RX_STAT10(a) 0x0 /* PF_BAR0 */
6664 #define busnum_BDK_BGXX_CMR_RX_STAT10(a) (a)
6665 #define arguments_BDK_BGXX_CMR_RX_STAT10(a) (a),-1,-1,-1
6666
6667 /**
6668 * Register (RSL) bgx#_cmr_rx_stat9
6669 *
6670 * BGX Receive Status Register 9
6671 * This registers provides a count of packets dropped at the NCSI interface.
6672 * The count of dropped NCSI packets is not accounted for in any other stats
6673 * registers.
6674 */
6675 union bdk_bgxx_cmr_rx_stat9
6676 {
6677 uint64_t u;
6678 struct bdk_bgxx_cmr_rx_stat9_s
6679 {
6680 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6681 uint64_t reserved_48_63 : 16;
6682 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of dropped packets. CNT will wrap and is cleared if the NCSI interface is reset with
6683 BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6684 #else /* Word 0 - Little Endian */
6685 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of dropped packets. CNT will wrap and is cleared if the NCSI interface is reset with
6686 BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6687 uint64_t reserved_48_63 : 16;
6688 #endif /* Word 0 - End */
6689 } s;
6690 struct bdk_bgxx_cmr_rx_stat9_cn81xx
6691 {
6692 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6693 uint64_t reserved_48_63 : 16;
6694 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of dropped packets. [CNT] will wrap and is cleared if NCSI is reset with
6695 BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6696 #else /* Word 0 - Little Endian */
6697 uint64_t cnt : 48; /**< [ 47: 0](R/W/H) Count of dropped packets. [CNT] will wrap and is cleared if NCSI is reset with
6698 BGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_RESET]. */
6699 uint64_t reserved_48_63 : 16;
6700 #endif /* Word 0 - End */
6701 } cn81xx;
6702 /* struct bdk_bgxx_cmr_rx_stat9_s cn88xx; */
6703 /* struct bdk_bgxx_cmr_rx_stat9_cn81xx cn83xx; */
6704 };
6705 typedef union bdk_bgxx_cmr_rx_stat9 bdk_bgxx_cmr_rx_stat9_t;
6706
6707 static inline uint64_t BDK_BGXX_CMR_RX_STAT9(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_STAT9(unsigned long a)6708 static inline uint64_t BDK_BGXX_CMR_RX_STAT9(unsigned long a)
6709 {
6710 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6711 return 0x87e0e00000b8ll + 0x1000000ll * ((a) & 0x1);
6712 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6713 return 0x87e0e00000b8ll + 0x1000000ll * ((a) & 0x3);
6714 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
6715 return 0x87e0e00000b8ll + 0x1000000ll * ((a) & 0x1);
6716 __bdk_csr_fatal("BGXX_CMR_RX_STAT9", 1, a, 0, 0, 0);
6717 }
6718
6719 #define typedef_BDK_BGXX_CMR_RX_STAT9(a) bdk_bgxx_cmr_rx_stat9_t
6720 #define bustype_BDK_BGXX_CMR_RX_STAT9(a) BDK_CSR_TYPE_RSL
6721 #define basename_BDK_BGXX_CMR_RX_STAT9(a) "BGXX_CMR_RX_STAT9"
6722 #define device_bar_BDK_BGXX_CMR_RX_STAT9(a) 0x0 /* PF_BAR0 */
6723 #define busnum_BDK_BGXX_CMR_RX_STAT9(a) (a)
6724 #define arguments_BDK_BGXX_CMR_RX_STAT9(a) (a),-1,-1,-1
6725
6726 /**
6727 * Register (RSL) bgx#_cmr_rx_steering#
6728 *
6729 * BGX CMR Receive Steering Registers
6730 * These registers, along with BGX()_CMR_RX_STEERING_VETYPE(), provide eight filters for
6731 * identifying and steering NCSI receive traffic.
6732 *
6733 * Steering is done for the designated LMAC specified by BGX()_CMR_GLOBAL_CONFIG[NCSI_LMAC_ID].
6734 * The steering algorithm is applied after the RX DMAC filter specified by
6735 * BGX()_CMR()_RX_DMAC_CTL and BGX()_CMR_RX_DMAC()_CAM. As such, the DMAC filter and steering
6736 * filters should be set in a consistent manner.
6737 *
6738 * Internal:
6739 * "* ALGORITHM
6740 * // Steering of RX packets for LMAC identified by BGX()_CMR_GLOBAL_CONFIG[NCSI_LMAC_ID].
6741 * rx_steering(uint48 pkt_dmac, uint16 pkt_etype, uint16 pkt_vlan_id) {
6742 * for (int i = 0; i \< 8; i++) {
6743 * steer = BGX()_CMR_RX_STEERING(i);
6744 * vetype = BGX()_CMR_RX_STEERING_VETYPE(i);
6745 * if (steer[MCST_EN] || steer[DMAC_EN] || vetype[VLAN_EN] || vetype[VLAN_TAG_EN]) {
6746 * // Filter is enabled.
6747 * if ( (!steer[MCST_EN] || is_mcst(pkt_dmac))
6748 * && (!steer[DMAC_EN] || pkt_dmac == steer[DMAC])
6749 * && (!vetype[VLAN_EN] || pkt_vlan_id == vetype[VLAN_ID])
6750 * && (!vetype[VLAN_TAG_EN] || pkt_etype == vetype[VLAN_ETYPE]) )
6751 * {
6752 * // Filter match (all enabled matching criteria are met).
6753 * return steer[DEST];
6754 * }
6755 * }
6756 * }
6757 * return BGX()_CMR_RX_STEERING_DEFAULT[DEST]; // No match
6758 * }"
6759 */
6760 union bdk_bgxx_cmr_rx_steeringx
6761 {
6762 uint64_t u;
6763 struct bdk_bgxx_cmr_rx_steeringx_s
6764 {
6765 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6766 uint64_t reserved_52_63 : 12;
6767 uint64_t dest : 2; /**< [ 51: 50](R/W) Destination for traffic that meets all criteria of the matching algorithm:
6768 0x0 = Steer this traffic exclusively to NCSI.
6769 0x1 = Steer this traffic exclusively to TNS/NIC.
6770 0x2 = Steer this traffic to BOTH TNS/NIC and NCSI.
6771 0x3 = Steer this traffic to the bit bucket (drop). */
6772 uint64_t mcst_en : 1; /**< [ 49: 49](R/W) Enable for identifying multicast packets:
6773 1 = Include multicast packets in the matching algorithm.
6774 0 = Do not include multicast packets in the matching algorithm. */
6775 uint64_t dmac_en : 1; /**< [ 48: 48](R/W) Enable DMAC address check:
6776 1 = Include DMAC address checking in the matching algorithm.
6777 0 = Do not include DMAC address checking in the matching algorithm. */
6778 uint64_t dmac : 48; /**< [ 47: 0](R/W) DMAC address used for the matching algorithm when [DMAC_EN] is set. Broadcast can be
6779 specified with value 0xFFFF_FFFFFFFF. */
6780 #else /* Word 0 - Little Endian */
6781 uint64_t dmac : 48; /**< [ 47: 0](R/W) DMAC address used for the matching algorithm when [DMAC_EN] is set. Broadcast can be
6782 specified with value 0xFFFF_FFFFFFFF. */
6783 uint64_t dmac_en : 1; /**< [ 48: 48](R/W) Enable DMAC address check:
6784 1 = Include DMAC address checking in the matching algorithm.
6785 0 = Do not include DMAC address checking in the matching algorithm. */
6786 uint64_t mcst_en : 1; /**< [ 49: 49](R/W) Enable for identifying multicast packets:
6787 1 = Include multicast packets in the matching algorithm.
6788 0 = Do not include multicast packets in the matching algorithm. */
6789 uint64_t dest : 2; /**< [ 51: 50](R/W) Destination for traffic that meets all criteria of the matching algorithm:
6790 0x0 = Steer this traffic exclusively to NCSI.
6791 0x1 = Steer this traffic exclusively to TNS/NIC.
6792 0x2 = Steer this traffic to BOTH TNS/NIC and NCSI.
6793 0x3 = Steer this traffic to the bit bucket (drop). */
6794 uint64_t reserved_52_63 : 12;
6795 #endif /* Word 0 - End */
6796 } s;
6797 struct bdk_bgxx_cmr_rx_steeringx_cn81xx
6798 {
6799 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6800 uint64_t reserved_52_63 : 12;
6801 uint64_t dest : 2; /**< [ 51: 50](R/W) Destination for traffic that meets all criteria of the matching algorithm:
6802 0x0 = Steer this traffic exclusively to NCSI.
6803 0x1 = Steer this traffic exclusively to NIC.
6804 0x2 = Steer this traffic to BOTH NIC and NCSI.
6805 0x3 = Steer this traffic to the bit bucket (drop). */
6806 uint64_t mcst_en : 1; /**< [ 49: 49](R/W) Enable for identifying multicast packets:
6807 1 = Include multicast packets in the matching algorithm.
6808 0 = Do not include multicast packets in the matching algorithm. */
6809 uint64_t dmac_en : 1; /**< [ 48: 48](R/W) Enable DMAC address check:
6810 1 = Include DMAC address checking in the matching algorithm.
6811 0 = Do not include DMAC address checking in the matching algorithm. */
6812 uint64_t dmac : 48; /**< [ 47: 0](R/W) DMAC address used for the matching algorithm when [DMAC_EN] is set. Broadcast can be
6813 specified with value 0xFFFF_FFFFFFFF. */
6814 #else /* Word 0 - Little Endian */
6815 uint64_t dmac : 48; /**< [ 47: 0](R/W) DMAC address used for the matching algorithm when [DMAC_EN] is set. Broadcast can be
6816 specified with value 0xFFFF_FFFFFFFF. */
6817 uint64_t dmac_en : 1; /**< [ 48: 48](R/W) Enable DMAC address check:
6818 1 = Include DMAC address checking in the matching algorithm.
6819 0 = Do not include DMAC address checking in the matching algorithm. */
6820 uint64_t mcst_en : 1; /**< [ 49: 49](R/W) Enable for identifying multicast packets:
6821 1 = Include multicast packets in the matching algorithm.
6822 0 = Do not include multicast packets in the matching algorithm. */
6823 uint64_t dest : 2; /**< [ 51: 50](R/W) Destination for traffic that meets all criteria of the matching algorithm:
6824 0x0 = Steer this traffic exclusively to NCSI.
6825 0x1 = Steer this traffic exclusively to NIC.
6826 0x2 = Steer this traffic to BOTH NIC and NCSI.
6827 0x3 = Steer this traffic to the bit bucket (drop). */
6828 uint64_t reserved_52_63 : 12;
6829 #endif /* Word 0 - End */
6830 } cn81xx;
6831 /* struct bdk_bgxx_cmr_rx_steeringx_s cn88xx; */
6832 struct bdk_bgxx_cmr_rx_steeringx_cn83xx
6833 {
6834 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6835 uint64_t reserved_52_63 : 12;
6836 uint64_t dest : 2; /**< [ 51: 50](R/W) Destination for traffic that meets all criteria of the matching algorithm:
6837 0x0 = Steer this traffic exclusively to NCSI.
6838 0x1 = Steer this traffic exclusively to PKO/NIC.
6839 0x2 = Steer this traffic to BOTH PKO/NIC and NCSI.
6840 0x3 = Steer this traffic to the bit bucket (drop). */
6841 uint64_t mcst_en : 1; /**< [ 49: 49](R/W) Enable for identifying multicast packets:
6842 1 = Include multicast packets in the matching algorithm.
6843 0 = Do not include multicast packets in the matching algorithm. */
6844 uint64_t dmac_en : 1; /**< [ 48: 48](R/W) Enable DMAC address check:
6845 1 = Include DMAC address checking in the matching algorithm.
6846 0 = Do not include DMAC address checking in the matching algorithm. */
6847 uint64_t dmac : 48; /**< [ 47: 0](R/W) DMAC address used for the matching algorithm when [DMAC_EN] is set. Broadcast can be
6848 specified with value 0xFFFF_FFFFFFFF. */
6849 #else /* Word 0 - Little Endian */
6850 uint64_t dmac : 48; /**< [ 47: 0](R/W) DMAC address used for the matching algorithm when [DMAC_EN] is set. Broadcast can be
6851 specified with value 0xFFFF_FFFFFFFF. */
6852 uint64_t dmac_en : 1; /**< [ 48: 48](R/W) Enable DMAC address check:
6853 1 = Include DMAC address checking in the matching algorithm.
6854 0 = Do not include DMAC address checking in the matching algorithm. */
6855 uint64_t mcst_en : 1; /**< [ 49: 49](R/W) Enable for identifying multicast packets:
6856 1 = Include multicast packets in the matching algorithm.
6857 0 = Do not include multicast packets in the matching algorithm. */
6858 uint64_t dest : 2; /**< [ 51: 50](R/W) Destination for traffic that meets all criteria of the matching algorithm:
6859 0x0 = Steer this traffic exclusively to NCSI.
6860 0x1 = Steer this traffic exclusively to PKO/NIC.
6861 0x2 = Steer this traffic to BOTH PKO/NIC and NCSI.
6862 0x3 = Steer this traffic to the bit bucket (drop). */
6863 uint64_t reserved_52_63 : 12;
6864 #endif /* Word 0 - End */
6865 } cn83xx;
6866 };
6867 typedef union bdk_bgxx_cmr_rx_steeringx bdk_bgxx_cmr_rx_steeringx_t;
6868
6869 static inline uint64_t BDK_BGXX_CMR_RX_STEERINGX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_STEERINGX(unsigned long a,unsigned long b)6870 static inline uint64_t BDK_BGXX_CMR_RX_STEERINGX(unsigned long a, unsigned long b)
6871 {
6872 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=7)))
6873 return 0x87e0e0000300ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x7);
6874 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=7)))
6875 return 0x87e0e0000300ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x7);
6876 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=7)))
6877 return 0x87e0e0000300ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x7);
6878 __bdk_csr_fatal("BGXX_CMR_RX_STEERINGX", 2, a, b, 0, 0);
6879 }
6880
6881 #define typedef_BDK_BGXX_CMR_RX_STEERINGX(a,b) bdk_bgxx_cmr_rx_steeringx_t
6882 #define bustype_BDK_BGXX_CMR_RX_STEERINGX(a,b) BDK_CSR_TYPE_RSL
6883 #define basename_BDK_BGXX_CMR_RX_STEERINGX(a,b) "BGXX_CMR_RX_STEERINGX"
6884 #define device_bar_BDK_BGXX_CMR_RX_STEERINGX(a,b) 0x0 /* PF_BAR0 */
6885 #define busnum_BDK_BGXX_CMR_RX_STEERINGX(a,b) (a)
6886 #define arguments_BDK_BGXX_CMR_RX_STEERINGX(a,b) (a),(b),-1,-1
6887
6888 /**
6889 * Register (RSL) bgx#_cmr_rx_steering_default
6890 *
6891 * BGX CMR Receive Steering Default Destination Register
6892 */
6893 union bdk_bgxx_cmr_rx_steering_default
6894 {
6895 uint64_t u;
6896 struct bdk_bgxx_cmr_rx_steering_default_s
6897 {
6898 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6899 uint64_t reserved_2_63 : 62;
6900 uint64_t dest : 2; /**< [ 1: 0](R/W) Destination for traffic that does not match any of the steering filters specified by
6901 BGX()_CMR_RX_STEERING() and and BGX()_CMR_RX_STEERING_VETYPE():
6902 0x0 = Steer traffic exclusively to NCSI.
6903 0x1 = Steer traffic exclusively to TNS/NIC.
6904 0x2 = Steer traffic to BOTH TNS/NIC and NCSI.
6905 0x3 = Steer traffic to the bit bucket (drop). */
6906 #else /* Word 0 - Little Endian */
6907 uint64_t dest : 2; /**< [ 1: 0](R/W) Destination for traffic that does not match any of the steering filters specified by
6908 BGX()_CMR_RX_STEERING() and and BGX()_CMR_RX_STEERING_VETYPE():
6909 0x0 = Steer traffic exclusively to NCSI.
6910 0x1 = Steer traffic exclusively to TNS/NIC.
6911 0x2 = Steer traffic to BOTH TNS/NIC and NCSI.
6912 0x3 = Steer traffic to the bit bucket (drop). */
6913 uint64_t reserved_2_63 : 62;
6914 #endif /* Word 0 - End */
6915 } s;
6916 struct bdk_bgxx_cmr_rx_steering_default_cn81xx
6917 {
6918 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6919 uint64_t reserved_2_63 : 62;
6920 uint64_t dest : 2; /**< [ 1: 0](R/W) Destination for traffic that does not match any of the steering filters specified by
6921 BGX()_CMR_RX_STEERING() and and BGX()_CMR_RX_STEERING_VETYPE():
6922 0x0 = Steer traffic exclusively to NCSI.
6923 0x1 = Steer traffic exclusively to NIC.
6924 0x2 = Steer traffic to BOTH NIC and NCSI.
6925 0x3 = Steer traffic to the bit bucket (drop). */
6926 #else /* Word 0 - Little Endian */
6927 uint64_t dest : 2; /**< [ 1: 0](R/W) Destination for traffic that does not match any of the steering filters specified by
6928 BGX()_CMR_RX_STEERING() and and BGX()_CMR_RX_STEERING_VETYPE():
6929 0x0 = Steer traffic exclusively to NCSI.
6930 0x1 = Steer traffic exclusively to NIC.
6931 0x2 = Steer traffic to BOTH NIC and NCSI.
6932 0x3 = Steer traffic to the bit bucket (drop). */
6933 uint64_t reserved_2_63 : 62;
6934 #endif /* Word 0 - End */
6935 } cn81xx;
6936 /* struct bdk_bgxx_cmr_rx_steering_default_s cn88xx; */
6937 struct bdk_bgxx_cmr_rx_steering_default_cn83xx
6938 {
6939 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6940 uint64_t reserved_2_63 : 62;
6941 uint64_t dest : 2; /**< [ 1: 0](R/W) Destination for traffic that does not match any of the steering filters specified by
6942 BGX()_CMR_RX_STEERING() and and BGX()_CMR_RX_STEERING_VETYPE():
6943 0x0 = Steer traffic exclusively to NCSI.
6944 0x1 = Steer traffic exclusively to PKO/NIC.
6945 0x2 = Steer traffic to BOTH PKO/NIC and NCSI.
6946 0x3 = Steer traffic to the bit bucket (drop). */
6947 #else /* Word 0 - Little Endian */
6948 uint64_t dest : 2; /**< [ 1: 0](R/W) Destination for traffic that does not match any of the steering filters specified by
6949 BGX()_CMR_RX_STEERING() and and BGX()_CMR_RX_STEERING_VETYPE():
6950 0x0 = Steer traffic exclusively to NCSI.
6951 0x1 = Steer traffic exclusively to PKO/NIC.
6952 0x2 = Steer traffic to BOTH PKO/NIC and NCSI.
6953 0x3 = Steer traffic to the bit bucket (drop). */
6954 uint64_t reserved_2_63 : 62;
6955 #endif /* Word 0 - End */
6956 } cn83xx;
6957 };
6958 typedef union bdk_bgxx_cmr_rx_steering_default bdk_bgxx_cmr_rx_steering_default_t;
6959
6960 static inline uint64_t BDK_BGXX_CMR_RX_STEERING_DEFAULT(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_STEERING_DEFAULT(unsigned long a)6961 static inline uint64_t BDK_BGXX_CMR_RX_STEERING_DEFAULT(unsigned long a)
6962 {
6963 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
6964 return 0x87e0e0000448ll + 0x1000000ll * ((a) & 0x1);
6965 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
6966 return 0x87e0e0000448ll + 0x1000000ll * ((a) & 0x3);
6967 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
6968 return 0x87e0e0000448ll + 0x1000000ll * ((a) & 0x1);
6969 __bdk_csr_fatal("BGXX_CMR_RX_STEERING_DEFAULT", 1, a, 0, 0, 0);
6970 }
6971
6972 #define typedef_BDK_BGXX_CMR_RX_STEERING_DEFAULT(a) bdk_bgxx_cmr_rx_steering_default_t
6973 #define bustype_BDK_BGXX_CMR_RX_STEERING_DEFAULT(a) BDK_CSR_TYPE_RSL
6974 #define basename_BDK_BGXX_CMR_RX_STEERING_DEFAULT(a) "BGXX_CMR_RX_STEERING_DEFAULT"
6975 #define device_bar_BDK_BGXX_CMR_RX_STEERING_DEFAULT(a) 0x0 /* PF_BAR0 */
6976 #define busnum_BDK_BGXX_CMR_RX_STEERING_DEFAULT(a) (a)
6977 #define arguments_BDK_BGXX_CMR_RX_STEERING_DEFAULT(a) (a),-1,-1,-1
6978
6979 /**
6980 * Register (RSL) bgx#_cmr_rx_steering_vetype#
6981 *
6982 * BGX CMR Receive VLAN Ethertype Register
6983 * These registers, along with BGX()_CMR_RX_STEERING(), provide eight filters for identifying and
6984 * steering NCSI receive traffic.
6985 */
6986 union bdk_bgxx_cmr_rx_steering_vetypex
6987 {
6988 uint64_t u;
6989 struct bdk_bgxx_cmr_rx_steering_vetypex_s
6990 {
6991 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
6992 uint64_t reserved_30_63 : 34;
6993 uint64_t vlan_en : 1; /**< [ 29: 29](R/W) Enable VLAN ID check:
6994 1 = Include VLAN ID checking in the matching algorithm.
6995 0 = Do not include VLAN ID checking in the matching algorithm. */
6996 uint64_t vlan_id : 12; /**< [ 28: 17](R/W) VLAN ID used for the matching algorithm when [VLAN_EN] is set. */
6997 uint64_t vlan_tag_en : 1; /**< [ 16: 16](R/W) Enable VLAN tag Ethertype check:
6998 1 = Include VLAN tag Ethertype checking in the matching algorithm.
6999 0 = Do not include VLAN tag Ethertype checking in the matching algorithm. */
7000 uint64_t vlan_etype : 16; /**< [ 15: 0](R/W) VLAN Ethertype for the matching algorithm when [VLAN_TAG_EN] is set.
7001 802.1Q and 802.1ad specify several Ethertypes used to identify VLAN tagged and VLAN double
7002 tagged packets. BGX will always match against the tag immediately following the SMAC
7003 address of the L2 header. */
7004 #else /* Word 0 - Little Endian */
7005 uint64_t vlan_etype : 16; /**< [ 15: 0](R/W) VLAN Ethertype for the matching algorithm when [VLAN_TAG_EN] is set.
7006 802.1Q and 802.1ad specify several Ethertypes used to identify VLAN tagged and VLAN double
7007 tagged packets. BGX will always match against the tag immediately following the SMAC
7008 address of the L2 header. */
7009 uint64_t vlan_tag_en : 1; /**< [ 16: 16](R/W) Enable VLAN tag Ethertype check:
7010 1 = Include VLAN tag Ethertype checking in the matching algorithm.
7011 0 = Do not include VLAN tag Ethertype checking in the matching algorithm. */
7012 uint64_t vlan_id : 12; /**< [ 28: 17](R/W) VLAN ID used for the matching algorithm when [VLAN_EN] is set. */
7013 uint64_t vlan_en : 1; /**< [ 29: 29](R/W) Enable VLAN ID check:
7014 1 = Include VLAN ID checking in the matching algorithm.
7015 0 = Do not include VLAN ID checking in the matching algorithm. */
7016 uint64_t reserved_30_63 : 34;
7017 #endif /* Word 0 - End */
7018 } s;
7019 /* struct bdk_bgxx_cmr_rx_steering_vetypex_s cn; */
7020 };
7021 typedef union bdk_bgxx_cmr_rx_steering_vetypex bdk_bgxx_cmr_rx_steering_vetypex_t;
7022
7023 static inline uint64_t BDK_BGXX_CMR_RX_STEERING_VETYPEX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_RX_STEERING_VETYPEX(unsigned long a,unsigned long b)7024 static inline uint64_t BDK_BGXX_CMR_RX_STEERING_VETYPEX(unsigned long a, unsigned long b)
7025 {
7026 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=7)))
7027 return 0x87e0e0000400ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x7);
7028 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=7)))
7029 return 0x87e0e0000400ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x7);
7030 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=7)))
7031 return 0x87e0e0000400ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x7);
7032 __bdk_csr_fatal("BGXX_CMR_RX_STEERING_VETYPEX", 2, a, b, 0, 0);
7033 }
7034
7035 #define typedef_BDK_BGXX_CMR_RX_STEERING_VETYPEX(a,b) bdk_bgxx_cmr_rx_steering_vetypex_t
7036 #define bustype_BDK_BGXX_CMR_RX_STEERING_VETYPEX(a,b) BDK_CSR_TYPE_RSL
7037 #define basename_BDK_BGXX_CMR_RX_STEERING_VETYPEX(a,b) "BGXX_CMR_RX_STEERING_VETYPEX"
7038 #define device_bar_BDK_BGXX_CMR_RX_STEERING_VETYPEX(a,b) 0x0 /* PF_BAR0 */
7039 #define busnum_BDK_BGXX_CMR_RX_STEERING_VETYPEX(a,b) (a)
7040 #define arguments_BDK_BGXX_CMR_RX_STEERING_VETYPEX(a,b) (a),(b),-1,-1
7041
7042 /**
7043 * Register (RSL) bgx#_cmr_tx_lmacs
7044 *
7045 * BGX CMR Transmit Logical MACs Registers
7046 * This register sets the number of LMACs allowed on the TX interface. The value is important for
7047 * defining the partitioning of the transmit FIFO.
7048 */
7049 union bdk_bgxx_cmr_tx_lmacs
7050 {
7051 uint64_t u;
7052 struct bdk_bgxx_cmr_tx_lmacs_s
7053 {
7054 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7055 uint64_t reserved_3_63 : 61;
7056 uint64_t lmacs : 3; /**< [ 2: 0](R/W) Number of LMACS: Specifies the number of LMACs that can be enabled.
7057 This determines the logical TX buffer size per LMAC and the maximum
7058 LMAC ID that can be used:
7059
7060 0x0 = Reserved.
7061 0x1 = 48 KB per LMAC, maximum LMAC ID is 0.
7062 0x2 = 24 KB per LMAC, maximum LMAC ID is 1.
7063 0x3 = 12 KB per LMAC, maximum LMAC ID is 2.
7064 0x4 = 12 KB per LMAC, maximum LMAC ID is 3.
7065 0x5-0x7 = Reserved.
7066
7067 The maximum LMAC ID is determined by the smaller of BGX()_CMR_RX_LMACS[LMACS]
7068 and BGX()_CMR_TX_LMACS[LMACS]. The two fields should be set to the same value for
7069 normal operation.' */
7070 #else /* Word 0 - Little Endian */
7071 uint64_t lmacs : 3; /**< [ 2: 0](R/W) Number of LMACS: Specifies the number of LMACs that can be enabled.
7072 This determines the logical TX buffer size per LMAC and the maximum
7073 LMAC ID that can be used:
7074
7075 0x0 = Reserved.
7076 0x1 = 48 KB per LMAC, maximum LMAC ID is 0.
7077 0x2 = 24 KB per LMAC, maximum LMAC ID is 1.
7078 0x3 = 12 KB per LMAC, maximum LMAC ID is 2.
7079 0x4 = 12 KB per LMAC, maximum LMAC ID is 3.
7080 0x5-0x7 = Reserved.
7081
7082 The maximum LMAC ID is determined by the smaller of BGX()_CMR_RX_LMACS[LMACS]
7083 and BGX()_CMR_TX_LMACS[LMACS]. The two fields should be set to the same value for
7084 normal operation.' */
7085 uint64_t reserved_3_63 : 61;
7086 #endif /* Word 0 - End */
7087 } s;
7088 /* struct bdk_bgxx_cmr_tx_lmacs_s cn; */
7089 };
7090 typedef union bdk_bgxx_cmr_tx_lmacs bdk_bgxx_cmr_tx_lmacs_t;
7091
7092 static inline uint64_t BDK_BGXX_CMR_TX_LMACS(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CMR_TX_LMACS(unsigned long a)7093 static inline uint64_t BDK_BGXX_CMR_TX_LMACS(unsigned long a)
7094 {
7095 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
7096 return 0x87e0e0001000ll + 0x1000000ll * ((a) & 0x1);
7097 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
7098 return 0x87e0e0001000ll + 0x1000000ll * ((a) & 0x3);
7099 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
7100 return 0x87e0e0001000ll + 0x1000000ll * ((a) & 0x1);
7101 __bdk_csr_fatal("BGXX_CMR_TX_LMACS", 1, a, 0, 0, 0);
7102 }
7103
7104 #define typedef_BDK_BGXX_CMR_TX_LMACS(a) bdk_bgxx_cmr_tx_lmacs_t
7105 #define bustype_BDK_BGXX_CMR_TX_LMACS(a) BDK_CSR_TYPE_RSL
7106 #define basename_BDK_BGXX_CMR_TX_LMACS(a) "BGXX_CMR_TX_LMACS"
7107 #define device_bar_BDK_BGXX_CMR_TX_LMACS(a) 0x0 /* PF_BAR0 */
7108 #define busnum_BDK_BGXX_CMR_TX_LMACS(a) (a)
7109 #define arguments_BDK_BGXX_CMR_TX_LMACS(a) (a),-1,-1,-1
7110
7111 /**
7112 * Register (RSL) bgx#_const
7113 *
7114 * BGX CONST Registers
7115 * This register contains constants for software discovery.
7116 */
7117 union bdk_bgxx_const
7118 {
7119 uint64_t u;
7120 struct bdk_bgxx_const_s
7121 {
7122 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7123 uint64_t reserved_32_63 : 32;
7124 uint64_t lmacs : 8; /**< [ 31: 24](RO) Number of LMACs. */
7125 uint64_t tx_fifosz : 24; /**< [ 23: 0](RO) Number of bytes of transmit buffering in entire BGX. This buffering may be split
7126 between LMACs; see BGX()_CMR_TX_LMACS[LMACS]. */
7127 #else /* Word 0 - Little Endian */
7128 uint64_t tx_fifosz : 24; /**< [ 23: 0](RO) Number of bytes of transmit buffering in entire BGX. This buffering may be split
7129 between LMACs; see BGX()_CMR_TX_LMACS[LMACS]. */
7130 uint64_t lmacs : 8; /**< [ 31: 24](RO) Number of LMACs. */
7131 uint64_t reserved_32_63 : 32;
7132 #endif /* Word 0 - End */
7133 } s;
7134 struct bdk_bgxx_const_cn81xx
7135 {
7136 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7137 uint64_t reserved_32_63 : 32;
7138 uint64_t lmacs : 8; /**< [ 31: 24](RO) Number of LMACs.
7139 If 0x0, indicates 4 LMACs, otherwise, the number of LMACs. */
7140 uint64_t tx_fifosz : 24; /**< [ 23: 0](RO) Number of bytes of transmit buffering in entire BGX. This buffering may be split
7141 between LMACs; see BGX()_CMR_TX_LMACS[LMACS]. If 0x0, indicates size of 0xC000. */
7142 #else /* Word 0 - Little Endian */
7143 uint64_t tx_fifosz : 24; /**< [ 23: 0](RO) Number of bytes of transmit buffering in entire BGX. This buffering may be split
7144 between LMACs; see BGX()_CMR_TX_LMACS[LMACS]. If 0x0, indicates size of 0xC000. */
7145 uint64_t lmacs : 8; /**< [ 31: 24](RO) Number of LMACs.
7146 If 0x0, indicates 4 LMACs, otherwise, the number of LMACs. */
7147 uint64_t reserved_32_63 : 32;
7148 #endif /* Word 0 - End */
7149 } cn81xx;
7150 /* struct bdk_bgxx_const_s cn83xx; */
7151 };
7152 typedef union bdk_bgxx_const bdk_bgxx_const_t;
7153
7154 static inline uint64_t BDK_BGXX_CONST(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CONST(unsigned long a)7155 static inline uint64_t BDK_BGXX_CONST(unsigned long a)
7156 {
7157 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
7158 return 0x87e0e0040000ll + 0x1000000ll * ((a) & 0x1);
7159 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
7160 return 0x87e0e0040000ll + 0x1000000ll * ((a) & 0x3);
7161 __bdk_csr_fatal("BGXX_CONST", 1, a, 0, 0, 0);
7162 }
7163
7164 #define typedef_BDK_BGXX_CONST(a) bdk_bgxx_const_t
7165 #define bustype_BDK_BGXX_CONST(a) BDK_CSR_TYPE_RSL
7166 #define basename_BDK_BGXX_CONST(a) "BGXX_CONST"
7167 #define device_bar_BDK_BGXX_CONST(a) 0x0 /* PF_BAR0 */
7168 #define busnum_BDK_BGXX_CONST(a) (a)
7169 #define arguments_BDK_BGXX_CONST(a) (a),-1,-1,-1
7170
7171 /**
7172 * Register (RSL) bgx#_const1
7173 *
7174 * BGX CONST1 Registers
7175 * This register contains constants for software discovery.
7176 */
7177 union bdk_bgxx_const1
7178 {
7179 uint64_t u;
7180 struct bdk_bgxx_const1_s
7181 {
7182 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7183 uint64_t reserved_32_63 : 32;
7184 uint64_t res_types : 24; /**< [ 31: 8](RO) Reserved for more LMAC TYPES. */
7185 uint64_t types : 8; /**< [ 7: 0](RO) LMAC types supported. Each bit if set corresponds to that value of BGX_LMAC_TYPES_E being
7186 supported.
7187 E.g. TYPES\<0\> if set indicates BGX_LMAC_TYPES_E::SGMII is supported. */
7188 #else /* Word 0 - Little Endian */
7189 uint64_t types : 8; /**< [ 7: 0](RO) LMAC types supported. Each bit if set corresponds to that value of BGX_LMAC_TYPES_E being
7190 supported.
7191 E.g. TYPES\<0\> if set indicates BGX_LMAC_TYPES_E::SGMII is supported. */
7192 uint64_t res_types : 24; /**< [ 31: 8](RO) Reserved for more LMAC TYPES. */
7193 uint64_t reserved_32_63 : 32;
7194 #endif /* Word 0 - End */
7195 } s;
7196 struct bdk_bgxx_const1_cn81xx
7197 {
7198 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7199 uint64_t reserved_32_63 : 32;
7200 uint64_t res_types : 24; /**< [ 31: 8](RO) Reserved for more LMAC TYPES. */
7201 uint64_t types : 8; /**< [ 7: 0](RO) LMAC types supported. Each bit if set corresponds to that value of
7202 BGX_LMAC_TYPES_E being supported. E.g. TYPES\<5\> if set indicates
7203 BGX_LMAC_TYPES_E::RGMII is supported. If 0x0, [TYPES] should be treated by
7204 software as if the read value was 0x5F (all but RGMII). */
7205 #else /* Word 0 - Little Endian */
7206 uint64_t types : 8; /**< [ 7: 0](RO) LMAC types supported. Each bit if set corresponds to that value of
7207 BGX_LMAC_TYPES_E being supported. E.g. TYPES\<5\> if set indicates
7208 BGX_LMAC_TYPES_E::RGMII is supported. If 0x0, [TYPES] should be treated by
7209 software as if the read value was 0x5F (all but RGMII). */
7210 uint64_t res_types : 24; /**< [ 31: 8](RO) Reserved for more LMAC TYPES. */
7211 uint64_t reserved_32_63 : 32;
7212 #endif /* Word 0 - End */
7213 } cn81xx;
7214 /* struct bdk_bgxx_const1_s cn83xx; */
7215 };
7216 typedef union bdk_bgxx_const1 bdk_bgxx_const1_t;
7217
7218 static inline uint64_t BDK_BGXX_CONST1(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_CONST1(unsigned long a)7219 static inline uint64_t BDK_BGXX_CONST1(unsigned long a)
7220 {
7221 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
7222 return 0x87e0e0040008ll + 0x1000000ll * ((a) & 0x1);
7223 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
7224 return 0x87e0e0040008ll + 0x1000000ll * ((a) & 0x3);
7225 __bdk_csr_fatal("BGXX_CONST1", 1, a, 0, 0, 0);
7226 }
7227
7228 #define typedef_BDK_BGXX_CONST1(a) bdk_bgxx_const1_t
7229 #define bustype_BDK_BGXX_CONST1(a) BDK_CSR_TYPE_RSL
7230 #define basename_BDK_BGXX_CONST1(a) "BGXX_CONST1"
7231 #define device_bar_BDK_BGXX_CONST1(a) 0x0 /* PF_BAR0 */
7232 #define busnum_BDK_BGXX_CONST1(a) (a)
7233 #define arguments_BDK_BGXX_CONST1(a) (a),-1,-1,-1
7234
7235 /**
7236 * Register (RSL) bgx#_gmp_gmi_prt#_cfg
7237 *
7238 * BGX GMP GMI LMAC Configuration Registers
7239 * This register controls the configuration of the LMAC.
7240 */
7241 union bdk_bgxx_gmp_gmi_prtx_cfg
7242 {
7243 uint64_t u;
7244 struct bdk_bgxx_gmp_gmi_prtx_cfg_s
7245 {
7246 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7247 uint64_t reserved_14_63 : 50;
7248 uint64_t tx_idle : 1; /**< [ 13: 13](RO/H) TX machine is idle. */
7249 uint64_t rx_idle : 1; /**< [ 12: 12](RO/H) RX machine is idle. */
7250 uint64_t reserved_9_11 : 3;
7251 uint64_t speed_msb : 1; /**< [ 8: 8](R/W) Link speed MSB (SGMII/QSGMII/1000Base-X only). See [SPEED]. */
7252 uint64_t reserved_4_7 : 4;
7253 uint64_t slottime : 1; /**< [ 3: 3](R/W) Slot time for half-duplex operation
7254 (SGMII/QSGMII/1000Base-X only):
7255 0 = 512 bit times (10/100 Mb/s operation).
7256 1 = 4096 bit times (1000 Mb/s operation). */
7257 uint64_t duplex : 1; /**< [ 2: 2](R/W) Duplex mode
7258 (SGMII/QSGMII/1000Base-X only):
7259 0 = half-duplex (collisions/extensions/bursts):
7260 1 = full-duplex. */
7261 uint64_t speed : 1; /**< [ 1: 1](R/W) Link Speed LSB (SGMII/QSGMII/1000Base-X only):
7262 _ [SPEED_MSB,SPEED] = 0x0: 100 Mb/s operation.
7263 _ [SPEED_MSB,SPEED] = 0x1: 1000 Mb/s operation.
7264 _ [SPEED_MSB,SPEED] = 0x2: 10 Mb/s operation.
7265 _ [SPEED_MSB,SPEED] = 0x3: Reserved. */
7266 uint64_t reserved_0 : 1;
7267 #else /* Word 0 - Little Endian */
7268 uint64_t reserved_0 : 1;
7269 uint64_t speed : 1; /**< [ 1: 1](R/W) Link Speed LSB (SGMII/QSGMII/1000Base-X only):
7270 _ [SPEED_MSB,SPEED] = 0x0: 100 Mb/s operation.
7271 _ [SPEED_MSB,SPEED] = 0x1: 1000 Mb/s operation.
7272 _ [SPEED_MSB,SPEED] = 0x2: 10 Mb/s operation.
7273 _ [SPEED_MSB,SPEED] = 0x3: Reserved. */
7274 uint64_t duplex : 1; /**< [ 2: 2](R/W) Duplex mode
7275 (SGMII/QSGMII/1000Base-X only):
7276 0 = half-duplex (collisions/extensions/bursts):
7277 1 = full-duplex. */
7278 uint64_t slottime : 1; /**< [ 3: 3](R/W) Slot time for half-duplex operation
7279 (SGMII/QSGMII/1000Base-X only):
7280 0 = 512 bit times (10/100 Mb/s operation).
7281 1 = 4096 bit times (1000 Mb/s operation). */
7282 uint64_t reserved_4_7 : 4;
7283 uint64_t speed_msb : 1; /**< [ 8: 8](R/W) Link speed MSB (SGMII/QSGMII/1000Base-X only). See [SPEED]. */
7284 uint64_t reserved_9_11 : 3;
7285 uint64_t rx_idle : 1; /**< [ 12: 12](RO/H) RX machine is idle. */
7286 uint64_t tx_idle : 1; /**< [ 13: 13](RO/H) TX machine is idle. */
7287 uint64_t reserved_14_63 : 50;
7288 #endif /* Word 0 - End */
7289 } s;
7290 /* struct bdk_bgxx_gmp_gmi_prtx_cfg_s cn81xx; */
7291 struct bdk_bgxx_gmp_gmi_prtx_cfg_cn88xx
7292 {
7293 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7294 uint64_t reserved_14_63 : 50;
7295 uint64_t tx_idle : 1; /**< [ 13: 13](RO/H) TX machine is idle. */
7296 uint64_t rx_idle : 1; /**< [ 12: 12](RO/H) RX machine is idle. */
7297 uint64_t reserved_9_11 : 3;
7298 uint64_t speed_msb : 1; /**< [ 8: 8](R/W) Link speed MSB (SGMII/1000Base-X only). See [SPEED]. */
7299 uint64_t reserved_4_7 : 4;
7300 uint64_t slottime : 1; /**< [ 3: 3](R/W) Slot time for half-duplex operation
7301 (SGMII/1000Base-X only):
7302 0 = 512 bit times (10/100 Mb/s operation).
7303 1 = 4096 bit times (1000 Mb/s operation). */
7304 uint64_t duplex : 1; /**< [ 2: 2](R/W) Duplex mode
7305 (SGMII/1000Base-X only):
7306 0 = half-duplex (collisions/extensions/bursts).
7307 1 = full-duplex. */
7308 uint64_t speed : 1; /**< [ 1: 1](R/W) Link Speed LSB (SGMII/1000Base-X only):
7309 _ [SPEED_MSB,SPEED] = 0x0: 100 Mb/s operation.
7310 _ [SPEED_MSB,SPEED] = 0x1: 1000 Mb/s operation.
7311 _ [SPEED_MSB,SPEED] = 0x2: 10 Mb/s operation.
7312 _ [SPEED_MSB,SPEED] = 0x3: Reserved. */
7313 uint64_t reserved_0 : 1;
7314 #else /* Word 0 - Little Endian */
7315 uint64_t reserved_0 : 1;
7316 uint64_t speed : 1; /**< [ 1: 1](R/W) Link Speed LSB (SGMII/1000Base-X only):
7317 _ [SPEED_MSB,SPEED] = 0x0: 100 Mb/s operation.
7318 _ [SPEED_MSB,SPEED] = 0x1: 1000 Mb/s operation.
7319 _ [SPEED_MSB,SPEED] = 0x2: 10 Mb/s operation.
7320 _ [SPEED_MSB,SPEED] = 0x3: Reserved. */
7321 uint64_t duplex : 1; /**< [ 2: 2](R/W) Duplex mode
7322 (SGMII/1000Base-X only):
7323 0 = half-duplex (collisions/extensions/bursts).
7324 1 = full-duplex. */
7325 uint64_t slottime : 1; /**< [ 3: 3](R/W) Slot time for half-duplex operation
7326 (SGMII/1000Base-X only):
7327 0 = 512 bit times (10/100 Mb/s operation).
7328 1 = 4096 bit times (1000 Mb/s operation). */
7329 uint64_t reserved_4_7 : 4;
7330 uint64_t speed_msb : 1; /**< [ 8: 8](R/W) Link speed MSB (SGMII/1000Base-X only). See [SPEED]. */
7331 uint64_t reserved_9_11 : 3;
7332 uint64_t rx_idle : 1; /**< [ 12: 12](RO/H) RX machine is idle. */
7333 uint64_t tx_idle : 1; /**< [ 13: 13](RO/H) TX machine is idle. */
7334 uint64_t reserved_14_63 : 50;
7335 #endif /* Word 0 - End */
7336 } cn88xx;
7337 /* struct bdk_bgxx_gmp_gmi_prtx_cfg_s cn83xx; */
7338 };
7339 typedef union bdk_bgxx_gmp_gmi_prtx_cfg bdk_bgxx_gmp_gmi_prtx_cfg_t;
7340
7341 static inline uint64_t BDK_BGXX_GMP_GMI_PRTX_CFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_PRTX_CFG(unsigned long a,unsigned long b)7342 static inline uint64_t BDK_BGXX_GMP_GMI_PRTX_CFG(unsigned long a, unsigned long b)
7343 {
7344 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
7345 return 0x87e0e0038020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7346 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
7347 return 0x87e0e0038020ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
7348 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
7349 return 0x87e0e0038020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7350 __bdk_csr_fatal("BGXX_GMP_GMI_PRTX_CFG", 2, a, b, 0, 0);
7351 }
7352
7353 #define typedef_BDK_BGXX_GMP_GMI_PRTX_CFG(a,b) bdk_bgxx_gmp_gmi_prtx_cfg_t
7354 #define bustype_BDK_BGXX_GMP_GMI_PRTX_CFG(a,b) BDK_CSR_TYPE_RSL
7355 #define basename_BDK_BGXX_GMP_GMI_PRTX_CFG(a,b) "BGXX_GMP_GMI_PRTX_CFG"
7356 #define device_bar_BDK_BGXX_GMP_GMI_PRTX_CFG(a,b) 0x0 /* PF_BAR0 */
7357 #define busnum_BDK_BGXX_GMP_GMI_PRTX_CFG(a,b) (a)
7358 #define arguments_BDK_BGXX_GMP_GMI_PRTX_CFG(a,b) (a),(b),-1,-1
7359
7360 /**
7361 * Register (RSL) bgx#_gmp_gmi_rx#_decision
7362 *
7363 * BGX GMP Packet-Decision Registers
7364 * This register specifies the byte count used to determine when to accept or to filter a packet.
7365 * As each byte in a packet is received by GMI, the L2 byte count is compared against
7366 * [CNT]. In normal operation, the L2 header begins after the
7367 * PREAMBLE + SFD (BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] = 1) and any optional UDD skip
7368 * data (BGX()_GMP_GMI_RX()_UDD_SKP[LEN]).
7369 *
7370 * Internal:
7371 * Notes:
7372 * As each byte in a packet is received by GMI, the L2 byte count is compared
7373 * against the [CNT]. The L2 byte count is the number of bytes
7374 * from the beginning of the L2 header (DMAC). In normal operation, the L2
7375 * header begins after the PREAMBLE+SFD (BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK]=1) and any
7376 * optional UDD skip data (BGX()_GMP_GMI_RX()_UDD_SKP[LEN]).
7377 * When BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the
7378 * packet and would require UDD skip length to account for them.
7379 *
7380 * Full Duplex:
7381 * _ L2 Size \< [CNT] - Accept packet. No filtering is applied.
7382 * _ L2 Size \>= [CNT] - Apply filter. Accept packet based on PAUSE packet filter.
7383 *
7384 * Half Duplex:
7385 * _ L2 Size \< [CNT] - Drop packet. Packet is unconditionally dropped.
7386 * _ L2 Size \>= [CNT] - Accept packet.
7387 *
7388 * where L2_size = MAX(0, total_packet_size - BGX()_GMP_GMI_RX()_UDD_SKP[LEN] -
7389 * ((BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK]==1)*8))
7390 */
7391 union bdk_bgxx_gmp_gmi_rxx_decision
7392 {
7393 uint64_t u;
7394 struct bdk_bgxx_gmp_gmi_rxx_decision_s
7395 {
7396 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7397 uint64_t reserved_5_63 : 59;
7398 uint64_t cnt : 5; /**< [ 4: 0](R/W) The byte count used to decide when to accept or filter a packet. */
7399 #else /* Word 0 - Little Endian */
7400 uint64_t cnt : 5; /**< [ 4: 0](R/W) The byte count used to decide when to accept or filter a packet. */
7401 uint64_t reserved_5_63 : 59;
7402 #endif /* Word 0 - End */
7403 } s;
7404 /* struct bdk_bgxx_gmp_gmi_rxx_decision_s cn; */
7405 };
7406 typedef union bdk_bgxx_gmp_gmi_rxx_decision bdk_bgxx_gmp_gmi_rxx_decision_t;
7407
7408 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_DECISION(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_DECISION(unsigned long a,unsigned long b)7409 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_DECISION(unsigned long a, unsigned long b)
7410 {
7411 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
7412 return 0x87e0e0038040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7413 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
7414 return 0x87e0e0038040ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
7415 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
7416 return 0x87e0e0038040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7417 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_DECISION", 2, a, b, 0, 0);
7418 }
7419
7420 #define typedef_BDK_BGXX_GMP_GMI_RXX_DECISION(a,b) bdk_bgxx_gmp_gmi_rxx_decision_t
7421 #define bustype_BDK_BGXX_GMP_GMI_RXX_DECISION(a,b) BDK_CSR_TYPE_RSL
7422 #define basename_BDK_BGXX_GMP_GMI_RXX_DECISION(a,b) "BGXX_GMP_GMI_RXX_DECISION"
7423 #define device_bar_BDK_BGXX_GMP_GMI_RXX_DECISION(a,b) 0x0 /* PF_BAR0 */
7424 #define busnum_BDK_BGXX_GMP_GMI_RXX_DECISION(a,b) (a)
7425 #define arguments_BDK_BGXX_GMP_GMI_RXX_DECISION(a,b) (a),(b),-1,-1
7426
7427 /**
7428 * Register (RSL) bgx#_gmp_gmi_rx#_frm_chk
7429 *
7430 * BGX GMP Frame Check Registers
7431 */
7432 union bdk_bgxx_gmp_gmi_rxx_frm_chk
7433 {
7434 uint64_t u;
7435 struct bdk_bgxx_gmp_gmi_rxx_frm_chk_s
7436 {
7437 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7438 uint64_t reserved_9_63 : 55;
7439 uint64_t skperr : 1; /**< [ 8: 8](R/W) Skipper error. */
7440 uint64_t rcverr : 1; /**< [ 7: 7](R/W) Frame was received with data-reception error. */
7441 uint64_t reserved_5_6 : 2;
7442 uint64_t fcserr : 1; /**< [ 4: 4](R/W) Frame was received with FCS/CRC error. */
7443 uint64_t jabber : 1; /**< [ 3: 3](R/W) Frame was received with length \> sys_length. */
7444 uint64_t reserved_2 : 1;
7445 uint64_t carext : 1; /**< [ 1: 1](R/W) Carrier extend error. SGMII/QSGMII/1000Base-X only. */
7446 uint64_t minerr : 1; /**< [ 0: 0](R/W) PAUSE frame was received with length \< minFrameSize. */
7447 #else /* Word 0 - Little Endian */
7448 uint64_t minerr : 1; /**< [ 0: 0](R/W) PAUSE frame was received with length \< minFrameSize. */
7449 uint64_t carext : 1; /**< [ 1: 1](R/W) Carrier extend error. SGMII/QSGMII/1000Base-X only. */
7450 uint64_t reserved_2 : 1;
7451 uint64_t jabber : 1; /**< [ 3: 3](R/W) Frame was received with length \> sys_length. */
7452 uint64_t fcserr : 1; /**< [ 4: 4](R/W) Frame was received with FCS/CRC error. */
7453 uint64_t reserved_5_6 : 2;
7454 uint64_t rcverr : 1; /**< [ 7: 7](R/W) Frame was received with data-reception error. */
7455 uint64_t skperr : 1; /**< [ 8: 8](R/W) Skipper error. */
7456 uint64_t reserved_9_63 : 55;
7457 #endif /* Word 0 - End */
7458 } s;
7459 /* struct bdk_bgxx_gmp_gmi_rxx_frm_chk_s cn81xx; */
7460 struct bdk_bgxx_gmp_gmi_rxx_frm_chk_cn88xx
7461 {
7462 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7463 uint64_t reserved_9_63 : 55;
7464 uint64_t skperr : 1; /**< [ 8: 8](R/W) Skipper error. */
7465 uint64_t rcverr : 1; /**< [ 7: 7](R/W) Frame was received with data-reception error. */
7466 uint64_t reserved_5_6 : 2;
7467 uint64_t fcserr : 1; /**< [ 4: 4](R/W) Frame was received with FCS/CRC error. */
7468 uint64_t jabber : 1; /**< [ 3: 3](R/W) Frame was received with length \> sys_length. */
7469 uint64_t reserved_2 : 1;
7470 uint64_t carext : 1; /**< [ 1: 1](R/W) Carrier extend error. SGMII/1000Base-X only. */
7471 uint64_t minerr : 1; /**< [ 0: 0](R/W) PAUSE frame was received with length \< minFrameSize. */
7472 #else /* Word 0 - Little Endian */
7473 uint64_t minerr : 1; /**< [ 0: 0](R/W) PAUSE frame was received with length \< minFrameSize. */
7474 uint64_t carext : 1; /**< [ 1: 1](R/W) Carrier extend error. SGMII/1000Base-X only. */
7475 uint64_t reserved_2 : 1;
7476 uint64_t jabber : 1; /**< [ 3: 3](R/W) Frame was received with length \> sys_length. */
7477 uint64_t fcserr : 1; /**< [ 4: 4](R/W) Frame was received with FCS/CRC error. */
7478 uint64_t reserved_5_6 : 2;
7479 uint64_t rcverr : 1; /**< [ 7: 7](R/W) Frame was received with data-reception error. */
7480 uint64_t skperr : 1; /**< [ 8: 8](R/W) Skipper error. */
7481 uint64_t reserved_9_63 : 55;
7482 #endif /* Word 0 - End */
7483 } cn88xx;
7484 /* struct bdk_bgxx_gmp_gmi_rxx_frm_chk_s cn83xx; */
7485 };
7486 typedef union bdk_bgxx_gmp_gmi_rxx_frm_chk bdk_bgxx_gmp_gmi_rxx_frm_chk_t;
7487
7488 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_FRM_CHK(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_FRM_CHK(unsigned long a,unsigned long b)7489 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_FRM_CHK(unsigned long a, unsigned long b)
7490 {
7491 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
7492 return 0x87e0e0038030ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7493 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
7494 return 0x87e0e0038030ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
7495 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
7496 return 0x87e0e0038030ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7497 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_FRM_CHK", 2, a, b, 0, 0);
7498 }
7499
7500 #define typedef_BDK_BGXX_GMP_GMI_RXX_FRM_CHK(a,b) bdk_bgxx_gmp_gmi_rxx_frm_chk_t
7501 #define bustype_BDK_BGXX_GMP_GMI_RXX_FRM_CHK(a,b) BDK_CSR_TYPE_RSL
7502 #define basename_BDK_BGXX_GMP_GMI_RXX_FRM_CHK(a,b) "BGXX_GMP_GMI_RXX_FRM_CHK"
7503 #define device_bar_BDK_BGXX_GMP_GMI_RXX_FRM_CHK(a,b) 0x0 /* PF_BAR0 */
7504 #define busnum_BDK_BGXX_GMP_GMI_RXX_FRM_CHK(a,b) (a)
7505 #define arguments_BDK_BGXX_GMP_GMI_RXX_FRM_CHK(a,b) (a),(b),-1,-1
7506
7507 /**
7508 * Register (RSL) bgx#_gmp_gmi_rx#_frm_ctl
7509 *
7510 * BGX GMP Frame Control Registers
7511 * This register controls the handling of the frames.
7512 * The [CTL_BCK] and [CTL_DRP] bits control how the hardware handles incoming PAUSE packets. The
7513 * most
7514 * common modes of operation:
7515 * _ [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything.
7516 * _ [CTL_BCK] = 0, [CTL_DRP] = 0: software sees all PAUSE frames.
7517 * _ [CTL_BCK] = 0, [CTL_DRP] = 1: all PAUSE frames are completely ignored.
7518 *
7519 * These control bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in half-duplex mode. Since
7520 * PAUSE
7521 * packets only apply to full duplex operation, any PAUSE packet would constitute an exception
7522 * which should be handled by the processing cores. PAUSE packets should not be forwarded.
7523 *
7524 * Internal:
7525 * Notes:
7526 * [PRE_STRP]:
7527 * When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP]
7528 * determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane
7529 * core as part of the packet.
7530 * In either mode, the PREAMBLE+SFD bytes are not counted toward the packet
7531 * size when checking against the MIN and MAX bounds. Furthermore, the bytes
7532 * are skipped when locating the start of the L2 header for DMAC and Control
7533 * frame recognition.
7534 */
7535 union bdk_bgxx_gmp_gmi_rxx_frm_ctl
7536 {
7537 uint64_t u;
7538 struct bdk_bgxx_gmp_gmi_rxx_frm_ctl_s
7539 {
7540 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7541 uint64_t reserved_14_63 : 50;
7542 uint64_t rx_fc_type : 1; /**< [ 13: 13](R/W) Receive side flow control type select.
7543 0 = GMI MAC receives and processes ITU G.999.1 pause frames.
7544 1 = GMI MAC receives and processes 802.3 pause frames. */
7545 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
7546 packet.
7547
7548 The timestamp bytes are added to the packet in such a way as to not modify the packet's
7549 receive byte count. This implies that the BGX()_GMP_GMI_RX()_JABBER,
7550 BGX()_GMP_GMI_RX()_DECISION, BGX()_GMP_GMI_RX()_UDD_SKP, and
7551 BGX()_CMR()_RX_STAT0..BGX()_CMR()_RX_STAT8
7552 do not require any adjustment as they operate on the received
7553 packet size. When the packet reaches NIC, its size reflects the additional bytes. */
7554 uint64_t reserved_11 : 1;
7555 uint64_t null_dis : 1; /**< [ 10: 10](R/W) When set, do not modify the MOD bits on NULL ticks due to partial packets. */
7556 uint64_t pre_align : 1; /**< [ 9: 9](R/W) When set, PREAMBLE parser aligns the SFD byte regardless of the number of previous
7557 PREAMBLE nibbles. In this mode, [PRE_STRP] should be set to account for the variable
7558 nature of the PREAMBLE. [PRE_CHK] must be set to enable this and all PREAMBLE features.
7559 SGMII at 10/100Mbs only. */
7560 uint64_t reserved_7_8 : 2;
7561 uint64_t pre_free : 1; /**< [ 6: 6](RO/H) When set, PREAMBLE checking is less strict. GMI will begin the frame at the first SFD.
7562 [PRE_CHK] must be set to enable this and all PREAMBLE features. SGMII/QSGMII/1000Base-X
7563 only. */
7564 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
7565 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
7566 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
7567 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control-PAUSE frames. */
7568 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
7569 0 = PREAMBLE + SFD is sent to core as part of frame.
7570 1 = PREAMBLE + SFD is dropped.
7571 [PRE_CHK] must be set to enable this and all PREAMBLE features.
7572
7573 If [PTP_MODE]=1 and [PRE_CHK]=1, [PRE_STRP] must be 1.
7574
7575 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
7576 if
7577 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
7578 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
7579 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
7580 of the L2 header for DMAC and control frame recognition. */
7581 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness. This port is configured to send a valid 802.3 PREAMBLE
7582 to begin every frame. GMI checks that a valid PREAMBLE is received (based on [PRE_FREE]).
7583 When a problem does occur within the PREAMBLE sequence, the frame is marked as bad and not
7584 sent into the core. The BGX()_GMP()_RX_INT[PCTERR] interrupt is also raised. */
7585 #else /* Word 0 - Little Endian */
7586 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness. This port is configured to send a valid 802.3 PREAMBLE
7587 to begin every frame. GMI checks that a valid PREAMBLE is received (based on [PRE_FREE]).
7588 When a problem does occur within the PREAMBLE sequence, the frame is marked as bad and not
7589 sent into the core. The BGX()_GMP()_RX_INT[PCTERR] interrupt is also raised. */
7590 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
7591 0 = PREAMBLE + SFD is sent to core as part of frame.
7592 1 = PREAMBLE + SFD is dropped.
7593 [PRE_CHK] must be set to enable this and all PREAMBLE features.
7594
7595 If [PTP_MODE]=1 and [PRE_CHK]=1, [PRE_STRP] must be 1.
7596
7597 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
7598 if
7599 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
7600 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
7601 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
7602 of the L2 header for DMAC and control frame recognition. */
7603 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control-PAUSE frames. */
7604 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
7605 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
7606 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
7607 uint64_t pre_free : 1; /**< [ 6: 6](RO/H) When set, PREAMBLE checking is less strict. GMI will begin the frame at the first SFD.
7608 [PRE_CHK] must be set to enable this and all PREAMBLE features. SGMII/QSGMII/1000Base-X
7609 only. */
7610 uint64_t reserved_7_8 : 2;
7611 uint64_t pre_align : 1; /**< [ 9: 9](R/W) When set, PREAMBLE parser aligns the SFD byte regardless of the number of previous
7612 PREAMBLE nibbles. In this mode, [PRE_STRP] should be set to account for the variable
7613 nature of the PREAMBLE. [PRE_CHK] must be set to enable this and all PREAMBLE features.
7614 SGMII at 10/100Mbs only. */
7615 uint64_t null_dis : 1; /**< [ 10: 10](R/W) When set, do not modify the MOD bits on NULL ticks due to partial packets. */
7616 uint64_t reserved_11 : 1;
7617 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
7618 packet.
7619
7620 The timestamp bytes are added to the packet in such a way as to not modify the packet's
7621 receive byte count. This implies that the BGX()_GMP_GMI_RX()_JABBER,
7622 BGX()_GMP_GMI_RX()_DECISION, BGX()_GMP_GMI_RX()_UDD_SKP, and
7623 BGX()_CMR()_RX_STAT0..BGX()_CMR()_RX_STAT8
7624 do not require any adjustment as they operate on the received
7625 packet size. When the packet reaches NIC, its size reflects the additional bytes. */
7626 uint64_t rx_fc_type : 1; /**< [ 13: 13](R/W) Receive side flow control type select.
7627 0 = GMI MAC receives and processes ITU G.999.1 pause frames.
7628 1 = GMI MAC receives and processes 802.3 pause frames. */
7629 uint64_t reserved_14_63 : 50;
7630 #endif /* Word 0 - End */
7631 } s;
7632 struct bdk_bgxx_gmp_gmi_rxx_frm_ctl_cn81xx
7633 {
7634 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7635 uint64_t reserved_14_63 : 50;
7636 uint64_t rx_fc_type : 1; /**< [ 13: 13](R/W) Receive side flow control type select.
7637 0 = GMI MAC receives and processes ITU G.999.1 pause frames.
7638 1 = GMI MAC receives and processes 802.3 pause frames. */
7639 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
7640 packet.
7641
7642 The timestamp bytes are added to the packet in such a way as to not modify the packet's
7643 receive byte count. This implies that the BGX()_GMP_GMI_RX()_JABBER,
7644 BGX()_GMP_GMI_RX()_DECISION, BGX()_GMP_GMI_RX()_UDD_SKP, and
7645 BGX()_CMR()_RX_STAT0..BGX()_CMR()_RX_STAT8
7646 do not require any adjustment as they operate on the received
7647 packet size. When the packet reaches NIC, its size reflects the additional bytes. */
7648 uint64_t reserved_11 : 1;
7649 uint64_t null_dis : 1; /**< [ 10: 10](R/W) When set, do not modify the MOD bits on NULL ticks due to partial packets. */
7650 uint64_t pre_align : 1; /**< [ 9: 9](R/W) When set, PREAMBLE parser aligns the SFD byte regardless of the number of previous
7651 PREAMBLE nibbles. In this mode, [PRE_STRP] should be set to account for the variable
7652 nature of the PREAMBLE. [PRE_CHK] must be set to enable this and all PREAMBLE features.
7653 SGMII at 10/100Mbs only. */
7654 uint64_t reserved_8 : 1;
7655 uint64_t reserved_7 : 1;
7656 uint64_t pre_free : 1; /**< [ 6: 6](RO/H) When set, PREAMBLE checking is less strict. GMI will begin the frame at the first SFD.
7657 [PRE_CHK] must be set to enable this and all PREAMBLE features. SGMII/QSGMII/1000Base-X
7658 only. */
7659 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
7660 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
7661 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
7662 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control-PAUSE frames. */
7663 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
7664 0 = PREAMBLE + SFD is sent to core as part of frame.
7665 1 = PREAMBLE + SFD is dropped.
7666 [PRE_CHK] must be set to enable this and all PREAMBLE features.
7667
7668 If [PTP_MODE]=1 and [PRE_CHK]=1, [PRE_STRP] must be 1.
7669
7670 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
7671 if
7672 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
7673 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
7674 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
7675 of the L2 header for DMAC and control frame recognition. */
7676 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness. This port is configured to send a valid 802.3 PREAMBLE
7677 to begin every frame. GMI checks that a valid PREAMBLE is received (based on [PRE_FREE]).
7678 When a problem does occur within the PREAMBLE sequence, the frame is marked as bad and not
7679 sent into the core. The BGX()_GMP()_RX_INT[PCTERR] interrupt is also raised. */
7680 #else /* Word 0 - Little Endian */
7681 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness. This port is configured to send a valid 802.3 PREAMBLE
7682 to begin every frame. GMI checks that a valid PREAMBLE is received (based on [PRE_FREE]).
7683 When a problem does occur within the PREAMBLE sequence, the frame is marked as bad and not
7684 sent into the core. The BGX()_GMP()_RX_INT[PCTERR] interrupt is also raised. */
7685 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
7686 0 = PREAMBLE + SFD is sent to core as part of frame.
7687 1 = PREAMBLE + SFD is dropped.
7688 [PRE_CHK] must be set to enable this and all PREAMBLE features.
7689
7690 If [PTP_MODE]=1 and [PRE_CHK]=1, [PRE_STRP] must be 1.
7691
7692 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
7693 if
7694 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
7695 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
7696 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
7697 of the L2 header for DMAC and control frame recognition. */
7698 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control-PAUSE frames. */
7699 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
7700 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
7701 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
7702 uint64_t pre_free : 1; /**< [ 6: 6](RO/H) When set, PREAMBLE checking is less strict. GMI will begin the frame at the first SFD.
7703 [PRE_CHK] must be set to enable this and all PREAMBLE features. SGMII/QSGMII/1000Base-X
7704 only. */
7705 uint64_t reserved_7 : 1;
7706 uint64_t reserved_8 : 1;
7707 uint64_t pre_align : 1; /**< [ 9: 9](R/W) When set, PREAMBLE parser aligns the SFD byte regardless of the number of previous
7708 PREAMBLE nibbles. In this mode, [PRE_STRP] should be set to account for the variable
7709 nature of the PREAMBLE. [PRE_CHK] must be set to enable this and all PREAMBLE features.
7710 SGMII at 10/100Mbs only. */
7711 uint64_t null_dis : 1; /**< [ 10: 10](R/W) When set, do not modify the MOD bits on NULL ticks due to partial packets. */
7712 uint64_t reserved_11 : 1;
7713 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
7714 packet.
7715
7716 The timestamp bytes are added to the packet in such a way as to not modify the packet's
7717 receive byte count. This implies that the BGX()_GMP_GMI_RX()_JABBER,
7718 BGX()_GMP_GMI_RX()_DECISION, BGX()_GMP_GMI_RX()_UDD_SKP, and
7719 BGX()_CMR()_RX_STAT0..BGX()_CMR()_RX_STAT8
7720 do not require any adjustment as they operate on the received
7721 packet size. When the packet reaches NIC, its size reflects the additional bytes. */
7722 uint64_t rx_fc_type : 1; /**< [ 13: 13](R/W) Receive side flow control type select.
7723 0 = GMI MAC receives and processes ITU G.999.1 pause frames.
7724 1 = GMI MAC receives and processes 802.3 pause frames. */
7725 uint64_t reserved_14_63 : 50;
7726 #endif /* Word 0 - End */
7727 } cn81xx;
7728 struct bdk_bgxx_gmp_gmi_rxx_frm_ctl_cn88xx
7729 {
7730 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7731 uint64_t reserved_13_63 : 51;
7732 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
7733 packet.
7734
7735 The timestamp bytes are added to the packet in such a way as to not modify the packet's
7736 receive byte count. This implies that the BGX()_GMP_GMI_RX()_JABBER,
7737 BGX()_GMP_GMI_RX()_DECISION, BGX()_GMP_GMI_RX()_UDD_SKP, and
7738 BGX()_CMR()_RX_STAT0..BGX()_CMR()_RX_STAT8
7739 do not require any adjustment as they operate on the received
7740 packet size. When the packet reaches NIC, its size reflects the additional bytes. */
7741 uint64_t reserved_11 : 1;
7742 uint64_t null_dis : 1; /**< [ 10: 10](R/W) When set, do not modify the MOD bits on NULL ticks due to partial packets. */
7743 uint64_t pre_align : 1; /**< [ 9: 9](R/W) When set, PREAMBLE parser aligns the SFD byte regardless of the number of previous
7744 PREAMBLE nibbles. In this mode, [PRE_STRP] should be set to account for the variable
7745 nature of the PREAMBLE. [PRE_CHK] must be set to enable this and all PREAMBLE features.
7746 SGMII at 10/100Mbs only. */
7747 uint64_t reserved_8 : 1;
7748 uint64_t reserved_7 : 1;
7749 uint64_t pre_free : 1; /**< [ 6: 6](RO/H) When set, PREAMBLE checking is less strict. GMI will begin the frame at the first SFD.
7750 [PRE_CHK] must be set to enable this and all PREAMBLE features. SGMII/1000Base-X only. */
7751 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
7752 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
7753 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
7754 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control-PAUSE frames. */
7755 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
7756 0 = PREAMBLE + SFD is sent to core as part of frame.
7757 1 = PREAMBLE + SFD is dropped.
7758 [PRE_CHK] must be set to enable this and all PREAMBLE features.
7759
7760 If [PTP_MODE]=1 and [PRE_CHK]=1, [PRE_STRP] must be 1.
7761
7762 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
7763 if
7764 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
7765 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
7766 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
7767 of the L2 header for DMAC and control frame recognition. */
7768 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness. This port is configured to send a valid 802.3 PREAMBLE
7769 to begin every frame. GMI checks that a valid PREAMBLE is received (based on [PRE_FREE]).
7770 When a problem does occur within the PREAMBLE sequence, the frame is marked as bad and not
7771 sent into the core. The BGX()_SMU()_RX_INT[PCTERR] interrupt is also raised.
7772
7773 When BGX()_SMU()_TX_CTL[HG_EN] is set, [PRE_CHK] must be 0. If [PTP_MODE] = 1 and
7774 [PRE_CHK] = 1, [PRE_STRP] must be 1. */
7775 #else /* Word 0 - Little Endian */
7776 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness. This port is configured to send a valid 802.3 PREAMBLE
7777 to begin every frame. GMI checks that a valid PREAMBLE is received (based on [PRE_FREE]).
7778 When a problem does occur within the PREAMBLE sequence, the frame is marked as bad and not
7779 sent into the core. The BGX()_SMU()_RX_INT[PCTERR] interrupt is also raised.
7780
7781 When BGX()_SMU()_TX_CTL[HG_EN] is set, [PRE_CHK] must be 0. If [PTP_MODE] = 1 and
7782 [PRE_CHK] = 1, [PRE_STRP] must be 1. */
7783 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
7784 0 = PREAMBLE + SFD is sent to core as part of frame.
7785 1 = PREAMBLE + SFD is dropped.
7786 [PRE_CHK] must be set to enable this and all PREAMBLE features.
7787
7788 If [PTP_MODE]=1 and [PRE_CHK]=1, [PRE_STRP] must be 1.
7789
7790 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
7791 if
7792 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
7793 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
7794 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
7795 of the L2 header for DMAC and control frame recognition. */
7796 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control-PAUSE frames. */
7797 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
7798 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
7799 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
7800 uint64_t pre_free : 1; /**< [ 6: 6](RO/H) When set, PREAMBLE checking is less strict. GMI will begin the frame at the first SFD.
7801 [PRE_CHK] must be set to enable this and all PREAMBLE features. SGMII/1000Base-X only. */
7802 uint64_t reserved_7 : 1;
7803 uint64_t reserved_8 : 1;
7804 uint64_t pre_align : 1; /**< [ 9: 9](R/W) When set, PREAMBLE parser aligns the SFD byte regardless of the number of previous
7805 PREAMBLE nibbles. In this mode, [PRE_STRP] should be set to account for the variable
7806 nature of the PREAMBLE. [PRE_CHK] must be set to enable this and all PREAMBLE features.
7807 SGMII at 10/100Mbs only. */
7808 uint64_t null_dis : 1; /**< [ 10: 10](R/W) When set, do not modify the MOD bits on NULL ticks due to partial packets. */
7809 uint64_t reserved_11 : 1;
7810 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
7811 packet.
7812
7813 The timestamp bytes are added to the packet in such a way as to not modify the packet's
7814 receive byte count. This implies that the BGX()_GMP_GMI_RX()_JABBER,
7815 BGX()_GMP_GMI_RX()_DECISION, BGX()_GMP_GMI_RX()_UDD_SKP, and
7816 BGX()_CMR()_RX_STAT0..BGX()_CMR()_RX_STAT8
7817 do not require any adjustment as they operate on the received
7818 packet size. When the packet reaches NIC, its size reflects the additional bytes. */
7819 uint64_t reserved_13_63 : 51;
7820 #endif /* Word 0 - End */
7821 } cn88xx;
7822 /* struct bdk_bgxx_gmp_gmi_rxx_frm_ctl_cn81xx cn83xx; */
7823 };
7824 typedef union bdk_bgxx_gmp_gmi_rxx_frm_ctl bdk_bgxx_gmp_gmi_rxx_frm_ctl_t;
7825
7826 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_FRM_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_FRM_CTL(unsigned long a,unsigned long b)7827 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_FRM_CTL(unsigned long a, unsigned long b)
7828 {
7829 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
7830 return 0x87e0e0038028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7831 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
7832 return 0x87e0e0038028ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
7833 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
7834 return 0x87e0e0038028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7835 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_FRM_CTL", 2, a, b, 0, 0);
7836 }
7837
7838 #define typedef_BDK_BGXX_GMP_GMI_RXX_FRM_CTL(a,b) bdk_bgxx_gmp_gmi_rxx_frm_ctl_t
7839 #define bustype_BDK_BGXX_GMP_GMI_RXX_FRM_CTL(a,b) BDK_CSR_TYPE_RSL
7840 #define basename_BDK_BGXX_GMP_GMI_RXX_FRM_CTL(a,b) "BGXX_GMP_GMI_RXX_FRM_CTL"
7841 #define device_bar_BDK_BGXX_GMP_GMI_RXX_FRM_CTL(a,b) 0x0 /* PF_BAR0 */
7842 #define busnum_BDK_BGXX_GMP_GMI_RXX_FRM_CTL(a,b) (a)
7843 #define arguments_BDK_BGXX_GMP_GMI_RXX_FRM_CTL(a,b) (a),(b),-1,-1
7844
7845 /**
7846 * Register (RSL) bgx#_gmp_gmi_rx#_ifg
7847 *
7848 * BGX GMI Minimum Interframe-Gap Cycles Registers
7849 * This register specifies the minimum number of interframe-gap (IFG) cycles between packets.
7850 */
7851 union bdk_bgxx_gmp_gmi_rxx_ifg
7852 {
7853 uint64_t u;
7854 struct bdk_bgxx_gmp_gmi_rxx_ifg_s
7855 {
7856 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7857 uint64_t reserved_4_63 : 60;
7858 uint64_t ifg : 4; /**< [ 3: 0](R/W) Min IFG (in IFG * 8 bits) between packets used to determine IFGERR. Normally IFG is 96
7859 bits. Values 0x1 or smaller are illegal.
7860
7861 Note that in some operating modes, IFG cycles can be inserted or removed in order to
7862 achieve clock rate adaptation. For these reasons, the default value is slightly
7863 conservative and does not check up to the full 96 bits of IFG.
7864 (SGMII/QSGMII/1000Base-X only) */
7865 #else /* Word 0 - Little Endian */
7866 uint64_t ifg : 4; /**< [ 3: 0](R/W) Min IFG (in IFG * 8 bits) between packets used to determine IFGERR. Normally IFG is 96
7867 bits. Values 0x1 or smaller are illegal.
7868
7869 Note that in some operating modes, IFG cycles can be inserted or removed in order to
7870 achieve clock rate adaptation. For these reasons, the default value is slightly
7871 conservative and does not check up to the full 96 bits of IFG.
7872 (SGMII/QSGMII/1000Base-X only) */
7873 uint64_t reserved_4_63 : 60;
7874 #endif /* Word 0 - End */
7875 } s;
7876 /* struct bdk_bgxx_gmp_gmi_rxx_ifg_s cn81xx; */
7877 struct bdk_bgxx_gmp_gmi_rxx_ifg_cn88xx
7878 {
7879 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7880 uint64_t reserved_4_63 : 60;
7881 uint64_t ifg : 4; /**< [ 3: 0](R/W) Min IFG (in IFG * 8 bits) between packets used to determine IFGERR. Normally IFG is 96
7882 bits. Values 0x1 or smaller are illegal.
7883
7884 Note that in some operating modes, IFG cycles can be inserted or removed in order to
7885 achieve clock rate adaptation. For these reasons, the default value is slightly
7886 conservative and does not check up to the full 96 bits of IFG.
7887 (SGMII/1000Base-X only) */
7888 #else /* Word 0 - Little Endian */
7889 uint64_t ifg : 4; /**< [ 3: 0](R/W) Min IFG (in IFG * 8 bits) between packets used to determine IFGERR. Normally IFG is 96
7890 bits. Values 0x1 or smaller are illegal.
7891
7892 Note that in some operating modes, IFG cycles can be inserted or removed in order to
7893 achieve clock rate adaptation. For these reasons, the default value is slightly
7894 conservative and does not check up to the full 96 bits of IFG.
7895 (SGMII/1000Base-X only) */
7896 uint64_t reserved_4_63 : 60;
7897 #endif /* Word 0 - End */
7898 } cn88xx;
7899 /* struct bdk_bgxx_gmp_gmi_rxx_ifg_s cn83xx; */
7900 };
7901 typedef union bdk_bgxx_gmp_gmi_rxx_ifg bdk_bgxx_gmp_gmi_rxx_ifg_t;
7902
7903 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_IFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_IFG(unsigned long a,unsigned long b)7904 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_IFG(unsigned long a, unsigned long b)
7905 {
7906 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
7907 return 0x87e0e0038058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7908 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
7909 return 0x87e0e0038058ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
7910 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
7911 return 0x87e0e0038058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
7912 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_IFG", 2, a, b, 0, 0);
7913 }
7914
7915 #define typedef_BDK_BGXX_GMP_GMI_RXX_IFG(a,b) bdk_bgxx_gmp_gmi_rxx_ifg_t
7916 #define bustype_BDK_BGXX_GMP_GMI_RXX_IFG(a,b) BDK_CSR_TYPE_RSL
7917 #define basename_BDK_BGXX_GMP_GMI_RXX_IFG(a,b) "BGXX_GMP_GMI_RXX_IFG"
7918 #define device_bar_BDK_BGXX_GMP_GMI_RXX_IFG(a,b) 0x0 /* PF_BAR0 */
7919 #define busnum_BDK_BGXX_GMP_GMI_RXX_IFG(a,b) (a)
7920 #define arguments_BDK_BGXX_GMP_GMI_RXX_IFG(a,b) (a),(b),-1,-1
7921
7922 /**
7923 * Register (RSL) bgx#_gmp_gmi_rx#_int
7924 *
7925 * BGX GMP GMI RX Interrupt Registers
7926 * '"These registers allow interrupts to be sent to the control processor.
7927 * * Exception conditions \<10:0\> can also set the rcv/opcode in the received packet's work-queue
7928 * entry. BGX()_GMP_GMI_RX()_FRM_CHK provides a bit mask for configuring which conditions
7929 * set the error.
7930 * In half duplex operation, the expectation is that collisions will appear as either MINERR or
7931 * CAREXT errors.'
7932 *
7933 * Internal:
7934 * Notes:
7935 * (1) exception conditions 10:0 can also set the rcv/opcode in the received
7936 * packet's workQ entry. The BGX()_GMP_GMI_RX()_FRM_CHK register provides a bit mask
7937 * for configuring which conditions set the error.
7938 *
7939 * (2) in half duplex operation, the expectation is that collisions will appear
7940 * as either MINERR o r CAREXT errors.
7941 *
7942 * (3) JABBER An RX jabber error indicates that a packet was received which
7943 * is longer than the maximum allowed packet as defined by the
7944 * system. GMI will truncate the packet at the JABBER count.
7945 * Failure to do so could lead to system instabilty.
7946 *
7947 * (4) NIBERR This error is illegal at 1000Mbs speeds
7948 * (BGX()_GMP_GMI_PRT()_CFG[SPEED]==0) and will never assert.
7949 *
7950 * (5) MINERR total frame DA+SA+TL+DATA+PAD+FCS \< 64
7951 *
7952 * (6) ALNERR Indicates that the packet received was not an integer number of
7953 * bytes. If FCS checking is enabled, ALNERR will only assert if
7954 * the FCS is bad. If FCS checking is disabled, ALNERR will
7955 * assert in all non-integer frame cases.
7956 *
7957 * (7) Collisions Collisions can only occur in half-duplex mode. A collision
7958 * is assumed by the receiver when the slottime
7959 * (BGX()_GMP_GMI_PRT()_CFG[SLOTTIME]) is not satisfied. In 10/100 mode,
7960 * this will result in a frame \< SLOTTIME. In 1000 mode, it
7961 * could result either in frame \< SLOTTIME or a carrier extend
7962 * error with the SLOTTIME. These conditions are visible by...
7963 * . transfer ended before slottime COLDET
7964 * . carrier extend error CAREXT
7965 *
7966 * (A) LENERR Length errors occur when the received packet does not match the
7967 * length field. LENERR is only checked for packets between 64
7968 * and 1500 bytes. For untagged frames, the length must exact
7969 * match. For tagged frames the length or length+4 must match.
7970 *
7971 * (B) PCTERR checks that the frame begins with a valid PREAMBLE sequence.
7972 * Does not check the number of PREAMBLE cycles.
7973 *
7974 * (C) OVRERR *DON'T PUT IN HRM*
7975 * OVRERR is an architectural assertion check internal to GMI to
7976 * make sure no assumption was violated. In a correctly operating
7977 * system, this interrupt can never fire.
7978 * GMI has an internal arbiter which selects which of four ports to
7979 * buffer in the main RX FIFO. If we normally buffer eight bytes,
7980 * then each port will typically push a tick every eight cycles if
7981 * the packet interface is going as fast as possible. If there
7982 * are four ports, they push every two cycles. So that's the
7983 * assumption. That the inbound module will always be able to
7984 * consume the tick before another is produced. If that doesn't
7985 * happen that's when OVRERR will assert."
7986 */
7987 union bdk_bgxx_gmp_gmi_rxx_int
7988 {
7989 uint64_t u;
7990 struct bdk_bgxx_gmp_gmi_rxx_int_s
7991 {
7992 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
7993 uint64_t reserved_12_63 : 52;
7994 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Interframe gap violation. Does not necessarily indicate a failure. SGMII/QSGMII/1000Base-X only. */
7995 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Collision detection. Collisions can only occur in half-duplex mode. A collision is assumed
7996 by the receiver when the slottime (BGX()_GMP_GMI_PRT()_CFG[SLOTTIME]) is not
7997 satisfied. In 10/100 mode, this will result in a frame \< SLOTTIME. In 1000 mode, it could
7998 result either in frame \< SLOTTIME or a carrier extend error with the SLOTTIME. These
7999 conditions are visible by 1) transfer ended before slottime - COLDET or 2) carrier extend
8000 error - CAREXT. */
8001 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) False-carrier error, or carrier-extend error after slottime is satisfied.
8002 SGMII/QSGMII/1000Base-X only. */
8003 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Detected reserved opcode. */
8004 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Bad preamble/protocol error. Checks that the frame begins with a valid PREAMBLE sequence.
8005 Does not check the number of PREAMBLE cycles. */
8006 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Internal data aggregation overflow. This interrupt should never assert.
8007 SGMII/QSGMII/1000Base-X only. */
8008 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Skipper error. */
8009 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Data-reception error. Frame was received with data-reception error. */
8010 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) FCS/CRC error. Frame was received with FCS/CRC error. */
8011 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) System-length error: frame was received with length \> sys_length.
8012 An RX Jabber error indicates that a packet was received which is longer than the maximum
8013 allowed packet as defined by the system. GMI truncates the packet at the JABBER count.
8014 Failure to do so could lead to system instability. */
8015 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Carrier-extend error. (SGMII/QSGMII/1000Base-X only) */
8016 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) PAUSE frame was received with length \< minFrameSize. Frame length checks are typically
8017 handled in NIC, but PAUSE frames are normally discarded before being inspected by NIC.
8018 Total frame DA+SA+TL+DATA+PAD+FCS \< 64. */
8019 #else /* Word 0 - Little Endian */
8020 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) PAUSE frame was received with length \< minFrameSize. Frame length checks are typically
8021 handled in NIC, but PAUSE frames are normally discarded before being inspected by NIC.
8022 Total frame DA+SA+TL+DATA+PAD+FCS \< 64. */
8023 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Carrier-extend error. (SGMII/QSGMII/1000Base-X only) */
8024 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) System-length error: frame was received with length \> sys_length.
8025 An RX Jabber error indicates that a packet was received which is longer than the maximum
8026 allowed packet as defined by the system. GMI truncates the packet at the JABBER count.
8027 Failure to do so could lead to system instability. */
8028 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) FCS/CRC error. Frame was received with FCS/CRC error. */
8029 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Data-reception error. Frame was received with data-reception error. */
8030 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Skipper error. */
8031 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Internal data aggregation overflow. This interrupt should never assert.
8032 SGMII/QSGMII/1000Base-X only. */
8033 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Bad preamble/protocol error. Checks that the frame begins with a valid PREAMBLE sequence.
8034 Does not check the number of PREAMBLE cycles. */
8035 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Detected reserved opcode. */
8036 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) False-carrier error, or carrier-extend error after slottime is satisfied.
8037 SGMII/QSGMII/1000Base-X only. */
8038 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Collision detection. Collisions can only occur in half-duplex mode. A collision is assumed
8039 by the receiver when the slottime (BGX()_GMP_GMI_PRT()_CFG[SLOTTIME]) is not
8040 satisfied. In 10/100 mode, this will result in a frame \< SLOTTIME. In 1000 mode, it could
8041 result either in frame \< SLOTTIME or a carrier extend error with the SLOTTIME. These
8042 conditions are visible by 1) transfer ended before slottime - COLDET or 2) carrier extend
8043 error - CAREXT. */
8044 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Interframe gap violation. Does not necessarily indicate a failure. SGMII/QSGMII/1000Base-X only. */
8045 uint64_t reserved_12_63 : 52;
8046 #endif /* Word 0 - End */
8047 } s;
8048 /* struct bdk_bgxx_gmp_gmi_rxx_int_s cn81xx; */
8049 struct bdk_bgxx_gmp_gmi_rxx_int_cn88xx
8050 {
8051 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8052 uint64_t reserved_12_63 : 52;
8053 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Interframe gap violation. Does not necessarily indicate a failure. SGMII/1000Base-X only. */
8054 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Collision detection. Collisions can only occur in half-duplex mode. A collision is assumed
8055 by the receiver when the slottime (BGX()_GMP_GMI_PRT()_CFG[SLOTTIME]) is not
8056 satisfied. In 10/100 mode, this will result in a frame \< SLOTTIME. In 1000 mode, it could
8057 result either in frame \< SLOTTIME or a carrier extend error with the SLOTTIME. These
8058 conditions are visible by 1) transfer ended before slottime - COLDET or 2) carrier extend
8059 error - CAREXT. */
8060 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) False-carrier error, or carrier-extend error after slottime is satisfied. SGMII/1000Base-X only. */
8061 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Detected reserved opcode. */
8062 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Bad preamble/protocol error. Checks that the frame begins with a valid PREAMBLE sequence.
8063 Does not check the number of PREAMBLE cycles. */
8064 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Internal data aggregation overflow. This interrupt should never assert. SGMII/1000Base-X only. */
8065 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Skipper error. */
8066 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Data-reception error. Frame was received with data-reception error. */
8067 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) FCS/CRC error. Frame was received with FCS/CRC error. */
8068 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) System-length error: frame was received with length \> sys_length.
8069 An RX Jabber error indicates that a packet was received which is longer than the maximum
8070 allowed packet as defined by the system. GMI truncates the packet at the JABBER count.
8071 Failure to do so could lead to system instability. */
8072 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Carrier-extend error. (SGMII/1000Base-X only) */
8073 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) PAUSE frame was received with length \< minFrameSize. Frame length checks are typically
8074 handled in NIC, but PAUSE frames are normally discarded before being inspected by NIC.
8075 Total frame DA+SA+TL+DATA+PAD+FCS \< 64. */
8076 #else /* Word 0 - Little Endian */
8077 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) PAUSE frame was received with length \< minFrameSize. Frame length checks are typically
8078 handled in NIC, but PAUSE frames are normally discarded before being inspected by NIC.
8079 Total frame DA+SA+TL+DATA+PAD+FCS \< 64. */
8080 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Carrier-extend error. (SGMII/1000Base-X only) */
8081 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) System-length error: frame was received with length \> sys_length.
8082 An RX Jabber error indicates that a packet was received which is longer than the maximum
8083 allowed packet as defined by the system. GMI truncates the packet at the JABBER count.
8084 Failure to do so could lead to system instability. */
8085 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) FCS/CRC error. Frame was received with FCS/CRC error. */
8086 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Data-reception error. Frame was received with data-reception error. */
8087 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Skipper error. */
8088 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Internal data aggregation overflow. This interrupt should never assert. SGMII/1000Base-X only. */
8089 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Bad preamble/protocol error. Checks that the frame begins with a valid PREAMBLE sequence.
8090 Does not check the number of PREAMBLE cycles. */
8091 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Detected reserved opcode. */
8092 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) False-carrier error, or carrier-extend error after slottime is satisfied. SGMII/1000Base-X only. */
8093 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Collision detection. Collisions can only occur in half-duplex mode. A collision is assumed
8094 by the receiver when the slottime (BGX()_GMP_GMI_PRT()_CFG[SLOTTIME]) is not
8095 satisfied. In 10/100 mode, this will result in a frame \< SLOTTIME. In 1000 mode, it could
8096 result either in frame \< SLOTTIME or a carrier extend error with the SLOTTIME. These
8097 conditions are visible by 1) transfer ended before slottime - COLDET or 2) carrier extend
8098 error - CAREXT. */
8099 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Interframe gap violation. Does not necessarily indicate a failure. SGMII/1000Base-X only. */
8100 uint64_t reserved_12_63 : 52;
8101 #endif /* Word 0 - End */
8102 } cn88xx;
8103 /* struct bdk_bgxx_gmp_gmi_rxx_int_s cn83xx; */
8104 };
8105 typedef union bdk_bgxx_gmp_gmi_rxx_int bdk_bgxx_gmp_gmi_rxx_int_t;
8106
8107 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_INT(unsigned long a,unsigned long b)8108 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT(unsigned long a, unsigned long b)
8109 {
8110 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8111 return 0x87e0e0038000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8112 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8113 return 0x87e0e0038000ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8114 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8115 return 0x87e0e0038000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8116 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_INT", 2, a, b, 0, 0);
8117 }
8118
8119 #define typedef_BDK_BGXX_GMP_GMI_RXX_INT(a,b) bdk_bgxx_gmp_gmi_rxx_int_t
8120 #define bustype_BDK_BGXX_GMP_GMI_RXX_INT(a,b) BDK_CSR_TYPE_RSL
8121 #define basename_BDK_BGXX_GMP_GMI_RXX_INT(a,b) "BGXX_GMP_GMI_RXX_INT"
8122 #define device_bar_BDK_BGXX_GMP_GMI_RXX_INT(a,b) 0x0 /* PF_BAR0 */
8123 #define busnum_BDK_BGXX_GMP_GMI_RXX_INT(a,b) (a)
8124 #define arguments_BDK_BGXX_GMP_GMI_RXX_INT(a,b) (a),(b),-1,-1
8125
8126 /**
8127 * Register (RSL) bgx#_gmp_gmi_rx#_int_ena_w1c
8128 *
8129 * BGX GMP GMI RX Interrupt Enable Clear Registers
8130 * This register clears interrupt enable bits.
8131 */
8132 union bdk_bgxx_gmp_gmi_rxx_int_ena_w1c
8133 {
8134 uint64_t u;
8135 struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1c_s
8136 {
8137 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8138 uint64_t reserved_12_63 : 52;
8139 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8140 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8141 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8142 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8143 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8144 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8145 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8146 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8147 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8148 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8149 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8150 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8151 #else /* Word 0 - Little Endian */
8152 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8153 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8154 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8155 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8156 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8157 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8158 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8159 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8160 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8161 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8162 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8163 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8164 uint64_t reserved_12_63 : 52;
8165 #endif /* Word 0 - End */
8166 } s;
8167 /* struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1c_s cn81xx; */
8168 /* struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1c_s cn88xx; */
8169 struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1c_cn83xx
8170 {
8171 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8172 uint64_t reserved_12_63 : 52;
8173 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8174 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8175 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8176 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8177 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8178 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8179 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8180 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8181 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8182 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8183 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8184 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8185 #else /* Word 0 - Little Endian */
8186 uint64_t minerr : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8187 uint64_t carext : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8188 uint64_t jabber : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8189 uint64_t fcserr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8190 uint64_t rcverr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8191 uint64_t skperr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8192 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8193 uint64_t pcterr : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8194 uint64_t rsverr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8195 uint64_t falerr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8196 uint64_t coldet : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8197 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8198 uint64_t reserved_12_63 : 52;
8199 #endif /* Word 0 - End */
8200 } cn83xx;
8201 };
8202 typedef union bdk_bgxx_gmp_gmi_rxx_int_ena_w1c bdk_bgxx_gmp_gmi_rxx_int_ena_w1c_t;
8203
8204 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(unsigned long a,unsigned long b)8205 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(unsigned long a, unsigned long b)
8206 {
8207 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8208 return 0x87e0e0038010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8209 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8210 return 0x87e0e0038010ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8211 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8212 return 0x87e0e0038010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8213 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_INT_ENA_W1C", 2, a, b, 0, 0);
8214 }
8215
8216 #define typedef_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(a,b) bdk_bgxx_gmp_gmi_rxx_int_ena_w1c_t
8217 #define bustype_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(a,b) BDK_CSR_TYPE_RSL
8218 #define basename_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(a,b) "BGXX_GMP_GMI_RXX_INT_ENA_W1C"
8219 #define device_bar_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(a,b) 0x0 /* PF_BAR0 */
8220 #define busnum_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(a,b) (a)
8221 #define arguments_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1C(a,b) (a),(b),-1,-1
8222
8223 /**
8224 * Register (RSL) bgx#_gmp_gmi_rx#_int_ena_w1s
8225 *
8226 * BGX GMP GMI RX Interrupt Enable Set Registers
8227 * This register sets interrupt enable bits.
8228 */
8229 union bdk_bgxx_gmp_gmi_rxx_int_ena_w1s
8230 {
8231 uint64_t u;
8232 struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1s_s
8233 {
8234 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8235 uint64_t reserved_12_63 : 52;
8236 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8237 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8238 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8239 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8240 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8241 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8242 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8243 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8244 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8245 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8246 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8247 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8248 #else /* Word 0 - Little Endian */
8249 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8250 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8251 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8252 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8253 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8254 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8255 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8256 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8257 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8258 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8259 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8260 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8261 uint64_t reserved_12_63 : 52;
8262 #endif /* Word 0 - End */
8263 } s;
8264 /* struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1s_s cn81xx; */
8265 /* struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1s_s cn88xx; */
8266 struct bdk_bgxx_gmp_gmi_rxx_int_ena_w1s_cn83xx
8267 {
8268 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8269 uint64_t reserved_12_63 : 52;
8270 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8271 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8272 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8273 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8274 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8275 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8276 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8277 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8278 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8279 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8280 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8281 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8282 #else /* Word 0 - Little Endian */
8283 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8284 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8285 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8286 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8287 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8288 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8289 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8290 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8291 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8292 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8293 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8294 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8295 uint64_t reserved_12_63 : 52;
8296 #endif /* Word 0 - End */
8297 } cn83xx;
8298 };
8299 typedef union bdk_bgxx_gmp_gmi_rxx_int_ena_w1s bdk_bgxx_gmp_gmi_rxx_int_ena_w1s_t;
8300
8301 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(unsigned long a,unsigned long b)8302 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(unsigned long a, unsigned long b)
8303 {
8304 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8305 return 0x87e0e0038018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8306 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8307 return 0x87e0e0038018ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8308 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8309 return 0x87e0e0038018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8310 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_INT_ENA_W1S", 2, a, b, 0, 0);
8311 }
8312
8313 #define typedef_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(a,b) bdk_bgxx_gmp_gmi_rxx_int_ena_w1s_t
8314 #define bustype_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(a,b) BDK_CSR_TYPE_RSL
8315 #define basename_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(a,b) "BGXX_GMP_GMI_RXX_INT_ENA_W1S"
8316 #define device_bar_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(a,b) 0x0 /* PF_BAR0 */
8317 #define busnum_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(a,b) (a)
8318 #define arguments_BDK_BGXX_GMP_GMI_RXX_INT_ENA_W1S(a,b) (a),(b),-1,-1
8319
8320 /**
8321 * Register (RSL) bgx#_gmp_gmi_rx#_int_w1s
8322 *
8323 * BGX GMP GMI RX Interrupt Set Registers
8324 * This register sets interrupt bits.
8325 */
8326 union bdk_bgxx_gmp_gmi_rxx_int_w1s
8327 {
8328 uint64_t u;
8329 struct bdk_bgxx_gmp_gmi_rxx_int_w1s_s
8330 {
8331 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8332 uint64_t reserved_12_63 : 52;
8333 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8334 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8335 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8336 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8337 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8338 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8339 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8340 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8341 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8342 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8343 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8344 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8345 #else /* Word 0 - Little Endian */
8346 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8347 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8348 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8349 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8350 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8351 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8352 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8353 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8354 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8355 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8356 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8357 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8358 uint64_t reserved_12_63 : 52;
8359 #endif /* Word 0 - End */
8360 } s;
8361 /* struct bdk_bgxx_gmp_gmi_rxx_int_w1s_s cn81xx; */
8362 /* struct bdk_bgxx_gmp_gmi_rxx_int_w1s_s cn88xx; */
8363 struct bdk_bgxx_gmp_gmi_rxx_int_w1s_cn83xx
8364 {
8365 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8366 uint64_t reserved_12_63 : 52;
8367 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8368 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8369 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8370 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8371 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8372 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8373 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8374 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8375 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8376 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8377 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8378 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8379 #else /* Word 0 - Little Endian */
8380 uint64_t minerr : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[MINERR]. */
8381 uint64_t carext : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[CAREXT]. */
8382 uint64_t jabber : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[JABBER]. */
8383 uint64_t fcserr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[FCSERR]. */
8384 uint64_t rcverr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[RCVERR]. */
8385 uint64_t skperr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[SKPERR]. */
8386 uint64_t ovrerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[OVRERR]. */
8387 uint64_t pcterr : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[PCTERR]. */
8388 uint64_t rsverr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[RSVERR]. */
8389 uint64_t falerr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[FALERR]. */
8390 uint64_t coldet : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[COLDET]. */
8391 uint64_t ifgerr : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_RX(0..3)_INT[IFGERR]. */
8392 uint64_t reserved_12_63 : 52;
8393 #endif /* Word 0 - End */
8394 } cn83xx;
8395 };
8396 typedef union bdk_bgxx_gmp_gmi_rxx_int_w1s bdk_bgxx_gmp_gmi_rxx_int_w1s_t;
8397
8398 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_INT_W1S(unsigned long a,unsigned long b)8399 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_INT_W1S(unsigned long a, unsigned long b)
8400 {
8401 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8402 return 0x87e0e0038008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8403 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8404 return 0x87e0e0038008ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8405 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8406 return 0x87e0e0038008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8407 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_INT_W1S", 2, a, b, 0, 0);
8408 }
8409
8410 #define typedef_BDK_BGXX_GMP_GMI_RXX_INT_W1S(a,b) bdk_bgxx_gmp_gmi_rxx_int_w1s_t
8411 #define bustype_BDK_BGXX_GMP_GMI_RXX_INT_W1S(a,b) BDK_CSR_TYPE_RSL
8412 #define basename_BDK_BGXX_GMP_GMI_RXX_INT_W1S(a,b) "BGXX_GMP_GMI_RXX_INT_W1S"
8413 #define device_bar_BDK_BGXX_GMP_GMI_RXX_INT_W1S(a,b) 0x0 /* PF_BAR0 */
8414 #define busnum_BDK_BGXX_GMP_GMI_RXX_INT_W1S(a,b) (a)
8415 #define arguments_BDK_BGXX_GMP_GMI_RXX_INT_W1S(a,b) (a),(b),-1,-1
8416
8417 /**
8418 * Register (RSL) bgx#_gmp_gmi_rx#_jabber
8419 *
8420 * BGX GMP Maximum Packet-Size Registers
8421 * This register specifies the maximum size for packets, beyond which the GMI truncates.
8422 */
8423 union bdk_bgxx_gmp_gmi_rxx_jabber
8424 {
8425 uint64_t u;
8426 struct bdk_bgxx_gmp_gmi_rxx_jabber_s
8427 {
8428 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8429 uint64_t reserved_16_63 : 48;
8430 uint64_t cnt : 16; /**< [ 15: 0](R/W) Byte count for jabber check. Failing packets set the JABBER interrupt and are optionally
8431 sent with opcode = JABBER. GMI truncates the packet to [CNT] bytes.
8432 [CNT] must be 8-byte aligned such that CNT\<2:0\> = 000. */
8433 #else /* Word 0 - Little Endian */
8434 uint64_t cnt : 16; /**< [ 15: 0](R/W) Byte count for jabber check. Failing packets set the JABBER interrupt and are optionally
8435 sent with opcode = JABBER. GMI truncates the packet to [CNT] bytes.
8436 [CNT] must be 8-byte aligned such that CNT\<2:0\> = 000. */
8437 uint64_t reserved_16_63 : 48;
8438 #endif /* Word 0 - End */
8439 } s;
8440 /* struct bdk_bgxx_gmp_gmi_rxx_jabber_s cn; */
8441 };
8442 typedef union bdk_bgxx_gmp_gmi_rxx_jabber bdk_bgxx_gmp_gmi_rxx_jabber_t;
8443
8444 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_JABBER(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_JABBER(unsigned long a,unsigned long b)8445 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_JABBER(unsigned long a, unsigned long b)
8446 {
8447 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8448 return 0x87e0e0038038ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8449 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8450 return 0x87e0e0038038ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8451 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8452 return 0x87e0e0038038ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8453 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_JABBER", 2, a, b, 0, 0);
8454 }
8455
8456 #define typedef_BDK_BGXX_GMP_GMI_RXX_JABBER(a,b) bdk_bgxx_gmp_gmi_rxx_jabber_t
8457 #define bustype_BDK_BGXX_GMP_GMI_RXX_JABBER(a,b) BDK_CSR_TYPE_RSL
8458 #define basename_BDK_BGXX_GMP_GMI_RXX_JABBER(a,b) "BGXX_GMP_GMI_RXX_JABBER"
8459 #define device_bar_BDK_BGXX_GMP_GMI_RXX_JABBER(a,b) 0x0 /* PF_BAR0 */
8460 #define busnum_BDK_BGXX_GMP_GMI_RXX_JABBER(a,b) (a)
8461 #define arguments_BDK_BGXX_GMP_GMI_RXX_JABBER(a,b) (a),(b),-1,-1
8462
8463 /**
8464 * Register (RSL) bgx#_gmp_gmi_rx#_udd_skp
8465 *
8466 * BGX GMP GMI User-Defined Data Skip Registers
8467 * This register specifies the amount of user-defined data (UDD) added before the start of the
8468 * L2C data.
8469 *
8470 * Internal:
8471 * Notes:
8472 * (1) The skip bytes are part of the packet and will be handled by NIC.
8473 *
8474 * (2) The system can determine if the UDD bytes are included in the FCS check
8475 * by using the FCSSEL field - if the FCS check is enabled.
8476 *
8477 * (3) Assume that the preamble/sfd is always at the start of the frame - even
8478 * before UDD bytes. In most cases, there will be no preamble in these
8479 * cases since it will be packet interface in direct communication to
8480 * another packet interface (MAC to MAC) without a PHY involved.
8481 *
8482 * (4) We can still do address filtering and control packet filtering is the
8483 * user desires.
8484 *
8485 * (5) BGX()_GMP_GMI_RX()_UDD_SKP[LEN] must be 0 in half-duplex operation unless
8486 * BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] is clear. If BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] is
8487 * clear,
8488 * then BGX()_GMP_GMI_RX()_UDD_SKP[LEN] will normally be 8.
8489 *
8490 * (6) In all cases, the UDD bytes will be sent down the packet interface as
8491 * part of the packet. The UDD bytes are never stripped from the actual
8492 * packet.
8493 */
8494 union bdk_bgxx_gmp_gmi_rxx_udd_skp
8495 {
8496 uint64_t u;
8497 struct bdk_bgxx_gmp_gmi_rxx_udd_skp_s
8498 {
8499 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8500 uint64_t reserved_9_63 : 55;
8501 uint64_t fcssel : 1; /**< [ 8: 8](R/W) Include the skip bytes in the FCS calculation.
8502 0 = All skip bytes are included in FCS.
8503 1 = The skip bytes are not included in FCS.
8504
8505 The skip bytes are part of the packet and are
8506 handled by NIC. The system can determine if the UDD bytes are included in the FCS check by
8507 using [FCSSEL], if the FCS check is enabled. */
8508 uint64_t reserved_7 : 1;
8509 uint64_t len : 7; /**< [ 6: 0](R/W) Amount of user-defined data before the start of the L2C data, in bytes.
8510 Setting to 0 means L2C comes first; maximum value is 64.
8511 LEN must be 0x0 in half-duplex operation.
8512
8513 If LEN != 0, then BGX()_GMP_GMI_RX()_FRM_CHK[MINERR] will be disabled and
8514 BGX()_GMP_GMI_RX()_INT[MINERR] will be zero. */
8515 #else /* Word 0 - Little Endian */
8516 uint64_t len : 7; /**< [ 6: 0](R/W) Amount of user-defined data before the start of the L2C data, in bytes.
8517 Setting to 0 means L2C comes first; maximum value is 64.
8518 LEN must be 0x0 in half-duplex operation.
8519
8520 If LEN != 0, then BGX()_GMP_GMI_RX()_FRM_CHK[MINERR] will be disabled and
8521 BGX()_GMP_GMI_RX()_INT[MINERR] will be zero. */
8522 uint64_t reserved_7 : 1;
8523 uint64_t fcssel : 1; /**< [ 8: 8](R/W) Include the skip bytes in the FCS calculation.
8524 0 = All skip bytes are included in FCS.
8525 1 = The skip bytes are not included in FCS.
8526
8527 The skip bytes are part of the packet and are
8528 handled by NIC. The system can determine if the UDD bytes are included in the FCS check by
8529 using [FCSSEL], if the FCS check is enabled. */
8530 uint64_t reserved_9_63 : 55;
8531 #endif /* Word 0 - End */
8532 } s;
8533 /* struct bdk_bgxx_gmp_gmi_rxx_udd_skp_s cn; */
8534 };
8535 typedef union bdk_bgxx_gmp_gmi_rxx_udd_skp bdk_bgxx_gmp_gmi_rxx_udd_skp_t;
8536
8537 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_UDD_SKP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_RXX_UDD_SKP(unsigned long a,unsigned long b)8538 static inline uint64_t BDK_BGXX_GMP_GMI_RXX_UDD_SKP(unsigned long a, unsigned long b)
8539 {
8540 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8541 return 0x87e0e0038048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8542 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8543 return 0x87e0e0038048ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8544 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8545 return 0x87e0e0038048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8546 __bdk_csr_fatal("BGXX_GMP_GMI_RXX_UDD_SKP", 2, a, b, 0, 0);
8547 }
8548
8549 #define typedef_BDK_BGXX_GMP_GMI_RXX_UDD_SKP(a,b) bdk_bgxx_gmp_gmi_rxx_udd_skp_t
8550 #define bustype_BDK_BGXX_GMP_GMI_RXX_UDD_SKP(a,b) BDK_CSR_TYPE_RSL
8551 #define basename_BDK_BGXX_GMP_GMI_RXX_UDD_SKP(a,b) "BGXX_GMP_GMI_RXX_UDD_SKP"
8552 #define device_bar_BDK_BGXX_GMP_GMI_RXX_UDD_SKP(a,b) 0x0 /* PF_BAR0 */
8553 #define busnum_BDK_BGXX_GMP_GMI_RXX_UDD_SKP(a,b) (a)
8554 #define arguments_BDK_BGXX_GMP_GMI_RXX_UDD_SKP(a,b) (a),(b),-1,-1
8555
8556 /**
8557 * Register (RSL) bgx#_gmp_gmi_smac#
8558 *
8559 * BGX GMI SMAC Registers
8560 */
8561 union bdk_bgxx_gmp_gmi_smacx
8562 {
8563 uint64_t u;
8564 struct bdk_bgxx_gmp_gmi_smacx_s
8565 {
8566 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8567 uint64_t reserved_48_63 : 16;
8568 uint64_t smac : 48; /**< [ 47: 0](R/W) The SMAC field is used for generating and accepting control PAUSE packets. */
8569 #else /* Word 0 - Little Endian */
8570 uint64_t smac : 48; /**< [ 47: 0](R/W) The SMAC field is used for generating and accepting control PAUSE packets. */
8571 uint64_t reserved_48_63 : 16;
8572 #endif /* Word 0 - End */
8573 } s;
8574 /* struct bdk_bgxx_gmp_gmi_smacx_s cn; */
8575 };
8576 typedef union bdk_bgxx_gmp_gmi_smacx bdk_bgxx_gmp_gmi_smacx_t;
8577
8578 static inline uint64_t BDK_BGXX_GMP_GMI_SMACX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_SMACX(unsigned long a,unsigned long b)8579 static inline uint64_t BDK_BGXX_GMP_GMI_SMACX(unsigned long a, unsigned long b)
8580 {
8581 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8582 return 0x87e0e0038230ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8583 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8584 return 0x87e0e0038230ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8585 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8586 return 0x87e0e0038230ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8587 __bdk_csr_fatal("BGXX_GMP_GMI_SMACX", 2, a, b, 0, 0);
8588 }
8589
8590 #define typedef_BDK_BGXX_GMP_GMI_SMACX(a,b) bdk_bgxx_gmp_gmi_smacx_t
8591 #define bustype_BDK_BGXX_GMP_GMI_SMACX(a,b) BDK_CSR_TYPE_RSL
8592 #define basename_BDK_BGXX_GMP_GMI_SMACX(a,b) "BGXX_GMP_GMI_SMACX"
8593 #define device_bar_BDK_BGXX_GMP_GMI_SMACX(a,b) 0x0 /* PF_BAR0 */
8594 #define busnum_BDK_BGXX_GMP_GMI_SMACX(a,b) (a)
8595 #define arguments_BDK_BGXX_GMP_GMI_SMACX(a,b) (a),(b),-1,-1
8596
8597 /**
8598 * Register (RSL) bgx#_gmp_gmi_tx#_append
8599 *
8600 * BGX GMI TX Append Control Registers
8601 */
8602 union bdk_bgxx_gmp_gmi_txx_append
8603 {
8604 uint64_t u;
8605 struct bdk_bgxx_gmp_gmi_txx_append_s
8606 {
8607 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8608 uint64_t reserved_4_63 : 60;
8609 uint64_t force_fcs : 1; /**< [ 3: 3](R/W) Append the Ethernet FCS on each PAUSE packet. */
8610 uint64_t fcs : 1; /**< [ 2: 2](R/W) Append the Ethernet FCS on each packet. */
8611 uint64_t pad : 1; /**< [ 1: 1](R/W) Append PAD bytes such that minimum-sized packet is transmitted. */
8612 uint64_t preamble : 1; /**< [ 0: 0](R/W) Prepend the Ethernet preamble on each transfer. */
8613 #else /* Word 0 - Little Endian */
8614 uint64_t preamble : 1; /**< [ 0: 0](R/W) Prepend the Ethernet preamble on each transfer. */
8615 uint64_t pad : 1; /**< [ 1: 1](R/W) Append PAD bytes such that minimum-sized packet is transmitted. */
8616 uint64_t fcs : 1; /**< [ 2: 2](R/W) Append the Ethernet FCS on each packet. */
8617 uint64_t force_fcs : 1; /**< [ 3: 3](R/W) Append the Ethernet FCS on each PAUSE packet. */
8618 uint64_t reserved_4_63 : 60;
8619 #endif /* Word 0 - End */
8620 } s;
8621 /* struct bdk_bgxx_gmp_gmi_txx_append_s cn; */
8622 };
8623 typedef union bdk_bgxx_gmp_gmi_txx_append bdk_bgxx_gmp_gmi_txx_append_t;
8624
8625 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_APPEND(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_APPEND(unsigned long a,unsigned long b)8626 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_APPEND(unsigned long a, unsigned long b)
8627 {
8628 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8629 return 0x87e0e0038218ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8630 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8631 return 0x87e0e0038218ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8632 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8633 return 0x87e0e0038218ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8634 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_APPEND", 2, a, b, 0, 0);
8635 }
8636
8637 #define typedef_BDK_BGXX_GMP_GMI_TXX_APPEND(a,b) bdk_bgxx_gmp_gmi_txx_append_t
8638 #define bustype_BDK_BGXX_GMP_GMI_TXX_APPEND(a,b) BDK_CSR_TYPE_RSL
8639 #define basename_BDK_BGXX_GMP_GMI_TXX_APPEND(a,b) "BGXX_GMP_GMI_TXX_APPEND"
8640 #define device_bar_BDK_BGXX_GMP_GMI_TXX_APPEND(a,b) 0x0 /* PF_BAR0 */
8641 #define busnum_BDK_BGXX_GMP_GMI_TXX_APPEND(a,b) (a)
8642 #define arguments_BDK_BGXX_GMP_GMI_TXX_APPEND(a,b) (a),(b),-1,-1
8643
8644 /**
8645 * Register (RSL) bgx#_gmp_gmi_tx#_burst
8646 *
8647 * BGX GMI TX Burst-Counter Registers
8648 */
8649 union bdk_bgxx_gmp_gmi_txx_burst
8650 {
8651 uint64_t u;
8652 struct bdk_bgxx_gmp_gmi_txx_burst_s
8653 {
8654 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8655 uint64_t reserved_16_63 : 48;
8656 uint64_t burst : 16; /**< [ 15: 0](R/W) Burst (refer to 802.3 to set correctly). Only valid for 1000Mb/s half-duplex operation as
8657 follows:
8658 half duplex/1000Mb/s: 0x2000
8659 all other modes: 0x0
8660 SGMII/QSGMII/1000Base-X only. */
8661 #else /* Word 0 - Little Endian */
8662 uint64_t burst : 16; /**< [ 15: 0](R/W) Burst (refer to 802.3 to set correctly). Only valid for 1000Mb/s half-duplex operation as
8663 follows:
8664 half duplex/1000Mb/s: 0x2000
8665 all other modes: 0x0
8666 SGMII/QSGMII/1000Base-X only. */
8667 uint64_t reserved_16_63 : 48;
8668 #endif /* Word 0 - End */
8669 } s;
8670 /* struct bdk_bgxx_gmp_gmi_txx_burst_s cn81xx; */
8671 struct bdk_bgxx_gmp_gmi_txx_burst_cn88xx
8672 {
8673 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8674 uint64_t reserved_16_63 : 48;
8675 uint64_t burst : 16; /**< [ 15: 0](R/W) Burst (refer to 802.3 to set correctly). Only valid for 1000Mb/s half-duplex operation as
8676 follows:
8677 half duplex/1000Mb/s: 0x2000
8678 all other modes: 0x0
8679 SGMII/1000Base-X only. */
8680 #else /* Word 0 - Little Endian */
8681 uint64_t burst : 16; /**< [ 15: 0](R/W) Burst (refer to 802.3 to set correctly). Only valid for 1000Mb/s half-duplex operation as
8682 follows:
8683 half duplex/1000Mb/s: 0x2000
8684 all other modes: 0x0
8685 SGMII/1000Base-X only. */
8686 uint64_t reserved_16_63 : 48;
8687 #endif /* Word 0 - End */
8688 } cn88xx;
8689 /* struct bdk_bgxx_gmp_gmi_txx_burst_s cn83xx; */
8690 };
8691 typedef union bdk_bgxx_gmp_gmi_txx_burst bdk_bgxx_gmp_gmi_txx_burst_t;
8692
8693 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_BURST(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_BURST(unsigned long a,unsigned long b)8694 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_BURST(unsigned long a, unsigned long b)
8695 {
8696 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8697 return 0x87e0e0038228ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8698 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8699 return 0x87e0e0038228ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8700 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8701 return 0x87e0e0038228ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8702 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_BURST", 2, a, b, 0, 0);
8703 }
8704
8705 #define typedef_BDK_BGXX_GMP_GMI_TXX_BURST(a,b) bdk_bgxx_gmp_gmi_txx_burst_t
8706 #define bustype_BDK_BGXX_GMP_GMI_TXX_BURST(a,b) BDK_CSR_TYPE_RSL
8707 #define basename_BDK_BGXX_GMP_GMI_TXX_BURST(a,b) "BGXX_GMP_GMI_TXX_BURST"
8708 #define device_bar_BDK_BGXX_GMP_GMI_TXX_BURST(a,b) 0x0 /* PF_BAR0 */
8709 #define busnum_BDK_BGXX_GMP_GMI_TXX_BURST(a,b) (a)
8710 #define arguments_BDK_BGXX_GMP_GMI_TXX_BURST(a,b) (a),(b),-1,-1
8711
8712 /**
8713 * Register (RSL) bgx#_gmp_gmi_tx#_ctl
8714 *
8715 * BGX GMI Transmit Control Registers
8716 */
8717 union bdk_bgxx_gmp_gmi_txx_ctl
8718 {
8719 uint64_t u;
8720 struct bdk_bgxx_gmp_gmi_txx_ctl_s
8721 {
8722 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8723 uint64_t reserved_4_63 : 60;
8724 uint64_t link_drain : 1; /**< [ 3: 3](R/W) Enable dropping of full packets to allow BGX and PKO/NIC to drain their FIFOs.
8725 For diagnostic use only. */
8726 uint64_t tx_fc_type : 1; /**< [ 2: 2](R/W) Transmit side flow control type select.
8727 0 = GMI MAC transmits ITU G.999.1 pause frames.
8728 1 = GMI MAC transmits 802.3 pause frames. */
8729 uint64_t xsdef_en : 1; /**< [ 1: 1](R/W) Enables the excessive-deferral check for statistics and interrupts. SGMII/1000Base-X half-
8730 duplex only. */
8731 uint64_t xscol_en : 1; /**< [ 0: 0](R/W) Enables the excessive-collision check for statistics and interrupts. SGMII/1000Base-X
8732 half-duplex only. */
8733 #else /* Word 0 - Little Endian */
8734 uint64_t xscol_en : 1; /**< [ 0: 0](R/W) Enables the excessive-collision check for statistics and interrupts. SGMII/1000Base-X
8735 half-duplex only. */
8736 uint64_t xsdef_en : 1; /**< [ 1: 1](R/W) Enables the excessive-deferral check for statistics and interrupts. SGMII/1000Base-X half-
8737 duplex only. */
8738 uint64_t tx_fc_type : 1; /**< [ 2: 2](R/W) Transmit side flow control type select.
8739 0 = GMI MAC transmits ITU G.999.1 pause frames.
8740 1 = GMI MAC transmits 802.3 pause frames. */
8741 uint64_t link_drain : 1; /**< [ 3: 3](R/W) Enable dropping of full packets to allow BGX and PKO/NIC to drain their FIFOs.
8742 For diagnostic use only. */
8743 uint64_t reserved_4_63 : 60;
8744 #endif /* Word 0 - End */
8745 } s;
8746 struct bdk_bgxx_gmp_gmi_txx_ctl_cn81xx
8747 {
8748 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8749 uint64_t reserved_3_63 : 61;
8750 uint64_t tx_fc_type : 1; /**< [ 2: 2](R/W) Transmit side flow control type select.
8751 0 = GMI MAC transmits ITU G.999.1 pause frames.
8752 1 = GMI MAC transmits 802.3 pause frames. */
8753 uint64_t xsdef_en : 1; /**< [ 1: 1](R/W) Enables the excessive-deferral check for statistics and interrupts. SGMII/1000Base-X half-
8754 duplex only. */
8755 uint64_t xscol_en : 1; /**< [ 0: 0](R/W) Enables the excessive-collision check for statistics and interrupts. SGMII/1000Base-X
8756 half-duplex only. */
8757 #else /* Word 0 - Little Endian */
8758 uint64_t xscol_en : 1; /**< [ 0: 0](R/W) Enables the excessive-collision check for statistics and interrupts. SGMII/1000Base-X
8759 half-duplex only. */
8760 uint64_t xsdef_en : 1; /**< [ 1: 1](R/W) Enables the excessive-deferral check for statistics and interrupts. SGMII/1000Base-X half-
8761 duplex only. */
8762 uint64_t tx_fc_type : 1; /**< [ 2: 2](R/W) Transmit side flow control type select.
8763 0 = GMI MAC transmits ITU G.999.1 pause frames.
8764 1 = GMI MAC transmits 802.3 pause frames. */
8765 uint64_t reserved_3_63 : 61;
8766 #endif /* Word 0 - End */
8767 } cn81xx;
8768 struct bdk_bgxx_gmp_gmi_txx_ctl_cn88xx
8769 {
8770 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8771 uint64_t reserved_2_63 : 62;
8772 uint64_t xsdef_en : 1; /**< [ 1: 1](R/W) Enables the excessive-deferral check for statistics and interrupts. SGMII/1000Base-X half-
8773 duplex only. */
8774 uint64_t xscol_en : 1; /**< [ 0: 0](R/W) Enables the excessive-collision check for statistics and interrupts. SGMII/1000Base-X
8775 half-duplex only. */
8776 #else /* Word 0 - Little Endian */
8777 uint64_t xscol_en : 1; /**< [ 0: 0](R/W) Enables the excessive-collision check for statistics and interrupts. SGMII/1000Base-X
8778 half-duplex only. */
8779 uint64_t xsdef_en : 1; /**< [ 1: 1](R/W) Enables the excessive-deferral check for statistics and interrupts. SGMII/1000Base-X half-
8780 duplex only. */
8781 uint64_t reserved_2_63 : 62;
8782 #endif /* Word 0 - End */
8783 } cn88xx;
8784 /* struct bdk_bgxx_gmp_gmi_txx_ctl_s cn83xx; */
8785 };
8786 typedef union bdk_bgxx_gmp_gmi_txx_ctl bdk_bgxx_gmp_gmi_txx_ctl_t;
8787
8788 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_CTL(unsigned long a,unsigned long b)8789 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_CTL(unsigned long a, unsigned long b)
8790 {
8791 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8792 return 0x87e0e0038270ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8793 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8794 return 0x87e0e0038270ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8795 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8796 return 0x87e0e0038270ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8797 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_CTL", 2, a, b, 0, 0);
8798 }
8799
8800 #define typedef_BDK_BGXX_GMP_GMI_TXX_CTL(a,b) bdk_bgxx_gmp_gmi_txx_ctl_t
8801 #define bustype_BDK_BGXX_GMP_GMI_TXX_CTL(a,b) BDK_CSR_TYPE_RSL
8802 #define basename_BDK_BGXX_GMP_GMI_TXX_CTL(a,b) "BGXX_GMP_GMI_TXX_CTL"
8803 #define device_bar_BDK_BGXX_GMP_GMI_TXX_CTL(a,b) 0x0 /* PF_BAR0 */
8804 #define busnum_BDK_BGXX_GMP_GMI_TXX_CTL(a,b) (a)
8805 #define arguments_BDK_BGXX_GMP_GMI_TXX_CTL(a,b) (a),(b),-1,-1
8806
8807 /**
8808 * Register (RSL) bgx#_gmp_gmi_tx#_int
8809 *
8810 * BGX GMI TX Interrupt Registers
8811 */
8812 union bdk_bgxx_gmp_gmi_txx_int
8813 {
8814 uint64_t u;
8815 struct bdk_bgxx_gmp_gmi_txx_int_s
8816 {
8817 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8818 uint64_t reserved_5_63 : 59;
8819 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1C/H) A packet with a PTP request was not able to be sent due to XSCOL. */
8820 uint64_t late_col : 1; /**< [ 3: 3](R/W1C/H) TX late collision. (SGMII/1000BASE-X half-duplex only) */
8821 uint64_t xsdef : 1; /**< [ 2: 2](R/W1C/H) TX excessive deferral. (SGMII/1000BASE-X half-duplex only) */
8822 uint64_t xscol : 1; /**< [ 1: 1](R/W1C/H) TX excessive collisions. (SGMII/1000BASE-X half-duplex only) */
8823 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) TX underflow. */
8824 #else /* Word 0 - Little Endian */
8825 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) TX underflow. */
8826 uint64_t xscol : 1; /**< [ 1: 1](R/W1C/H) TX excessive collisions. (SGMII/1000BASE-X half-duplex only) */
8827 uint64_t xsdef : 1; /**< [ 2: 2](R/W1C/H) TX excessive deferral. (SGMII/1000BASE-X half-duplex only) */
8828 uint64_t late_col : 1; /**< [ 3: 3](R/W1C/H) TX late collision. (SGMII/1000BASE-X half-duplex only) */
8829 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1C/H) A packet with a PTP request was not able to be sent due to XSCOL. */
8830 uint64_t reserved_5_63 : 59;
8831 #endif /* Word 0 - End */
8832 } s;
8833 /* struct bdk_bgxx_gmp_gmi_txx_int_s cn; */
8834 };
8835 typedef union bdk_bgxx_gmp_gmi_txx_int bdk_bgxx_gmp_gmi_txx_int_t;
8836
8837 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_INT(unsigned long a,unsigned long b)8838 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT(unsigned long a, unsigned long b)
8839 {
8840 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8841 return 0x87e0e0038500ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8842 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8843 return 0x87e0e0038500ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8844 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8845 return 0x87e0e0038500ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8846 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_INT", 2, a, b, 0, 0);
8847 }
8848
8849 #define typedef_BDK_BGXX_GMP_GMI_TXX_INT(a,b) bdk_bgxx_gmp_gmi_txx_int_t
8850 #define bustype_BDK_BGXX_GMP_GMI_TXX_INT(a,b) BDK_CSR_TYPE_RSL
8851 #define basename_BDK_BGXX_GMP_GMI_TXX_INT(a,b) "BGXX_GMP_GMI_TXX_INT"
8852 #define device_bar_BDK_BGXX_GMP_GMI_TXX_INT(a,b) 0x0 /* PF_BAR0 */
8853 #define busnum_BDK_BGXX_GMP_GMI_TXX_INT(a,b) (a)
8854 #define arguments_BDK_BGXX_GMP_GMI_TXX_INT(a,b) (a),(b),-1,-1
8855
8856 /**
8857 * Register (RSL) bgx#_gmp_gmi_tx#_int_ena_w1c
8858 *
8859 * BGX GMI TX Interrupt Enable Clear Registers
8860 * This register clears interrupt enable bits.
8861 */
8862 union bdk_bgxx_gmp_gmi_txx_int_ena_w1c
8863 {
8864 uint64_t u;
8865 struct bdk_bgxx_gmp_gmi_txx_int_ena_w1c_s
8866 {
8867 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8868 uint64_t reserved_5_63 : 59;
8869 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8870 uint64_t late_col : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8871 uint64_t xsdef : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8872 uint64_t xscol : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8873 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8874 #else /* Word 0 - Little Endian */
8875 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8876 uint64_t xscol : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8877 uint64_t xsdef : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8878 uint64_t late_col : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8879 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8880 uint64_t reserved_5_63 : 59;
8881 #endif /* Word 0 - End */
8882 } s;
8883 /* struct bdk_bgxx_gmp_gmi_txx_int_ena_w1c_s cn81xx; */
8884 /* struct bdk_bgxx_gmp_gmi_txx_int_ena_w1c_s cn88xx; */
8885 struct bdk_bgxx_gmp_gmi_txx_int_ena_w1c_cn83xx
8886 {
8887 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8888 uint64_t reserved_5_63 : 59;
8889 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8890 uint64_t late_col : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8891 uint64_t xsdef : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8892 uint64_t xscol : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8893 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8894 #else /* Word 0 - Little Endian */
8895 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8896 uint64_t xscol : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8897 uint64_t xsdef : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8898 uint64_t late_col : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8899 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8900 uint64_t reserved_5_63 : 59;
8901 #endif /* Word 0 - End */
8902 } cn83xx;
8903 };
8904 typedef union bdk_bgxx_gmp_gmi_txx_int_ena_w1c bdk_bgxx_gmp_gmi_txx_int_ena_w1c_t;
8905
8906 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(unsigned long a,unsigned long b)8907 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(unsigned long a, unsigned long b)
8908 {
8909 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8910 return 0x87e0e0038510ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8911 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8912 return 0x87e0e0038510ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8913 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8914 return 0x87e0e0038510ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8915 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_INT_ENA_W1C", 2, a, b, 0, 0);
8916 }
8917
8918 #define typedef_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(a,b) bdk_bgxx_gmp_gmi_txx_int_ena_w1c_t
8919 #define bustype_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(a,b) BDK_CSR_TYPE_RSL
8920 #define basename_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(a,b) "BGXX_GMP_GMI_TXX_INT_ENA_W1C"
8921 #define device_bar_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(a,b) 0x0 /* PF_BAR0 */
8922 #define busnum_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(a,b) (a)
8923 #define arguments_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1C(a,b) (a),(b),-1,-1
8924
8925 /**
8926 * Register (RSL) bgx#_gmp_gmi_tx#_int_ena_w1s
8927 *
8928 * BGX GMI TX Interrupt Enable Set Registers
8929 * This register sets interrupt enable bits.
8930 */
8931 union bdk_bgxx_gmp_gmi_txx_int_ena_w1s
8932 {
8933 uint64_t u;
8934 struct bdk_bgxx_gmp_gmi_txx_int_ena_w1s_s
8935 {
8936 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8937 uint64_t reserved_5_63 : 59;
8938 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8939 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8940 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8941 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8942 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8943 #else /* Word 0 - Little Endian */
8944 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8945 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8946 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8947 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8948 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8949 uint64_t reserved_5_63 : 59;
8950 #endif /* Word 0 - End */
8951 } s;
8952 /* struct bdk_bgxx_gmp_gmi_txx_int_ena_w1s_s cn81xx; */
8953 /* struct bdk_bgxx_gmp_gmi_txx_int_ena_w1s_s cn88xx; */
8954 struct bdk_bgxx_gmp_gmi_txx_int_ena_w1s_cn83xx
8955 {
8956 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
8957 uint64_t reserved_5_63 : 59;
8958 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8959 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8960 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8961 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8962 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8963 #else /* Word 0 - Little Endian */
8964 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
8965 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
8966 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
8967 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
8968 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
8969 uint64_t reserved_5_63 : 59;
8970 #endif /* Word 0 - End */
8971 } cn83xx;
8972 };
8973 typedef union bdk_bgxx_gmp_gmi_txx_int_ena_w1s bdk_bgxx_gmp_gmi_txx_int_ena_w1s_t;
8974
8975 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(unsigned long a,unsigned long b)8976 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(unsigned long a, unsigned long b)
8977 {
8978 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
8979 return 0x87e0e0038518ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8980 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
8981 return 0x87e0e0038518ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
8982 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
8983 return 0x87e0e0038518ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
8984 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_INT_ENA_W1S", 2, a, b, 0, 0);
8985 }
8986
8987 #define typedef_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(a,b) bdk_bgxx_gmp_gmi_txx_int_ena_w1s_t
8988 #define bustype_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(a,b) BDK_CSR_TYPE_RSL
8989 #define basename_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(a,b) "BGXX_GMP_GMI_TXX_INT_ENA_W1S"
8990 #define device_bar_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(a,b) 0x0 /* PF_BAR0 */
8991 #define busnum_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(a,b) (a)
8992 #define arguments_BDK_BGXX_GMP_GMI_TXX_INT_ENA_W1S(a,b) (a),(b),-1,-1
8993
8994 /**
8995 * Register (RSL) bgx#_gmp_gmi_tx#_int_w1s
8996 *
8997 * BGX GMI TX Interrupt Set Registers
8998 * This register sets interrupt bits.
8999 */
9000 union bdk_bgxx_gmp_gmi_txx_int_w1s
9001 {
9002 uint64_t u;
9003 struct bdk_bgxx_gmp_gmi_txx_int_w1s_s
9004 {
9005 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9006 uint64_t reserved_5_63 : 59;
9007 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
9008 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
9009 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
9010 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
9011 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
9012 #else /* Word 0 - Little Endian */
9013 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
9014 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
9015 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
9016 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
9017 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
9018 uint64_t reserved_5_63 : 59;
9019 #endif /* Word 0 - End */
9020 } s;
9021 /* struct bdk_bgxx_gmp_gmi_txx_int_w1s_s cn81xx; */
9022 /* struct bdk_bgxx_gmp_gmi_txx_int_w1s_s cn88xx; */
9023 struct bdk_bgxx_gmp_gmi_txx_int_w1s_cn83xx
9024 {
9025 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9026 uint64_t reserved_5_63 : 59;
9027 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
9028 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
9029 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
9030 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
9031 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
9032 #else /* Word 0 - Little Endian */
9033 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[UNDFLW]. */
9034 uint64_t xscol : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSCOL]. */
9035 uint64_t xsdef : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[XSDEF]. */
9036 uint64_t late_col : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[LATE_COL]. */
9037 uint64_t ptp_lost : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_GMP_GMI_TX(0..3)_INT[PTP_LOST]. */
9038 uint64_t reserved_5_63 : 59;
9039 #endif /* Word 0 - End */
9040 } cn83xx;
9041 };
9042 typedef union bdk_bgxx_gmp_gmi_txx_int_w1s bdk_bgxx_gmp_gmi_txx_int_w1s_t;
9043
9044 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_INT_W1S(unsigned long a,unsigned long b)9045 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_INT_W1S(unsigned long a, unsigned long b)
9046 {
9047 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9048 return 0x87e0e0038508ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9049 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9050 return 0x87e0e0038508ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9051 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9052 return 0x87e0e0038508ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9053 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_INT_W1S", 2, a, b, 0, 0);
9054 }
9055
9056 #define typedef_BDK_BGXX_GMP_GMI_TXX_INT_W1S(a,b) bdk_bgxx_gmp_gmi_txx_int_w1s_t
9057 #define bustype_BDK_BGXX_GMP_GMI_TXX_INT_W1S(a,b) BDK_CSR_TYPE_RSL
9058 #define basename_BDK_BGXX_GMP_GMI_TXX_INT_W1S(a,b) "BGXX_GMP_GMI_TXX_INT_W1S"
9059 #define device_bar_BDK_BGXX_GMP_GMI_TXX_INT_W1S(a,b) 0x0 /* PF_BAR0 */
9060 #define busnum_BDK_BGXX_GMP_GMI_TXX_INT_W1S(a,b) (a)
9061 #define arguments_BDK_BGXX_GMP_GMI_TXX_INT_W1S(a,b) (a),(b),-1,-1
9062
9063 /**
9064 * Register (RSL) bgx#_gmp_gmi_tx#_min_pkt
9065 *
9066 * BGX GMI TX Minimum-Size-Packet Registers
9067 */
9068 union bdk_bgxx_gmp_gmi_txx_min_pkt
9069 {
9070 uint64_t u;
9071 struct bdk_bgxx_gmp_gmi_txx_min_pkt_s
9072 {
9073 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9074 uint64_t reserved_8_63 : 56;
9075 uint64_t min_size : 8; /**< [ 7: 0](R/W) Minimum frame size in bytes before the FCS is applied.
9076 Padding is only appended when BGX()_GMP_GMI_TX()_APPEND[PAD] for the corresponding
9077 LMAC is set.
9078
9079 When LMAC_TYPE=SGMII/QSGMII, packets are padded to [MIN_SIZE]+1. The reset value pads to
9080 60
9081 bytes. */
9082 #else /* Word 0 - Little Endian */
9083 uint64_t min_size : 8; /**< [ 7: 0](R/W) Minimum frame size in bytes before the FCS is applied.
9084 Padding is only appended when BGX()_GMP_GMI_TX()_APPEND[PAD] for the corresponding
9085 LMAC is set.
9086
9087 When LMAC_TYPE=SGMII/QSGMII, packets are padded to [MIN_SIZE]+1. The reset value pads to
9088 60
9089 bytes. */
9090 uint64_t reserved_8_63 : 56;
9091 #endif /* Word 0 - End */
9092 } s;
9093 /* struct bdk_bgxx_gmp_gmi_txx_min_pkt_s cn81xx; */
9094 struct bdk_bgxx_gmp_gmi_txx_min_pkt_cn88xx
9095 {
9096 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9097 uint64_t reserved_8_63 : 56;
9098 uint64_t min_size : 8; /**< [ 7: 0](R/W) Minimum frame size in bytes before the FCS is applied.
9099 Padding is only appended when BGX()_GMP_GMI_TX()_APPEND[PAD] for the corresponding
9100 LMAC is set.
9101
9102 In SGMII mode, packets are padded to [MIN_SIZE]+1. The reset value pads to 60 bytes. */
9103 #else /* Word 0 - Little Endian */
9104 uint64_t min_size : 8; /**< [ 7: 0](R/W) Minimum frame size in bytes before the FCS is applied.
9105 Padding is only appended when BGX()_GMP_GMI_TX()_APPEND[PAD] for the corresponding
9106 LMAC is set.
9107
9108 In SGMII mode, packets are padded to [MIN_SIZE]+1. The reset value pads to 60 bytes. */
9109 uint64_t reserved_8_63 : 56;
9110 #endif /* Word 0 - End */
9111 } cn88xx;
9112 /* struct bdk_bgxx_gmp_gmi_txx_min_pkt_s cn83xx; */
9113 };
9114 typedef union bdk_bgxx_gmp_gmi_txx_min_pkt bdk_bgxx_gmp_gmi_txx_min_pkt_t;
9115
9116 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_MIN_PKT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_MIN_PKT(unsigned long a,unsigned long b)9117 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_MIN_PKT(unsigned long a, unsigned long b)
9118 {
9119 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9120 return 0x87e0e0038240ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9121 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9122 return 0x87e0e0038240ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9123 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9124 return 0x87e0e0038240ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9125 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_MIN_PKT", 2, a, b, 0, 0);
9126 }
9127
9128 #define typedef_BDK_BGXX_GMP_GMI_TXX_MIN_PKT(a,b) bdk_bgxx_gmp_gmi_txx_min_pkt_t
9129 #define bustype_BDK_BGXX_GMP_GMI_TXX_MIN_PKT(a,b) BDK_CSR_TYPE_RSL
9130 #define basename_BDK_BGXX_GMP_GMI_TXX_MIN_PKT(a,b) "BGXX_GMP_GMI_TXX_MIN_PKT"
9131 #define device_bar_BDK_BGXX_GMP_GMI_TXX_MIN_PKT(a,b) 0x0 /* PF_BAR0 */
9132 #define busnum_BDK_BGXX_GMP_GMI_TXX_MIN_PKT(a,b) (a)
9133 #define arguments_BDK_BGXX_GMP_GMI_TXX_MIN_PKT(a,b) (a),(b),-1,-1
9134
9135 /**
9136 * Register (RSL) bgx#_gmp_gmi_tx#_pause_pkt_interval
9137 *
9138 * BGX GMI TX PAUSE-Packet Transmission-Interval Registers
9139 * This register specifies how often PAUSE packets are sent.
9140 * Internal:
9141 * Notes:
9142 * Choosing proper values of BGX()_GMP_GMI_TX()_PAUSE_PKT_TIME[PTIME] and
9143 * BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
9144 * designer. It is suggested that TIME be much greater than INTERVAL and
9145 * BGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND] be set. This allows a periodic refresh of the PAUSE
9146 * count and then when the backpressure condition is lifted, a PAUSE packet
9147 * with TIME==0 will be sent indicating that Octane is ready for additional
9148 * data.
9149 *
9150 * If the system chooses to not set BGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND], then it is
9151 * suggested that TIME and INTERVAL are programmed such that they satisify the
9152 * following rule:
9153 *
9154 * _ INTERVAL \<= TIME - (largest_pkt_size + IFG + pause_pkt_size)
9155 *
9156 * where largest_pkt_size is that largest packet that the system can send
9157 * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
9158 * of the PAUSE packet (normally 64B).
9159 */
9160 union bdk_bgxx_gmp_gmi_txx_pause_pkt_interval
9161 {
9162 uint64_t u;
9163 struct bdk_bgxx_gmp_gmi_txx_pause_pkt_interval_s
9164 {
9165 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9166 uint64_t reserved_16_63 : 48;
9167 uint64_t interval : 16; /**< [ 15: 0](R/W) Arbitrate for a 802.3 PAUSE packet every ([INTERVAL] * 512)
9168 bit-times. Normally, 0 \< [INTERVAL] \< BGX()_GMP_GMI_TX()_PAUSE_PKT_TIME[PTIME].
9169
9170 [INTERVAL] = 0 only sends a single PAUSE packet for each backpressure event.
9171 BGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND] must be 1 when [INTERVAL] = 0.
9172 [INTERVAL] should be 0x0 if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9173 #else /* Word 0 - Little Endian */
9174 uint64_t interval : 16; /**< [ 15: 0](R/W) Arbitrate for a 802.3 PAUSE packet every ([INTERVAL] * 512)
9175 bit-times. Normally, 0 \< [INTERVAL] \< BGX()_GMP_GMI_TX()_PAUSE_PKT_TIME[PTIME].
9176
9177 [INTERVAL] = 0 only sends a single PAUSE packet for each backpressure event.
9178 BGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND] must be 1 when [INTERVAL] = 0.
9179 [INTERVAL] should be 0x0 if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9180 uint64_t reserved_16_63 : 48;
9181 #endif /* Word 0 - End */
9182 } s;
9183 /* struct bdk_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn81xx; */
9184 struct bdk_bgxx_gmp_gmi_txx_pause_pkt_interval_cn88xx
9185 {
9186 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9187 uint64_t reserved_16_63 : 48;
9188 uint64_t interval : 16; /**< [ 15: 0](R/W) Arbitrate for a 802.3 PAUSE packet every ([INTERVAL] * 512)
9189 bit-times. Normally, 0 \< [INTERVAL] \< BGX()_GMP_GMI_TX()_PAUSE_PKT_TIME[PTIME].
9190
9191 [INTERVAL] = 0 only sends a single PAUSE packet for each backpressure event.
9192 BGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND] must be 1 when [INTERVAL] = 0. */
9193 #else /* Word 0 - Little Endian */
9194 uint64_t interval : 16; /**< [ 15: 0](R/W) Arbitrate for a 802.3 PAUSE packet every ([INTERVAL] * 512)
9195 bit-times. Normally, 0 \< [INTERVAL] \< BGX()_GMP_GMI_TX()_PAUSE_PKT_TIME[PTIME].
9196
9197 [INTERVAL] = 0 only sends a single PAUSE packet for each backpressure event.
9198 BGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND] must be 1 when [INTERVAL] = 0. */
9199 uint64_t reserved_16_63 : 48;
9200 #endif /* Word 0 - End */
9201 } cn88xx;
9202 /* struct bdk_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn83xx; */
9203 };
9204 typedef union bdk_bgxx_gmp_gmi_txx_pause_pkt_interval bdk_bgxx_gmp_gmi_txx_pause_pkt_interval_t;
9205
9206 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(unsigned long a,unsigned long b)9207 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(unsigned long a, unsigned long b)
9208 {
9209 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9210 return 0x87e0e0038248ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9211 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9212 return 0x87e0e0038248ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9213 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9214 return 0x87e0e0038248ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9215 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL", 2, a, b, 0, 0);
9216 }
9217
9218 #define typedef_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(a,b) bdk_bgxx_gmp_gmi_txx_pause_pkt_interval_t
9219 #define bustype_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(a,b) BDK_CSR_TYPE_RSL
9220 #define basename_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(a,b) "BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL"
9221 #define device_bar_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(a,b) 0x0 /* PF_BAR0 */
9222 #define busnum_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(a,b) (a)
9223 #define arguments_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(a,b) (a),(b),-1,-1
9224
9225 /**
9226 * Register (RSL) bgx#_gmp_gmi_tx#_pause_pkt_time
9227 *
9228 * BGX GMI TX PAUSE Packet PAUSE-Time Registers
9229 */
9230 union bdk_bgxx_gmp_gmi_txx_pause_pkt_time
9231 {
9232 uint64_t u;
9233 struct bdk_bgxx_gmp_gmi_txx_pause_pkt_time_s
9234 {
9235 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9236 uint64_t reserved_16_63 : 48;
9237 uint64_t ptime : 16; /**< [ 15: 0](R/W) Provides the pause_time field placed in outbound 802.3 PAUSE packets
9238 in 512 bit-times. Normally, [PTIME] \>
9239 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL[INTERVAL]. For programming information see
9240 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL.
9241 [PTIME] should be 0x0 if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9242 #else /* Word 0 - Little Endian */
9243 uint64_t ptime : 16; /**< [ 15: 0](R/W) Provides the pause_time field placed in outbound 802.3 PAUSE packets
9244 in 512 bit-times. Normally, [PTIME] \>
9245 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL[INTERVAL]. For programming information see
9246 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL.
9247 [PTIME] should be 0x0 if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9248 uint64_t reserved_16_63 : 48;
9249 #endif /* Word 0 - End */
9250 } s;
9251 /* struct bdk_bgxx_gmp_gmi_txx_pause_pkt_time_s cn81xx; */
9252 struct bdk_bgxx_gmp_gmi_txx_pause_pkt_time_cn88xx
9253 {
9254 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9255 uint64_t reserved_16_63 : 48;
9256 uint64_t ptime : 16; /**< [ 15: 0](R/W) Provides the pause_time field placed in outbound 802.3 PAUSE packets
9257 in 512 bit-times. Normally, [PTIME] \>
9258 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL[INTERVAL]. For programming information see
9259 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL. */
9260 #else /* Word 0 - Little Endian */
9261 uint64_t ptime : 16; /**< [ 15: 0](R/W) Provides the pause_time field placed in outbound 802.3 PAUSE packets
9262 in 512 bit-times. Normally, [PTIME] \>
9263 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL[INTERVAL]. For programming information see
9264 BGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL. */
9265 uint64_t reserved_16_63 : 48;
9266 #endif /* Word 0 - End */
9267 } cn88xx;
9268 /* struct bdk_bgxx_gmp_gmi_txx_pause_pkt_time_s cn83xx; */
9269 };
9270 typedef union bdk_bgxx_gmp_gmi_txx_pause_pkt_time bdk_bgxx_gmp_gmi_txx_pause_pkt_time_t;
9271
9272 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(unsigned long a,unsigned long b)9273 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(unsigned long a, unsigned long b)
9274 {
9275 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9276 return 0x87e0e0038238ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9277 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9278 return 0x87e0e0038238ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9279 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9280 return 0x87e0e0038238ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9281 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME", 2, a, b, 0, 0);
9282 }
9283
9284 #define typedef_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(a,b) bdk_bgxx_gmp_gmi_txx_pause_pkt_time_t
9285 #define bustype_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(a,b) BDK_CSR_TYPE_RSL
9286 #define basename_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(a,b) "BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME"
9287 #define device_bar_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(a,b) 0x0 /* PF_BAR0 */
9288 #define busnum_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(a,b) (a)
9289 #define arguments_BDK_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(a,b) (a),(b),-1,-1
9290
9291 /**
9292 * Register (RSL) bgx#_gmp_gmi_tx#_pause_togo
9293 *
9294 * BGX GMI TX Time-to-Backpressure Registers
9295 */
9296 union bdk_bgxx_gmp_gmi_txx_pause_togo
9297 {
9298 uint64_t u;
9299 struct bdk_bgxx_gmp_gmi_txx_pause_togo_s
9300 {
9301 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9302 uint64_t reserved_16_63 : 48;
9303 uint64_t ptime : 16; /**< [ 15: 0](RO/H) Amount of time remaining to backpressure, from the standard 802.3 PAUSE timer. */
9304 #else /* Word 0 - Little Endian */
9305 uint64_t ptime : 16; /**< [ 15: 0](RO/H) Amount of time remaining to backpressure, from the standard 802.3 PAUSE timer. */
9306 uint64_t reserved_16_63 : 48;
9307 #endif /* Word 0 - End */
9308 } s;
9309 /* struct bdk_bgxx_gmp_gmi_txx_pause_togo_s cn; */
9310 };
9311 typedef union bdk_bgxx_gmp_gmi_txx_pause_togo bdk_bgxx_gmp_gmi_txx_pause_togo_t;
9312
9313 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(unsigned long a,unsigned long b)9314 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(unsigned long a, unsigned long b)
9315 {
9316 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9317 return 0x87e0e0038258ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9318 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9319 return 0x87e0e0038258ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9320 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9321 return 0x87e0e0038258ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9322 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_PAUSE_TOGO", 2, a, b, 0, 0);
9323 }
9324
9325 #define typedef_BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(a,b) bdk_bgxx_gmp_gmi_txx_pause_togo_t
9326 #define bustype_BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(a,b) BDK_CSR_TYPE_RSL
9327 #define basename_BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(a,b) "BGXX_GMP_GMI_TXX_PAUSE_TOGO"
9328 #define device_bar_BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(a,b) 0x0 /* PF_BAR0 */
9329 #define busnum_BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(a,b) (a)
9330 #define arguments_BDK_BGXX_GMP_GMI_TXX_PAUSE_TOGO(a,b) (a),(b),-1,-1
9331
9332 /**
9333 * Register (RSL) bgx#_gmp_gmi_tx#_pause_zero
9334 *
9335 * BGX GMI TX PAUSE-Zero-Enable Registers
9336 */
9337 union bdk_bgxx_gmp_gmi_txx_pause_zero
9338 {
9339 uint64_t u;
9340 struct bdk_bgxx_gmp_gmi_txx_pause_zero_s
9341 {
9342 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9343 uint64_t reserved_1_63 : 63;
9344 uint64_t send : 1; /**< [ 0: 0](R/W) Send PAUSE-zero enable. When this bit is set, and the backpressure condition is clear, it
9345 allows sending a PAUSE packet with pause_time of 0 to enable the channel.
9346 [SEND] should be set if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9347 #else /* Word 0 - Little Endian */
9348 uint64_t send : 1; /**< [ 0: 0](R/W) Send PAUSE-zero enable. When this bit is set, and the backpressure condition is clear, it
9349 allows sending a PAUSE packet with pause_time of 0 to enable the channel.
9350 [SEND] should be set if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9351 uint64_t reserved_1_63 : 63;
9352 #endif /* Word 0 - End */
9353 } s;
9354 /* struct bdk_bgxx_gmp_gmi_txx_pause_zero_s cn81xx; */
9355 struct bdk_bgxx_gmp_gmi_txx_pause_zero_cn88xx
9356 {
9357 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9358 uint64_t reserved_1_63 : 63;
9359 uint64_t send : 1; /**< [ 0: 0](R/W) Send PAUSE-zero enable.When this bit is set, and the backpressure condition is clear, it
9360 allows sending a PAUSE packet with pause_time of 0 to enable the channel. */
9361 #else /* Word 0 - Little Endian */
9362 uint64_t send : 1; /**< [ 0: 0](R/W) Send PAUSE-zero enable.When this bit is set, and the backpressure condition is clear, it
9363 allows sending a PAUSE packet with pause_time of 0 to enable the channel. */
9364 uint64_t reserved_1_63 : 63;
9365 #endif /* Word 0 - End */
9366 } cn88xx;
9367 /* struct bdk_bgxx_gmp_gmi_txx_pause_zero_s cn83xx; */
9368 };
9369 typedef union bdk_bgxx_gmp_gmi_txx_pause_zero bdk_bgxx_gmp_gmi_txx_pause_zero_t;
9370
9371 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(unsigned long a,unsigned long b)9372 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(unsigned long a, unsigned long b)
9373 {
9374 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9375 return 0x87e0e0038260ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9376 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9377 return 0x87e0e0038260ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9378 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9379 return 0x87e0e0038260ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9380 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_PAUSE_ZERO", 2, a, b, 0, 0);
9381 }
9382
9383 #define typedef_BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(a,b) bdk_bgxx_gmp_gmi_txx_pause_zero_t
9384 #define bustype_BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(a,b) BDK_CSR_TYPE_RSL
9385 #define basename_BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(a,b) "BGXX_GMP_GMI_TXX_PAUSE_ZERO"
9386 #define device_bar_BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(a,b) 0x0 /* PF_BAR0 */
9387 #define busnum_BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(a,b) (a)
9388 #define arguments_BDK_BGXX_GMP_GMI_TXX_PAUSE_ZERO(a,b) (a),(b),-1,-1
9389
9390 /**
9391 * Register (RSL) bgx#_gmp_gmi_tx#_sgmii_ctl
9392 *
9393 * BGX SGMII Control Registers
9394 */
9395 union bdk_bgxx_gmp_gmi_txx_sgmii_ctl
9396 {
9397 uint64_t u;
9398 struct bdk_bgxx_gmp_gmi_txx_sgmii_ctl_s
9399 {
9400 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9401 uint64_t reserved_1_63 : 63;
9402 uint64_t align : 1; /**< [ 0: 0](R/W) Align the transmission to even cycles: (SGMII/1000BASE-X half-duplex only)
9403 Recommended value is: ALIGN = !BGX()_GMP_GMI_TX()_APPEND[PREAMBLE].
9404 (See Transmit Conversion to Code groups, Transmit Conversion to Code Groups for a complete
9405 discussion.)
9406
9407 _ 0 = Data can be sent on any cycle. In this mode, the interface functions at maximum
9408 bandwidth. It is possible for the TX PCS machine to drop the first byte of the TX frame.
9409 When BGX()_GMP_GMI_TX()_APPEND[PREAMBLE] is set, the first byte is a preamble
9410 byte, which can be dropped to compensate for an extended IPG.
9411
9412 _ 1 = Data is only sent on even cycles. In this mode, there can be bandwidth implications
9413 when sending odd-byte packets as the IPG can extend an extra cycle. There will be no loss
9414 of data. */
9415 #else /* Word 0 - Little Endian */
9416 uint64_t align : 1; /**< [ 0: 0](R/W) Align the transmission to even cycles: (SGMII/1000BASE-X half-duplex only)
9417 Recommended value is: ALIGN = !BGX()_GMP_GMI_TX()_APPEND[PREAMBLE].
9418 (See Transmit Conversion to Code groups, Transmit Conversion to Code Groups for a complete
9419 discussion.)
9420
9421 _ 0 = Data can be sent on any cycle. In this mode, the interface functions at maximum
9422 bandwidth. It is possible for the TX PCS machine to drop the first byte of the TX frame.
9423 When BGX()_GMP_GMI_TX()_APPEND[PREAMBLE] is set, the first byte is a preamble
9424 byte, which can be dropped to compensate for an extended IPG.
9425
9426 _ 1 = Data is only sent on even cycles. In this mode, there can be bandwidth implications
9427 when sending odd-byte packets as the IPG can extend an extra cycle. There will be no loss
9428 of data. */
9429 uint64_t reserved_1_63 : 63;
9430 #endif /* Word 0 - End */
9431 } s;
9432 /* struct bdk_bgxx_gmp_gmi_txx_sgmii_ctl_s cn; */
9433 };
9434 typedef union bdk_bgxx_gmp_gmi_txx_sgmii_ctl bdk_bgxx_gmp_gmi_txx_sgmii_ctl_t;
9435
9436 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(unsigned long a,unsigned long b)9437 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(unsigned long a, unsigned long b)
9438 {
9439 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9440 return 0x87e0e0038300ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9441 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9442 return 0x87e0e0038300ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9443 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9444 return 0x87e0e0038300ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9445 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_SGMII_CTL", 2, a, b, 0, 0);
9446 }
9447
9448 #define typedef_BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(a,b) bdk_bgxx_gmp_gmi_txx_sgmii_ctl_t
9449 #define bustype_BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(a,b) BDK_CSR_TYPE_RSL
9450 #define basename_BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(a,b) "BGXX_GMP_GMI_TXX_SGMII_CTL"
9451 #define device_bar_BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(a,b) 0x0 /* PF_BAR0 */
9452 #define busnum_BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(a,b) (a)
9453 #define arguments_BDK_BGXX_GMP_GMI_TXX_SGMII_CTL(a,b) (a),(b),-1,-1
9454
9455 /**
9456 * Register (RSL) bgx#_gmp_gmi_tx#_slot
9457 *
9458 * BGX GMI TX Slottime Counter Registers
9459 */
9460 union bdk_bgxx_gmp_gmi_txx_slot
9461 {
9462 uint64_t u;
9463 struct bdk_bgxx_gmp_gmi_txx_slot_s
9464 {
9465 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9466 uint64_t reserved_10_63 : 54;
9467 uint64_t slot : 10; /**< [ 9: 0](R/W) Slottime (refer to IEEE 802.3 to set correctly):
9468 10/100 Mbs: Set SLOT to 0x40.
9469 1000 Mbs: Set SLOT to 0x200.
9470
9471 SGMII/QSGMII/1000Base-X only. */
9472 #else /* Word 0 - Little Endian */
9473 uint64_t slot : 10; /**< [ 9: 0](R/W) Slottime (refer to IEEE 802.3 to set correctly):
9474 10/100 Mbs: Set SLOT to 0x40.
9475 1000 Mbs: Set SLOT to 0x200.
9476
9477 SGMII/QSGMII/1000Base-X only. */
9478 uint64_t reserved_10_63 : 54;
9479 #endif /* Word 0 - End */
9480 } s;
9481 /* struct bdk_bgxx_gmp_gmi_txx_slot_s cn81xx; */
9482 struct bdk_bgxx_gmp_gmi_txx_slot_cn88xx
9483 {
9484 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9485 uint64_t reserved_10_63 : 54;
9486 uint64_t slot : 10; /**< [ 9: 0](R/W) Slottime (refer to IEEE 802.3 to set correctly):
9487 10/100 Mbs: Set SLOT to 0x40.
9488 1000 Mbs: Set SLOT to 0x200.
9489
9490 SGMII/1000Base-X only. */
9491 #else /* Word 0 - Little Endian */
9492 uint64_t slot : 10; /**< [ 9: 0](R/W) Slottime (refer to IEEE 802.3 to set correctly):
9493 10/100 Mbs: Set SLOT to 0x40.
9494 1000 Mbs: Set SLOT to 0x200.
9495
9496 SGMII/1000Base-X only. */
9497 uint64_t reserved_10_63 : 54;
9498 #endif /* Word 0 - End */
9499 } cn88xx;
9500 /* struct bdk_bgxx_gmp_gmi_txx_slot_s cn83xx; */
9501 };
9502 typedef union bdk_bgxx_gmp_gmi_txx_slot bdk_bgxx_gmp_gmi_txx_slot_t;
9503
9504 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_SLOT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_SLOT(unsigned long a,unsigned long b)9505 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_SLOT(unsigned long a, unsigned long b)
9506 {
9507 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9508 return 0x87e0e0038220ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9509 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9510 return 0x87e0e0038220ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9511 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9512 return 0x87e0e0038220ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9513 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_SLOT", 2, a, b, 0, 0);
9514 }
9515
9516 #define typedef_BDK_BGXX_GMP_GMI_TXX_SLOT(a,b) bdk_bgxx_gmp_gmi_txx_slot_t
9517 #define bustype_BDK_BGXX_GMP_GMI_TXX_SLOT(a,b) BDK_CSR_TYPE_RSL
9518 #define basename_BDK_BGXX_GMP_GMI_TXX_SLOT(a,b) "BGXX_GMP_GMI_TXX_SLOT"
9519 #define device_bar_BDK_BGXX_GMP_GMI_TXX_SLOT(a,b) 0x0 /* PF_BAR0 */
9520 #define busnum_BDK_BGXX_GMP_GMI_TXX_SLOT(a,b) (a)
9521 #define arguments_BDK_BGXX_GMP_GMI_TXX_SLOT(a,b) (a),(b),-1,-1
9522
9523 /**
9524 * Register (RSL) bgx#_gmp_gmi_tx#_soft_pause
9525 *
9526 * BGX GMI TX Software PAUSE Registers
9527 */
9528 union bdk_bgxx_gmp_gmi_txx_soft_pause
9529 {
9530 uint64_t u;
9531 struct bdk_bgxx_gmp_gmi_txx_soft_pause_s
9532 {
9533 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9534 uint64_t reserved_16_63 : 48;
9535 uint64_t ptime : 16; /**< [ 15: 0](R/W) Back off the TX bus for ([PTIME] * 512) bit-times.
9536 [PTIME] should be 0x0 if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9537 #else /* Word 0 - Little Endian */
9538 uint64_t ptime : 16; /**< [ 15: 0](R/W) Back off the TX bus for ([PTIME] * 512) bit-times.
9539 [PTIME] should be 0x0 if BGX()_GMP_GMI_TX()_CTL[TX_FC_TYPE] is clear (G.999.1). */
9540 uint64_t reserved_16_63 : 48;
9541 #endif /* Word 0 - End */
9542 } s;
9543 /* struct bdk_bgxx_gmp_gmi_txx_soft_pause_s cn81xx; */
9544 struct bdk_bgxx_gmp_gmi_txx_soft_pause_cn88xx
9545 {
9546 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9547 uint64_t reserved_16_63 : 48;
9548 uint64_t ptime : 16; /**< [ 15: 0](R/W) Back off the TX bus for ([PTIME] * 512) bit-times. */
9549 #else /* Word 0 - Little Endian */
9550 uint64_t ptime : 16; /**< [ 15: 0](R/W) Back off the TX bus for ([PTIME] * 512) bit-times. */
9551 uint64_t reserved_16_63 : 48;
9552 #endif /* Word 0 - End */
9553 } cn88xx;
9554 /* struct bdk_bgxx_gmp_gmi_txx_soft_pause_s cn83xx; */
9555 };
9556 typedef union bdk_bgxx_gmp_gmi_txx_soft_pause bdk_bgxx_gmp_gmi_txx_soft_pause_t;
9557
9558 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(unsigned long a,unsigned long b)9559 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(unsigned long a, unsigned long b)
9560 {
9561 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9562 return 0x87e0e0038250ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9563 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9564 return 0x87e0e0038250ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9565 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9566 return 0x87e0e0038250ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9567 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_SOFT_PAUSE", 2, a, b, 0, 0);
9568 }
9569
9570 #define typedef_BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(a,b) bdk_bgxx_gmp_gmi_txx_soft_pause_t
9571 #define bustype_BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(a,b) BDK_CSR_TYPE_RSL
9572 #define basename_BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(a,b) "BGXX_GMP_GMI_TXX_SOFT_PAUSE"
9573 #define device_bar_BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(a,b) 0x0 /* PF_BAR0 */
9574 #define busnum_BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(a,b) (a)
9575 #define arguments_BDK_BGXX_GMP_GMI_TXX_SOFT_PAUSE(a,b) (a),(b),-1,-1
9576
9577 /**
9578 * Register (RSL) bgx#_gmp_gmi_tx#_thresh
9579 *
9580 * BGX GMI TX Threshold Registers
9581 */
9582 union bdk_bgxx_gmp_gmi_txx_thresh
9583 {
9584 uint64_t u;
9585 struct bdk_bgxx_gmp_gmi_txx_thresh_s
9586 {
9587 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9588 uint64_t reserved_11_63 : 53;
9589 uint64_t cnt : 11; /**< [ 10: 0](R/W) Number of 128-bit words to accumulate in the TX FIFO before sending on the packet
9590 interface. This field should be large enough to prevent underflow on the packet interface
9591 and must never be set to 0x0. The recommended setting for
9592
9593 In all modes, this register cannot exceed the TX FIFO depth configured by
9594 BGX()_CMR_TX_LMACS[LMACS]. */
9595 #else /* Word 0 - Little Endian */
9596 uint64_t cnt : 11; /**< [ 10: 0](R/W) Number of 128-bit words to accumulate in the TX FIFO before sending on the packet
9597 interface. This field should be large enough to prevent underflow on the packet interface
9598 and must never be set to 0x0. The recommended setting for
9599
9600 In all modes, this register cannot exceed the TX FIFO depth configured by
9601 BGX()_CMR_TX_LMACS[LMACS]. */
9602 uint64_t reserved_11_63 : 53;
9603 #endif /* Word 0 - End */
9604 } s;
9605 /* struct bdk_bgxx_gmp_gmi_txx_thresh_s cn; */
9606 };
9607 typedef union bdk_bgxx_gmp_gmi_txx_thresh bdk_bgxx_gmp_gmi_txx_thresh_t;
9608
9609 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_THRESH(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TXX_THRESH(unsigned long a,unsigned long b)9610 static inline uint64_t BDK_BGXX_GMP_GMI_TXX_THRESH(unsigned long a, unsigned long b)
9611 {
9612 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9613 return 0x87e0e0038210ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9614 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9615 return 0x87e0e0038210ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9616 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9617 return 0x87e0e0038210ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9618 __bdk_csr_fatal("BGXX_GMP_GMI_TXX_THRESH", 2, a, b, 0, 0);
9619 }
9620
9621 #define typedef_BDK_BGXX_GMP_GMI_TXX_THRESH(a,b) bdk_bgxx_gmp_gmi_txx_thresh_t
9622 #define bustype_BDK_BGXX_GMP_GMI_TXX_THRESH(a,b) BDK_CSR_TYPE_RSL
9623 #define basename_BDK_BGXX_GMP_GMI_TXX_THRESH(a,b) "BGXX_GMP_GMI_TXX_THRESH"
9624 #define device_bar_BDK_BGXX_GMP_GMI_TXX_THRESH(a,b) 0x0 /* PF_BAR0 */
9625 #define busnum_BDK_BGXX_GMP_GMI_TXX_THRESH(a,b) (a)
9626 #define arguments_BDK_BGXX_GMP_GMI_TXX_THRESH(a,b) (a),(b),-1,-1
9627
9628 /**
9629 * Register (RSL) bgx#_gmp_gmi_tx_col_attempt
9630 *
9631 * BGX TX Collision Attempts Before Dropping Frame Registers
9632 */
9633 union bdk_bgxx_gmp_gmi_tx_col_attempt
9634 {
9635 uint64_t u;
9636 struct bdk_bgxx_gmp_gmi_tx_col_attempt_s
9637 {
9638 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9639 uint64_t reserved_5_63 : 59;
9640 uint64_t limit : 5; /**< [ 4: 0](R/W) Number of collision attempts allowed. (SGMII/1000BASE-X half-duplex only.) */
9641 #else /* Word 0 - Little Endian */
9642 uint64_t limit : 5; /**< [ 4: 0](R/W) Number of collision attempts allowed. (SGMII/1000BASE-X half-duplex only.) */
9643 uint64_t reserved_5_63 : 59;
9644 #endif /* Word 0 - End */
9645 } s;
9646 /* struct bdk_bgxx_gmp_gmi_tx_col_attempt_s cn; */
9647 };
9648 typedef union bdk_bgxx_gmp_gmi_tx_col_attempt bdk_bgxx_gmp_gmi_tx_col_attempt_t;
9649
9650 static inline uint64_t BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(unsigned long a)9651 static inline uint64_t BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(unsigned long a)
9652 {
9653 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
9654 return 0x87e0e0039010ll + 0x1000000ll * ((a) & 0x1);
9655 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
9656 return 0x87e0e0039010ll + 0x1000000ll * ((a) & 0x3);
9657 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
9658 return 0x87e0e0039010ll + 0x1000000ll * ((a) & 0x1);
9659 __bdk_csr_fatal("BGXX_GMP_GMI_TX_COL_ATTEMPT", 1, a, 0, 0, 0);
9660 }
9661
9662 #define typedef_BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(a) bdk_bgxx_gmp_gmi_tx_col_attempt_t
9663 #define bustype_BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(a) BDK_CSR_TYPE_RSL
9664 #define basename_BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(a) "BGXX_GMP_GMI_TX_COL_ATTEMPT"
9665 #define device_bar_BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(a) 0x0 /* PF_BAR0 */
9666 #define busnum_BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(a) (a)
9667 #define arguments_BDK_BGXX_GMP_GMI_TX_COL_ATTEMPT(a) (a),-1,-1,-1
9668
9669 /**
9670 * Register (RSL) bgx#_gmp_gmi_tx_ifg
9671 *
9672 * BGX GMI TX Interframe-Gap Cycles Registers
9673 * Consider the following when programming IFG1 and IFG2:
9674 * * For 10/100/1000 Mb/s half-duplex systems that require IEEE 802.3 compatibility, IFG1 must be
9675 * in the range of 1-8, IFG2 must be in the range of 4-12, and the IFG1 + IFG2 sum must be 12.
9676 * * For 10/100/1000 Mb/s full-duplex systems that require IEEE 802.3 compatibility, IFG1 must be
9677 * in the range of 1-11, IFG2 must be in the range of 1-11, and the IFG1 + IFG2 sum must be 12.
9678 * For all other systems, IFG1 and IFG2 can be any value in the range of 1-15, allowing for a
9679 * total possible IFG sum of 2-30.
9680 */
9681 union bdk_bgxx_gmp_gmi_tx_ifg
9682 {
9683 uint64_t u;
9684 struct bdk_bgxx_gmp_gmi_tx_ifg_s
9685 {
9686 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9687 uint64_t reserved_8_63 : 56;
9688 uint64_t ifg2 : 4; /**< [ 7: 4](R/W) Remainder of interFrameGap timing, equal to interFrameGap - IFG1 (in IFG2 * 8 bits). If
9689 CRS is detected during IFG2, the interFrameSpacing timer is not reset and a frame is
9690 transmitted once the timer expires. */
9691 uint64_t ifg1 : 4; /**< [ 3: 0](R/W) First portion of interFrameGap timing, in the range of 0 to 2/3 (in IFG2 * 8 bits). If CRS
9692 is detected during IFG1, the interFrameSpacing timer is reset and a frame is not
9693 transmitted. */
9694 #else /* Word 0 - Little Endian */
9695 uint64_t ifg1 : 4; /**< [ 3: 0](R/W) First portion of interFrameGap timing, in the range of 0 to 2/3 (in IFG2 * 8 bits). If CRS
9696 is detected during IFG1, the interFrameSpacing timer is reset and a frame is not
9697 transmitted. */
9698 uint64_t ifg2 : 4; /**< [ 7: 4](R/W) Remainder of interFrameGap timing, equal to interFrameGap - IFG1 (in IFG2 * 8 bits). If
9699 CRS is detected during IFG2, the interFrameSpacing timer is not reset and a frame is
9700 transmitted once the timer expires. */
9701 uint64_t reserved_8_63 : 56;
9702 #endif /* Word 0 - End */
9703 } s;
9704 /* struct bdk_bgxx_gmp_gmi_tx_ifg_s cn; */
9705 };
9706 typedef union bdk_bgxx_gmp_gmi_tx_ifg bdk_bgxx_gmp_gmi_tx_ifg_t;
9707
9708 static inline uint64_t BDK_BGXX_GMP_GMI_TX_IFG(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TX_IFG(unsigned long a)9709 static inline uint64_t BDK_BGXX_GMP_GMI_TX_IFG(unsigned long a)
9710 {
9711 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
9712 return 0x87e0e0039000ll + 0x1000000ll * ((a) & 0x1);
9713 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
9714 return 0x87e0e0039000ll + 0x1000000ll * ((a) & 0x3);
9715 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
9716 return 0x87e0e0039000ll + 0x1000000ll * ((a) & 0x1);
9717 __bdk_csr_fatal("BGXX_GMP_GMI_TX_IFG", 1, a, 0, 0, 0);
9718 }
9719
9720 #define typedef_BDK_BGXX_GMP_GMI_TX_IFG(a) bdk_bgxx_gmp_gmi_tx_ifg_t
9721 #define bustype_BDK_BGXX_GMP_GMI_TX_IFG(a) BDK_CSR_TYPE_RSL
9722 #define basename_BDK_BGXX_GMP_GMI_TX_IFG(a) "BGXX_GMP_GMI_TX_IFG"
9723 #define device_bar_BDK_BGXX_GMP_GMI_TX_IFG(a) 0x0 /* PF_BAR0 */
9724 #define busnum_BDK_BGXX_GMP_GMI_TX_IFG(a) (a)
9725 #define arguments_BDK_BGXX_GMP_GMI_TX_IFG(a) (a),-1,-1,-1
9726
9727 /**
9728 * Register (RSL) bgx#_gmp_gmi_tx_jam
9729 *
9730 * BGX GMI TX JAM Pattern Registers
9731 * This register provides the pattern used in JAM bytes.
9732 */
9733 union bdk_bgxx_gmp_gmi_tx_jam
9734 {
9735 uint64_t u;
9736 struct bdk_bgxx_gmp_gmi_tx_jam_s
9737 {
9738 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9739 uint64_t reserved_8_63 : 56;
9740 uint64_t jam : 8; /**< [ 7: 0](R/W) JAM pattern. (SGMII/1000BASE-X half-duplex only.) */
9741 #else /* Word 0 - Little Endian */
9742 uint64_t jam : 8; /**< [ 7: 0](R/W) JAM pattern. (SGMII/1000BASE-X half-duplex only.) */
9743 uint64_t reserved_8_63 : 56;
9744 #endif /* Word 0 - End */
9745 } s;
9746 /* struct bdk_bgxx_gmp_gmi_tx_jam_s cn; */
9747 };
9748 typedef union bdk_bgxx_gmp_gmi_tx_jam bdk_bgxx_gmp_gmi_tx_jam_t;
9749
9750 static inline uint64_t BDK_BGXX_GMP_GMI_TX_JAM(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TX_JAM(unsigned long a)9751 static inline uint64_t BDK_BGXX_GMP_GMI_TX_JAM(unsigned long a)
9752 {
9753 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
9754 return 0x87e0e0039008ll + 0x1000000ll * ((a) & 0x1);
9755 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
9756 return 0x87e0e0039008ll + 0x1000000ll * ((a) & 0x3);
9757 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
9758 return 0x87e0e0039008ll + 0x1000000ll * ((a) & 0x1);
9759 __bdk_csr_fatal("BGXX_GMP_GMI_TX_JAM", 1, a, 0, 0, 0);
9760 }
9761
9762 #define typedef_BDK_BGXX_GMP_GMI_TX_JAM(a) bdk_bgxx_gmp_gmi_tx_jam_t
9763 #define bustype_BDK_BGXX_GMP_GMI_TX_JAM(a) BDK_CSR_TYPE_RSL
9764 #define basename_BDK_BGXX_GMP_GMI_TX_JAM(a) "BGXX_GMP_GMI_TX_JAM"
9765 #define device_bar_BDK_BGXX_GMP_GMI_TX_JAM(a) 0x0 /* PF_BAR0 */
9766 #define busnum_BDK_BGXX_GMP_GMI_TX_JAM(a) (a)
9767 #define arguments_BDK_BGXX_GMP_GMI_TX_JAM(a) (a),-1,-1,-1
9768
9769 /**
9770 * Register (RSL) bgx#_gmp_gmi_tx_lfsr
9771 *
9772 * BGX GMI TX LFSR Registers
9773 * This register shows the contents of the linear feedback shift register (LFSR), which is used
9774 * to implement truncated binary exponential backoff.
9775 */
9776 union bdk_bgxx_gmp_gmi_tx_lfsr
9777 {
9778 uint64_t u;
9779 struct bdk_bgxx_gmp_gmi_tx_lfsr_s
9780 {
9781 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9782 uint64_t reserved_16_63 : 48;
9783 uint64_t lfsr : 16; /**< [ 15: 0](R/W/H) Contains the current state of the LFSR, which is used to feed random numbers to compute
9784 truncated binary exponential backoff. (SGMII/1000Base-X half-duplex only.) */
9785 #else /* Word 0 - Little Endian */
9786 uint64_t lfsr : 16; /**< [ 15: 0](R/W/H) Contains the current state of the LFSR, which is used to feed random numbers to compute
9787 truncated binary exponential backoff. (SGMII/1000Base-X half-duplex only.) */
9788 uint64_t reserved_16_63 : 48;
9789 #endif /* Word 0 - End */
9790 } s;
9791 /* struct bdk_bgxx_gmp_gmi_tx_lfsr_s cn; */
9792 };
9793 typedef union bdk_bgxx_gmp_gmi_tx_lfsr bdk_bgxx_gmp_gmi_tx_lfsr_t;
9794
9795 static inline uint64_t BDK_BGXX_GMP_GMI_TX_LFSR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TX_LFSR(unsigned long a)9796 static inline uint64_t BDK_BGXX_GMP_GMI_TX_LFSR(unsigned long a)
9797 {
9798 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
9799 return 0x87e0e0039028ll + 0x1000000ll * ((a) & 0x1);
9800 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
9801 return 0x87e0e0039028ll + 0x1000000ll * ((a) & 0x3);
9802 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
9803 return 0x87e0e0039028ll + 0x1000000ll * ((a) & 0x1);
9804 __bdk_csr_fatal("BGXX_GMP_GMI_TX_LFSR", 1, a, 0, 0, 0);
9805 }
9806
9807 #define typedef_BDK_BGXX_GMP_GMI_TX_LFSR(a) bdk_bgxx_gmp_gmi_tx_lfsr_t
9808 #define bustype_BDK_BGXX_GMP_GMI_TX_LFSR(a) BDK_CSR_TYPE_RSL
9809 #define basename_BDK_BGXX_GMP_GMI_TX_LFSR(a) "BGXX_GMP_GMI_TX_LFSR"
9810 #define device_bar_BDK_BGXX_GMP_GMI_TX_LFSR(a) 0x0 /* PF_BAR0 */
9811 #define busnum_BDK_BGXX_GMP_GMI_TX_LFSR(a) (a)
9812 #define arguments_BDK_BGXX_GMP_GMI_TX_LFSR(a) (a),-1,-1,-1
9813
9814 /**
9815 * Register (RSL) bgx#_gmp_gmi_tx_pause_pkt_dmac
9816 *
9817 * BGX TX PAUSE-Packet DMAC-Field Registers
9818 */
9819 union bdk_bgxx_gmp_gmi_tx_pause_pkt_dmac
9820 {
9821 uint64_t u;
9822 struct bdk_bgxx_gmp_gmi_tx_pause_pkt_dmac_s
9823 {
9824 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9825 uint64_t reserved_48_63 : 16;
9826 uint64_t dmac : 48; /**< [ 47: 0](R/W) The DMAC field, which is placed in outbound PAUSE packets. */
9827 #else /* Word 0 - Little Endian */
9828 uint64_t dmac : 48; /**< [ 47: 0](R/W) The DMAC field, which is placed in outbound PAUSE packets. */
9829 uint64_t reserved_48_63 : 16;
9830 #endif /* Word 0 - End */
9831 } s;
9832 /* struct bdk_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cn; */
9833 };
9834 typedef union bdk_bgxx_gmp_gmi_tx_pause_pkt_dmac bdk_bgxx_gmp_gmi_tx_pause_pkt_dmac_t;
9835
9836 static inline uint64_t BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(unsigned long a)9837 static inline uint64_t BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(unsigned long a)
9838 {
9839 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
9840 return 0x87e0e0039018ll + 0x1000000ll * ((a) & 0x1);
9841 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
9842 return 0x87e0e0039018ll + 0x1000000ll * ((a) & 0x3);
9843 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
9844 return 0x87e0e0039018ll + 0x1000000ll * ((a) & 0x1);
9845 __bdk_csr_fatal("BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC", 1, a, 0, 0, 0);
9846 }
9847
9848 #define typedef_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(a) bdk_bgxx_gmp_gmi_tx_pause_pkt_dmac_t
9849 #define bustype_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(a) BDK_CSR_TYPE_RSL
9850 #define basename_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(a) "BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC"
9851 #define device_bar_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(a) 0x0 /* PF_BAR0 */
9852 #define busnum_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(a) (a)
9853 #define arguments_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(a) (a),-1,-1,-1
9854
9855 /**
9856 * Register (RSL) bgx#_gmp_gmi_tx_pause_pkt_type
9857 *
9858 * BGX GMI TX PAUSE-Packet-PTYPE Field Registers
9859 * This register provides the PTYPE field that is placed in outbound PAUSE packets.
9860 */
9861 union bdk_bgxx_gmp_gmi_tx_pause_pkt_type
9862 {
9863 uint64_t u;
9864 struct bdk_bgxx_gmp_gmi_tx_pause_pkt_type_s
9865 {
9866 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9867 uint64_t reserved_16_63 : 48;
9868 uint64_t ptype : 16; /**< [ 15: 0](R/W) The PTYPE field placed in outbound PAUSE packets. */
9869 #else /* Word 0 - Little Endian */
9870 uint64_t ptype : 16; /**< [ 15: 0](R/W) The PTYPE field placed in outbound PAUSE packets. */
9871 uint64_t reserved_16_63 : 48;
9872 #endif /* Word 0 - End */
9873 } s;
9874 /* struct bdk_bgxx_gmp_gmi_tx_pause_pkt_type_s cn; */
9875 };
9876 typedef union bdk_bgxx_gmp_gmi_tx_pause_pkt_type bdk_bgxx_gmp_gmi_tx_pause_pkt_type_t;
9877
9878 static inline uint64_t BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(unsigned long a)9879 static inline uint64_t BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(unsigned long a)
9880 {
9881 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
9882 return 0x87e0e0039020ll + 0x1000000ll * ((a) & 0x1);
9883 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
9884 return 0x87e0e0039020ll + 0x1000000ll * ((a) & 0x3);
9885 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
9886 return 0x87e0e0039020ll + 0x1000000ll * ((a) & 0x1);
9887 __bdk_csr_fatal("BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE", 1, a, 0, 0, 0);
9888 }
9889
9890 #define typedef_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(a) bdk_bgxx_gmp_gmi_tx_pause_pkt_type_t
9891 #define bustype_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(a) BDK_CSR_TYPE_RSL
9892 #define basename_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(a) "BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE"
9893 #define device_bar_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(a) 0x0 /* PF_BAR0 */
9894 #define busnum_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(a) (a)
9895 #define arguments_BDK_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(a) (a),-1,-1,-1
9896
9897 /**
9898 * Register (RSL) bgx#_gmp_pcs_an#_adv
9899 *
9900 * BGX GMP PCS Autonegotiation Advertisement Registers
9901 */
9902 union bdk_bgxx_gmp_pcs_anx_adv
9903 {
9904 uint64_t u;
9905 struct bdk_bgxx_gmp_pcs_anx_adv_s
9906 {
9907 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9908 uint64_t reserved_16_63 : 48;
9909 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page capable. This feature is not supported; this field is always 0. */
9910 uint64_t reserved_14 : 1;
9911 uint64_t rem_flt : 2; /**< [ 13: 12](R/W/H) Remote fault.
9912 0x0 = Link OK, XMIT = DATA.
9913 0x1 = Link failure (loss of sync, XMIT !=DATA).
9914 0x2 = Local device offline.
9915 0x3 = Autonegotiation error; failure to complete autonegotiation. AN error is set if
9916 resolution function precludes operation with link partner. */
9917 uint64_t reserved_9_11 : 3;
9918 uint64_t pause : 2; /**< [ 8: 7](R/W) PAUSE frame flow capability across link, exchanged during autonegotiation as follows:
9919 0x0 = No PAUSE.
9920 0x1 = Symmetric PAUSE.
9921 0x2 = Asymmetric PAUSE.
9922 0x3 = Both symmetric and asymmetric PAUSE to local device. */
9923 uint64_t hfd : 1; /**< [ 6: 6](R/W) Half-duplex. When set, local device is half-duplex capable. */
9924 uint64_t fd : 1; /**< [ 5: 5](R/W) Full-duplex. When set, local device is full-duplex capable. */
9925 uint64_t reserved_0_4 : 5;
9926 #else /* Word 0 - Little Endian */
9927 uint64_t reserved_0_4 : 5;
9928 uint64_t fd : 1; /**< [ 5: 5](R/W) Full-duplex. When set, local device is full-duplex capable. */
9929 uint64_t hfd : 1; /**< [ 6: 6](R/W) Half-duplex. When set, local device is half-duplex capable. */
9930 uint64_t pause : 2; /**< [ 8: 7](R/W) PAUSE frame flow capability across link, exchanged during autonegotiation as follows:
9931 0x0 = No PAUSE.
9932 0x1 = Symmetric PAUSE.
9933 0x2 = Asymmetric PAUSE.
9934 0x3 = Both symmetric and asymmetric PAUSE to local device. */
9935 uint64_t reserved_9_11 : 3;
9936 uint64_t rem_flt : 2; /**< [ 13: 12](R/W/H) Remote fault.
9937 0x0 = Link OK, XMIT = DATA.
9938 0x1 = Link failure (loss of sync, XMIT !=DATA).
9939 0x2 = Local device offline.
9940 0x3 = Autonegotiation error; failure to complete autonegotiation. AN error is set if
9941 resolution function precludes operation with link partner. */
9942 uint64_t reserved_14 : 1;
9943 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page capable. This feature is not supported; this field is always 0. */
9944 uint64_t reserved_16_63 : 48;
9945 #endif /* Word 0 - End */
9946 } s;
9947 /* struct bdk_bgxx_gmp_pcs_anx_adv_s cn; */
9948 };
9949 typedef union bdk_bgxx_gmp_pcs_anx_adv bdk_bgxx_gmp_pcs_anx_adv_t;
9950
9951 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_ADV(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_ANX_ADV(unsigned long a,unsigned long b)9952 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_ADV(unsigned long a, unsigned long b)
9953 {
9954 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
9955 return 0x87e0e0030010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9956 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
9957 return 0x87e0e0030010ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
9958 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
9959 return 0x87e0e0030010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
9960 __bdk_csr_fatal("BGXX_GMP_PCS_ANX_ADV", 2, a, b, 0, 0);
9961 }
9962
9963 #define typedef_BDK_BGXX_GMP_PCS_ANX_ADV(a,b) bdk_bgxx_gmp_pcs_anx_adv_t
9964 #define bustype_BDK_BGXX_GMP_PCS_ANX_ADV(a,b) BDK_CSR_TYPE_RSL
9965 #define basename_BDK_BGXX_GMP_PCS_ANX_ADV(a,b) "BGXX_GMP_PCS_ANX_ADV"
9966 #define device_bar_BDK_BGXX_GMP_PCS_ANX_ADV(a,b) 0x0 /* PF_BAR0 */
9967 #define busnum_BDK_BGXX_GMP_PCS_ANX_ADV(a,b) (a)
9968 #define arguments_BDK_BGXX_GMP_PCS_ANX_ADV(a,b) (a),(b),-1,-1
9969
9970 /**
9971 * Register (RSL) bgx#_gmp_pcs_an#_ext_st
9972 *
9973 * BGX GMO PCS Autonegotiation Extended Status Registers
9974 */
9975 union bdk_bgxx_gmp_pcs_anx_ext_st
9976 {
9977 uint64_t u;
9978 struct bdk_bgxx_gmp_pcs_anx_ext_st_s
9979 {
9980 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
9981 uint64_t reserved_16_63 : 48;
9982 uint64_t thou_xfd : 1; /**< [ 15: 15](RO/H) When set, PHY is 1000 BASE-X full duplex capable. */
9983 uint64_t thou_xhd : 1; /**< [ 14: 14](RO/H) When set, PHY is 1000 BASE-X half duplex capable. */
9984 uint64_t thou_tfd : 1; /**< [ 13: 13](RO/H) When set, PHY is 1000 BASE-T full duplex capable. */
9985 uint64_t thou_thd : 1; /**< [ 12: 12](RO/H) When set, PHY is 1000 BASE-T half duplex capable. */
9986 uint64_t reserved_0_11 : 12;
9987 #else /* Word 0 - Little Endian */
9988 uint64_t reserved_0_11 : 12;
9989 uint64_t thou_thd : 1; /**< [ 12: 12](RO/H) When set, PHY is 1000 BASE-T half duplex capable. */
9990 uint64_t thou_tfd : 1; /**< [ 13: 13](RO/H) When set, PHY is 1000 BASE-T full duplex capable. */
9991 uint64_t thou_xhd : 1; /**< [ 14: 14](RO/H) When set, PHY is 1000 BASE-X half duplex capable. */
9992 uint64_t thou_xfd : 1; /**< [ 15: 15](RO/H) When set, PHY is 1000 BASE-X full duplex capable. */
9993 uint64_t reserved_16_63 : 48;
9994 #endif /* Word 0 - End */
9995 } s;
9996 /* struct bdk_bgxx_gmp_pcs_anx_ext_st_s cn; */
9997 };
9998 typedef union bdk_bgxx_gmp_pcs_anx_ext_st bdk_bgxx_gmp_pcs_anx_ext_st_t;
9999
10000 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_EXT_ST(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_ANX_EXT_ST(unsigned long a,unsigned long b)10001 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_EXT_ST(unsigned long a, unsigned long b)
10002 {
10003 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10004 return 0x87e0e0030028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10005 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10006 return 0x87e0e0030028ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10007 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10008 return 0x87e0e0030028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10009 __bdk_csr_fatal("BGXX_GMP_PCS_ANX_EXT_ST", 2, a, b, 0, 0);
10010 }
10011
10012 #define typedef_BDK_BGXX_GMP_PCS_ANX_EXT_ST(a,b) bdk_bgxx_gmp_pcs_anx_ext_st_t
10013 #define bustype_BDK_BGXX_GMP_PCS_ANX_EXT_ST(a,b) BDK_CSR_TYPE_RSL
10014 #define basename_BDK_BGXX_GMP_PCS_ANX_EXT_ST(a,b) "BGXX_GMP_PCS_ANX_EXT_ST"
10015 #define device_bar_BDK_BGXX_GMP_PCS_ANX_EXT_ST(a,b) 0x0 /* PF_BAR0 */
10016 #define busnum_BDK_BGXX_GMP_PCS_ANX_EXT_ST(a,b) (a)
10017 #define arguments_BDK_BGXX_GMP_PCS_ANX_EXT_ST(a,b) (a),(b),-1,-1
10018
10019 /**
10020 * Register (RSL) bgx#_gmp_pcs_an#_lp_abil
10021 *
10022 * BGX GMP PCS Autonegotiation Link Partner Ability Registers
10023 * This is the autonegotiation link partner ability register 5 as per IEEE 802.3, Clause 37.
10024 */
10025 union bdk_bgxx_gmp_pcs_anx_lp_abil
10026 {
10027 uint64_t u;
10028 struct bdk_bgxx_gmp_pcs_anx_lp_abil_s
10029 {
10030 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10031 uint64_t reserved_16_63 : 48;
10032 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page capable:
10033 0 = Link partner not next page capable.
10034 1 = Link partner next page capable. */
10035 uint64_t ack : 1; /**< [ 14: 14](RO/H) When set, indicates acknowledgement received. */
10036 uint64_t rem_flt : 2; /**< [ 13: 12](RO/H) Link partner's link status as follows:
10037 0x0 = Link OK.
10038 0x1 = Offline.
10039 0x2 = Link failure.
10040 0x3 = Autonegotiation error. */
10041 uint64_t reserved_9_11 : 3;
10042 uint64_t pause : 2; /**< [ 8: 7](RO/H) Link partner PAUSE setting as follows:
10043 0x0 = No PAUSE.
10044 0x1 = Symmetric PAUSE.
10045 0x2 = Asymmetric PAUSE.
10046 0x3 = Both symmetric and asymmetric PAUSE to local device. */
10047 uint64_t hfd : 1; /**< [ 6: 6](RO/H) Half-duplex. When set, link partner is half-duplex capable. */
10048 uint64_t fd : 1; /**< [ 5: 5](RO/H) Full-duplex. When set, link partner is full-duplex capable. */
10049 uint64_t reserved_0_4 : 5;
10050 #else /* Word 0 - Little Endian */
10051 uint64_t reserved_0_4 : 5;
10052 uint64_t fd : 1; /**< [ 5: 5](RO/H) Full-duplex. When set, link partner is full-duplex capable. */
10053 uint64_t hfd : 1; /**< [ 6: 6](RO/H) Half-duplex. When set, link partner is half-duplex capable. */
10054 uint64_t pause : 2; /**< [ 8: 7](RO/H) Link partner PAUSE setting as follows:
10055 0x0 = No PAUSE.
10056 0x1 = Symmetric PAUSE.
10057 0x2 = Asymmetric PAUSE.
10058 0x3 = Both symmetric and asymmetric PAUSE to local device. */
10059 uint64_t reserved_9_11 : 3;
10060 uint64_t rem_flt : 2; /**< [ 13: 12](RO/H) Link partner's link status as follows:
10061 0x0 = Link OK.
10062 0x1 = Offline.
10063 0x2 = Link failure.
10064 0x3 = Autonegotiation error. */
10065 uint64_t ack : 1; /**< [ 14: 14](RO/H) When set, indicates acknowledgement received. */
10066 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page capable:
10067 0 = Link partner not next page capable.
10068 1 = Link partner next page capable. */
10069 uint64_t reserved_16_63 : 48;
10070 #endif /* Word 0 - End */
10071 } s;
10072 /* struct bdk_bgxx_gmp_pcs_anx_lp_abil_s cn; */
10073 };
10074 typedef union bdk_bgxx_gmp_pcs_anx_lp_abil bdk_bgxx_gmp_pcs_anx_lp_abil_t;
10075
10076 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_LP_ABIL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_ANX_LP_ABIL(unsigned long a,unsigned long b)10077 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_LP_ABIL(unsigned long a, unsigned long b)
10078 {
10079 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10080 return 0x87e0e0030018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10081 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10082 return 0x87e0e0030018ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10083 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10084 return 0x87e0e0030018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10085 __bdk_csr_fatal("BGXX_GMP_PCS_ANX_LP_ABIL", 2, a, b, 0, 0);
10086 }
10087
10088 #define typedef_BDK_BGXX_GMP_PCS_ANX_LP_ABIL(a,b) bdk_bgxx_gmp_pcs_anx_lp_abil_t
10089 #define bustype_BDK_BGXX_GMP_PCS_ANX_LP_ABIL(a,b) BDK_CSR_TYPE_RSL
10090 #define basename_BDK_BGXX_GMP_PCS_ANX_LP_ABIL(a,b) "BGXX_GMP_PCS_ANX_LP_ABIL"
10091 #define device_bar_BDK_BGXX_GMP_PCS_ANX_LP_ABIL(a,b) 0x0 /* PF_BAR0 */
10092 #define busnum_BDK_BGXX_GMP_PCS_ANX_LP_ABIL(a,b) (a)
10093 #define arguments_BDK_BGXX_GMP_PCS_ANX_LP_ABIL(a,b) (a),(b),-1,-1
10094
10095 /**
10096 * Register (RSL) bgx#_gmp_pcs_an#_results
10097 *
10098 * BGX GMP PCS Autonegotiation Results Registers
10099 * This register is not valid when BGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 1. If
10100 * BGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 0 and
10101 * BGX()_GMP_PCS_AN()_RESULTS[AN_CPT] is set to 1, this register is valid.
10102 */
10103 union bdk_bgxx_gmp_pcs_anx_results
10104 {
10105 uint64_t u;
10106 struct bdk_bgxx_gmp_pcs_anx_results_s
10107 {
10108 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10109 uint64_t reserved_7_63 : 57;
10110 uint64_t pause : 2; /**< [ 6: 5](RO/H) PAUSE selection ('don't care' for SGMII/QSGMII) as follows:
10111 0x0 = Disable PAUSE, TX and RX.
10112 0x1 = Enable PAUSE frames, RX only.
10113 0x2 = Enable PAUSE frames, TX only.
10114 0x3 = Enable PAUSE frames, TX and RX. */
10115 uint64_t spd : 2; /**< [ 4: 3](RO/H) Link speed selection as follows:
10116 0x0 = 10 Mb/s.
10117 0x1 = 100 Mb/s.
10118 0x2 = 1000 Mb/s.
10119 0x3 = Reserved. */
10120 uint64_t an_cpt : 1; /**< [ 2: 2](RO/H) Autonegotiation completed.
10121 1 = Autonegotiation completed.
10122 0 = Autonegotiation not completed or failed. */
10123 uint64_t dup : 1; /**< [ 1: 1](RO/H) Duplex mode. 1 = full duplex, 0 = half duplex. */
10124 uint64_t link_ok : 1; /**< [ 0: 0](RO/H) Link status: 1 = link up (OK), 1 = link down. */
10125 #else /* Word 0 - Little Endian */
10126 uint64_t link_ok : 1; /**< [ 0: 0](RO/H) Link status: 1 = link up (OK), 1 = link down. */
10127 uint64_t dup : 1; /**< [ 1: 1](RO/H) Duplex mode. 1 = full duplex, 0 = half duplex. */
10128 uint64_t an_cpt : 1; /**< [ 2: 2](RO/H) Autonegotiation completed.
10129 1 = Autonegotiation completed.
10130 0 = Autonegotiation not completed or failed. */
10131 uint64_t spd : 2; /**< [ 4: 3](RO/H) Link speed selection as follows:
10132 0x0 = 10 Mb/s.
10133 0x1 = 100 Mb/s.
10134 0x2 = 1000 Mb/s.
10135 0x3 = Reserved. */
10136 uint64_t pause : 2; /**< [ 6: 5](RO/H) PAUSE selection ('don't care' for SGMII/QSGMII) as follows:
10137 0x0 = Disable PAUSE, TX and RX.
10138 0x1 = Enable PAUSE frames, RX only.
10139 0x2 = Enable PAUSE frames, TX only.
10140 0x3 = Enable PAUSE frames, TX and RX. */
10141 uint64_t reserved_7_63 : 57;
10142 #endif /* Word 0 - End */
10143 } s;
10144 /* struct bdk_bgxx_gmp_pcs_anx_results_s cn81xx; */
10145 struct bdk_bgxx_gmp_pcs_anx_results_cn88xx
10146 {
10147 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10148 uint64_t reserved_7_63 : 57;
10149 uint64_t pause : 2; /**< [ 6: 5](RO/H) PAUSE selection ('don't care' for SGMII) as follows:
10150 0x0 = Disable PAUSE, TX and RX.
10151 0x1 = Enable PAUSE frames, RX only.
10152 0x2 = Enable PAUSE frames, TX only.
10153 0x3 = Enable PAUSE frames, TX and RX. */
10154 uint64_t spd : 2; /**< [ 4: 3](RO/H) Link speed selection as follows:
10155 0x0 = 10 Mb/s.
10156 0x1 = 100 Mb/s.
10157 0x2 = 1000 Mb/s.
10158 0x3 = Reserved. */
10159 uint64_t an_cpt : 1; /**< [ 2: 2](RO/H) Autonegotiation completed.
10160 1 = Autonegotiation completed.
10161 0 = Autonegotiation not completed or failed. */
10162 uint64_t dup : 1; /**< [ 1: 1](RO/H) Duplex mode. 1 = full duplex, 0 = half duplex. */
10163 uint64_t link_ok : 1; /**< [ 0: 0](RO/H) Link status: 1 = link up (OK), 1 = link down. */
10164 #else /* Word 0 - Little Endian */
10165 uint64_t link_ok : 1; /**< [ 0: 0](RO/H) Link status: 1 = link up (OK), 1 = link down. */
10166 uint64_t dup : 1; /**< [ 1: 1](RO/H) Duplex mode. 1 = full duplex, 0 = half duplex. */
10167 uint64_t an_cpt : 1; /**< [ 2: 2](RO/H) Autonegotiation completed.
10168 1 = Autonegotiation completed.
10169 0 = Autonegotiation not completed or failed. */
10170 uint64_t spd : 2; /**< [ 4: 3](RO/H) Link speed selection as follows:
10171 0x0 = 10 Mb/s.
10172 0x1 = 100 Mb/s.
10173 0x2 = 1000 Mb/s.
10174 0x3 = Reserved. */
10175 uint64_t pause : 2; /**< [ 6: 5](RO/H) PAUSE selection ('don't care' for SGMII) as follows:
10176 0x0 = Disable PAUSE, TX and RX.
10177 0x1 = Enable PAUSE frames, RX only.
10178 0x2 = Enable PAUSE frames, TX only.
10179 0x3 = Enable PAUSE frames, TX and RX. */
10180 uint64_t reserved_7_63 : 57;
10181 #endif /* Word 0 - End */
10182 } cn88xx;
10183 /* struct bdk_bgxx_gmp_pcs_anx_results_s cn83xx; */
10184 };
10185 typedef union bdk_bgxx_gmp_pcs_anx_results bdk_bgxx_gmp_pcs_anx_results_t;
10186
10187 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_RESULTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_ANX_RESULTS(unsigned long a,unsigned long b)10188 static inline uint64_t BDK_BGXX_GMP_PCS_ANX_RESULTS(unsigned long a, unsigned long b)
10189 {
10190 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10191 return 0x87e0e0030020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10192 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10193 return 0x87e0e0030020ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10194 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10195 return 0x87e0e0030020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10196 __bdk_csr_fatal("BGXX_GMP_PCS_ANX_RESULTS", 2, a, b, 0, 0);
10197 }
10198
10199 #define typedef_BDK_BGXX_GMP_PCS_ANX_RESULTS(a,b) bdk_bgxx_gmp_pcs_anx_results_t
10200 #define bustype_BDK_BGXX_GMP_PCS_ANX_RESULTS(a,b) BDK_CSR_TYPE_RSL
10201 #define basename_BDK_BGXX_GMP_PCS_ANX_RESULTS(a,b) "BGXX_GMP_PCS_ANX_RESULTS"
10202 #define device_bar_BDK_BGXX_GMP_PCS_ANX_RESULTS(a,b) 0x0 /* PF_BAR0 */
10203 #define busnum_BDK_BGXX_GMP_PCS_ANX_RESULTS(a,b) (a)
10204 #define arguments_BDK_BGXX_GMP_PCS_ANX_RESULTS(a,b) (a),(b),-1,-1
10205
10206 /**
10207 * Register (RSL) bgx#_gmp_pcs_int#
10208 *
10209 * BGX GMP PCS Interrupt Registers
10210 */
10211 union bdk_bgxx_gmp_pcs_intx
10212 {
10213 uint64_t u;
10214 struct bdk_bgxx_gmp_pcs_intx_s
10215 {
10216 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10217 uint64_t reserved_13_63 : 51;
10218 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1C/H) Code group sync failure debug help. BGX()_GMP_PCS_INT()[DBG_SYNC] interrupt fires when
10219 code group
10220 synchronization state machine makes a transition from SYNC_ACQUIRED_1 state to
10221 SYNC_ACQUIRED_2 state. (See IEEE 802.3-2005, figure 37-9). It indicates that a bad code
10222 group was received after code group synchronization was achieved. This interrupt should be
10223 disabled during normal link operation. Use it as a debug help feature only. */
10224 uint64_t dup : 1; /**< [ 11: 11](R/W1C/H) Set whenever duplex mode changes on the link. */
10225 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1C/H) Set by hardware whenever RX sync state machine reaches a bad state. Should never be set
10226 during normal operation. */
10227 uint64_t an_bad : 1; /**< [ 9: 9](R/W1C/H) Set by hardware whenever autonegotiation state machine reaches a bad state. Should never
10228 be set during normal operation. */
10229 uint64_t rxlock : 1; /**< [ 8: 8](R/W1C/H) Set by hardware whenever code group sync or bit lock failure occurs. Cannot fire in loopback1 mode. */
10230 uint64_t rxbad : 1; /**< [ 7: 7](R/W1C/H) Set by hardware whenever RX state machine reaches a bad state. Should never be set during
10231 normal operation. */
10232 uint64_t rxerr : 1; /**< [ 6: 6](R/W1C/H) Set whenever RX receives a code group error in 10-bit to 8-bit decode logic. Cannot fire
10233 in loopback1 mode. */
10234 uint64_t txbad : 1; /**< [ 5: 5](R/W1C/H) Set by hardware whenever TX state machine reaches a bad state. Should never be set during
10235 normal operation. */
10236 uint64_t txfifo : 1; /**< [ 4: 4](R/W1C/H) Set whenever hardware detects a TX FIFO overflow condition. */
10237 uint64_t txfifu : 1; /**< [ 3: 3](R/W1C/H) Set whenever hardware detects a TX FIFO underflow condition. */
10238 uint64_t an_err : 1; /**< [ 2: 2](R/W1C/H) Autonegotiation error; AN resolution function failed. */
10239 uint64_t xmit : 1; /**< [ 1: 1](R/W1C/H) Set whenever hardware detects a change in the XMIT variable. XMIT variable states are
10240 IDLE, CONFIG and DATA. */
10241 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1C/H) Set by hardware whenever link speed has changed. */
10242 #else /* Word 0 - Little Endian */
10243 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1C/H) Set by hardware whenever link speed has changed. */
10244 uint64_t xmit : 1; /**< [ 1: 1](R/W1C/H) Set whenever hardware detects a change in the XMIT variable. XMIT variable states are
10245 IDLE, CONFIG and DATA. */
10246 uint64_t an_err : 1; /**< [ 2: 2](R/W1C/H) Autonegotiation error; AN resolution function failed. */
10247 uint64_t txfifu : 1; /**< [ 3: 3](R/W1C/H) Set whenever hardware detects a TX FIFO underflow condition. */
10248 uint64_t txfifo : 1; /**< [ 4: 4](R/W1C/H) Set whenever hardware detects a TX FIFO overflow condition. */
10249 uint64_t txbad : 1; /**< [ 5: 5](R/W1C/H) Set by hardware whenever TX state machine reaches a bad state. Should never be set during
10250 normal operation. */
10251 uint64_t rxerr : 1; /**< [ 6: 6](R/W1C/H) Set whenever RX receives a code group error in 10-bit to 8-bit decode logic. Cannot fire
10252 in loopback1 mode. */
10253 uint64_t rxbad : 1; /**< [ 7: 7](R/W1C/H) Set by hardware whenever RX state machine reaches a bad state. Should never be set during
10254 normal operation. */
10255 uint64_t rxlock : 1; /**< [ 8: 8](R/W1C/H) Set by hardware whenever code group sync or bit lock failure occurs. Cannot fire in loopback1 mode. */
10256 uint64_t an_bad : 1; /**< [ 9: 9](R/W1C/H) Set by hardware whenever autonegotiation state machine reaches a bad state. Should never
10257 be set during normal operation. */
10258 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1C/H) Set by hardware whenever RX sync state machine reaches a bad state. Should never be set
10259 during normal operation. */
10260 uint64_t dup : 1; /**< [ 11: 11](R/W1C/H) Set whenever duplex mode changes on the link. */
10261 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1C/H) Code group sync failure debug help. BGX()_GMP_PCS_INT()[DBG_SYNC] interrupt fires when
10262 code group
10263 synchronization state machine makes a transition from SYNC_ACQUIRED_1 state to
10264 SYNC_ACQUIRED_2 state. (See IEEE 802.3-2005, figure 37-9). It indicates that a bad code
10265 group was received after code group synchronization was achieved. This interrupt should be
10266 disabled during normal link operation. Use it as a debug help feature only. */
10267 uint64_t reserved_13_63 : 51;
10268 #endif /* Word 0 - End */
10269 } s;
10270 /* struct bdk_bgxx_gmp_pcs_intx_s cn; */
10271 };
10272 typedef union bdk_bgxx_gmp_pcs_intx bdk_bgxx_gmp_pcs_intx_t;
10273
10274 static inline uint64_t BDK_BGXX_GMP_PCS_INTX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_INTX(unsigned long a,unsigned long b)10275 static inline uint64_t BDK_BGXX_GMP_PCS_INTX(unsigned long a, unsigned long b)
10276 {
10277 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10278 return 0x87e0e0030080ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10279 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10280 return 0x87e0e0030080ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10281 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10282 return 0x87e0e0030080ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10283 __bdk_csr_fatal("BGXX_GMP_PCS_INTX", 2, a, b, 0, 0);
10284 }
10285
10286 #define typedef_BDK_BGXX_GMP_PCS_INTX(a,b) bdk_bgxx_gmp_pcs_intx_t
10287 #define bustype_BDK_BGXX_GMP_PCS_INTX(a,b) BDK_CSR_TYPE_RSL
10288 #define basename_BDK_BGXX_GMP_PCS_INTX(a,b) "BGXX_GMP_PCS_INTX"
10289 #define device_bar_BDK_BGXX_GMP_PCS_INTX(a,b) 0x0 /* PF_BAR0 */
10290 #define busnum_BDK_BGXX_GMP_PCS_INTX(a,b) (a)
10291 #define arguments_BDK_BGXX_GMP_PCS_INTX(a,b) (a),(b),-1,-1
10292
10293 /**
10294 * Register (RSL) bgx#_gmp_pcs_int#_ena_w1c
10295 *
10296 * BGX GMP PCS Interrupt Enable Clear Registers
10297 * This register clears interrupt enable bits.
10298 */
10299 union bdk_bgxx_gmp_pcs_intx_ena_w1c
10300 {
10301 uint64_t u;
10302 struct bdk_bgxx_gmp_pcs_intx_ena_w1c_s
10303 {
10304 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10305 uint64_t reserved_13_63 : 51;
10306 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10307 uint64_t dup : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[DUP]. */
10308 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10309 uint64_t an_bad : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_BAD]. */
10310 uint64_t rxlock : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXLOCK]. */
10311 uint64_t rxbad : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXBAD]. */
10312 uint64_t rxerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXERR]. */
10313 uint64_t txbad : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXBAD]. */
10314 uint64_t txfifo : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFO]. */
10315 uint64_t txfifu : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFU]. */
10316 uint64_t an_err : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_ERR]. */
10317 uint64_t xmit : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[XMIT]. */
10318 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[LNKSPD]. */
10319 #else /* Word 0 - Little Endian */
10320 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[LNKSPD]. */
10321 uint64_t xmit : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[XMIT]. */
10322 uint64_t an_err : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_ERR]. */
10323 uint64_t txfifu : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFU]. */
10324 uint64_t txfifo : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFO]. */
10325 uint64_t txbad : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXBAD]. */
10326 uint64_t rxerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXERR]. */
10327 uint64_t rxbad : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXBAD]. */
10328 uint64_t rxlock : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXLOCK]. */
10329 uint64_t an_bad : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_BAD]. */
10330 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10331 uint64_t dup : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[DUP]. */
10332 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10333 uint64_t reserved_13_63 : 51;
10334 #endif /* Word 0 - End */
10335 } s;
10336 /* struct bdk_bgxx_gmp_pcs_intx_ena_w1c_s cn81xx; */
10337 /* struct bdk_bgxx_gmp_pcs_intx_ena_w1c_s cn88xx; */
10338 struct bdk_bgxx_gmp_pcs_intx_ena_w1c_cn83xx
10339 {
10340 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10341 uint64_t reserved_13_63 : 51;
10342 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10343 uint64_t dup : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[DUP]. */
10344 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10345 uint64_t an_bad : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_BAD]. */
10346 uint64_t rxlock : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXLOCK]. */
10347 uint64_t rxbad : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXBAD]. */
10348 uint64_t rxerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXERR]. */
10349 uint64_t txbad : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXBAD]. */
10350 uint64_t txfifo : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFO]. */
10351 uint64_t txfifu : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFU]. */
10352 uint64_t an_err : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_ERR]. */
10353 uint64_t xmit : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[XMIT]. */
10354 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[LNKSPD]. */
10355 #else /* Word 0 - Little Endian */
10356 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[LNKSPD]. */
10357 uint64_t xmit : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[XMIT]. */
10358 uint64_t an_err : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_ERR]. */
10359 uint64_t txfifu : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFU]. */
10360 uint64_t txfifo : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFO]. */
10361 uint64_t txbad : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXBAD]. */
10362 uint64_t rxerr : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXERR]. */
10363 uint64_t rxbad : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXBAD]. */
10364 uint64_t rxlock : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXLOCK]. */
10365 uint64_t an_bad : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_BAD]. */
10366 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10367 uint64_t dup : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[DUP]. */
10368 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..3)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10369 uint64_t reserved_13_63 : 51;
10370 #endif /* Word 0 - End */
10371 } cn83xx;
10372 };
10373 typedef union bdk_bgxx_gmp_pcs_intx_ena_w1c bdk_bgxx_gmp_pcs_intx_ena_w1c_t;
10374
10375 static inline uint64_t BDK_BGXX_GMP_PCS_INTX_ENA_W1C(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_INTX_ENA_W1C(unsigned long a,unsigned long b)10376 static inline uint64_t BDK_BGXX_GMP_PCS_INTX_ENA_W1C(unsigned long a, unsigned long b)
10377 {
10378 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10379 return 0x87e0e0030090ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10380 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10381 return 0x87e0e0030090ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10382 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10383 return 0x87e0e0030090ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10384 __bdk_csr_fatal("BGXX_GMP_PCS_INTX_ENA_W1C", 2, a, b, 0, 0);
10385 }
10386
10387 #define typedef_BDK_BGXX_GMP_PCS_INTX_ENA_W1C(a,b) bdk_bgxx_gmp_pcs_intx_ena_w1c_t
10388 #define bustype_BDK_BGXX_GMP_PCS_INTX_ENA_W1C(a,b) BDK_CSR_TYPE_RSL
10389 #define basename_BDK_BGXX_GMP_PCS_INTX_ENA_W1C(a,b) "BGXX_GMP_PCS_INTX_ENA_W1C"
10390 #define device_bar_BDK_BGXX_GMP_PCS_INTX_ENA_W1C(a,b) 0x0 /* PF_BAR0 */
10391 #define busnum_BDK_BGXX_GMP_PCS_INTX_ENA_W1C(a,b) (a)
10392 #define arguments_BDK_BGXX_GMP_PCS_INTX_ENA_W1C(a,b) (a),(b),-1,-1
10393
10394 /**
10395 * Register (RSL) bgx#_gmp_pcs_int#_ena_w1s
10396 *
10397 * BGX GMP PCS Interrupt Enable Set Registers
10398 * This register sets interrupt enable bits.
10399 */
10400 union bdk_bgxx_gmp_pcs_intx_ena_w1s
10401 {
10402 uint64_t u;
10403 struct bdk_bgxx_gmp_pcs_intx_ena_w1s_s
10404 {
10405 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10406 uint64_t reserved_13_63 : 51;
10407 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10408 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[DUP]. */
10409 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10410 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_BAD]. */
10411 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXLOCK]. */
10412 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXBAD]. */
10413 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXERR]. */
10414 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXBAD]. */
10415 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFO]. */
10416 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFU]. */
10417 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_ERR]. */
10418 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[XMIT]. */
10419 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[LNKSPD]. */
10420 #else /* Word 0 - Little Endian */
10421 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[LNKSPD]. */
10422 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[XMIT]. */
10423 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_ERR]. */
10424 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFU]. */
10425 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFO]. */
10426 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[TXBAD]. */
10427 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXERR]. */
10428 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXBAD]. */
10429 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[RXLOCK]. */
10430 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[AN_BAD]. */
10431 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10432 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[DUP]. */
10433 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10434 uint64_t reserved_13_63 : 51;
10435 #endif /* Word 0 - End */
10436 } s;
10437 /* struct bdk_bgxx_gmp_pcs_intx_ena_w1s_s cn81xx; */
10438 /* struct bdk_bgxx_gmp_pcs_intx_ena_w1s_s cn88xx; */
10439 struct bdk_bgxx_gmp_pcs_intx_ena_w1s_cn83xx
10440 {
10441 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10442 uint64_t reserved_13_63 : 51;
10443 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10444 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[DUP]. */
10445 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10446 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_BAD]. */
10447 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXLOCK]. */
10448 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXBAD]. */
10449 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXERR]. */
10450 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXBAD]. */
10451 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFO]. */
10452 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFU]. */
10453 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_ERR]. */
10454 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[XMIT]. */
10455 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[LNKSPD]. */
10456 #else /* Word 0 - Little Endian */
10457 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[LNKSPD]. */
10458 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[XMIT]. */
10459 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_ERR]. */
10460 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFU]. */
10461 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFO]. */
10462 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[TXBAD]. */
10463 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXERR]. */
10464 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXBAD]. */
10465 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[RXLOCK]. */
10466 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[AN_BAD]. */
10467 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10468 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[DUP]. */
10469 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..3)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10470 uint64_t reserved_13_63 : 51;
10471 #endif /* Word 0 - End */
10472 } cn83xx;
10473 };
10474 typedef union bdk_bgxx_gmp_pcs_intx_ena_w1s bdk_bgxx_gmp_pcs_intx_ena_w1s_t;
10475
10476 static inline uint64_t BDK_BGXX_GMP_PCS_INTX_ENA_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_INTX_ENA_W1S(unsigned long a,unsigned long b)10477 static inline uint64_t BDK_BGXX_GMP_PCS_INTX_ENA_W1S(unsigned long a, unsigned long b)
10478 {
10479 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10480 return 0x87e0e0030098ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10481 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10482 return 0x87e0e0030098ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10483 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10484 return 0x87e0e0030098ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10485 __bdk_csr_fatal("BGXX_GMP_PCS_INTX_ENA_W1S", 2, a, b, 0, 0);
10486 }
10487
10488 #define typedef_BDK_BGXX_GMP_PCS_INTX_ENA_W1S(a,b) bdk_bgxx_gmp_pcs_intx_ena_w1s_t
10489 #define bustype_BDK_BGXX_GMP_PCS_INTX_ENA_W1S(a,b) BDK_CSR_TYPE_RSL
10490 #define basename_BDK_BGXX_GMP_PCS_INTX_ENA_W1S(a,b) "BGXX_GMP_PCS_INTX_ENA_W1S"
10491 #define device_bar_BDK_BGXX_GMP_PCS_INTX_ENA_W1S(a,b) 0x0 /* PF_BAR0 */
10492 #define busnum_BDK_BGXX_GMP_PCS_INTX_ENA_W1S(a,b) (a)
10493 #define arguments_BDK_BGXX_GMP_PCS_INTX_ENA_W1S(a,b) (a),(b),-1,-1
10494
10495 /**
10496 * Register (RSL) bgx#_gmp_pcs_int#_w1s
10497 *
10498 * BGX GMP PCS Interrupt Set Registers
10499 * This register sets interrupt bits.
10500 */
10501 union bdk_bgxx_gmp_pcs_intx_w1s
10502 {
10503 uint64_t u;
10504 struct bdk_bgxx_gmp_pcs_intx_w1s_s
10505 {
10506 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10507 uint64_t reserved_13_63 : 51;
10508 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10509 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[DUP]. */
10510 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10511 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[AN_BAD]. */
10512 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[RXLOCK]. */
10513 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[RXBAD]. */
10514 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[RXERR]. */
10515 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[TXBAD]. */
10516 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFO]. */
10517 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFU]. */
10518 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[AN_ERR]. */
10519 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[XMIT]. */
10520 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[LNKSPD]. */
10521 #else /* Word 0 - Little Endian */
10522 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[LNKSPD]. */
10523 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[XMIT]. */
10524 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[AN_ERR]. */
10525 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFU]. */
10526 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[TXFIFO]. */
10527 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[TXBAD]. */
10528 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[RXERR]. */
10529 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[RXBAD]. */
10530 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[RXLOCK]. */
10531 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[AN_BAD]. */
10532 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10533 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[DUP]. */
10534 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10535 uint64_t reserved_13_63 : 51;
10536 #endif /* Word 0 - End */
10537 } s;
10538 /* struct bdk_bgxx_gmp_pcs_intx_w1s_s cn81xx; */
10539 /* struct bdk_bgxx_gmp_pcs_intx_w1s_s cn88xx; */
10540 struct bdk_bgxx_gmp_pcs_intx_w1s_cn83xx
10541 {
10542 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10543 uint64_t reserved_13_63 : 51;
10544 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10545 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[DUP]. */
10546 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10547 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[AN_BAD]. */
10548 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[RXLOCK]. */
10549 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[RXBAD]. */
10550 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[RXERR]. */
10551 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[TXBAD]. */
10552 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFO]. */
10553 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFU]. */
10554 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[AN_ERR]. */
10555 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[XMIT]. */
10556 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[LNKSPD]. */
10557 #else /* Word 0 - Little Endian */
10558 uint64_t lnkspd : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[LNKSPD]. */
10559 uint64_t xmit : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[XMIT]. */
10560 uint64_t an_err : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[AN_ERR]. */
10561 uint64_t txfifu : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFU]. */
10562 uint64_t txfifo : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[TXFIFO]. */
10563 uint64_t txbad : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[TXBAD]. */
10564 uint64_t rxerr : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[RXERR]. */
10565 uint64_t rxbad : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[RXBAD]. */
10566 uint64_t rxlock : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[RXLOCK]. */
10567 uint64_t an_bad : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[AN_BAD]. */
10568 uint64_t sync_bad : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[SYNC_BAD]. */
10569 uint64_t dup : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[DUP]. */
10570 uint64_t dbg_sync : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..3)_GMP_PCS_INT(0..3)[DBG_SYNC]. */
10571 uint64_t reserved_13_63 : 51;
10572 #endif /* Word 0 - End */
10573 } cn83xx;
10574 };
10575 typedef union bdk_bgxx_gmp_pcs_intx_w1s bdk_bgxx_gmp_pcs_intx_w1s_t;
10576
10577 static inline uint64_t BDK_BGXX_GMP_PCS_INTX_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_INTX_W1S(unsigned long a,unsigned long b)10578 static inline uint64_t BDK_BGXX_GMP_PCS_INTX_W1S(unsigned long a, unsigned long b)
10579 {
10580 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10581 return 0x87e0e0030088ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10582 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10583 return 0x87e0e0030088ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10584 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10585 return 0x87e0e0030088ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10586 __bdk_csr_fatal("BGXX_GMP_PCS_INTX_W1S", 2, a, b, 0, 0);
10587 }
10588
10589 #define typedef_BDK_BGXX_GMP_PCS_INTX_W1S(a,b) bdk_bgxx_gmp_pcs_intx_w1s_t
10590 #define bustype_BDK_BGXX_GMP_PCS_INTX_W1S(a,b) BDK_CSR_TYPE_RSL
10591 #define basename_BDK_BGXX_GMP_PCS_INTX_W1S(a,b) "BGXX_GMP_PCS_INTX_W1S"
10592 #define device_bar_BDK_BGXX_GMP_PCS_INTX_W1S(a,b) 0x0 /* PF_BAR0 */
10593 #define busnum_BDK_BGXX_GMP_PCS_INTX_W1S(a,b) (a)
10594 #define arguments_BDK_BGXX_GMP_PCS_INTX_W1S(a,b) (a),(b),-1,-1
10595
10596 /**
10597 * Register (RSL) bgx#_gmp_pcs_link#_timer
10598 *
10599 * BGX GMP PCS Link Timer Registers
10600 * This is the 1.6 ms nominal link timer register.
10601 */
10602 union bdk_bgxx_gmp_pcs_linkx_timer
10603 {
10604 uint64_t u;
10605 struct bdk_bgxx_gmp_pcs_linkx_timer_s
10606 {
10607 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10608 uint64_t reserved_16_63 : 48;
10609 uint64_t count : 16; /**< [ 15: 0](R/W) (Coprocessor clock period * 1024) * [COUNT] should be 1.6 ms for SGMII/QSGMII and 10 ms
10610 otherwise,
10611 which is the link timer used in autonegotiation. Reset assumes a 700 MHz coprocessor
10612 clock for 1.6 ms link timer. */
10613 #else /* Word 0 - Little Endian */
10614 uint64_t count : 16; /**< [ 15: 0](R/W) (Coprocessor clock period * 1024) * [COUNT] should be 1.6 ms for SGMII/QSGMII and 10 ms
10615 otherwise,
10616 which is the link timer used in autonegotiation. Reset assumes a 700 MHz coprocessor
10617 clock for 1.6 ms link timer. */
10618 uint64_t reserved_16_63 : 48;
10619 #endif /* Word 0 - End */
10620 } s;
10621 /* struct bdk_bgxx_gmp_pcs_linkx_timer_s cn81xx; */
10622 struct bdk_bgxx_gmp_pcs_linkx_timer_cn88xx
10623 {
10624 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10625 uint64_t reserved_16_63 : 48;
10626 uint64_t count : 16; /**< [ 15: 0](R/W) (Coprocessor clock period * 1024) * COUNT should be 1.6 ms for SGMII and 10 ms otherwise,
10627 which is the link timer used in autonegotiation. Reset assumes a 700 MHz coprocessor
10628 clock for 1.6 ms link timer. */
10629 #else /* Word 0 - Little Endian */
10630 uint64_t count : 16; /**< [ 15: 0](R/W) (Coprocessor clock period * 1024) * COUNT should be 1.6 ms for SGMII and 10 ms otherwise,
10631 which is the link timer used in autonegotiation. Reset assumes a 700 MHz coprocessor
10632 clock for 1.6 ms link timer. */
10633 uint64_t reserved_16_63 : 48;
10634 #endif /* Word 0 - End */
10635 } cn88xx;
10636 /* struct bdk_bgxx_gmp_pcs_linkx_timer_s cn83xx; */
10637 };
10638 typedef union bdk_bgxx_gmp_pcs_linkx_timer bdk_bgxx_gmp_pcs_linkx_timer_t;
10639
10640 static inline uint64_t BDK_BGXX_GMP_PCS_LINKX_TIMER(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_LINKX_TIMER(unsigned long a,unsigned long b)10641 static inline uint64_t BDK_BGXX_GMP_PCS_LINKX_TIMER(unsigned long a, unsigned long b)
10642 {
10643 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10644 return 0x87e0e0030040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10645 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10646 return 0x87e0e0030040ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10647 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10648 return 0x87e0e0030040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10649 __bdk_csr_fatal("BGXX_GMP_PCS_LINKX_TIMER", 2, a, b, 0, 0);
10650 }
10651
10652 #define typedef_BDK_BGXX_GMP_PCS_LINKX_TIMER(a,b) bdk_bgxx_gmp_pcs_linkx_timer_t
10653 #define bustype_BDK_BGXX_GMP_PCS_LINKX_TIMER(a,b) BDK_CSR_TYPE_RSL
10654 #define basename_BDK_BGXX_GMP_PCS_LINKX_TIMER(a,b) "BGXX_GMP_PCS_LINKX_TIMER"
10655 #define device_bar_BDK_BGXX_GMP_PCS_LINKX_TIMER(a,b) 0x0 /* PF_BAR0 */
10656 #define busnum_BDK_BGXX_GMP_PCS_LINKX_TIMER(a,b) (a)
10657 #define arguments_BDK_BGXX_GMP_PCS_LINKX_TIMER(a,b) (a),(b),-1,-1
10658
10659 /**
10660 * Register (RSL) bgx#_gmp_pcs_misc#_ctl
10661 *
10662 * BGX GMP SGMII Miscellaneous Control Registers
10663 * Internal:
10664 * SGMII bit [12] is really a misnomer, it is a decode of pi_qlm_cfg pins to indicate SGMII or
10665 * 1000Base-X modes.
10666 *
10667 * Note: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if
10668 * [MAC_PHY] is set (1=PHY mode). If the bit is not set (0=MAC mode), the
10669 * tx_Config_Reg\<14\> becomes ACK bit and tx_Config_Reg\<0\> is always 1.
10670 * All other bits in tx_Config_Reg sent will be 0. The PHY dictates the Auto Negotiation results.
10671 */
10672 union bdk_bgxx_gmp_pcs_miscx_ctl
10673 {
10674 uint64_t u;
10675 struct bdk_bgxx_gmp_pcs_miscx_ctl_s
10676 {
10677 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10678 uint64_t reserved_33_63 : 31;
10679 uint64_t qsgmii_comma_wd_en : 1; /**< [ 32: 32](R/W) QSGMII comma watchdog byte counter enable. */
10680 uint64_t qsgmii_comma_wd : 16; /**< [ 31: 16](R/W) QSGMII comma watchdog byte counter. This counter is used in QSGMII mode and
10681 counts incoming bytes to ensure state transitions in the PCS receive side state
10682 machine when disparity enable is turned off and bad code groups and commas are
10683 not communicated from the code group processor after code group lock. */
10684 uint64_t reserved_14_15 : 2;
10685 uint64_t disp_en : 1; /**< [ 13: 13](R/W) Disparity check enable. When LMAC_TYPE=QSGMII the running disparity check should be
10686 disabled
10687 to
10688 prevent propogation across ports.
10689 0 = disable disparity check
10690 1 = enable disparity checking
10691
10692 See GSER()_LANE_MODE[LMODE]. */
10693 uint64_t sgmii : 1; /**< [ 12: 12](RO/H) Reserved. Always 1. */
10694 uint64_t gmxeno : 1; /**< [ 11: 11](R/W) GMI enable override. When set, forces GMI to appear disabled. The enable/disable status of
10695 GMI is checked only at SOP of every packet. */
10696 uint64_t loopbck2 : 1; /**< [ 10: 10](R/W) Sets external loopback mode to return RX data back out via the TX data path. 0 = No
10697 loopback. 1 = Loopback.
10698 LOOPBCK1 and LOOPBCK2 modes may not be supported simultaneously. */
10699 uint64_t mac_phy : 1; /**< [ 9: 9](R/W) MAC/PHY.
10700 0 = MAC.
10701 1 = PHY decides the tx_Config_Reg value to be sent during autonegotiation. */
10702 uint64_t mode : 1; /**< [ 8: 8](R/W) Mode bit.
10703
10704 _ 0 = SGMII mode is selected and the following note applies.
10705 The SGMII AN advertisement register (BGX()_GMP_PCS_SGM()_AN_ADV) is sent during
10706 autonegotiation if BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] = 1 (PHY mode). If [MAC_PHY]
10707 = 0 (MAC mode), the tx_Config_Reg\<14\> becomes ACK bit and \<0\> is always 1. All other bits
10708 in tx_Config_Reg sent are 0. The PHY dictates the autonegotiation results.
10709
10710 _ 1 = 1000Base-X mode is selected. Autonegotiation follows IEEE 802.3 clause 37. */
10711 uint64_t an_ovrd : 1; /**< [ 7: 7](R/W) Autonegotiation results override:
10712 0 = Disable.
10713 1 = Enable override. Autonegotiation is allowed to happen but the results are ignored
10714 when this bit is set. Duplex and Link speed values are set from BGX()_GMP_PCS_MISC()_CTL. */
10715 uint64_t samp_pt : 7; /**< [ 6: 0](R/W) Byte number in elongated frames for 10/100 Mb/s operation for data sampling on RX side in
10716 PCS. Recommended values are 0x5 for 100 Mb/s operation and 0x32 for 10 Mb/s operation.
10717
10718 For 10 Mb/s operation, this field should be set to a value less than 99 and greater than
10719 0.
10720 If set out of this range, a value of 50 is used for actual sampling internally without
10721 affecting the CSR field.
10722
10723 For 100 Mb/s operation this field should be set to a value less than 9 and greater than 0.
10724 If set out of this range, a value of 5 is used for actual sampling internally without
10725 affecting the CSR field. */
10726 #else /* Word 0 - Little Endian */
10727 uint64_t samp_pt : 7; /**< [ 6: 0](R/W) Byte number in elongated frames for 10/100 Mb/s operation for data sampling on RX side in
10728 PCS. Recommended values are 0x5 for 100 Mb/s operation and 0x32 for 10 Mb/s operation.
10729
10730 For 10 Mb/s operation, this field should be set to a value less than 99 and greater than
10731 0.
10732 If set out of this range, a value of 50 is used for actual sampling internally without
10733 affecting the CSR field.
10734
10735 For 100 Mb/s operation this field should be set to a value less than 9 and greater than 0.
10736 If set out of this range, a value of 5 is used for actual sampling internally without
10737 affecting the CSR field. */
10738 uint64_t an_ovrd : 1; /**< [ 7: 7](R/W) Autonegotiation results override:
10739 0 = Disable.
10740 1 = Enable override. Autonegotiation is allowed to happen but the results are ignored
10741 when this bit is set. Duplex and Link speed values are set from BGX()_GMP_PCS_MISC()_CTL. */
10742 uint64_t mode : 1; /**< [ 8: 8](R/W) Mode bit.
10743
10744 _ 0 = SGMII mode is selected and the following note applies.
10745 The SGMII AN advertisement register (BGX()_GMP_PCS_SGM()_AN_ADV) is sent during
10746 autonegotiation if BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] = 1 (PHY mode). If [MAC_PHY]
10747 = 0 (MAC mode), the tx_Config_Reg\<14\> becomes ACK bit and \<0\> is always 1. All other bits
10748 in tx_Config_Reg sent are 0. The PHY dictates the autonegotiation results.
10749
10750 _ 1 = 1000Base-X mode is selected. Autonegotiation follows IEEE 802.3 clause 37. */
10751 uint64_t mac_phy : 1; /**< [ 9: 9](R/W) MAC/PHY.
10752 0 = MAC.
10753 1 = PHY decides the tx_Config_Reg value to be sent during autonegotiation. */
10754 uint64_t loopbck2 : 1; /**< [ 10: 10](R/W) Sets external loopback mode to return RX data back out via the TX data path. 0 = No
10755 loopback. 1 = Loopback.
10756 LOOPBCK1 and LOOPBCK2 modes may not be supported simultaneously. */
10757 uint64_t gmxeno : 1; /**< [ 11: 11](R/W) GMI enable override. When set, forces GMI to appear disabled. The enable/disable status of
10758 GMI is checked only at SOP of every packet. */
10759 uint64_t sgmii : 1; /**< [ 12: 12](RO/H) Reserved. Always 1. */
10760 uint64_t disp_en : 1; /**< [ 13: 13](R/W) Disparity check enable. When LMAC_TYPE=QSGMII the running disparity check should be
10761 disabled
10762 to
10763 prevent propogation across ports.
10764 0 = disable disparity check
10765 1 = enable disparity checking
10766
10767 See GSER()_LANE_MODE[LMODE]. */
10768 uint64_t reserved_14_15 : 2;
10769 uint64_t qsgmii_comma_wd : 16; /**< [ 31: 16](R/W) QSGMII comma watchdog byte counter. This counter is used in QSGMII mode and
10770 counts incoming bytes to ensure state transitions in the PCS receive side state
10771 machine when disparity enable is turned off and bad code groups and commas are
10772 not communicated from the code group processor after code group lock. */
10773 uint64_t qsgmii_comma_wd_en : 1; /**< [ 32: 32](R/W) QSGMII comma watchdog byte counter enable. */
10774 uint64_t reserved_33_63 : 31;
10775 #endif /* Word 0 - End */
10776 } s;
10777 /* struct bdk_bgxx_gmp_pcs_miscx_ctl_s cn81xx; */
10778 struct bdk_bgxx_gmp_pcs_miscx_ctl_cn88xx
10779 {
10780 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10781 uint64_t reserved_13_63 : 51;
10782 uint64_t sgmii : 1; /**< [ 12: 12](RO/H) Reserved. Always 1. */
10783 uint64_t gmxeno : 1; /**< [ 11: 11](R/W) GMI enable override. When set, forces GMI to appear disabled. The enable/disable status of
10784 GMI is checked only at SOP of every packet. */
10785 uint64_t loopbck2 : 1; /**< [ 10: 10](R/W) Sets external loopback mode to return RX data back out via the TX data path. 0 = No
10786 loopback. 1 = Loopback.
10787 LOOPBCK1 and LOOPBCK2 modes may not be supported simultaneously. */
10788 uint64_t mac_phy : 1; /**< [ 9: 9](R/W) MAC/PHY.
10789 0 = MAC.
10790 1 = PHY decides the tx_Config_Reg value to be sent during autonegotiation. */
10791 uint64_t mode : 1; /**< [ 8: 8](R/W) Mode bit.
10792
10793 _ 0 = SGMII mode is selected and the following note applies.
10794 The SGMII AN advertisement register (BGX()_GMP_PCS_SGM()_AN_ADV) is sent during
10795 autonegotiation if BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] = 1 (PHY mode). If [MAC_PHY]
10796 = 0 (MAC mode), the tx_Config_Reg\<14\> becomes ACK bit and \<0\> is always 1. All other bits
10797 in tx_Config_Reg sent are 0. The PHY dictates the autonegotiation results.
10798
10799 _ 1 = 1000Base-X mode is selected. Autonegotiation follows IEEE 802.3 clause 37. */
10800 uint64_t an_ovrd : 1; /**< [ 7: 7](R/W) Autonegotiation results override:
10801 0 = Disable.
10802 1 = Enable override. Autonegotiation is allowed to happen but the results are ignored
10803 when this bit is set. Duplex and Link speed values are set from BGX()_GMP_PCS_MISC()_CTL. */
10804 uint64_t samp_pt : 7; /**< [ 6: 0](R/W) Byte number in elongated frames for 10/100 Mb/s operation for data sampling on RX side in
10805 PCS. Recommended values are 0x5 for 100 Mb/s operation and 0x32 for 10 Mb/s operation.
10806
10807 For 10 Mb/s operation, this field should be set to a value less than 99 and greater than
10808 0.
10809 If set out of this range, a value of 50 is used for actual sampling internally without
10810 affecting the CSR field.
10811
10812 For 100 Mb/s operation this field should be set to a value less than 9 and greater than 0.
10813 If set out of this range, a value of 5 is used for actual sampling internally without
10814 affecting the CSR field. */
10815 #else /* Word 0 - Little Endian */
10816 uint64_t samp_pt : 7; /**< [ 6: 0](R/W) Byte number in elongated frames for 10/100 Mb/s operation for data sampling on RX side in
10817 PCS. Recommended values are 0x5 for 100 Mb/s operation and 0x32 for 10 Mb/s operation.
10818
10819 For 10 Mb/s operation, this field should be set to a value less than 99 and greater than
10820 0.
10821 If set out of this range, a value of 50 is used for actual sampling internally without
10822 affecting the CSR field.
10823
10824 For 100 Mb/s operation this field should be set to a value less than 9 and greater than 0.
10825 If set out of this range, a value of 5 is used for actual sampling internally without
10826 affecting the CSR field. */
10827 uint64_t an_ovrd : 1; /**< [ 7: 7](R/W) Autonegotiation results override:
10828 0 = Disable.
10829 1 = Enable override. Autonegotiation is allowed to happen but the results are ignored
10830 when this bit is set. Duplex and Link speed values are set from BGX()_GMP_PCS_MISC()_CTL. */
10831 uint64_t mode : 1; /**< [ 8: 8](R/W) Mode bit.
10832
10833 _ 0 = SGMII mode is selected and the following note applies.
10834 The SGMII AN advertisement register (BGX()_GMP_PCS_SGM()_AN_ADV) is sent during
10835 autonegotiation if BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] = 1 (PHY mode). If [MAC_PHY]
10836 = 0 (MAC mode), the tx_Config_Reg\<14\> becomes ACK bit and \<0\> is always 1. All other bits
10837 in tx_Config_Reg sent are 0. The PHY dictates the autonegotiation results.
10838
10839 _ 1 = 1000Base-X mode is selected. Autonegotiation follows IEEE 802.3 clause 37. */
10840 uint64_t mac_phy : 1; /**< [ 9: 9](R/W) MAC/PHY.
10841 0 = MAC.
10842 1 = PHY decides the tx_Config_Reg value to be sent during autonegotiation. */
10843 uint64_t loopbck2 : 1; /**< [ 10: 10](R/W) Sets external loopback mode to return RX data back out via the TX data path. 0 = No
10844 loopback. 1 = Loopback.
10845 LOOPBCK1 and LOOPBCK2 modes may not be supported simultaneously. */
10846 uint64_t gmxeno : 1; /**< [ 11: 11](R/W) GMI enable override. When set, forces GMI to appear disabled. The enable/disable status of
10847 GMI is checked only at SOP of every packet. */
10848 uint64_t sgmii : 1; /**< [ 12: 12](RO/H) Reserved. Always 1. */
10849 uint64_t reserved_13_63 : 51;
10850 #endif /* Word 0 - End */
10851 } cn88xx;
10852 /* struct bdk_bgxx_gmp_pcs_miscx_ctl_s cn83xx; */
10853 };
10854 typedef union bdk_bgxx_gmp_pcs_miscx_ctl bdk_bgxx_gmp_pcs_miscx_ctl_t;
10855
10856 static inline uint64_t BDK_BGXX_GMP_PCS_MISCX_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_MISCX_CTL(unsigned long a,unsigned long b)10857 static inline uint64_t BDK_BGXX_GMP_PCS_MISCX_CTL(unsigned long a, unsigned long b)
10858 {
10859 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
10860 return 0x87e0e0030078ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10861 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
10862 return 0x87e0e0030078ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
10863 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
10864 return 0x87e0e0030078ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
10865 __bdk_csr_fatal("BGXX_GMP_PCS_MISCX_CTL", 2, a, b, 0, 0);
10866 }
10867
10868 #define typedef_BDK_BGXX_GMP_PCS_MISCX_CTL(a,b) bdk_bgxx_gmp_pcs_miscx_ctl_t
10869 #define bustype_BDK_BGXX_GMP_PCS_MISCX_CTL(a,b) BDK_CSR_TYPE_RSL
10870 #define basename_BDK_BGXX_GMP_PCS_MISCX_CTL(a,b) "BGXX_GMP_PCS_MISCX_CTL"
10871 #define device_bar_BDK_BGXX_GMP_PCS_MISCX_CTL(a,b) 0x0 /* PF_BAR0 */
10872 #define busnum_BDK_BGXX_GMP_PCS_MISCX_CTL(a,b) (a)
10873 #define arguments_BDK_BGXX_GMP_PCS_MISCX_CTL(a,b) (a),(b),-1,-1
10874
10875 /**
10876 * Register (RSL) bgx#_gmp_pcs_mr#_control
10877 *
10878 * BGX GMP PCS Control Registers
10879 */
10880 union bdk_bgxx_gmp_pcs_mrx_control
10881 {
10882 uint64_t u;
10883 struct bdk_bgxx_gmp_pcs_mrx_control_s
10884 {
10885 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10886 uint64_t reserved_16_63 : 48;
10887 uint64_t reset : 1; /**< [ 15: 15](R/W/H) Set to reset.
10888 0 = Normal operation.
10889 1 = Software PCS reset.
10890
10891 The bit returns to 0 after PCS has been reset. Takes 32 coprocessor-clock cycles to reset
10892 PCS. This bit, when set, also drains the tx gmi fifo and can be used as a fifo draining
10893 mechanism for both SerDes reset conditions and for XCV reset conditions. */
10894 uint64_t loopbck1 : 1; /**< [ 14: 14](R/W) Enable loopback:
10895 0 = Normal operation.
10896 1 = Internal loopback mode.
10897
10898 The loopback mode returns loopback TX data from GMII TX back to GMII RX interface. The
10899 loopback happens in the PCS module. Autonegotiation is disabled even if [AN_EN] is set
10900 during loopback. */
10901 uint64_t spdlsb : 1; /**< [ 13: 13](R/W) Least-significant bit of the link-speed field, i.e. SPD\<0\>. Refer to SPDMSB. */
10902 uint64_t an_en : 1; /**< [ 12: 12](R/W) Autonegotiation enable. */
10903 uint64_t pwr_dn : 1; /**< [ 11: 11](R/W) Power down:
10904 0 = Normal operation.
10905 1 = Power down (hardware reset). */
10906 uint64_t reserved_10 : 1;
10907 uint64_t rst_an : 1; /**< [ 9: 9](R/W/H) Reset autonegotiation. When set, if [AN_EN] = 1 and
10908 BGX()_GMP_PCS_MR()_STATUS[AN_ABIL] = 1, autonegotiation begins. Otherwise,
10909 software write requests are ignored and this bit remains at 0. This bit clears itself to
10910 0, when autonegotiation starts. */
10911 uint64_t dup : 1; /**< [ 8: 8](R/W) Duplex mode:
10912 0 = half duplex; effective only if autonegotiation is disabled.
10913 1 = full duplex.
10914
10915 If BGX()_GMP_PCS_MR()_STATUS \<15:9\> and
10916 BGX()_GMP_PCS_AN()_ADV\<15:12\> allow only one duplex mode, this bit corresponds to
10917 that value and any attempts to write are ignored. */
10918 uint64_t coltst : 1; /**< [ 7: 7](R/W) Enable COL signal test.
10919 During COL test, the COL signal reflects the GMII TX_EN signal with less than 16BT delay. */
10920 uint64_t spdmsb : 1; /**< [ 6: 6](R/W) Link speed most-significant bit, i.e SPD\<1\>; effective only if autonegotiation is
10921 disabled.
10922
10923 \<pre\>
10924 [SPDMSB] [SPDLSB] Link Speed
10925 0 0 10 Mb/s
10926 0 1 100 Mb/s
10927 1 0 1000 Mb/s
10928 1 1 reserved
10929 \</pre\> */
10930 uint64_t uni : 1; /**< [ 5: 5](R/W) Unidirectional (IEEE 802.3-2005, Clause 66.2). When set to 1, this bit overrides [AN_EN]
10931 and
10932 disables the autonegotiation variable mr_an_enable. Used in both 1000BASE-X and
10933 SGMII/QSGMII
10934 modes. */
10935 uint64_t reserved_0_4 : 5;
10936 #else /* Word 0 - Little Endian */
10937 uint64_t reserved_0_4 : 5;
10938 uint64_t uni : 1; /**< [ 5: 5](R/W) Unidirectional (IEEE 802.3-2005, Clause 66.2). When set to 1, this bit overrides [AN_EN]
10939 and
10940 disables the autonegotiation variable mr_an_enable. Used in both 1000BASE-X and
10941 SGMII/QSGMII
10942 modes. */
10943 uint64_t spdmsb : 1; /**< [ 6: 6](R/W) Link speed most-significant bit, i.e SPD\<1\>; effective only if autonegotiation is
10944 disabled.
10945
10946 \<pre\>
10947 [SPDMSB] [SPDLSB] Link Speed
10948 0 0 10 Mb/s
10949 0 1 100 Mb/s
10950 1 0 1000 Mb/s
10951 1 1 reserved
10952 \</pre\> */
10953 uint64_t coltst : 1; /**< [ 7: 7](R/W) Enable COL signal test.
10954 During COL test, the COL signal reflects the GMII TX_EN signal with less than 16BT delay. */
10955 uint64_t dup : 1; /**< [ 8: 8](R/W) Duplex mode:
10956 0 = half duplex; effective only if autonegotiation is disabled.
10957 1 = full duplex.
10958
10959 If BGX()_GMP_PCS_MR()_STATUS \<15:9\> and
10960 BGX()_GMP_PCS_AN()_ADV\<15:12\> allow only one duplex mode, this bit corresponds to
10961 that value and any attempts to write are ignored. */
10962 uint64_t rst_an : 1; /**< [ 9: 9](R/W/H) Reset autonegotiation. When set, if [AN_EN] = 1 and
10963 BGX()_GMP_PCS_MR()_STATUS[AN_ABIL] = 1, autonegotiation begins. Otherwise,
10964 software write requests are ignored and this bit remains at 0. This bit clears itself to
10965 0, when autonegotiation starts. */
10966 uint64_t reserved_10 : 1;
10967 uint64_t pwr_dn : 1; /**< [ 11: 11](R/W) Power down:
10968 0 = Normal operation.
10969 1 = Power down (hardware reset). */
10970 uint64_t an_en : 1; /**< [ 12: 12](R/W) Autonegotiation enable. */
10971 uint64_t spdlsb : 1; /**< [ 13: 13](R/W) Least-significant bit of the link-speed field, i.e. SPD\<0\>. Refer to SPDMSB. */
10972 uint64_t loopbck1 : 1; /**< [ 14: 14](R/W) Enable loopback:
10973 0 = Normal operation.
10974 1 = Internal loopback mode.
10975
10976 The loopback mode returns loopback TX data from GMII TX back to GMII RX interface. The
10977 loopback happens in the PCS module. Autonegotiation is disabled even if [AN_EN] is set
10978 during loopback. */
10979 uint64_t reset : 1; /**< [ 15: 15](R/W/H) Set to reset.
10980 0 = Normal operation.
10981 1 = Software PCS reset.
10982
10983 The bit returns to 0 after PCS has been reset. Takes 32 coprocessor-clock cycles to reset
10984 PCS. This bit, when set, also drains the tx gmi fifo and can be used as a fifo draining
10985 mechanism for both SerDes reset conditions and for XCV reset conditions. */
10986 uint64_t reserved_16_63 : 48;
10987 #endif /* Word 0 - End */
10988 } s;
10989 /* struct bdk_bgxx_gmp_pcs_mrx_control_s cn81xx; */
10990 struct bdk_bgxx_gmp_pcs_mrx_control_cn88xx
10991 {
10992 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
10993 uint64_t reserved_16_63 : 48;
10994 uint64_t reset : 1; /**< [ 15: 15](R/W/H) Set to reset.
10995 0 = Normal operation.
10996 1 = Software PCS reset.
10997
10998 The bit returns to 0 after PCS has been reset. Takes 32 coprocessor-clock cycles to reset
10999 PCS. This bit, when set, also drains the tx gmi fifo and can be used as a fifo draining
11000 mechanism for both SerDes reset conditions and for XCV reset conditions. */
11001 uint64_t loopbck1 : 1; /**< [ 14: 14](R/W) Enable loopback:
11002 0 = Normal operation.
11003 1 = Internal loopback mode.
11004
11005 The loopback mode returns loopback TX data from GMII TX back to GMII RX interface. The
11006 loopback happens in the PCS module. Autonegotiation is disabled even if [AN_EN] is set
11007 during loopback. */
11008 uint64_t spdlsb : 1; /**< [ 13: 13](R/W) Least-significant bit of the link-speed field, i.e. SPD\<0\>. Refer to SPDMSB. */
11009 uint64_t an_en : 1; /**< [ 12: 12](R/W) Autonegotiation enable. */
11010 uint64_t pwr_dn : 1; /**< [ 11: 11](R/W) Power down:
11011 0 = Normal operation.
11012 1 = Power down (hardware reset). */
11013 uint64_t reserved_10 : 1;
11014 uint64_t rst_an : 1; /**< [ 9: 9](R/W/H) Reset autonegotiation. When set, if [AN_EN] = 1 and
11015 BGX()_GMP_PCS_MR()_STATUS[AN_ABIL] = 1, autonegotiation begins. Otherwise,
11016 software write requests are ignored and this bit remains at 0. This bit clears itself to
11017 0, when autonegotiation starts. */
11018 uint64_t dup : 1; /**< [ 8: 8](R/W) Duplex mode:
11019 0 = half duplex; effective only if autonegotiation is disabled.
11020 1 = full duplex.
11021
11022 If BGX()_GMP_PCS_MR()_STATUS \<15:9\> and
11023 BGX()_GMP_PCS_AN()_ADV\<15:12\> allow only one duplex mode, this bit corresponds to
11024 that value and any attempts to write are ignored. */
11025 uint64_t coltst : 1; /**< [ 7: 7](R/W) Enable COL signal test.
11026 During COL test, the COL signal reflects the GMII TX_EN signal with less than 16BT delay. */
11027 uint64_t spdmsb : 1; /**< [ 6: 6](R/W) Link speed most-significant bit, i.e SPD\<1\>; effective only if autonegotiation is
11028 disabled.
11029
11030 \<pre\>
11031 [SPDMSB] [SPDLSB] Link Speed
11032 0 0 10 Mb/s
11033 0 1 100 Mb/s
11034 1 0 1000 Mb/s
11035 1 1 reserved
11036 \</pre\> */
11037 uint64_t uni : 1; /**< [ 5: 5](R/W) Unidirectional (IEEE 802.3-2005, Clause 66.2). When set to 1, this bit overrides [AN_EN]
11038 and
11039 disables the autonegotiation variable mr_an_enable. Used in both 1000BASE-X and SGMII
11040 modes. */
11041 uint64_t reserved_0_4 : 5;
11042 #else /* Word 0 - Little Endian */
11043 uint64_t reserved_0_4 : 5;
11044 uint64_t uni : 1; /**< [ 5: 5](R/W) Unidirectional (IEEE 802.3-2005, Clause 66.2). When set to 1, this bit overrides [AN_EN]
11045 and
11046 disables the autonegotiation variable mr_an_enable. Used in both 1000BASE-X and SGMII
11047 modes. */
11048 uint64_t spdmsb : 1; /**< [ 6: 6](R/W) Link speed most-significant bit, i.e SPD\<1\>; effective only if autonegotiation is
11049 disabled.
11050
11051 \<pre\>
11052 [SPDMSB] [SPDLSB] Link Speed
11053 0 0 10 Mb/s
11054 0 1 100 Mb/s
11055 1 0 1000 Mb/s
11056 1 1 reserved
11057 \</pre\> */
11058 uint64_t coltst : 1; /**< [ 7: 7](R/W) Enable COL signal test.
11059 During COL test, the COL signal reflects the GMII TX_EN signal with less than 16BT delay. */
11060 uint64_t dup : 1; /**< [ 8: 8](R/W) Duplex mode:
11061 0 = half duplex; effective only if autonegotiation is disabled.
11062 1 = full duplex.
11063
11064 If BGX()_GMP_PCS_MR()_STATUS \<15:9\> and
11065 BGX()_GMP_PCS_AN()_ADV\<15:12\> allow only one duplex mode, this bit corresponds to
11066 that value and any attempts to write are ignored. */
11067 uint64_t rst_an : 1; /**< [ 9: 9](R/W/H) Reset autonegotiation. When set, if [AN_EN] = 1 and
11068 BGX()_GMP_PCS_MR()_STATUS[AN_ABIL] = 1, autonegotiation begins. Otherwise,
11069 software write requests are ignored and this bit remains at 0. This bit clears itself to
11070 0, when autonegotiation starts. */
11071 uint64_t reserved_10 : 1;
11072 uint64_t pwr_dn : 1; /**< [ 11: 11](R/W) Power down:
11073 0 = Normal operation.
11074 1 = Power down (hardware reset). */
11075 uint64_t an_en : 1; /**< [ 12: 12](R/W) Autonegotiation enable. */
11076 uint64_t spdlsb : 1; /**< [ 13: 13](R/W) Least-significant bit of the link-speed field, i.e. SPD\<0\>. Refer to SPDMSB. */
11077 uint64_t loopbck1 : 1; /**< [ 14: 14](R/W) Enable loopback:
11078 0 = Normal operation.
11079 1 = Internal loopback mode.
11080
11081 The loopback mode returns loopback TX data from GMII TX back to GMII RX interface. The
11082 loopback happens in the PCS module. Autonegotiation is disabled even if [AN_EN] is set
11083 during loopback. */
11084 uint64_t reset : 1; /**< [ 15: 15](R/W/H) Set to reset.
11085 0 = Normal operation.
11086 1 = Software PCS reset.
11087
11088 The bit returns to 0 after PCS has been reset. Takes 32 coprocessor-clock cycles to reset
11089 PCS. This bit, when set, also drains the tx gmi fifo and can be used as a fifo draining
11090 mechanism for both SerDes reset conditions and for XCV reset conditions. */
11091 uint64_t reserved_16_63 : 48;
11092 #endif /* Word 0 - End */
11093 } cn88xx;
11094 /* struct bdk_bgxx_gmp_pcs_mrx_control_s cn83xx; */
11095 };
11096 typedef union bdk_bgxx_gmp_pcs_mrx_control bdk_bgxx_gmp_pcs_mrx_control_t;
11097
11098 static inline uint64_t BDK_BGXX_GMP_PCS_MRX_CONTROL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_MRX_CONTROL(unsigned long a,unsigned long b)11099 static inline uint64_t BDK_BGXX_GMP_PCS_MRX_CONTROL(unsigned long a, unsigned long b)
11100 {
11101 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11102 return 0x87e0e0030000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11103 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11104 return 0x87e0e0030000ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11105 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11106 return 0x87e0e0030000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11107 __bdk_csr_fatal("BGXX_GMP_PCS_MRX_CONTROL", 2, a, b, 0, 0);
11108 }
11109
11110 #define typedef_BDK_BGXX_GMP_PCS_MRX_CONTROL(a,b) bdk_bgxx_gmp_pcs_mrx_control_t
11111 #define bustype_BDK_BGXX_GMP_PCS_MRX_CONTROL(a,b) BDK_CSR_TYPE_RSL
11112 #define basename_BDK_BGXX_GMP_PCS_MRX_CONTROL(a,b) "BGXX_GMP_PCS_MRX_CONTROL"
11113 #define device_bar_BDK_BGXX_GMP_PCS_MRX_CONTROL(a,b) 0x0 /* PF_BAR0 */
11114 #define busnum_BDK_BGXX_GMP_PCS_MRX_CONTROL(a,b) (a)
11115 #define arguments_BDK_BGXX_GMP_PCS_MRX_CONTROL(a,b) (a),(b),-1,-1
11116
11117 /**
11118 * Register (RSL) bgx#_gmp_pcs_mr#_status
11119 *
11120 * BGX GMP PCS Status Registers
11121 * Bits \<15:9\> in this register indicate the ability to operate when
11122 * BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set to MAC mode. Bits \<15:9\> are always read as
11123 * 0, indicating that the chip cannot operate in the corresponding modes. The field [RM_FLT] is a
11124 * 'don't care' when the selected mode is SGMII.
11125 */
11126 union bdk_bgxx_gmp_pcs_mrx_status
11127 {
11128 uint64_t u;
11129 struct bdk_bgxx_gmp_pcs_mrx_status_s
11130 {
11131 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11132 uint64_t reserved_16_63 : 48;
11133 uint64_t hun_t4 : 1; /**< [ 15: 15](RO/H) Indicates 100BASE-T4 capable. */
11134 uint64_t hun_xfd : 1; /**< [ 14: 14](RO/H) Indicates 100BASE-X full duplex. */
11135 uint64_t hun_xhd : 1; /**< [ 13: 13](RO/H) Indicates 100BASE-X half duplex. */
11136 uint64_t ten_fd : 1; /**< [ 12: 12](RO/H) Indicates 10Mb/s full duplex. */
11137 uint64_t ten_hd : 1; /**< [ 11: 11](RO/H) Indicates 10Mb/s half duplex. */
11138 uint64_t hun_t2fd : 1; /**< [ 10: 10](RO/H) Indicates 100BASE-T2 full duplex. */
11139 uint64_t hun_t2hd : 1; /**< [ 9: 9](RO/H) Indicates 100BASE-T2 half duplex. */
11140 uint64_t ext_st : 1; /**< [ 8: 8](RO/H) Extended status information. When set to 1, indicates that additional status data is
11141 available in BGX()_GMP_PCS_AN()_EXT_ST. */
11142 uint64_t reserved_7 : 1;
11143 uint64_t prb_sup : 1; /**< [ 6: 6](RO/H) Preamble not needed.
11144 0 = Cannot accept frames without preamble bytes.
11145 1 = Can work without preamble bytes at the beginning of frames. */
11146 uint64_t an_cpt : 1; /**< [ 5: 5](RO/H) Indicates autonegotiation is complete; the contents of the
11147 BGX()_GMP_PCS_AN()_RESULTS are valid. */
11148 uint64_t rm_flt : 1; /**< [ 4: 4](RO/H) Indicates remote fault condition occurred. This bit implements a latching-high behavior.
11149 It is cleared when software reads this register or when
11150 BGX()_GMP_PCS_MR()_CONTROL[RESET] is asserted.
11151 See BGX()_GMP_PCS_AN()_ADV[REM_FLT] for fault conditions. */
11152 uint64_t an_abil : 1; /**< [ 3: 3](RO/H) Indicates autonegotiation capable. */
11153 uint64_t lnk_st : 1; /**< [ 2: 2](RO/H) Link state:
11154 0 = link down.
11155 1 = link up.
11156
11157 Set during autonegotiation process. Set whenever XMIT = DATA. Latching-low behavior when
11158 link goes down. Link down value of the bit stays low until software reads the register. */
11159 uint64_t reserved_1 : 1;
11160 uint64_t extnd : 1; /**< [ 0: 0](RO/H) This field is always 0, extended capability registers not present. */
11161 #else /* Word 0 - Little Endian */
11162 uint64_t extnd : 1; /**< [ 0: 0](RO/H) This field is always 0, extended capability registers not present. */
11163 uint64_t reserved_1 : 1;
11164 uint64_t lnk_st : 1; /**< [ 2: 2](RO/H) Link state:
11165 0 = link down.
11166 1 = link up.
11167
11168 Set during autonegotiation process. Set whenever XMIT = DATA. Latching-low behavior when
11169 link goes down. Link down value of the bit stays low until software reads the register. */
11170 uint64_t an_abil : 1; /**< [ 3: 3](RO/H) Indicates autonegotiation capable. */
11171 uint64_t rm_flt : 1; /**< [ 4: 4](RO/H) Indicates remote fault condition occurred. This bit implements a latching-high behavior.
11172 It is cleared when software reads this register or when
11173 BGX()_GMP_PCS_MR()_CONTROL[RESET] is asserted.
11174 See BGX()_GMP_PCS_AN()_ADV[REM_FLT] for fault conditions. */
11175 uint64_t an_cpt : 1; /**< [ 5: 5](RO/H) Indicates autonegotiation is complete; the contents of the
11176 BGX()_GMP_PCS_AN()_RESULTS are valid. */
11177 uint64_t prb_sup : 1; /**< [ 6: 6](RO/H) Preamble not needed.
11178 0 = Cannot accept frames without preamble bytes.
11179 1 = Can work without preamble bytes at the beginning of frames. */
11180 uint64_t reserved_7 : 1;
11181 uint64_t ext_st : 1; /**< [ 8: 8](RO/H) Extended status information. When set to 1, indicates that additional status data is
11182 available in BGX()_GMP_PCS_AN()_EXT_ST. */
11183 uint64_t hun_t2hd : 1; /**< [ 9: 9](RO/H) Indicates 100BASE-T2 half duplex. */
11184 uint64_t hun_t2fd : 1; /**< [ 10: 10](RO/H) Indicates 100BASE-T2 full duplex. */
11185 uint64_t ten_hd : 1; /**< [ 11: 11](RO/H) Indicates 10Mb/s half duplex. */
11186 uint64_t ten_fd : 1; /**< [ 12: 12](RO/H) Indicates 10Mb/s full duplex. */
11187 uint64_t hun_xhd : 1; /**< [ 13: 13](RO/H) Indicates 100BASE-X half duplex. */
11188 uint64_t hun_xfd : 1; /**< [ 14: 14](RO/H) Indicates 100BASE-X full duplex. */
11189 uint64_t hun_t4 : 1; /**< [ 15: 15](RO/H) Indicates 100BASE-T4 capable. */
11190 uint64_t reserved_16_63 : 48;
11191 #endif /* Word 0 - End */
11192 } s;
11193 /* struct bdk_bgxx_gmp_pcs_mrx_status_s cn; */
11194 };
11195 typedef union bdk_bgxx_gmp_pcs_mrx_status bdk_bgxx_gmp_pcs_mrx_status_t;
11196
11197 static inline uint64_t BDK_BGXX_GMP_PCS_MRX_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_MRX_STATUS(unsigned long a,unsigned long b)11198 static inline uint64_t BDK_BGXX_GMP_PCS_MRX_STATUS(unsigned long a, unsigned long b)
11199 {
11200 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11201 return 0x87e0e0030008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11202 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11203 return 0x87e0e0030008ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11204 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11205 return 0x87e0e0030008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11206 __bdk_csr_fatal("BGXX_GMP_PCS_MRX_STATUS", 2, a, b, 0, 0);
11207 }
11208
11209 #define typedef_BDK_BGXX_GMP_PCS_MRX_STATUS(a,b) bdk_bgxx_gmp_pcs_mrx_status_t
11210 #define bustype_BDK_BGXX_GMP_PCS_MRX_STATUS(a,b) BDK_CSR_TYPE_RSL
11211 #define basename_BDK_BGXX_GMP_PCS_MRX_STATUS(a,b) "BGXX_GMP_PCS_MRX_STATUS"
11212 #define device_bar_BDK_BGXX_GMP_PCS_MRX_STATUS(a,b) 0x0 /* PF_BAR0 */
11213 #define busnum_BDK_BGXX_GMP_PCS_MRX_STATUS(a,b) (a)
11214 #define arguments_BDK_BGXX_GMP_PCS_MRX_STATUS(a,b) (a),(b),-1,-1
11215
11216 /**
11217 * Register (RSL) bgx#_gmp_pcs_rx#_states
11218 *
11219 * BGX GMP PCS RX State-Machines States Registers
11220 */
11221 union bdk_bgxx_gmp_pcs_rxx_states
11222 {
11223 uint64_t u;
11224 struct bdk_bgxx_gmp_pcs_rxx_states_s
11225 {
11226 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11227 uint64_t reserved_16_63 : 48;
11228 uint64_t rx_bad : 1; /**< [ 15: 15](RO/H) Receive state machine is in an illegal state. */
11229 uint64_t rx_st : 5; /**< [ 14: 10](RO/H) Receive state-machine state. */
11230 uint64_t sync_bad : 1; /**< [ 9: 9](RO/H) Receive synchronization state machine is in an illegal state. */
11231 uint64_t sync : 4; /**< [ 8: 5](RO/H) Receive synchronization state-machine state. */
11232 uint64_t an_bad : 1; /**< [ 4: 4](RO/H) Autonegotiation state machine is in an illegal state. */
11233 uint64_t an_st : 4; /**< [ 3: 0](RO/H) Autonegotiation state-machine state. */
11234 #else /* Word 0 - Little Endian */
11235 uint64_t an_st : 4; /**< [ 3: 0](RO/H) Autonegotiation state-machine state. */
11236 uint64_t an_bad : 1; /**< [ 4: 4](RO/H) Autonegotiation state machine is in an illegal state. */
11237 uint64_t sync : 4; /**< [ 8: 5](RO/H) Receive synchronization state-machine state. */
11238 uint64_t sync_bad : 1; /**< [ 9: 9](RO/H) Receive synchronization state machine is in an illegal state. */
11239 uint64_t rx_st : 5; /**< [ 14: 10](RO/H) Receive state-machine state. */
11240 uint64_t rx_bad : 1; /**< [ 15: 15](RO/H) Receive state machine is in an illegal state. */
11241 uint64_t reserved_16_63 : 48;
11242 #endif /* Word 0 - End */
11243 } s;
11244 /* struct bdk_bgxx_gmp_pcs_rxx_states_s cn; */
11245 };
11246 typedef union bdk_bgxx_gmp_pcs_rxx_states bdk_bgxx_gmp_pcs_rxx_states_t;
11247
11248 static inline uint64_t BDK_BGXX_GMP_PCS_RXX_STATES(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_RXX_STATES(unsigned long a,unsigned long b)11249 static inline uint64_t BDK_BGXX_GMP_PCS_RXX_STATES(unsigned long a, unsigned long b)
11250 {
11251 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11252 return 0x87e0e0030058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11253 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11254 return 0x87e0e0030058ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11255 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11256 return 0x87e0e0030058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11257 __bdk_csr_fatal("BGXX_GMP_PCS_RXX_STATES", 2, a, b, 0, 0);
11258 }
11259
11260 #define typedef_BDK_BGXX_GMP_PCS_RXX_STATES(a,b) bdk_bgxx_gmp_pcs_rxx_states_t
11261 #define bustype_BDK_BGXX_GMP_PCS_RXX_STATES(a,b) BDK_CSR_TYPE_RSL
11262 #define basename_BDK_BGXX_GMP_PCS_RXX_STATES(a,b) "BGXX_GMP_PCS_RXX_STATES"
11263 #define device_bar_BDK_BGXX_GMP_PCS_RXX_STATES(a,b) 0x0 /* PF_BAR0 */
11264 #define busnum_BDK_BGXX_GMP_PCS_RXX_STATES(a,b) (a)
11265 #define arguments_BDK_BGXX_GMP_PCS_RXX_STATES(a,b) (a),(b),-1,-1
11266
11267 /**
11268 * Register (RSL) bgx#_gmp_pcs_rx#_sync
11269 *
11270 * BGX GMP PCS Code Group Synchronization Registers
11271 */
11272 union bdk_bgxx_gmp_pcs_rxx_sync
11273 {
11274 uint64_t u;
11275 struct bdk_bgxx_gmp_pcs_rxx_sync_s
11276 {
11277 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11278 uint64_t reserved_2_63 : 62;
11279 uint64_t sync : 1; /**< [ 1: 1](RO/H) When set, code group synchronization achieved. */
11280 uint64_t bit_lock : 1; /**< [ 0: 0](RO/H) When set, bit lock achieved. */
11281 #else /* Word 0 - Little Endian */
11282 uint64_t bit_lock : 1; /**< [ 0: 0](RO/H) When set, bit lock achieved. */
11283 uint64_t sync : 1; /**< [ 1: 1](RO/H) When set, code group synchronization achieved. */
11284 uint64_t reserved_2_63 : 62;
11285 #endif /* Word 0 - End */
11286 } s;
11287 /* struct bdk_bgxx_gmp_pcs_rxx_sync_s cn; */
11288 };
11289 typedef union bdk_bgxx_gmp_pcs_rxx_sync bdk_bgxx_gmp_pcs_rxx_sync_t;
11290
11291 static inline uint64_t BDK_BGXX_GMP_PCS_RXX_SYNC(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_RXX_SYNC(unsigned long a,unsigned long b)11292 static inline uint64_t BDK_BGXX_GMP_PCS_RXX_SYNC(unsigned long a, unsigned long b)
11293 {
11294 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11295 return 0x87e0e0030050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11296 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11297 return 0x87e0e0030050ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11298 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11299 return 0x87e0e0030050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11300 __bdk_csr_fatal("BGXX_GMP_PCS_RXX_SYNC", 2, a, b, 0, 0);
11301 }
11302
11303 #define typedef_BDK_BGXX_GMP_PCS_RXX_SYNC(a,b) bdk_bgxx_gmp_pcs_rxx_sync_t
11304 #define bustype_BDK_BGXX_GMP_PCS_RXX_SYNC(a,b) BDK_CSR_TYPE_RSL
11305 #define basename_BDK_BGXX_GMP_PCS_RXX_SYNC(a,b) "BGXX_GMP_PCS_RXX_SYNC"
11306 #define device_bar_BDK_BGXX_GMP_PCS_RXX_SYNC(a,b) 0x0 /* PF_BAR0 */
11307 #define busnum_BDK_BGXX_GMP_PCS_RXX_SYNC(a,b) (a)
11308 #define arguments_BDK_BGXX_GMP_PCS_RXX_SYNC(a,b) (a),(b),-1,-1
11309
11310 /**
11311 * Register (RSL) bgx#_gmp_pcs_sgm#_an_adv
11312 *
11313 * BGX GMP PCS SGMII Autonegotiation Advertisement Registers
11314 * This is the SGMII autonegotiation advertisement register (sent out as tx_Config_Reg\<15:0\> as
11315 * defined in IEEE 802.3 clause 37). This register is sent during autonegotiation if
11316 * BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set (1 = PHY mode). If the bit is not set (0 =
11317 * MAC mode), then tx_Config_Reg\<14\> becomes ACK bit and tx_Config_Reg\<0\> is always 1. All other
11318 * bits in tx_Config_Reg sent will be 0. The PHY dictates the autonegotiation results.
11319 */
11320 union bdk_bgxx_gmp_pcs_sgmx_an_adv
11321 {
11322 uint64_t u;
11323 struct bdk_bgxx_gmp_pcs_sgmx_an_adv_s
11324 {
11325 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11326 uint64_t reserved_16_63 : 48;
11327 uint64_t link : 1; /**< [ 15: 15](R/W) Link status: 1 = Link up. 0 = Link down. */
11328 uint64_t ack : 1; /**< [ 14: 14](RO/H) Autonegotiation acknowledgement. */
11329 uint64_t reserved_13 : 1;
11330 uint64_t dup : 1; /**< [ 12: 12](R/W) Duplex mode: 1 = full duplex, 0 = half duplex. */
11331 uint64_t speed : 2; /**< [ 11: 10](R/W) Link speed:
11332 0x0 = 10 Mb/s.
11333 0x1 = 100 Mb/s.
11334 0x2 = 1000 Mb/s.
11335 0x3 = Reserved. */
11336 uint64_t reserved_1_9 : 9;
11337 uint64_t one : 1; /**< [ 0: 0](RO/H) Always set to match tx_Config_Reg\<0\>. */
11338 #else /* Word 0 - Little Endian */
11339 uint64_t one : 1; /**< [ 0: 0](RO/H) Always set to match tx_Config_Reg\<0\>. */
11340 uint64_t reserved_1_9 : 9;
11341 uint64_t speed : 2; /**< [ 11: 10](R/W) Link speed:
11342 0x0 = 10 Mb/s.
11343 0x1 = 100 Mb/s.
11344 0x2 = 1000 Mb/s.
11345 0x3 = Reserved. */
11346 uint64_t dup : 1; /**< [ 12: 12](R/W) Duplex mode: 1 = full duplex, 0 = half duplex. */
11347 uint64_t reserved_13 : 1;
11348 uint64_t ack : 1; /**< [ 14: 14](RO/H) Autonegotiation acknowledgement. */
11349 uint64_t link : 1; /**< [ 15: 15](R/W) Link status: 1 = Link up. 0 = Link down. */
11350 uint64_t reserved_16_63 : 48;
11351 #endif /* Word 0 - End */
11352 } s;
11353 /* struct bdk_bgxx_gmp_pcs_sgmx_an_adv_s cn; */
11354 };
11355 typedef union bdk_bgxx_gmp_pcs_sgmx_an_adv bdk_bgxx_gmp_pcs_sgmx_an_adv_t;
11356
11357 static inline uint64_t BDK_BGXX_GMP_PCS_SGMX_AN_ADV(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_SGMX_AN_ADV(unsigned long a,unsigned long b)11358 static inline uint64_t BDK_BGXX_GMP_PCS_SGMX_AN_ADV(unsigned long a, unsigned long b)
11359 {
11360 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11361 return 0x87e0e0030068ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11362 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11363 return 0x87e0e0030068ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11364 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11365 return 0x87e0e0030068ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11366 __bdk_csr_fatal("BGXX_GMP_PCS_SGMX_AN_ADV", 2, a, b, 0, 0);
11367 }
11368
11369 #define typedef_BDK_BGXX_GMP_PCS_SGMX_AN_ADV(a,b) bdk_bgxx_gmp_pcs_sgmx_an_adv_t
11370 #define bustype_BDK_BGXX_GMP_PCS_SGMX_AN_ADV(a,b) BDK_CSR_TYPE_RSL
11371 #define basename_BDK_BGXX_GMP_PCS_SGMX_AN_ADV(a,b) "BGXX_GMP_PCS_SGMX_AN_ADV"
11372 #define device_bar_BDK_BGXX_GMP_PCS_SGMX_AN_ADV(a,b) 0x0 /* PF_BAR0 */
11373 #define busnum_BDK_BGXX_GMP_PCS_SGMX_AN_ADV(a,b) (a)
11374 #define arguments_BDK_BGXX_GMP_PCS_SGMX_AN_ADV(a,b) (a),(b),-1,-1
11375
11376 /**
11377 * Register (RSL) bgx#_gmp_pcs_sgm#_lp_adv
11378 *
11379 * BGX GMP PCS SGMII Link-Partner-Advertisement Registers
11380 * This is the SGMII link partner advertisement register (received as rx_Config_Reg\<15:0\> as
11381 * defined in IEEE 802.3 clause 37).
11382 */
11383 union bdk_bgxx_gmp_pcs_sgmx_lp_adv
11384 {
11385 uint64_t u;
11386 struct bdk_bgxx_gmp_pcs_sgmx_lp_adv_s
11387 {
11388 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11389 uint64_t reserved_16_63 : 48;
11390 uint64_t link : 1; /**< [ 15: 15](RO/H) Link status: 1 = Link up. 0 = Link down. */
11391 uint64_t reserved_13_14 : 2;
11392 uint64_t dup : 1; /**< [ 12: 12](RO/H) Duplex mode: 1 = Full duplex, 0 = Half duplex. */
11393 uint64_t speed : 2; /**< [ 11: 10](RO/H) Link speed:
11394 0x0 = 10 Mb/s.
11395 0x1 = 100 Mb/s.
11396 0x2 = 1000 Mb/s.
11397 0x3 = Reserved. */
11398 uint64_t reserved_1_9 : 9;
11399 uint64_t one : 1; /**< [ 0: 0](RO/H) Always set to match tx_Config_Reg\<0\> */
11400 #else /* Word 0 - Little Endian */
11401 uint64_t one : 1; /**< [ 0: 0](RO/H) Always set to match tx_Config_Reg\<0\> */
11402 uint64_t reserved_1_9 : 9;
11403 uint64_t speed : 2; /**< [ 11: 10](RO/H) Link speed:
11404 0x0 = 10 Mb/s.
11405 0x1 = 100 Mb/s.
11406 0x2 = 1000 Mb/s.
11407 0x3 = Reserved. */
11408 uint64_t dup : 1; /**< [ 12: 12](RO/H) Duplex mode: 1 = Full duplex, 0 = Half duplex. */
11409 uint64_t reserved_13_14 : 2;
11410 uint64_t link : 1; /**< [ 15: 15](RO/H) Link status: 1 = Link up. 0 = Link down. */
11411 uint64_t reserved_16_63 : 48;
11412 #endif /* Word 0 - End */
11413 } s;
11414 struct bdk_bgxx_gmp_pcs_sgmx_lp_adv_cn
11415 {
11416 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11417 uint64_t reserved_16_63 : 48;
11418 uint64_t link : 1; /**< [ 15: 15](RO/H) Link status: 1 = Link up. 0 = Link down. */
11419 uint64_t reserved_14 : 1;
11420 uint64_t reserved_13 : 1;
11421 uint64_t dup : 1; /**< [ 12: 12](RO/H) Duplex mode: 1 = Full duplex, 0 = Half duplex. */
11422 uint64_t speed : 2; /**< [ 11: 10](RO/H) Link speed:
11423 0x0 = 10 Mb/s.
11424 0x1 = 100 Mb/s.
11425 0x2 = 1000 Mb/s.
11426 0x3 = Reserved. */
11427 uint64_t reserved_1_9 : 9;
11428 uint64_t one : 1; /**< [ 0: 0](RO/H) Always set to match tx_Config_Reg\<0\> */
11429 #else /* Word 0 - Little Endian */
11430 uint64_t one : 1; /**< [ 0: 0](RO/H) Always set to match tx_Config_Reg\<0\> */
11431 uint64_t reserved_1_9 : 9;
11432 uint64_t speed : 2; /**< [ 11: 10](RO/H) Link speed:
11433 0x0 = 10 Mb/s.
11434 0x1 = 100 Mb/s.
11435 0x2 = 1000 Mb/s.
11436 0x3 = Reserved. */
11437 uint64_t dup : 1; /**< [ 12: 12](RO/H) Duplex mode: 1 = Full duplex, 0 = Half duplex. */
11438 uint64_t reserved_13 : 1;
11439 uint64_t reserved_14 : 1;
11440 uint64_t link : 1; /**< [ 15: 15](RO/H) Link status: 1 = Link up. 0 = Link down. */
11441 uint64_t reserved_16_63 : 48;
11442 #endif /* Word 0 - End */
11443 } cn;
11444 };
11445 typedef union bdk_bgxx_gmp_pcs_sgmx_lp_adv bdk_bgxx_gmp_pcs_sgmx_lp_adv_t;
11446
11447 static inline uint64_t BDK_BGXX_GMP_PCS_SGMX_LP_ADV(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_SGMX_LP_ADV(unsigned long a,unsigned long b)11448 static inline uint64_t BDK_BGXX_GMP_PCS_SGMX_LP_ADV(unsigned long a, unsigned long b)
11449 {
11450 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11451 return 0x87e0e0030070ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11452 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11453 return 0x87e0e0030070ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11454 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11455 return 0x87e0e0030070ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11456 __bdk_csr_fatal("BGXX_GMP_PCS_SGMX_LP_ADV", 2, a, b, 0, 0);
11457 }
11458
11459 #define typedef_BDK_BGXX_GMP_PCS_SGMX_LP_ADV(a,b) bdk_bgxx_gmp_pcs_sgmx_lp_adv_t
11460 #define bustype_BDK_BGXX_GMP_PCS_SGMX_LP_ADV(a,b) BDK_CSR_TYPE_RSL
11461 #define basename_BDK_BGXX_GMP_PCS_SGMX_LP_ADV(a,b) "BGXX_GMP_PCS_SGMX_LP_ADV"
11462 #define device_bar_BDK_BGXX_GMP_PCS_SGMX_LP_ADV(a,b) 0x0 /* PF_BAR0 */
11463 #define busnum_BDK_BGXX_GMP_PCS_SGMX_LP_ADV(a,b) (a)
11464 #define arguments_BDK_BGXX_GMP_PCS_SGMX_LP_ADV(a,b) (a),(b),-1,-1
11465
11466 /**
11467 * Register (RSL) bgx#_gmp_pcs_tx#_states
11468 *
11469 * BGX GMP PCS TX State-Machines States Registers
11470 */
11471 union bdk_bgxx_gmp_pcs_txx_states
11472 {
11473 uint64_t u;
11474 struct bdk_bgxx_gmp_pcs_txx_states_s
11475 {
11476 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11477 uint64_t reserved_7_63 : 57;
11478 uint64_t xmit : 2; /**< [ 6: 5](RO/H) 0x0 = Undefined.
11479 0x1 = Config.
11480 0x2 = Idle.
11481 0x3 = Data. */
11482 uint64_t tx_bad : 1; /**< [ 4: 4](RO/H) Transmit state machine in an illegal state. */
11483 uint64_t ord_st : 4; /**< [ 3: 0](RO/H) Transmit ordered set state-machine state. */
11484 #else /* Word 0 - Little Endian */
11485 uint64_t ord_st : 4; /**< [ 3: 0](RO/H) Transmit ordered set state-machine state. */
11486 uint64_t tx_bad : 1; /**< [ 4: 4](RO/H) Transmit state machine in an illegal state. */
11487 uint64_t xmit : 2; /**< [ 6: 5](RO/H) 0x0 = Undefined.
11488 0x1 = Config.
11489 0x2 = Idle.
11490 0x3 = Data. */
11491 uint64_t reserved_7_63 : 57;
11492 #endif /* Word 0 - End */
11493 } s;
11494 /* struct bdk_bgxx_gmp_pcs_txx_states_s cn; */
11495 };
11496 typedef union bdk_bgxx_gmp_pcs_txx_states bdk_bgxx_gmp_pcs_txx_states_t;
11497
11498 static inline uint64_t BDK_BGXX_GMP_PCS_TXX_STATES(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_TXX_STATES(unsigned long a,unsigned long b)11499 static inline uint64_t BDK_BGXX_GMP_PCS_TXX_STATES(unsigned long a, unsigned long b)
11500 {
11501 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11502 return 0x87e0e0030060ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11503 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11504 return 0x87e0e0030060ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11505 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11506 return 0x87e0e0030060ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11507 __bdk_csr_fatal("BGXX_GMP_PCS_TXX_STATES", 2, a, b, 0, 0);
11508 }
11509
11510 #define typedef_BDK_BGXX_GMP_PCS_TXX_STATES(a,b) bdk_bgxx_gmp_pcs_txx_states_t
11511 #define bustype_BDK_BGXX_GMP_PCS_TXX_STATES(a,b) BDK_CSR_TYPE_RSL
11512 #define basename_BDK_BGXX_GMP_PCS_TXX_STATES(a,b) "BGXX_GMP_PCS_TXX_STATES"
11513 #define device_bar_BDK_BGXX_GMP_PCS_TXX_STATES(a,b) 0x0 /* PF_BAR0 */
11514 #define busnum_BDK_BGXX_GMP_PCS_TXX_STATES(a,b) (a)
11515 #define arguments_BDK_BGXX_GMP_PCS_TXX_STATES(a,b) (a),(b),-1,-1
11516
11517 /**
11518 * Register (RSL) bgx#_gmp_pcs_tx_rx#_polarity
11519 *
11520 * BGX GMP PCS TX/RX Polarity Registers
11521 * BGX()_GMP_PCS_TX_RX()_POLARITY[AUTORXPL] shows correct polarity needed on the link
11522 * receive path after code group synchronization is achieved.
11523 */
11524 union bdk_bgxx_gmp_pcs_tx_rxx_polarity
11525 {
11526 uint64_t u;
11527 struct bdk_bgxx_gmp_pcs_tx_rxx_polarity_s
11528 {
11529 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11530 uint64_t reserved_4_63 : 60;
11531 uint64_t rxovrd : 1; /**< [ 3: 3](R/W) RX polarity override.
11532 0 = AUTORXPL determines polarity.
11533 1 = [RXPLRT] determines polarity. */
11534 uint64_t autorxpl : 1; /**< [ 2: 2](RO/H) Auto RX polarity detected:
11535 0 = Normal polarity.
11536 1 = Inverted polarity.
11537
11538 This bit always represents the correct RX polarity setting needed for successful RX path
11539 operation, once a successful code group sync is obtained. */
11540 uint64_t rxplrt : 1; /**< [ 1: 1](R/W) RX polarity: 0 = Normal polarity, 1 = Inverted polarity. */
11541 uint64_t txplrt : 1; /**< [ 0: 0](R/W) TX polarity: 0 = Normal polarity, 1 = Inverted polarity. */
11542 #else /* Word 0 - Little Endian */
11543 uint64_t txplrt : 1; /**< [ 0: 0](R/W) TX polarity: 0 = Normal polarity, 1 = Inverted polarity. */
11544 uint64_t rxplrt : 1; /**< [ 1: 1](R/W) RX polarity: 0 = Normal polarity, 1 = Inverted polarity. */
11545 uint64_t autorxpl : 1; /**< [ 2: 2](RO/H) Auto RX polarity detected:
11546 0 = Normal polarity.
11547 1 = Inverted polarity.
11548
11549 This bit always represents the correct RX polarity setting needed for successful RX path
11550 operation, once a successful code group sync is obtained. */
11551 uint64_t rxovrd : 1; /**< [ 3: 3](R/W) RX polarity override.
11552 0 = AUTORXPL determines polarity.
11553 1 = [RXPLRT] determines polarity. */
11554 uint64_t reserved_4_63 : 60;
11555 #endif /* Word 0 - End */
11556 } s;
11557 /* struct bdk_bgxx_gmp_pcs_tx_rxx_polarity_s cn; */
11558 };
11559 typedef union bdk_bgxx_gmp_pcs_tx_rxx_polarity bdk_bgxx_gmp_pcs_tx_rxx_polarity_t;
11560
11561 static inline uint64_t BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(unsigned long a,unsigned long b)11562 static inline uint64_t BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(unsigned long a, unsigned long b)
11563 {
11564 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11565 return 0x87e0e0030048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11566 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11567 return 0x87e0e0030048ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11568 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11569 return 0x87e0e0030048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11570 __bdk_csr_fatal("BGXX_GMP_PCS_TX_RXX_POLARITY", 2, a, b, 0, 0);
11571 }
11572
11573 #define typedef_BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(a,b) bdk_bgxx_gmp_pcs_tx_rxx_polarity_t
11574 #define bustype_BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(a,b) BDK_CSR_TYPE_RSL
11575 #define basename_BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(a,b) "BGXX_GMP_PCS_TX_RXX_POLARITY"
11576 #define device_bar_BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(a,b) 0x0 /* PF_BAR0 */
11577 #define busnum_BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(a,b) (a)
11578 #define arguments_BDK_BGXX_GMP_PCS_TX_RXX_POLARITY(a,b) (a),(b),-1,-1
11579
11580 /**
11581 * Register (RSL) bgx#_msix_pba#
11582 *
11583 * BGX MSI-X Pending Bit Array Registers
11584 * This register is the MSI-X PBA table, the bit number is indexed by the BGX_INT_VEC_E
11585 * enumeration.
11586 */
11587 union bdk_bgxx_msix_pbax
11588 {
11589 uint64_t u;
11590 struct bdk_bgxx_msix_pbax_s
11591 {
11592 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11593 uint64_t pend : 64; /**< [ 63: 0](RO/H) Pending message for the associated BGX()_MSIX_VEC()_CTL, enumerated by BGX_INT_VEC_E.
11594 Bits that have no associated BGX_INT_VEC_E are zero. */
11595 #else /* Word 0 - Little Endian */
11596 uint64_t pend : 64; /**< [ 63: 0](RO/H) Pending message for the associated BGX()_MSIX_VEC()_CTL, enumerated by BGX_INT_VEC_E.
11597 Bits that have no associated BGX_INT_VEC_E are zero. */
11598 #endif /* Word 0 - End */
11599 } s;
11600 /* struct bdk_bgxx_msix_pbax_s cn; */
11601 };
11602 typedef union bdk_bgxx_msix_pbax bdk_bgxx_msix_pbax_t;
11603
11604 static inline uint64_t BDK_BGXX_MSIX_PBAX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_MSIX_PBAX(unsigned long a,unsigned long b)11605 static inline uint64_t BDK_BGXX_MSIX_PBAX(unsigned long a, unsigned long b)
11606 {
11607 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b==0)))
11608 return 0x87e0e04f0000ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x0);
11609 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b==0)))
11610 return 0x87e0e04f0000ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x0);
11611 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b==0)))
11612 return 0x87e0e04f0000ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x0);
11613 __bdk_csr_fatal("BGXX_MSIX_PBAX", 2, a, b, 0, 0);
11614 }
11615
11616 #define typedef_BDK_BGXX_MSIX_PBAX(a,b) bdk_bgxx_msix_pbax_t
11617 #define bustype_BDK_BGXX_MSIX_PBAX(a,b) BDK_CSR_TYPE_RSL
11618 #define basename_BDK_BGXX_MSIX_PBAX(a,b) "BGXX_MSIX_PBAX"
11619 #define device_bar_BDK_BGXX_MSIX_PBAX(a,b) 0x4 /* PF_BAR4 */
11620 #define busnum_BDK_BGXX_MSIX_PBAX(a,b) (a)
11621 #define arguments_BDK_BGXX_MSIX_PBAX(a,b) (a),(b),-1,-1
11622
11623 /**
11624 * Register (RSL) bgx#_msix_vec#_addr
11625 *
11626 * BGX MSI-X Vector Table Address Registers
11627 * This register is the MSI-X vector table, indexed by the BGX_INT_VEC_E enumeration.
11628 */
11629 union bdk_bgxx_msix_vecx_addr
11630 {
11631 uint64_t u;
11632 struct bdk_bgxx_msix_vecx_addr_s
11633 {
11634 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11635 uint64_t reserved_49_63 : 15;
11636 uint64_t addr : 47; /**< [ 48: 2](R/W) IOVA to use for MSI-X delivery of this vector. */
11637 uint64_t reserved_1 : 1;
11638 uint64_t secvec : 1; /**< [ 0: 0](SR/W) Secure vector.
11639 0 = This vector may be read or written by either secure or nonsecure states.
11640 1 = This vector's BGX()_MSIX_VEC()_ADDR, BGX()_MSIX_VEC()_CTL, and corresponding
11641 bit of BGX()_MSIX_PBA() are RAZ/WI and does not cause a fault when accessed
11642 by the nonsecure world.
11643
11644 If PCCPF_BGX()_VSEC_SCTL[MSIX_SEC] (for documentation, see PCCPF_XXX_VSEC_SCTL[MSIX_SEC])
11645 is set, all vectors are secure and function as if [SECVEC] was set. */
11646 #else /* Word 0 - Little Endian */
11647 uint64_t secvec : 1; /**< [ 0: 0](SR/W) Secure vector.
11648 0 = This vector may be read or written by either secure or nonsecure states.
11649 1 = This vector's BGX()_MSIX_VEC()_ADDR, BGX()_MSIX_VEC()_CTL, and corresponding
11650 bit of BGX()_MSIX_PBA() are RAZ/WI and does not cause a fault when accessed
11651 by the nonsecure world.
11652
11653 If PCCPF_BGX()_VSEC_SCTL[MSIX_SEC] (for documentation, see PCCPF_XXX_VSEC_SCTL[MSIX_SEC])
11654 is set, all vectors are secure and function as if [SECVEC] was set. */
11655 uint64_t reserved_1 : 1;
11656 uint64_t addr : 47; /**< [ 48: 2](R/W) IOVA to use for MSI-X delivery of this vector. */
11657 uint64_t reserved_49_63 : 15;
11658 #endif /* Word 0 - End */
11659 } s;
11660 /* struct bdk_bgxx_msix_vecx_addr_s cn; */
11661 };
11662 typedef union bdk_bgxx_msix_vecx_addr bdk_bgxx_msix_vecx_addr_t;
11663
11664 static inline uint64_t BDK_BGXX_MSIX_VECX_ADDR(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_MSIX_VECX_ADDR(unsigned long a,unsigned long b)11665 static inline uint64_t BDK_BGXX_MSIX_VECX_ADDR(unsigned long a, unsigned long b)
11666 {
11667 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=29)))
11668 return 0x87e0e0400000ll + 0x1000000ll * ((a) & 0x1) + 0x10ll * ((b) & 0x1f);
11669 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=29)))
11670 return 0x87e0e0400000ll + 0x1000000ll * ((a) & 0x3) + 0x10ll * ((b) & 0x1f);
11671 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=29)))
11672 return 0x87e0e0400000ll + 0x1000000ll * ((a) & 0x1) + 0x10ll * ((b) & 0x1f);
11673 __bdk_csr_fatal("BGXX_MSIX_VECX_ADDR", 2, a, b, 0, 0);
11674 }
11675
11676 #define typedef_BDK_BGXX_MSIX_VECX_ADDR(a,b) bdk_bgxx_msix_vecx_addr_t
11677 #define bustype_BDK_BGXX_MSIX_VECX_ADDR(a,b) BDK_CSR_TYPE_RSL
11678 #define basename_BDK_BGXX_MSIX_VECX_ADDR(a,b) "BGXX_MSIX_VECX_ADDR"
11679 #define device_bar_BDK_BGXX_MSIX_VECX_ADDR(a,b) 0x4 /* PF_BAR4 */
11680 #define busnum_BDK_BGXX_MSIX_VECX_ADDR(a,b) (a)
11681 #define arguments_BDK_BGXX_MSIX_VECX_ADDR(a,b) (a),(b),-1,-1
11682
11683 /**
11684 * Register (RSL) bgx#_msix_vec#_ctl
11685 *
11686 * BGX MSI-X Vector Table Control and Data Registers
11687 * This register is the MSI-X vector table, indexed by the BGX_INT_VEC_E enumeration.
11688 */
11689 union bdk_bgxx_msix_vecx_ctl
11690 {
11691 uint64_t u;
11692 struct bdk_bgxx_msix_vecx_ctl_s
11693 {
11694 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11695 uint64_t reserved_33_63 : 31;
11696 uint64_t mask : 1; /**< [ 32: 32](R/W) When set, no MSI-X interrupts will be sent to this vector. */
11697 uint64_t reserved_20_31 : 12;
11698 uint64_t data : 20; /**< [ 19: 0](R/W) Data to use for MSI-X delivery of this vector. */
11699 #else /* Word 0 - Little Endian */
11700 uint64_t data : 20; /**< [ 19: 0](R/W) Data to use for MSI-X delivery of this vector. */
11701 uint64_t reserved_20_31 : 12;
11702 uint64_t mask : 1; /**< [ 32: 32](R/W) When set, no MSI-X interrupts will be sent to this vector. */
11703 uint64_t reserved_33_63 : 31;
11704 #endif /* Word 0 - End */
11705 } s;
11706 /* struct bdk_bgxx_msix_vecx_ctl_s cn; */
11707 };
11708 typedef union bdk_bgxx_msix_vecx_ctl bdk_bgxx_msix_vecx_ctl_t;
11709
11710 static inline uint64_t BDK_BGXX_MSIX_VECX_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_MSIX_VECX_CTL(unsigned long a,unsigned long b)11711 static inline uint64_t BDK_BGXX_MSIX_VECX_CTL(unsigned long a, unsigned long b)
11712 {
11713 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=29)))
11714 return 0x87e0e0400008ll + 0x1000000ll * ((a) & 0x1) + 0x10ll * ((b) & 0x1f);
11715 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=29)))
11716 return 0x87e0e0400008ll + 0x1000000ll * ((a) & 0x3) + 0x10ll * ((b) & 0x1f);
11717 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=29)))
11718 return 0x87e0e0400008ll + 0x1000000ll * ((a) & 0x1) + 0x10ll * ((b) & 0x1f);
11719 __bdk_csr_fatal("BGXX_MSIX_VECX_CTL", 2, a, b, 0, 0);
11720 }
11721
11722 #define typedef_BDK_BGXX_MSIX_VECX_CTL(a,b) bdk_bgxx_msix_vecx_ctl_t
11723 #define bustype_BDK_BGXX_MSIX_VECX_CTL(a,b) BDK_CSR_TYPE_RSL
11724 #define basename_BDK_BGXX_MSIX_VECX_CTL(a,b) "BGXX_MSIX_VECX_CTL"
11725 #define device_bar_BDK_BGXX_MSIX_VECX_CTL(a,b) 0x4 /* PF_BAR4 */
11726 #define busnum_BDK_BGXX_MSIX_VECX_CTL(a,b) (a)
11727 #define arguments_BDK_BGXX_MSIX_VECX_CTL(a,b) (a),(b),-1,-1
11728
11729 /**
11730 * Register (RSL) bgx#_smu#_cbfc_ctl
11731 *
11732 * BGX SMU PFC Control Registers
11733 * Internal:
11734 * INTERNAL: XOFF for a specific class/channel \<i\> is XOFF\<i\> = ([PHYS_EN]\<i\> & cmr_rx_phys_bp) |
11735 * ([LOGL_EN]\<i\> & cmr_rx_logl_xoff\<i\>).
11736 */
11737 union bdk_bgxx_smux_cbfc_ctl
11738 {
11739 uint64_t u;
11740 struct bdk_bgxx_smux_cbfc_ctl_s
11741 {
11742 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11743 uint64_t phys_en : 16; /**< [ 63: 48](R/W) Physical backpressure enable. Determines which classes/channels in the class enable vector
11744 field of a transmitted PFC packet can be asserted due to RX physical backpressure. */
11745 uint64_t logl_en : 16; /**< [ 47: 32](R/W) Logical backpressure enable. Determines which classes/channels in the class enable vector
11746 field of a transmitted PFC packet can be asserted due to RX logical backpressure. */
11747 uint64_t reserved_4_31 : 28;
11748 uint64_t bck_en : 1; /**< [ 3: 3](R/W) Forward PFC information to the backpressure block. */
11749 uint64_t drp_en : 1; /**< [ 2: 2](R/W) Drop-control enable. When set, drop PFC frames. */
11750 uint64_t tx_en : 1; /**< [ 1: 1](R/W) Transmit enable. When set, allow for PFC packets. Must be clear in HiGig2 mode
11751 i.e. when BGX()_SMU()_TX_CTL[HG_EN] = 1 and BGX()_SMU()_RX_UDD_SKP[LEN] =
11752 16. */
11753 uint64_t rx_en : 1; /**< [ 0: 0](R/W) Receive enable. When set, allow for PFC packets. Must be clear in HiGig2 mode
11754 i.e. when BGX()_SMU()_TX_CTL[HG_EN] = 1 and BGX()_SMU()_RX_UDD_SKP[LEN] =
11755 16. */
11756 #else /* Word 0 - Little Endian */
11757 uint64_t rx_en : 1; /**< [ 0: 0](R/W) Receive enable. When set, allow for PFC packets. Must be clear in HiGig2 mode
11758 i.e. when BGX()_SMU()_TX_CTL[HG_EN] = 1 and BGX()_SMU()_RX_UDD_SKP[LEN] =
11759 16. */
11760 uint64_t tx_en : 1; /**< [ 1: 1](R/W) Transmit enable. When set, allow for PFC packets. Must be clear in HiGig2 mode
11761 i.e. when BGX()_SMU()_TX_CTL[HG_EN] = 1 and BGX()_SMU()_RX_UDD_SKP[LEN] =
11762 16. */
11763 uint64_t drp_en : 1; /**< [ 2: 2](R/W) Drop-control enable. When set, drop PFC frames. */
11764 uint64_t bck_en : 1; /**< [ 3: 3](R/W) Forward PFC information to the backpressure block. */
11765 uint64_t reserved_4_31 : 28;
11766 uint64_t logl_en : 16; /**< [ 47: 32](R/W) Logical backpressure enable. Determines which classes/channels in the class enable vector
11767 field of a transmitted PFC packet can be asserted due to RX logical backpressure. */
11768 uint64_t phys_en : 16; /**< [ 63: 48](R/W) Physical backpressure enable. Determines which classes/channels in the class enable vector
11769 field of a transmitted PFC packet can be asserted due to RX physical backpressure. */
11770 #endif /* Word 0 - End */
11771 } s;
11772 /* struct bdk_bgxx_smux_cbfc_ctl_s cn; */
11773 };
11774 typedef union bdk_bgxx_smux_cbfc_ctl bdk_bgxx_smux_cbfc_ctl_t;
11775
11776 static inline uint64_t BDK_BGXX_SMUX_CBFC_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_CBFC_CTL(unsigned long a,unsigned long b)11777 static inline uint64_t BDK_BGXX_SMUX_CBFC_CTL(unsigned long a, unsigned long b)
11778 {
11779 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11780 return 0x87e0e0020218ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11781 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11782 return 0x87e0e0020218ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11783 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11784 return 0x87e0e0020218ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11785 __bdk_csr_fatal("BGXX_SMUX_CBFC_CTL", 2, a, b, 0, 0);
11786 }
11787
11788 #define typedef_BDK_BGXX_SMUX_CBFC_CTL(a,b) bdk_bgxx_smux_cbfc_ctl_t
11789 #define bustype_BDK_BGXX_SMUX_CBFC_CTL(a,b) BDK_CSR_TYPE_RSL
11790 #define basename_BDK_BGXX_SMUX_CBFC_CTL(a,b) "BGXX_SMUX_CBFC_CTL"
11791 #define device_bar_BDK_BGXX_SMUX_CBFC_CTL(a,b) 0x0 /* PF_BAR0 */
11792 #define busnum_BDK_BGXX_SMUX_CBFC_CTL(a,b) (a)
11793 #define arguments_BDK_BGXX_SMUX_CBFC_CTL(a,b) (a),(b),-1,-1
11794
11795 /**
11796 * Register (RSL) bgx#_smu#_ctrl
11797 *
11798 * BGX SMU Control Registers
11799 */
11800 union bdk_bgxx_smux_ctrl
11801 {
11802 uint64_t u;
11803 struct bdk_bgxx_smux_ctrl_s
11804 {
11805 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11806 uint64_t reserved_2_63 : 62;
11807 uint64_t tx_idle : 1; /**< [ 1: 1](RO/H) TX machine is idle. This indication pertains to the framer FSM and ignores the effects on
11808 the data-path controls or values which occur when BGX()_SMU()_TX_CTL[LS_BYP] is
11809 set. */
11810 uint64_t rx_idle : 1; /**< [ 0: 0](RO/H) RX machine is idle. */
11811 #else /* Word 0 - Little Endian */
11812 uint64_t rx_idle : 1; /**< [ 0: 0](RO/H) RX machine is idle. */
11813 uint64_t tx_idle : 1; /**< [ 1: 1](RO/H) TX machine is idle. This indication pertains to the framer FSM and ignores the effects on
11814 the data-path controls or values which occur when BGX()_SMU()_TX_CTL[LS_BYP] is
11815 set. */
11816 uint64_t reserved_2_63 : 62;
11817 #endif /* Word 0 - End */
11818 } s;
11819 /* struct bdk_bgxx_smux_ctrl_s cn; */
11820 };
11821 typedef union bdk_bgxx_smux_ctrl bdk_bgxx_smux_ctrl_t;
11822
11823 static inline uint64_t BDK_BGXX_SMUX_CTRL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_CTRL(unsigned long a,unsigned long b)11824 static inline uint64_t BDK_BGXX_SMUX_CTRL(unsigned long a, unsigned long b)
11825 {
11826 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11827 return 0x87e0e0020200ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11828 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11829 return 0x87e0e0020200ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11830 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11831 return 0x87e0e0020200ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11832 __bdk_csr_fatal("BGXX_SMUX_CTRL", 2, a, b, 0, 0);
11833 }
11834
11835 #define typedef_BDK_BGXX_SMUX_CTRL(a,b) bdk_bgxx_smux_ctrl_t
11836 #define bustype_BDK_BGXX_SMUX_CTRL(a,b) BDK_CSR_TYPE_RSL
11837 #define basename_BDK_BGXX_SMUX_CTRL(a,b) "BGXX_SMUX_CTRL"
11838 #define device_bar_BDK_BGXX_SMUX_CTRL(a,b) 0x0 /* PF_BAR0 */
11839 #define busnum_BDK_BGXX_SMUX_CTRL(a,b) (a)
11840 #define arguments_BDK_BGXX_SMUX_CTRL(a,b) (a),(b),-1,-1
11841
11842 /**
11843 * Register (RSL) bgx#_smu#_ext_loopback
11844 *
11845 * BGX SMU External Loopback Registers
11846 * In loopback mode, the IFG1+IFG2 of local and remote parties must match exactly; otherwise one
11847 * of the two sides' loopback FIFO will overrun: BGX()_SMU()_TX_INT[LB_OVRFLW].
11848 */
11849 union bdk_bgxx_smux_ext_loopback
11850 {
11851 uint64_t u;
11852 struct bdk_bgxx_smux_ext_loopback_s
11853 {
11854 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11855 uint64_t reserved_5_63 : 59;
11856 uint64_t en : 1; /**< [ 4: 4](R/W) Loopback enable. Puts the packet interface in external loopback mode where the RX lines
11857 are reflected on the TX lines. */
11858 uint64_t thresh : 4; /**< [ 3: 0](R/W) Threshold on the TX FIFO. Software must only write the typical value. Any other value
11859 causes loopback mode not to function correctly. */
11860 #else /* Word 0 - Little Endian */
11861 uint64_t thresh : 4; /**< [ 3: 0](R/W) Threshold on the TX FIFO. Software must only write the typical value. Any other value
11862 causes loopback mode not to function correctly. */
11863 uint64_t en : 1; /**< [ 4: 4](R/W) Loopback enable. Puts the packet interface in external loopback mode where the RX lines
11864 are reflected on the TX lines. */
11865 uint64_t reserved_5_63 : 59;
11866 #endif /* Word 0 - End */
11867 } s;
11868 /* struct bdk_bgxx_smux_ext_loopback_s cn; */
11869 };
11870 typedef union bdk_bgxx_smux_ext_loopback bdk_bgxx_smux_ext_loopback_t;
11871
11872 static inline uint64_t BDK_BGXX_SMUX_EXT_LOOPBACK(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_EXT_LOOPBACK(unsigned long a,unsigned long b)11873 static inline uint64_t BDK_BGXX_SMUX_EXT_LOOPBACK(unsigned long a, unsigned long b)
11874 {
11875 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11876 return 0x87e0e0020208ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11877 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11878 return 0x87e0e0020208ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11879 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11880 return 0x87e0e0020208ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11881 __bdk_csr_fatal("BGXX_SMUX_EXT_LOOPBACK", 2, a, b, 0, 0);
11882 }
11883
11884 #define typedef_BDK_BGXX_SMUX_EXT_LOOPBACK(a,b) bdk_bgxx_smux_ext_loopback_t
11885 #define bustype_BDK_BGXX_SMUX_EXT_LOOPBACK(a,b) BDK_CSR_TYPE_RSL
11886 #define basename_BDK_BGXX_SMUX_EXT_LOOPBACK(a,b) "BGXX_SMUX_EXT_LOOPBACK"
11887 #define device_bar_BDK_BGXX_SMUX_EXT_LOOPBACK(a,b) 0x0 /* PF_BAR0 */
11888 #define busnum_BDK_BGXX_SMUX_EXT_LOOPBACK(a,b) (a)
11889 #define arguments_BDK_BGXX_SMUX_EXT_LOOPBACK(a,b) (a),(b),-1,-1
11890
11891 /**
11892 * Register (RSL) bgx#_smu#_hg2_control
11893 *
11894 * BGX SMU HiGig2 Control Registers
11895 * HiGig2 TX- and RX-enable are normally set together for HiGig2 messaging. Setting just the TX
11896 * or RX bit results in only the HG2 message transmit or receive capability.
11897 *
11898 * Setting [PHYS_EN] and [LOGL_EN] to 1 allows link PAUSE or backpressure to TNS/NIC as per the
11899 * received HiGig2 message. Setting these fields to 0 disables link PAUSE and backpressure to
11900 * TNS/NIC
11901 * in response to received messages.
11902 *
11903 * BGX()_SMU()_TX_CTL[HG_EN] must be set (to enable HiGig) whenever either [HG2TX_EN] or
11904 * [HG2RX_EN] are set. BGX()_SMU()_RX_UDD_SKP[LEN] must be set to 16 (to select HiGig2)
11905 * whenever either [HG2TX_EN] or [HG2RX_EN] are set.
11906 *
11907 * BGX()_CMR_RX_OVR_BP[EN]\<0\> must be set and BGX()_CMR_RX_OVR_BP[BP]\<0\> must be cleared
11908 * to 0 (to forcibly disable hardware-automatic 802.3 PAUSE packet generation) with the HiGig2
11909 * Protocol when [HG2TX_EN] = 0. (The HiGig2 protocol is indicated
11910 * by BGX()_SMU()_TX_CTL[HG_EN] = 1 and BGX()_SMU()_RX_UDD_SKP[LEN]=16.) Hardware
11911 * can only autogenerate backpressure via HiGig2 messages (optionally, when [HG2TX_EN] = 1) with
11912 * the HiGig2 protocol.
11913 */
11914 union bdk_bgxx_smux_hg2_control
11915 {
11916 uint64_t u;
11917 struct bdk_bgxx_smux_hg2_control_s
11918 {
11919 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11920 uint64_t reserved_19_63 : 45;
11921 uint64_t hg2tx_en : 1; /**< [ 18: 18](R/W) Enable transmission of HG2 physical and logical messages. When set, also disables hardware
11922 autogenerated 802.3 PAUSE and PFC frames. (CNXXXX cannot generate proper 802.3 or
11923 PFC frames in HiGig2 mode.) */
11924 uint64_t hg2rx_en : 1; /**< [ 17: 17](R/W) Enable extraction and processing of HG2 message packet from RX flow. Physical and logical
11925 PAUSE information is used to PAUSE physical-link, backpressure PKO. This field must be set
11926 when HiGig2 messages are present in the receive stream. This bit is also forwarded to CMR
11927 so it can generate the required deferring signals to SMU TX and backpressure signals to
11928 PKO. */
11929 uint64_t phys_en : 1; /**< [ 16: 16](R/W) Physical-link backpressure enable for received physical HiGig2 messages. This bit enables
11930 the SMU TX to CMR HG2 deferring counter to be set every time SMU RX receives and filters
11931 out a valid physical HG2 message. */
11932 uint64_t logl_en : 16; /**< [ 15: 0](R/W) 16-bit logical-link backpressure enables for received HiGig2 messages or PFC packets. */
11933 #else /* Word 0 - Little Endian */
11934 uint64_t logl_en : 16; /**< [ 15: 0](R/W) 16-bit logical-link backpressure enables for received HiGig2 messages or PFC packets. */
11935 uint64_t phys_en : 1; /**< [ 16: 16](R/W) Physical-link backpressure enable for received physical HiGig2 messages. This bit enables
11936 the SMU TX to CMR HG2 deferring counter to be set every time SMU RX receives and filters
11937 out a valid physical HG2 message. */
11938 uint64_t hg2rx_en : 1; /**< [ 17: 17](R/W) Enable extraction and processing of HG2 message packet from RX flow. Physical and logical
11939 PAUSE information is used to PAUSE physical-link, backpressure PKO. This field must be set
11940 when HiGig2 messages are present in the receive stream. This bit is also forwarded to CMR
11941 so it can generate the required deferring signals to SMU TX and backpressure signals to
11942 PKO. */
11943 uint64_t hg2tx_en : 1; /**< [ 18: 18](R/W) Enable transmission of HG2 physical and logical messages. When set, also disables hardware
11944 autogenerated 802.3 PAUSE and PFC frames. (CNXXXX cannot generate proper 802.3 or
11945 PFC frames in HiGig2 mode.) */
11946 uint64_t reserved_19_63 : 45;
11947 #endif /* Word 0 - End */
11948 } s;
11949 /* struct bdk_bgxx_smux_hg2_control_s cn81xx; */
11950 struct bdk_bgxx_smux_hg2_control_cn88xx
11951 {
11952 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
11953 uint64_t reserved_19_63 : 45;
11954 uint64_t hg2tx_en : 1; /**< [ 18: 18](R/W) Enable transmission of HG2 physical and logical messages. When set, also disables hardware
11955 autogenerated 802.3 PAUSE and PFC frames. (CNXXXX cannot generate proper 802.3 or
11956 PFC frames in HiGig2 mode.) */
11957 uint64_t hg2rx_en : 1; /**< [ 17: 17](R/W) Enable extraction and processing of HG2 message packet from RX flow. Physical and logical
11958 PAUSE information is used to PAUSE physical-link, backpressure TNS/NIC. This field must be
11959 set
11960 when HiGig2 messages are present in the receive stream. This bit is also forwarded to CMR
11961 so it can generate the required deferring signals to SMU TX and backpressure signals to
11962 TNS/NIC. */
11963 uint64_t phys_en : 1; /**< [ 16: 16](R/W) Physical-link backpressure enable for received physical HiGig2 messages. This bit enables
11964 the SMU TX to CMR HG2 deferring counter to be set every time SMU RX receives and filters
11965 out a valid physical HG2 message. */
11966 uint64_t logl_en : 16; /**< [ 15: 0](R/W) 16-bit logical-link backpressure enables for received HiGig2 messages or PFC packets. */
11967 #else /* Word 0 - Little Endian */
11968 uint64_t logl_en : 16; /**< [ 15: 0](R/W) 16-bit logical-link backpressure enables for received HiGig2 messages or PFC packets. */
11969 uint64_t phys_en : 1; /**< [ 16: 16](R/W) Physical-link backpressure enable for received physical HiGig2 messages. This bit enables
11970 the SMU TX to CMR HG2 deferring counter to be set every time SMU RX receives and filters
11971 out a valid physical HG2 message. */
11972 uint64_t hg2rx_en : 1; /**< [ 17: 17](R/W) Enable extraction and processing of HG2 message packet from RX flow. Physical and logical
11973 PAUSE information is used to PAUSE physical-link, backpressure TNS/NIC. This field must be
11974 set
11975 when HiGig2 messages are present in the receive stream. This bit is also forwarded to CMR
11976 so it can generate the required deferring signals to SMU TX and backpressure signals to
11977 TNS/NIC. */
11978 uint64_t hg2tx_en : 1; /**< [ 18: 18](R/W) Enable transmission of HG2 physical and logical messages. When set, also disables hardware
11979 autogenerated 802.3 PAUSE and PFC frames. (CNXXXX cannot generate proper 802.3 or
11980 PFC frames in HiGig2 mode.) */
11981 uint64_t reserved_19_63 : 45;
11982 #endif /* Word 0 - End */
11983 } cn88xx;
11984 /* struct bdk_bgxx_smux_hg2_control_s cn83xx; */
11985 };
11986 typedef union bdk_bgxx_smux_hg2_control bdk_bgxx_smux_hg2_control_t;
11987
11988 static inline uint64_t BDK_BGXX_SMUX_HG2_CONTROL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_HG2_CONTROL(unsigned long a,unsigned long b)11989 static inline uint64_t BDK_BGXX_SMUX_HG2_CONTROL(unsigned long a, unsigned long b)
11990 {
11991 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
11992 return 0x87e0e0020210ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11993 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
11994 return 0x87e0e0020210ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
11995 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
11996 return 0x87e0e0020210ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
11997 __bdk_csr_fatal("BGXX_SMUX_HG2_CONTROL", 2, a, b, 0, 0);
11998 }
11999
12000 #define typedef_BDK_BGXX_SMUX_HG2_CONTROL(a,b) bdk_bgxx_smux_hg2_control_t
12001 #define bustype_BDK_BGXX_SMUX_HG2_CONTROL(a,b) BDK_CSR_TYPE_RSL
12002 #define basename_BDK_BGXX_SMUX_HG2_CONTROL(a,b) "BGXX_SMUX_HG2_CONTROL"
12003 #define device_bar_BDK_BGXX_SMUX_HG2_CONTROL(a,b) 0x0 /* PF_BAR0 */
12004 #define busnum_BDK_BGXX_SMUX_HG2_CONTROL(a,b) (a)
12005 #define arguments_BDK_BGXX_SMUX_HG2_CONTROL(a,b) (a),(b),-1,-1
12006
12007 /**
12008 * Register (RSL) bgx#_smu#_rx_bad_col_hi
12009 *
12010 * BGX SMU RX Bad Column High Registers
12011 */
12012 union bdk_bgxx_smux_rx_bad_col_hi
12013 {
12014 uint64_t u;
12015 struct bdk_bgxx_smux_rx_bad_col_hi_s
12016 {
12017 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12018 uint64_t reserved_17_63 : 47;
12019 uint64_t val : 1; /**< [ 16: 16](R/W1C/H) Set when BGX()_SMU()_RX_INT[PCTERR] is set. */
12020 uint64_t state : 8; /**< [ 15: 8](RO/H) When BGX()_SMU()_RX_INT[PCTERR] is set, contains the receive state at the time of
12021 the error. */
12022 uint64_t lane_rxc : 8; /**< [ 7: 0](RO/H) When BGX()_SMU()_RX_INT[PCTERR] is set, contains the column at the time of the error. */
12023 #else /* Word 0 - Little Endian */
12024 uint64_t lane_rxc : 8; /**< [ 7: 0](RO/H) When BGX()_SMU()_RX_INT[PCTERR] is set, contains the column at the time of the error. */
12025 uint64_t state : 8; /**< [ 15: 8](RO/H) When BGX()_SMU()_RX_INT[PCTERR] is set, contains the receive state at the time of
12026 the error. */
12027 uint64_t val : 1; /**< [ 16: 16](R/W1C/H) Set when BGX()_SMU()_RX_INT[PCTERR] is set. */
12028 uint64_t reserved_17_63 : 47;
12029 #endif /* Word 0 - End */
12030 } s;
12031 /* struct bdk_bgxx_smux_rx_bad_col_hi_s cn; */
12032 };
12033 typedef union bdk_bgxx_smux_rx_bad_col_hi bdk_bgxx_smux_rx_bad_col_hi_t;
12034
12035 static inline uint64_t BDK_BGXX_SMUX_RX_BAD_COL_HI(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_BAD_COL_HI(unsigned long a,unsigned long b)12036 static inline uint64_t BDK_BGXX_SMUX_RX_BAD_COL_HI(unsigned long a, unsigned long b)
12037 {
12038 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12039 return 0x87e0e0020058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12040 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12041 return 0x87e0e0020058ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12042 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12043 return 0x87e0e0020058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12044 __bdk_csr_fatal("BGXX_SMUX_RX_BAD_COL_HI", 2, a, b, 0, 0);
12045 }
12046
12047 #define typedef_BDK_BGXX_SMUX_RX_BAD_COL_HI(a,b) bdk_bgxx_smux_rx_bad_col_hi_t
12048 #define bustype_BDK_BGXX_SMUX_RX_BAD_COL_HI(a,b) BDK_CSR_TYPE_RSL
12049 #define basename_BDK_BGXX_SMUX_RX_BAD_COL_HI(a,b) "BGXX_SMUX_RX_BAD_COL_HI"
12050 #define device_bar_BDK_BGXX_SMUX_RX_BAD_COL_HI(a,b) 0x0 /* PF_BAR0 */
12051 #define busnum_BDK_BGXX_SMUX_RX_BAD_COL_HI(a,b) (a)
12052 #define arguments_BDK_BGXX_SMUX_RX_BAD_COL_HI(a,b) (a),(b),-1,-1
12053
12054 /**
12055 * Register (RSL) bgx#_smu#_rx_bad_col_lo
12056 *
12057 * BGX SMU RX Bad Column Low Registers
12058 */
12059 union bdk_bgxx_smux_rx_bad_col_lo
12060 {
12061 uint64_t u;
12062 struct bdk_bgxx_smux_rx_bad_col_lo_s
12063 {
12064 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12065 uint64_t lane_rxd : 64; /**< [ 63: 0](RO/H) When BGX()_SMU()_RX_INT[PCTERR] is set, [LANE_RXD] contains the XAUI/RXAUI column at
12066 the time of the error. */
12067 #else /* Word 0 - Little Endian */
12068 uint64_t lane_rxd : 64; /**< [ 63: 0](RO/H) When BGX()_SMU()_RX_INT[PCTERR] is set, [LANE_RXD] contains the XAUI/RXAUI column at
12069 the time of the error. */
12070 #endif /* Word 0 - End */
12071 } s;
12072 /* struct bdk_bgxx_smux_rx_bad_col_lo_s cn; */
12073 };
12074 typedef union bdk_bgxx_smux_rx_bad_col_lo bdk_bgxx_smux_rx_bad_col_lo_t;
12075
12076 static inline uint64_t BDK_BGXX_SMUX_RX_BAD_COL_LO(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_BAD_COL_LO(unsigned long a,unsigned long b)12077 static inline uint64_t BDK_BGXX_SMUX_RX_BAD_COL_LO(unsigned long a, unsigned long b)
12078 {
12079 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12080 return 0x87e0e0020050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12081 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12082 return 0x87e0e0020050ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12083 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12084 return 0x87e0e0020050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12085 __bdk_csr_fatal("BGXX_SMUX_RX_BAD_COL_LO", 2, a, b, 0, 0);
12086 }
12087
12088 #define typedef_BDK_BGXX_SMUX_RX_BAD_COL_LO(a,b) bdk_bgxx_smux_rx_bad_col_lo_t
12089 #define bustype_BDK_BGXX_SMUX_RX_BAD_COL_LO(a,b) BDK_CSR_TYPE_RSL
12090 #define basename_BDK_BGXX_SMUX_RX_BAD_COL_LO(a,b) "BGXX_SMUX_RX_BAD_COL_LO"
12091 #define device_bar_BDK_BGXX_SMUX_RX_BAD_COL_LO(a,b) 0x0 /* PF_BAR0 */
12092 #define busnum_BDK_BGXX_SMUX_RX_BAD_COL_LO(a,b) (a)
12093 #define arguments_BDK_BGXX_SMUX_RX_BAD_COL_LO(a,b) (a),(b),-1,-1
12094
12095 /**
12096 * Register (RSL) bgx#_smu#_rx_ctl
12097 *
12098 * BGX SMU RX Control Registers
12099 */
12100 union bdk_bgxx_smux_rx_ctl
12101 {
12102 uint64_t u;
12103 struct bdk_bgxx_smux_rx_ctl_s
12104 {
12105 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12106 uint64_t reserved_2_63 : 62;
12107 uint64_t status : 2; /**< [ 1: 0](RO/H) Link status.
12108 0x0 = Link OK.
12109 0x1 = Local fault.
12110 0x2 = Remote fault.
12111 0x3 = Reserved. */
12112 #else /* Word 0 - Little Endian */
12113 uint64_t status : 2; /**< [ 1: 0](RO/H) Link status.
12114 0x0 = Link OK.
12115 0x1 = Local fault.
12116 0x2 = Remote fault.
12117 0x3 = Reserved. */
12118 uint64_t reserved_2_63 : 62;
12119 #endif /* Word 0 - End */
12120 } s;
12121 /* struct bdk_bgxx_smux_rx_ctl_s cn; */
12122 };
12123 typedef union bdk_bgxx_smux_rx_ctl bdk_bgxx_smux_rx_ctl_t;
12124
12125 static inline uint64_t BDK_BGXX_SMUX_RX_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_CTL(unsigned long a,unsigned long b)12126 static inline uint64_t BDK_BGXX_SMUX_RX_CTL(unsigned long a, unsigned long b)
12127 {
12128 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12129 return 0x87e0e0020048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12130 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12131 return 0x87e0e0020048ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12132 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12133 return 0x87e0e0020048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12134 __bdk_csr_fatal("BGXX_SMUX_RX_CTL", 2, a, b, 0, 0);
12135 }
12136
12137 #define typedef_BDK_BGXX_SMUX_RX_CTL(a,b) bdk_bgxx_smux_rx_ctl_t
12138 #define bustype_BDK_BGXX_SMUX_RX_CTL(a,b) BDK_CSR_TYPE_RSL
12139 #define basename_BDK_BGXX_SMUX_RX_CTL(a,b) "BGXX_SMUX_RX_CTL"
12140 #define device_bar_BDK_BGXX_SMUX_RX_CTL(a,b) 0x0 /* PF_BAR0 */
12141 #define busnum_BDK_BGXX_SMUX_RX_CTL(a,b) (a)
12142 #define arguments_BDK_BGXX_SMUX_RX_CTL(a,b) (a),(b),-1,-1
12143
12144 /**
12145 * Register (RSL) bgx#_smu#_rx_decision
12146 *
12147 * BGX SMU Packet Decision Registers
12148 * This register specifies the byte count used to determine when to accept or to filter a packet.
12149 * As each byte in a packet is received by BGX, the L2 byte count (i.e. the number of bytes from
12150 * the beginning of the L2 header (DMAC)) is compared against CNT. In normal operation, the L2
12151 * header begins after the PREAMBLE + SFD (BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 1) and any
12152 * optional UDD skip data (BGX()_SMU()_RX_UDD_SKP[LEN]).
12153 */
12154 union bdk_bgxx_smux_rx_decision
12155 {
12156 uint64_t u;
12157 struct bdk_bgxx_smux_rx_decision_s
12158 {
12159 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12160 uint64_t reserved_5_63 : 59;
12161 uint64_t cnt : 5; /**< [ 4: 0](R/W) The byte count to decide when to accept or filter a packet. */
12162 #else /* Word 0 - Little Endian */
12163 uint64_t cnt : 5; /**< [ 4: 0](R/W) The byte count to decide when to accept or filter a packet. */
12164 uint64_t reserved_5_63 : 59;
12165 #endif /* Word 0 - End */
12166 } s;
12167 /* struct bdk_bgxx_smux_rx_decision_s cn; */
12168 };
12169 typedef union bdk_bgxx_smux_rx_decision bdk_bgxx_smux_rx_decision_t;
12170
12171 static inline uint64_t BDK_BGXX_SMUX_RX_DECISION(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_DECISION(unsigned long a,unsigned long b)12172 static inline uint64_t BDK_BGXX_SMUX_RX_DECISION(unsigned long a, unsigned long b)
12173 {
12174 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12175 return 0x87e0e0020038ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12176 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12177 return 0x87e0e0020038ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12178 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12179 return 0x87e0e0020038ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12180 __bdk_csr_fatal("BGXX_SMUX_RX_DECISION", 2, a, b, 0, 0);
12181 }
12182
12183 #define typedef_BDK_BGXX_SMUX_RX_DECISION(a,b) bdk_bgxx_smux_rx_decision_t
12184 #define bustype_BDK_BGXX_SMUX_RX_DECISION(a,b) BDK_CSR_TYPE_RSL
12185 #define basename_BDK_BGXX_SMUX_RX_DECISION(a,b) "BGXX_SMUX_RX_DECISION"
12186 #define device_bar_BDK_BGXX_SMUX_RX_DECISION(a,b) 0x0 /* PF_BAR0 */
12187 #define busnum_BDK_BGXX_SMUX_RX_DECISION(a,b) (a)
12188 #define arguments_BDK_BGXX_SMUX_RX_DECISION(a,b) (a),(b),-1,-1
12189
12190 /**
12191 * Register (RSL) bgx#_smu#_rx_frm_chk
12192 *
12193 * BGX SMU RX Frame Check Registers
12194 * The CSRs provide the enable bits for a subset of errors passed to CMR encoded.
12195 */
12196 union bdk_bgxx_smux_rx_frm_chk
12197 {
12198 uint64_t u;
12199 struct bdk_bgxx_smux_rx_frm_chk_s
12200 {
12201 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12202 uint64_t reserved_9_63 : 55;
12203 uint64_t skperr : 1; /**< [ 8: 8](R/W) Skipper error. */
12204 uint64_t rcverr : 1; /**< [ 7: 7](R/W) Frame was received with data-reception error. */
12205 uint64_t reserved_6 : 1;
12206 uint64_t fcserr_c : 1; /**< [ 5: 5](R/W) Control frame was received with FCS/CRC error. */
12207 uint64_t fcserr_d : 1; /**< [ 4: 4](R/W) Data frame was received with FCS/CRC error. */
12208 uint64_t jabber : 1; /**< [ 3: 3](R/W) Frame was received with length \> sys_length. */
12209 uint64_t reserved_0_2 : 3;
12210 #else /* Word 0 - Little Endian */
12211 uint64_t reserved_0_2 : 3;
12212 uint64_t jabber : 1; /**< [ 3: 3](R/W) Frame was received with length \> sys_length. */
12213 uint64_t fcserr_d : 1; /**< [ 4: 4](R/W) Data frame was received with FCS/CRC error. */
12214 uint64_t fcserr_c : 1; /**< [ 5: 5](R/W) Control frame was received with FCS/CRC error. */
12215 uint64_t reserved_6 : 1;
12216 uint64_t rcverr : 1; /**< [ 7: 7](R/W) Frame was received with data-reception error. */
12217 uint64_t skperr : 1; /**< [ 8: 8](R/W) Skipper error. */
12218 uint64_t reserved_9_63 : 55;
12219 #endif /* Word 0 - End */
12220 } s;
12221 /* struct bdk_bgxx_smux_rx_frm_chk_s cn; */
12222 };
12223 typedef union bdk_bgxx_smux_rx_frm_chk bdk_bgxx_smux_rx_frm_chk_t;
12224
12225 static inline uint64_t BDK_BGXX_SMUX_RX_FRM_CHK(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_FRM_CHK(unsigned long a,unsigned long b)12226 static inline uint64_t BDK_BGXX_SMUX_RX_FRM_CHK(unsigned long a, unsigned long b)
12227 {
12228 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12229 return 0x87e0e0020028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12230 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12231 return 0x87e0e0020028ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12232 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12233 return 0x87e0e0020028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12234 __bdk_csr_fatal("BGXX_SMUX_RX_FRM_CHK", 2, a, b, 0, 0);
12235 }
12236
12237 #define typedef_BDK_BGXX_SMUX_RX_FRM_CHK(a,b) bdk_bgxx_smux_rx_frm_chk_t
12238 #define bustype_BDK_BGXX_SMUX_RX_FRM_CHK(a,b) BDK_CSR_TYPE_RSL
12239 #define basename_BDK_BGXX_SMUX_RX_FRM_CHK(a,b) "BGXX_SMUX_RX_FRM_CHK"
12240 #define device_bar_BDK_BGXX_SMUX_RX_FRM_CHK(a,b) 0x0 /* PF_BAR0 */
12241 #define busnum_BDK_BGXX_SMUX_RX_FRM_CHK(a,b) (a)
12242 #define arguments_BDK_BGXX_SMUX_RX_FRM_CHK(a,b) (a),(b),-1,-1
12243
12244 /**
12245 * Register (RSL) bgx#_smu#_rx_frm_ctl
12246 *
12247 * BGX SMU RX Frame Control Registers
12248 * This register controls the handling of the frames.
12249 * The [CTL_BCK] and [CTL_DRP] bits control how the hardware handles incoming PAUSE packets. The
12250 * most
12251 * common modes of operation:
12252 * _ [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything
12253 * _ [CTL_BCK] = 0, [CTL_DRP] = 0: software sees all PAUSE frames
12254 * _ [CTL_BCK] = 0, [CTL_DRP] = 1: all PAUSE frames are completely ignored
12255 *
12256 * These control bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in half-duplex mode. Since
12257 * PAUSE
12258 * packets only apply to full duplex operation, any PAUSE packet would constitute an exception
12259 * which should be handled by the processing cores. PAUSE packets should not be forwarded.
12260 */
12261 union bdk_bgxx_smux_rx_frm_ctl
12262 {
12263 uint64_t u;
12264 struct bdk_bgxx_smux_rx_frm_ctl_s
12265 {
12266 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12267 uint64_t reserved_13_63 : 51;
12268 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
12269 packet.
12270
12271 The timestamp bytes are added to the packet in such a way as to not modify the packet's
12272 receive byte count. This implies that the BGX()_SMU()_RX_JABBER,
12273 BGX()_SMU()_RX_DECISION, and BGX()_SMU()_RX_UDD_SKP do not require any
12274 adjustment as they operate on the received packet size. When the packet reaches NIC, its
12275 size reflects the additional bytes. */
12276 uint64_t reserved_6_11 : 6;
12277 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
12278 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
12279 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
12280 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control PAUSE frames. */
12281 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
12282
12283 0 = PREAMBLE + SFD is sent to core as part of frame.
12284 1 = PREAMBLE + SFD is dropped.
12285 [PRE_CHK] must be set to enable this and all PREAMBLE features.
12286
12287 If [PTP_MODE] = 1 and [PRE_CHK] = 1, [PRE_STRP] must be 1.
12288
12289 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
12290 if
12291 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
12292 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
12293 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
12294 of the L2 header for DMAC and control frame recognition. */
12295 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness.
12296 This port is configured to send a valid 802.3 PREAMBLE to begin every frame. BGX checks
12297 that a valid PREAMBLE is received. When a problem does occur within
12298 the PREAMBLE sequence, the frame is marked as bad and not sent into the core. The
12299 BGX()_SMU()_RX_INT[PCTERR] interrupt is also raised.
12300
12301 When BGX()_SMU()_TX_CTL[HG_EN] is set, [PRE_CHK] must be 0.
12302
12303 If [PTP_MODE] = 1 and [PRE_CHK] = 1, [PRE_STRP] must be 1. */
12304 #else /* Word 0 - Little Endian */
12305 uint64_t pre_chk : 1; /**< [ 0: 0](R/W) Check the preamble for correctness.
12306 This port is configured to send a valid 802.3 PREAMBLE to begin every frame. BGX checks
12307 that a valid PREAMBLE is received. When a problem does occur within
12308 the PREAMBLE sequence, the frame is marked as bad and not sent into the core. The
12309 BGX()_SMU()_RX_INT[PCTERR] interrupt is also raised.
12310
12311 When BGX()_SMU()_TX_CTL[HG_EN] is set, [PRE_CHK] must be 0.
12312
12313 If [PTP_MODE] = 1 and [PRE_CHK] = 1, [PRE_STRP] must be 1. */
12314 uint64_t pre_strp : 1; /**< [ 1: 1](R/W) Strip off the preamble (when present).
12315
12316 0 = PREAMBLE + SFD is sent to core as part of frame.
12317 1 = PREAMBLE + SFD is dropped.
12318 [PRE_CHK] must be set to enable this and all PREAMBLE features.
12319
12320 If [PTP_MODE] = 1 and [PRE_CHK] = 1, [PRE_STRP] must be 1.
12321
12322 When [PRE_CHK] is set (indicating that the PREAMBLE will be sent), [PRE_STRP] determines
12323 if
12324 the PREAMBLE+SFD bytes are thrown away or sent to the core as part of the packet. In
12325 either mode, the PREAMBLE+SFD bytes are not counted toward the packet size when checking
12326 against the MIN and MAX bounds. Furthermore, the bytes are skipped when locating the start
12327 of the L2 header for DMAC and control frame recognition. */
12328 uint64_t ctl_drp : 1; /**< [ 2: 2](R/W) Drop control PAUSE frames. */
12329 uint64_t ctl_bck : 1; /**< [ 3: 3](R/W) Forward PAUSE information to TX block. */
12330 uint64_t ctl_mcst : 1; /**< [ 4: 4](R/W) Control PAUSE frames can match globally assigned multicast address. */
12331 uint64_t ctl_smac : 1; /**< [ 5: 5](R/W) Control PAUSE frames can match station SMAC. */
12332 uint64_t reserved_6_11 : 6;
12333 uint64_t ptp_mode : 1; /**< [ 12: 12](R/W) Timestamp mode. When [PTP_MODE] is set, a 64-bit timestamp is prepended to every incoming
12334 packet.
12335
12336 The timestamp bytes are added to the packet in such a way as to not modify the packet's
12337 receive byte count. This implies that the BGX()_SMU()_RX_JABBER,
12338 BGX()_SMU()_RX_DECISION, and BGX()_SMU()_RX_UDD_SKP do not require any
12339 adjustment as they operate on the received packet size. When the packet reaches NIC, its
12340 size reflects the additional bytes. */
12341 uint64_t reserved_13_63 : 51;
12342 #endif /* Word 0 - End */
12343 } s;
12344 /* struct bdk_bgxx_smux_rx_frm_ctl_s cn; */
12345 };
12346 typedef union bdk_bgxx_smux_rx_frm_ctl bdk_bgxx_smux_rx_frm_ctl_t;
12347
12348 static inline uint64_t BDK_BGXX_SMUX_RX_FRM_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_FRM_CTL(unsigned long a,unsigned long b)12349 static inline uint64_t BDK_BGXX_SMUX_RX_FRM_CTL(unsigned long a, unsigned long b)
12350 {
12351 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12352 return 0x87e0e0020020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12353 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12354 return 0x87e0e0020020ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12355 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12356 return 0x87e0e0020020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12357 __bdk_csr_fatal("BGXX_SMUX_RX_FRM_CTL", 2, a, b, 0, 0);
12358 }
12359
12360 #define typedef_BDK_BGXX_SMUX_RX_FRM_CTL(a,b) bdk_bgxx_smux_rx_frm_ctl_t
12361 #define bustype_BDK_BGXX_SMUX_RX_FRM_CTL(a,b) BDK_CSR_TYPE_RSL
12362 #define basename_BDK_BGXX_SMUX_RX_FRM_CTL(a,b) "BGXX_SMUX_RX_FRM_CTL"
12363 #define device_bar_BDK_BGXX_SMUX_RX_FRM_CTL(a,b) 0x0 /* PF_BAR0 */
12364 #define busnum_BDK_BGXX_SMUX_RX_FRM_CTL(a,b) (a)
12365 #define arguments_BDK_BGXX_SMUX_RX_FRM_CTL(a,b) (a),(b),-1,-1
12366
12367 /**
12368 * Register (RSL) bgx#_smu#_rx_int
12369 *
12370 * BGX SMU Receive Interrupt Registers
12371 * SMU Interrupt Register.
12372 * Internal:
12373 * Exception conditions \<9\> and \<4:0\> can also set the rcv/opcode in the received packet's work
12374 * queue entry. BGX()_SMU()_RX_FRM_CHK provides a bit mask for configuring which
12375 * conditions set the error.
12376 */
12377 union bdk_bgxx_smux_rx_int
12378 {
12379 uint64_t u;
12380 struct bdk_bgxx_smux_rx_int_s
12381 {
12382 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12383 uint64_t reserved_12_63 : 52;
12384 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1C/H) HiGig2 received message CRC or control-character error. Set when either a CRC8 error is
12385 detected, or when a control character is found in the message bytes after the K.SOM.
12386 HG2CC has higher priority than HG2FLD, which means that a HiGig2 message that results in
12387 HG2CC getting set never sets HG2FLD. */
12388 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1C/H) HiGig2 received message field error:
12389
12390 MSG_TYPE field not 0x0, i.e. it is not a flow-control message, which is the only defined
12391 type for HiGig2.
12392
12393 FWD_TYPE field not 0x0, i.e. it is not a link-level message, which is the only defined
12394 type for HiGig2.
12395
12396 FC_OBJECT field is neither 0x0 for physical link, nor 0x2 for logical link. Those are the
12397 only two defined types in HiGig2 */
12398 uint64_t bad_term : 1; /**< [ 9: 9](R/W1C/H) Frame is terminated by control character other than /T/. The error
12399 propagation control character /E/ will be included as part of the frame and does not cause
12400 a frame termination. */
12401 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1C/H) Detected reserved sequence. */
12402 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1C/H) Remote-fault sequence detected. */
12403 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1C/H) Local-fault sequence detected. */
12404 uint64_t rsverr : 1; /**< [ 5: 5](R/W1C/H) Detected reserved opcode. */
12405 uint64_t pcterr : 1; /**< [ 4: 4](R/W1C/H) Bad preamble/protocol. In XAUI/RXAUI mode, the column of data that was bad is logged in
12406 BGX()_SMU()_RX_BAD_COL_LO and BGX()_SMU()_RX_BAD_COL_HI.
12407 PCTERR checks that the frame begins with a valid
12408 PREAMBLE sequence. Does not check the number of PREAMBLE cycles. */
12409 uint64_t skperr : 1; /**< [ 3: 3](R/W1C/H) Skipper error. */
12410 uint64_t rcverr : 1; /**< [ 2: 2](R/W1C/H) Frame was received with data-reception error. */
12411 uint64_t fcserr : 1; /**< [ 1: 1](R/W1C/H) Frame was received with FCS/CRC error */
12412 uint64_t jabber : 1; /**< [ 0: 0](R/W1C/H) Frame was received with length \> sys_length. An RX Jabber error indicates that a packet
12413 was received which is longer than the maximum allowed packet as defined by the system. BGX
12414 terminates the packet with an EOP on the beat on which JABBER was exceeded. The beat on
12415 which JABBER was exceeded is left unchanged and all subsequent data beats are dropped.
12416 Failure to truncate could lead to system instability. */
12417 #else /* Word 0 - Little Endian */
12418 uint64_t jabber : 1; /**< [ 0: 0](R/W1C/H) Frame was received with length \> sys_length. An RX Jabber error indicates that a packet
12419 was received which is longer than the maximum allowed packet as defined by the system. BGX
12420 terminates the packet with an EOP on the beat on which JABBER was exceeded. The beat on
12421 which JABBER was exceeded is left unchanged and all subsequent data beats are dropped.
12422 Failure to truncate could lead to system instability. */
12423 uint64_t fcserr : 1; /**< [ 1: 1](R/W1C/H) Frame was received with FCS/CRC error */
12424 uint64_t rcverr : 1; /**< [ 2: 2](R/W1C/H) Frame was received with data-reception error. */
12425 uint64_t skperr : 1; /**< [ 3: 3](R/W1C/H) Skipper error. */
12426 uint64_t pcterr : 1; /**< [ 4: 4](R/W1C/H) Bad preamble/protocol. In XAUI/RXAUI mode, the column of data that was bad is logged in
12427 BGX()_SMU()_RX_BAD_COL_LO and BGX()_SMU()_RX_BAD_COL_HI.
12428 PCTERR checks that the frame begins with a valid
12429 PREAMBLE sequence. Does not check the number of PREAMBLE cycles. */
12430 uint64_t rsverr : 1; /**< [ 5: 5](R/W1C/H) Detected reserved opcode. */
12431 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1C/H) Local-fault sequence detected. */
12432 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1C/H) Remote-fault sequence detected. */
12433 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1C/H) Detected reserved sequence. */
12434 uint64_t bad_term : 1; /**< [ 9: 9](R/W1C/H) Frame is terminated by control character other than /T/. The error
12435 propagation control character /E/ will be included as part of the frame and does not cause
12436 a frame termination. */
12437 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1C/H) HiGig2 received message field error:
12438
12439 MSG_TYPE field not 0x0, i.e. it is not a flow-control message, which is the only defined
12440 type for HiGig2.
12441
12442 FWD_TYPE field not 0x0, i.e. it is not a link-level message, which is the only defined
12443 type for HiGig2.
12444
12445 FC_OBJECT field is neither 0x0 for physical link, nor 0x2 for logical link. Those are the
12446 only two defined types in HiGig2 */
12447 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1C/H) HiGig2 received message CRC or control-character error. Set when either a CRC8 error is
12448 detected, or when a control character is found in the message bytes after the K.SOM.
12449 HG2CC has higher priority than HG2FLD, which means that a HiGig2 message that results in
12450 HG2CC getting set never sets HG2FLD. */
12451 uint64_t reserved_12_63 : 52;
12452 #endif /* Word 0 - End */
12453 } s;
12454 /* struct bdk_bgxx_smux_rx_int_s cn; */
12455 };
12456 typedef union bdk_bgxx_smux_rx_int bdk_bgxx_smux_rx_int_t;
12457
12458 static inline uint64_t BDK_BGXX_SMUX_RX_INT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_INT(unsigned long a,unsigned long b)12459 static inline uint64_t BDK_BGXX_SMUX_RX_INT(unsigned long a, unsigned long b)
12460 {
12461 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12462 return 0x87e0e0020000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12463 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12464 return 0x87e0e0020000ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12465 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12466 return 0x87e0e0020000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12467 __bdk_csr_fatal("BGXX_SMUX_RX_INT", 2, a, b, 0, 0);
12468 }
12469
12470 #define typedef_BDK_BGXX_SMUX_RX_INT(a,b) bdk_bgxx_smux_rx_int_t
12471 #define bustype_BDK_BGXX_SMUX_RX_INT(a,b) BDK_CSR_TYPE_RSL
12472 #define basename_BDK_BGXX_SMUX_RX_INT(a,b) "BGXX_SMUX_RX_INT"
12473 #define device_bar_BDK_BGXX_SMUX_RX_INT(a,b) 0x0 /* PF_BAR0 */
12474 #define busnum_BDK_BGXX_SMUX_RX_INT(a,b) (a)
12475 #define arguments_BDK_BGXX_SMUX_RX_INT(a,b) (a),(b),-1,-1
12476
12477 /**
12478 * Register (RSL) bgx#_smu#_rx_int_ena_w1c
12479 *
12480 * BGX SMU Receive Interrupt Enable Clear Registers
12481 * This register clears interrupt enable bits.
12482 */
12483 union bdk_bgxx_smux_rx_int_ena_w1c
12484 {
12485 uint64_t u;
12486 struct bdk_bgxx_smux_rx_int_ena_w1c_s
12487 {
12488 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12489 uint64_t reserved_12_63 : 52;
12490 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2CC]. */
12491 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2FLD]. */
12492 uint64_t bad_term : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_TERM]. */
12493 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12494 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[REM_FAULT]. */
12495 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12496 uint64_t rsverr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[RSVERR]. */
12497 uint64_t pcterr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[PCTERR]. */
12498 uint64_t skperr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[SKPERR]. */
12499 uint64_t rcverr : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[RCVERR]. */
12500 uint64_t fcserr : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[FCSERR]. */
12501 uint64_t jabber : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[JABBER]. */
12502 #else /* Word 0 - Little Endian */
12503 uint64_t jabber : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[JABBER]. */
12504 uint64_t fcserr : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[FCSERR]. */
12505 uint64_t rcverr : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[RCVERR]. */
12506 uint64_t skperr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[SKPERR]. */
12507 uint64_t pcterr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[PCTERR]. */
12508 uint64_t rsverr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[RSVERR]. */
12509 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12510 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[REM_FAULT]. */
12511 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12512 uint64_t bad_term : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_TERM]. */
12513 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2FLD]. */
12514 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2CC]. */
12515 uint64_t reserved_12_63 : 52;
12516 #endif /* Word 0 - End */
12517 } s;
12518 /* struct bdk_bgxx_smux_rx_int_ena_w1c_s cn81xx; */
12519 /* struct bdk_bgxx_smux_rx_int_ena_w1c_s cn88xx; */
12520 struct bdk_bgxx_smux_rx_int_ena_w1c_cn83xx
12521 {
12522 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12523 uint64_t reserved_12_63 : 52;
12524 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2CC]. */
12525 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2FLD]. */
12526 uint64_t bad_term : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_TERM]. */
12527 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12528 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[REM_FAULT]. */
12529 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12530 uint64_t rsverr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[RSVERR]. */
12531 uint64_t pcterr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[PCTERR]. */
12532 uint64_t skperr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[SKPERR]. */
12533 uint64_t rcverr : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[RCVERR]. */
12534 uint64_t fcserr : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[FCSERR]. */
12535 uint64_t jabber : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[JABBER]. */
12536 #else /* Word 0 - Little Endian */
12537 uint64_t jabber : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[JABBER]. */
12538 uint64_t fcserr : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[FCSERR]. */
12539 uint64_t rcverr : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[RCVERR]. */
12540 uint64_t skperr : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[SKPERR]. */
12541 uint64_t pcterr : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[PCTERR]. */
12542 uint64_t rsverr : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[RSVERR]. */
12543 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12544 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[REM_FAULT]. */
12545 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12546 uint64_t bad_term : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_TERM]. */
12547 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2FLD]. */
12548 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2CC]. */
12549 uint64_t reserved_12_63 : 52;
12550 #endif /* Word 0 - End */
12551 } cn83xx;
12552 };
12553 typedef union bdk_bgxx_smux_rx_int_ena_w1c bdk_bgxx_smux_rx_int_ena_w1c_t;
12554
12555 static inline uint64_t BDK_BGXX_SMUX_RX_INT_ENA_W1C(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_INT_ENA_W1C(unsigned long a,unsigned long b)12556 static inline uint64_t BDK_BGXX_SMUX_RX_INT_ENA_W1C(unsigned long a, unsigned long b)
12557 {
12558 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12559 return 0x87e0e0020010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12560 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12561 return 0x87e0e0020010ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12562 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12563 return 0x87e0e0020010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12564 __bdk_csr_fatal("BGXX_SMUX_RX_INT_ENA_W1C", 2, a, b, 0, 0);
12565 }
12566
12567 #define typedef_BDK_BGXX_SMUX_RX_INT_ENA_W1C(a,b) bdk_bgxx_smux_rx_int_ena_w1c_t
12568 #define bustype_BDK_BGXX_SMUX_RX_INT_ENA_W1C(a,b) BDK_CSR_TYPE_RSL
12569 #define basename_BDK_BGXX_SMUX_RX_INT_ENA_W1C(a,b) "BGXX_SMUX_RX_INT_ENA_W1C"
12570 #define device_bar_BDK_BGXX_SMUX_RX_INT_ENA_W1C(a,b) 0x0 /* PF_BAR0 */
12571 #define busnum_BDK_BGXX_SMUX_RX_INT_ENA_W1C(a,b) (a)
12572 #define arguments_BDK_BGXX_SMUX_RX_INT_ENA_W1C(a,b) (a),(b),-1,-1
12573
12574 /**
12575 * Register (RSL) bgx#_smu#_rx_int_ena_w1s
12576 *
12577 * BGX SMU Receive Interrupt Enable Set Registers
12578 * This register sets interrupt enable bits.
12579 */
12580 union bdk_bgxx_smux_rx_int_ena_w1s
12581 {
12582 uint64_t u;
12583 struct bdk_bgxx_smux_rx_int_ena_w1s_s
12584 {
12585 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12586 uint64_t reserved_12_63 : 52;
12587 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2CC]. */
12588 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2FLD]. */
12589 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_TERM]. */
12590 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12591 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[REM_FAULT]. */
12592 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12593 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[RSVERR]. */
12594 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[PCTERR]. */
12595 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[SKPERR]. */
12596 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[RCVERR]. */
12597 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[FCSERR]. */
12598 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[JABBER]. */
12599 #else /* Word 0 - Little Endian */
12600 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[JABBER]. */
12601 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[FCSERR]. */
12602 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[RCVERR]. */
12603 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[SKPERR]. */
12604 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[PCTERR]. */
12605 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[RSVERR]. */
12606 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12607 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[REM_FAULT]. */
12608 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12609 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[BAD_TERM]. */
12610 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2FLD]. */
12611 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_RX_INT[HG2CC]. */
12612 uint64_t reserved_12_63 : 52;
12613 #endif /* Word 0 - End */
12614 } s;
12615 /* struct bdk_bgxx_smux_rx_int_ena_w1s_s cn81xx; */
12616 /* struct bdk_bgxx_smux_rx_int_ena_w1s_s cn88xx; */
12617 struct bdk_bgxx_smux_rx_int_ena_w1s_cn83xx
12618 {
12619 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12620 uint64_t reserved_12_63 : 52;
12621 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2CC]. */
12622 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2FLD]. */
12623 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_TERM]. */
12624 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12625 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[REM_FAULT]. */
12626 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12627 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[RSVERR]. */
12628 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[PCTERR]. */
12629 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[SKPERR]. */
12630 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[RCVERR]. */
12631 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[FCSERR]. */
12632 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[JABBER]. */
12633 #else /* Word 0 - Little Endian */
12634 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[JABBER]. */
12635 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[FCSERR]. */
12636 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[RCVERR]. */
12637 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[SKPERR]. */
12638 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[PCTERR]. */
12639 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[RSVERR]. */
12640 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12641 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[REM_FAULT]. */
12642 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12643 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[BAD_TERM]. */
12644 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2FLD]. */
12645 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_RX_INT[HG2CC]. */
12646 uint64_t reserved_12_63 : 52;
12647 #endif /* Word 0 - End */
12648 } cn83xx;
12649 };
12650 typedef union bdk_bgxx_smux_rx_int_ena_w1s bdk_bgxx_smux_rx_int_ena_w1s_t;
12651
12652 static inline uint64_t BDK_BGXX_SMUX_RX_INT_ENA_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_INT_ENA_W1S(unsigned long a,unsigned long b)12653 static inline uint64_t BDK_BGXX_SMUX_RX_INT_ENA_W1S(unsigned long a, unsigned long b)
12654 {
12655 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12656 return 0x87e0e0020018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12657 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12658 return 0x87e0e0020018ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12659 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12660 return 0x87e0e0020018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12661 __bdk_csr_fatal("BGXX_SMUX_RX_INT_ENA_W1S", 2, a, b, 0, 0);
12662 }
12663
12664 #define typedef_BDK_BGXX_SMUX_RX_INT_ENA_W1S(a,b) bdk_bgxx_smux_rx_int_ena_w1s_t
12665 #define bustype_BDK_BGXX_SMUX_RX_INT_ENA_W1S(a,b) BDK_CSR_TYPE_RSL
12666 #define basename_BDK_BGXX_SMUX_RX_INT_ENA_W1S(a,b) "BGXX_SMUX_RX_INT_ENA_W1S"
12667 #define device_bar_BDK_BGXX_SMUX_RX_INT_ENA_W1S(a,b) 0x0 /* PF_BAR0 */
12668 #define busnum_BDK_BGXX_SMUX_RX_INT_ENA_W1S(a,b) (a)
12669 #define arguments_BDK_BGXX_SMUX_RX_INT_ENA_W1S(a,b) (a),(b),-1,-1
12670
12671 /**
12672 * Register (RSL) bgx#_smu#_rx_int_w1s
12673 *
12674 * BGX SMU Receive Interrupt Set Registers
12675 * This register sets interrupt bits.
12676 */
12677 union bdk_bgxx_smux_rx_int_w1s
12678 {
12679 uint64_t u;
12680 struct bdk_bgxx_smux_rx_int_w1s_s
12681 {
12682 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12683 uint64_t reserved_12_63 : 52;
12684 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[HG2CC]. */
12685 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[HG2FLD]. */
12686 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[BAD_TERM]. */
12687 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12688 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[REM_FAULT]. */
12689 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12690 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[RSVERR]. */
12691 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[PCTERR]. */
12692 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[SKPERR]. */
12693 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[RCVERR]. */
12694 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[FCSERR]. */
12695 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[JABBER]. */
12696 #else /* Word 0 - Little Endian */
12697 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[JABBER]. */
12698 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[FCSERR]. */
12699 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[RCVERR]. */
12700 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[SKPERR]. */
12701 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[PCTERR]. */
12702 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[RSVERR]. */
12703 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12704 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[REM_FAULT]. */
12705 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12706 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[BAD_TERM]. */
12707 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[HG2FLD]. */
12708 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_RX_INT[HG2CC]. */
12709 uint64_t reserved_12_63 : 52;
12710 #endif /* Word 0 - End */
12711 } s;
12712 /* struct bdk_bgxx_smux_rx_int_w1s_s cn81xx; */
12713 /* struct bdk_bgxx_smux_rx_int_w1s_s cn88xx; */
12714 struct bdk_bgxx_smux_rx_int_w1s_cn83xx
12715 {
12716 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12717 uint64_t reserved_12_63 : 52;
12718 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[HG2CC]. */
12719 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[HG2FLD]. */
12720 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[BAD_TERM]. */
12721 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12722 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[REM_FAULT]. */
12723 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12724 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[RSVERR]. */
12725 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[PCTERR]. */
12726 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[SKPERR]. */
12727 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[RCVERR]. */
12728 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[FCSERR]. */
12729 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[JABBER]. */
12730 #else /* Word 0 - Little Endian */
12731 uint64_t jabber : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[JABBER]. */
12732 uint64_t fcserr : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[FCSERR]. */
12733 uint64_t rcverr : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[RCVERR]. */
12734 uint64_t skperr : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[SKPERR]. */
12735 uint64_t pcterr : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[PCTERR]. */
12736 uint64_t rsverr : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[RSVERR]. */
12737 uint64_t loc_fault : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[LOC_FAULT]. */
12738 uint64_t rem_fault : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[REM_FAULT]. */
12739 uint64_t bad_seq : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[BAD_SEQ]. */
12740 uint64_t bad_term : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[BAD_TERM]. */
12741 uint64_t hg2fld : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[HG2FLD]. */
12742 uint64_t hg2cc : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_RX_INT[HG2CC]. */
12743 uint64_t reserved_12_63 : 52;
12744 #endif /* Word 0 - End */
12745 } cn83xx;
12746 };
12747 typedef union bdk_bgxx_smux_rx_int_w1s bdk_bgxx_smux_rx_int_w1s_t;
12748
12749 static inline uint64_t BDK_BGXX_SMUX_RX_INT_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_INT_W1S(unsigned long a,unsigned long b)12750 static inline uint64_t BDK_BGXX_SMUX_RX_INT_W1S(unsigned long a, unsigned long b)
12751 {
12752 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12753 return 0x87e0e0020008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12754 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12755 return 0x87e0e0020008ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12756 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12757 return 0x87e0e0020008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12758 __bdk_csr_fatal("BGXX_SMUX_RX_INT_W1S", 2, a, b, 0, 0);
12759 }
12760
12761 #define typedef_BDK_BGXX_SMUX_RX_INT_W1S(a,b) bdk_bgxx_smux_rx_int_w1s_t
12762 #define bustype_BDK_BGXX_SMUX_RX_INT_W1S(a,b) BDK_CSR_TYPE_RSL
12763 #define basename_BDK_BGXX_SMUX_RX_INT_W1S(a,b) "BGXX_SMUX_RX_INT_W1S"
12764 #define device_bar_BDK_BGXX_SMUX_RX_INT_W1S(a,b) 0x0 /* PF_BAR0 */
12765 #define busnum_BDK_BGXX_SMUX_RX_INT_W1S(a,b) (a)
12766 #define arguments_BDK_BGXX_SMUX_RX_INT_W1S(a,b) (a),(b),-1,-1
12767
12768 /**
12769 * Register (RSL) bgx#_smu#_rx_jabber
12770 *
12771 * BGX SMU Maximum Packet-Size Registers
12772 * This register specifies the maximum size for packets, beyond which the SMU truncates. In
12773 * XAUI/RXAUI mode, port 0 is used for checking.
12774 *
12775 * Internal:
12776 * The packet that will be sent to the packet input logic will have an
12777 * additionl 8 bytes if BGX()_SMU()_RX_FRM_CTL[PRE_CHK] is set and
12778 * BGX()_SMU()_RX_FRM_CTL[PRE_STRP] is clear. The max packet that will be sent is
12779 * defined as:
12780 *
12781 * _ max_sized_packet = BGX()_SMU()_RX_JABBER[CNT]+((BGX()_SMU()_RX_FRM_CTL[PRE_CHK] &
12782 * !BGX()_SMU()_RX_FRM_CTL[PRE_STRP])*8)
12783 */
12784 union bdk_bgxx_smux_rx_jabber
12785 {
12786 uint64_t u;
12787 struct bdk_bgxx_smux_rx_jabber_s
12788 {
12789 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12790 uint64_t reserved_16_63 : 48;
12791 uint64_t cnt : 16; /**< [ 15: 0](R/W) Byte count for jabber check. Failing packets set the JABBER interrupt and are optionally
12792 sent with opcode = JABBER. BGX truncates the packet to CNT+1 to CNT+8 bytes.
12793 CNT must be 8-byte aligned such that CNT\<2:0\> = 000. */
12794 #else /* Word 0 - Little Endian */
12795 uint64_t cnt : 16; /**< [ 15: 0](R/W) Byte count for jabber check. Failing packets set the JABBER interrupt and are optionally
12796 sent with opcode = JABBER. BGX truncates the packet to CNT+1 to CNT+8 bytes.
12797 CNT must be 8-byte aligned such that CNT\<2:0\> = 000. */
12798 uint64_t reserved_16_63 : 48;
12799 #endif /* Word 0 - End */
12800 } s;
12801 /* struct bdk_bgxx_smux_rx_jabber_s cn; */
12802 };
12803 typedef union bdk_bgxx_smux_rx_jabber bdk_bgxx_smux_rx_jabber_t;
12804
12805 static inline uint64_t BDK_BGXX_SMUX_RX_JABBER(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_JABBER(unsigned long a,unsigned long b)12806 static inline uint64_t BDK_BGXX_SMUX_RX_JABBER(unsigned long a, unsigned long b)
12807 {
12808 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12809 return 0x87e0e0020030ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12810 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12811 return 0x87e0e0020030ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12812 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12813 return 0x87e0e0020030ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12814 __bdk_csr_fatal("BGXX_SMUX_RX_JABBER", 2, a, b, 0, 0);
12815 }
12816
12817 #define typedef_BDK_BGXX_SMUX_RX_JABBER(a,b) bdk_bgxx_smux_rx_jabber_t
12818 #define bustype_BDK_BGXX_SMUX_RX_JABBER(a,b) BDK_CSR_TYPE_RSL
12819 #define basename_BDK_BGXX_SMUX_RX_JABBER(a,b) "BGXX_SMUX_RX_JABBER"
12820 #define device_bar_BDK_BGXX_SMUX_RX_JABBER(a,b) 0x0 /* PF_BAR0 */
12821 #define busnum_BDK_BGXX_SMUX_RX_JABBER(a,b) (a)
12822 #define arguments_BDK_BGXX_SMUX_RX_JABBER(a,b) (a),(b),-1,-1
12823
12824 /**
12825 * Register (RSL) bgx#_smu#_rx_udd_skp
12826 *
12827 * BGX SMU User-Defined Data Skip Registers
12828 * Internal:
12829 * (1) The skip bytes are part of the packet and will be sent down the NCB
12830 * packet interface and will be handled by NIC.
12831 * (2) The system can determine if the UDD bytes are included in the FCS check
12832 * by using the FCSSEL field if the FCS check is enabled.
12833 *
12834 * (3) Assume that the preamble/sfd is always at the start of the frame even
12835 * before UDD bytes. In most cases, there will be no preamble in these
12836 * cases since it will be packet interface in direct communication to
12837 * another packet interface (MAC to MAC) without a PHY involved.
12838 *
12839 * (4) We can still do address filtering and control packet filtering if the
12840 * user desires.
12841 *
12842 * (6) In all cases, the UDD bytes will be sent down the packet interface as
12843 * part of the packet. The UDD bytes are never stripped from the actual
12844 * packet.
12845 */
12846 union bdk_bgxx_smux_rx_udd_skp
12847 {
12848 uint64_t u;
12849 struct bdk_bgxx_smux_rx_udd_skp_s
12850 {
12851 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12852 uint64_t reserved_9_63 : 55;
12853 uint64_t fcssel : 1; /**< [ 8: 8](R/W) Include the skip bytes in the FCS calculation.
12854 0 = All skip bytes are included in FCS.
12855 1 = The skip bytes are not included in FCS.
12856
12857 When BGX()_SMU()_TX_CTL[HG_EN] is set, this field must be 0.
12858 The skip bytes are part of the packet and are sent through the NCB packet interface and
12859 are handled by NIC. The system can determine if the UDD bytes are included in the FCS
12860 check by using the FCSSEL field, if the FCS check is enabled. */
12861 uint64_t reserved_7 : 1;
12862 uint64_t len : 7; /**< [ 6: 0](R/W) Amount of user-defined data before the start of the L2C data, in bytes.
12863 Setting to 0 means L2C comes first; maximum value is 64.
12864 LEN must be 0x0 in half-duplex operation.
12865
12866 When BGX()_SMU()_TX_CTL[HG_EN] is set, this field must be set to 12 or 16
12867 (depending on HiGig header size) to account for the HiGig header.
12868 LEN = 12 selects HiGig/HiGig+; LEN = 16 selects HiGig2. */
12869 #else /* Word 0 - Little Endian */
12870 uint64_t len : 7; /**< [ 6: 0](R/W) Amount of user-defined data before the start of the L2C data, in bytes.
12871 Setting to 0 means L2C comes first; maximum value is 64.
12872 LEN must be 0x0 in half-duplex operation.
12873
12874 When BGX()_SMU()_TX_CTL[HG_EN] is set, this field must be set to 12 or 16
12875 (depending on HiGig header size) to account for the HiGig header.
12876 LEN = 12 selects HiGig/HiGig+; LEN = 16 selects HiGig2. */
12877 uint64_t reserved_7 : 1;
12878 uint64_t fcssel : 1; /**< [ 8: 8](R/W) Include the skip bytes in the FCS calculation.
12879 0 = All skip bytes are included in FCS.
12880 1 = The skip bytes are not included in FCS.
12881
12882 When BGX()_SMU()_TX_CTL[HG_EN] is set, this field must be 0.
12883 The skip bytes are part of the packet and are sent through the NCB packet interface and
12884 are handled by NIC. The system can determine if the UDD bytes are included in the FCS
12885 check by using the FCSSEL field, if the FCS check is enabled. */
12886 uint64_t reserved_9_63 : 55;
12887 #endif /* Word 0 - End */
12888 } s;
12889 /* struct bdk_bgxx_smux_rx_udd_skp_s cn; */
12890 };
12891 typedef union bdk_bgxx_smux_rx_udd_skp bdk_bgxx_smux_rx_udd_skp_t;
12892
12893 static inline uint64_t BDK_BGXX_SMUX_RX_UDD_SKP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_RX_UDD_SKP(unsigned long a,unsigned long b)12894 static inline uint64_t BDK_BGXX_SMUX_RX_UDD_SKP(unsigned long a, unsigned long b)
12895 {
12896 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12897 return 0x87e0e0020040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12898 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12899 return 0x87e0e0020040ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12900 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12901 return 0x87e0e0020040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12902 __bdk_csr_fatal("BGXX_SMUX_RX_UDD_SKP", 2, a, b, 0, 0);
12903 }
12904
12905 #define typedef_BDK_BGXX_SMUX_RX_UDD_SKP(a,b) bdk_bgxx_smux_rx_udd_skp_t
12906 #define bustype_BDK_BGXX_SMUX_RX_UDD_SKP(a,b) BDK_CSR_TYPE_RSL
12907 #define basename_BDK_BGXX_SMUX_RX_UDD_SKP(a,b) "BGXX_SMUX_RX_UDD_SKP"
12908 #define device_bar_BDK_BGXX_SMUX_RX_UDD_SKP(a,b) 0x0 /* PF_BAR0 */
12909 #define busnum_BDK_BGXX_SMUX_RX_UDD_SKP(a,b) (a)
12910 #define arguments_BDK_BGXX_SMUX_RX_UDD_SKP(a,b) (a),(b),-1,-1
12911
12912 /**
12913 * Register (RSL) bgx#_smu#_smac
12914 *
12915 * BGX SMU SMAC Registers
12916 */
12917 union bdk_bgxx_smux_smac
12918 {
12919 uint64_t u;
12920 struct bdk_bgxx_smux_smac_s
12921 {
12922 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12923 uint64_t reserved_48_63 : 16;
12924 uint64_t smac : 48; /**< [ 47: 0](R/W) The SMAC field is used for generating and accepting control PAUSE packets. */
12925 #else /* Word 0 - Little Endian */
12926 uint64_t smac : 48; /**< [ 47: 0](R/W) The SMAC field is used for generating and accepting control PAUSE packets. */
12927 uint64_t reserved_48_63 : 16;
12928 #endif /* Word 0 - End */
12929 } s;
12930 /* struct bdk_bgxx_smux_smac_s cn; */
12931 };
12932 typedef union bdk_bgxx_smux_smac bdk_bgxx_smux_smac_t;
12933
12934 static inline uint64_t BDK_BGXX_SMUX_SMAC(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_SMAC(unsigned long a,unsigned long b)12935 static inline uint64_t BDK_BGXX_SMUX_SMAC(unsigned long a, unsigned long b)
12936 {
12937 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12938 return 0x87e0e0020108ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12939 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12940 return 0x87e0e0020108ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12941 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12942 return 0x87e0e0020108ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12943 __bdk_csr_fatal("BGXX_SMUX_SMAC", 2, a, b, 0, 0);
12944 }
12945
12946 #define typedef_BDK_BGXX_SMUX_SMAC(a,b) bdk_bgxx_smux_smac_t
12947 #define bustype_BDK_BGXX_SMUX_SMAC(a,b) BDK_CSR_TYPE_RSL
12948 #define basename_BDK_BGXX_SMUX_SMAC(a,b) "BGXX_SMUX_SMAC"
12949 #define device_bar_BDK_BGXX_SMUX_SMAC(a,b) 0x0 /* PF_BAR0 */
12950 #define busnum_BDK_BGXX_SMUX_SMAC(a,b) (a)
12951 #define arguments_BDK_BGXX_SMUX_SMAC(a,b) (a),(b),-1,-1
12952
12953 /**
12954 * Register (RSL) bgx#_smu#_tx_append
12955 *
12956 * BGX SMU TX Append Control Registers
12957 * For more details on the interactions between FCS and PAD, see also the description of
12958 * BGX()_SMU()_TX_MIN_PKT[MIN_SIZE].
12959 */
12960 union bdk_bgxx_smux_tx_append
12961 {
12962 uint64_t u;
12963 struct bdk_bgxx_smux_tx_append_s
12964 {
12965 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
12966 uint64_t reserved_4_63 : 60;
12967 uint64_t fcs_c : 1; /**< [ 3: 3](R/W) Append the Ethernet FCS on each PAUSE packet. PAUSE packets are normally padded to 60
12968 bytes. If BGX()_SMU()_TX_MIN_PKT[MIN_SIZE] exceeds 59, then [FCS_C] is not used. */
12969 uint64_t fcs_d : 1; /**< [ 2: 2](R/W) Append the Ethernet FCS on each data packet. */
12970 uint64_t pad : 1; /**< [ 1: 1](R/W) Append PAD bytes such that minimum-sized packet is transmitted. */
12971 uint64_t preamble : 1; /**< [ 0: 0](R/W) Prepend the Ethernet preamble on each transfer. When BGX()_SMU()_TX_CTL[HG_EN] is
12972 set, PREAMBLE must be 0. */
12973 #else /* Word 0 - Little Endian */
12974 uint64_t preamble : 1; /**< [ 0: 0](R/W) Prepend the Ethernet preamble on each transfer. When BGX()_SMU()_TX_CTL[HG_EN] is
12975 set, PREAMBLE must be 0. */
12976 uint64_t pad : 1; /**< [ 1: 1](R/W) Append PAD bytes such that minimum-sized packet is transmitted. */
12977 uint64_t fcs_d : 1; /**< [ 2: 2](R/W) Append the Ethernet FCS on each data packet. */
12978 uint64_t fcs_c : 1; /**< [ 3: 3](R/W) Append the Ethernet FCS on each PAUSE packet. PAUSE packets are normally padded to 60
12979 bytes. If BGX()_SMU()_TX_MIN_PKT[MIN_SIZE] exceeds 59, then [FCS_C] is not used. */
12980 uint64_t reserved_4_63 : 60;
12981 #endif /* Word 0 - End */
12982 } s;
12983 /* struct bdk_bgxx_smux_tx_append_s cn; */
12984 };
12985 typedef union bdk_bgxx_smux_tx_append bdk_bgxx_smux_tx_append_t;
12986
12987 static inline uint64_t BDK_BGXX_SMUX_TX_APPEND(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_APPEND(unsigned long a,unsigned long b)12988 static inline uint64_t BDK_BGXX_SMUX_TX_APPEND(unsigned long a, unsigned long b)
12989 {
12990 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
12991 return 0x87e0e0020100ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12992 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
12993 return 0x87e0e0020100ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
12994 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
12995 return 0x87e0e0020100ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
12996 __bdk_csr_fatal("BGXX_SMUX_TX_APPEND", 2, a, b, 0, 0);
12997 }
12998
12999 #define typedef_BDK_BGXX_SMUX_TX_APPEND(a,b) bdk_bgxx_smux_tx_append_t
13000 #define bustype_BDK_BGXX_SMUX_TX_APPEND(a,b) BDK_CSR_TYPE_RSL
13001 #define basename_BDK_BGXX_SMUX_TX_APPEND(a,b) "BGXX_SMUX_TX_APPEND"
13002 #define device_bar_BDK_BGXX_SMUX_TX_APPEND(a,b) 0x0 /* PF_BAR0 */
13003 #define busnum_BDK_BGXX_SMUX_TX_APPEND(a,b) (a)
13004 #define arguments_BDK_BGXX_SMUX_TX_APPEND(a,b) (a),(b),-1,-1
13005
13006 /**
13007 * Register (RSL) bgx#_smu#_tx_ctl
13008 *
13009 * BGX SMU Transmit Control Registers
13010 */
13011 union bdk_bgxx_smux_tx_ctl
13012 {
13013 uint64_t u;
13014 struct bdk_bgxx_smux_tx_ctl_s
13015 {
13016 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13017 uint64_t reserved_31_63 : 33;
13018 uint64_t spu_mrk_cnt : 20; /**< [ 30: 11](R/W) 40GBASE-R transmit marker interval count. Specifies the interval (number of 66-bit BASE-R
13019 blocks) at which the LMAC transmit logic inserts 40GBASE-R alignment markers. An internal
13020 counter in SMU is initialized to this value, counts down for each BASE-R block transmitted
13021 by the LMAC, and wraps back to the initial value from 0. The LMAC transmit logic inserts
13022 alignment markers for lanes 0, 1, 2 and 3, respectively, in the last four BASE-R blocks
13023 before the counter wraps (3, 2, 1, 0). The default value corresponds to an alignment
13024 marker period of 16363 blocks (exclusive) per lane, as specified in 802.3ba-2010. The
13025 default value should always be used for normal operation. */
13026 uint64_t hg_pause_hgi : 2; /**< [ 10: 9](R/W) HGI field for hardware-generated HiGig PAUSE packets. */
13027 uint64_t hg_en : 1; /**< [ 8: 8](R/W) Enable HiGig mode.
13028 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 12, the interface is in
13029 HiGig/HiGig+ mode and the following must be set:
13030 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13031 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13032 * BGX()_SMU()_RX_UDD_SKP[LEN] = 12.
13033 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13034
13035 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 16, the interface is in
13036 HiGig2 mode and the following must be set:
13037 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13038 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13039 * BGX()_SMU()_RX_UDD_SKP[LEN] = 16.
13040 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13041 * BGX()_SMU()_CBFC_CTL[RX_EN] = 0.
13042 * BGX()_SMU()_CBFC_CTL[TX_EN] = 0. */
13043 uint64_t l2p_bp_conv : 1; /**< [ 7: 7](R/W) If set, causes TX to generate 802.3 pause packets when CMR applies logical backpressure
13044 (XOFF), if and only if BGX()_SMU()_CBFC_CTL[TX_EN] is clear and
13045 BGX()_SMU()_HG2_CONTROL[HG2TX_EN] is clear. */
13046 uint64_t ls_byp : 1; /**< [ 6: 6](R/W) Bypass the link status, as determined by the XGMII receiver, and set the link status of
13047 the transmitter to LS. */
13048 uint64_t ls : 2; /**< [ 5: 4](R/W) Link status.
13049 0 = Link OK; link runs normally. RS passes MAC data to PCS.
13050 1 = Local fault. RS layer sends continuous remote fault sequences.
13051 2 = Remote fault. RS layer sends continuous idle sequences.
13052 3 = Link drain. RS layer drops full packets to allow BGX and PKO to drain their FIFOs. */
13053 uint64_t reserved_3 : 1;
13054 uint64_t x4a_dis : 1; /**< [ 2: 2](R/W) Disable 4-byte SOP align (effectively force 8-byte SOP align) for all 10G variants
13055 (XAUI, RXAUI, 10G). */
13056 uint64_t uni_en : 1; /**< [ 1: 1](R/W) Enable unidirectional mode (IEEE Clause 66). */
13057 uint64_t dic_en : 1; /**< [ 0: 0](R/W) Enable the deficit idle counter for IFG averaging. */
13058 #else /* Word 0 - Little Endian */
13059 uint64_t dic_en : 1; /**< [ 0: 0](R/W) Enable the deficit idle counter for IFG averaging. */
13060 uint64_t uni_en : 1; /**< [ 1: 1](R/W) Enable unidirectional mode (IEEE Clause 66). */
13061 uint64_t x4a_dis : 1; /**< [ 2: 2](R/W) Disable 4-byte SOP align (effectively force 8-byte SOP align) for all 10G variants
13062 (XAUI, RXAUI, 10G). */
13063 uint64_t reserved_3 : 1;
13064 uint64_t ls : 2; /**< [ 5: 4](R/W) Link status.
13065 0 = Link OK; link runs normally. RS passes MAC data to PCS.
13066 1 = Local fault. RS layer sends continuous remote fault sequences.
13067 2 = Remote fault. RS layer sends continuous idle sequences.
13068 3 = Link drain. RS layer drops full packets to allow BGX and PKO to drain their FIFOs. */
13069 uint64_t ls_byp : 1; /**< [ 6: 6](R/W) Bypass the link status, as determined by the XGMII receiver, and set the link status of
13070 the transmitter to LS. */
13071 uint64_t l2p_bp_conv : 1; /**< [ 7: 7](R/W) If set, causes TX to generate 802.3 pause packets when CMR applies logical backpressure
13072 (XOFF), if and only if BGX()_SMU()_CBFC_CTL[TX_EN] is clear and
13073 BGX()_SMU()_HG2_CONTROL[HG2TX_EN] is clear. */
13074 uint64_t hg_en : 1; /**< [ 8: 8](R/W) Enable HiGig mode.
13075 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 12, the interface is in
13076 HiGig/HiGig+ mode and the following must be set:
13077 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13078 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13079 * BGX()_SMU()_RX_UDD_SKP[LEN] = 12.
13080 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13081
13082 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 16, the interface is in
13083 HiGig2 mode and the following must be set:
13084 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13085 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13086 * BGX()_SMU()_RX_UDD_SKP[LEN] = 16.
13087 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13088 * BGX()_SMU()_CBFC_CTL[RX_EN] = 0.
13089 * BGX()_SMU()_CBFC_CTL[TX_EN] = 0. */
13090 uint64_t hg_pause_hgi : 2; /**< [ 10: 9](R/W) HGI field for hardware-generated HiGig PAUSE packets. */
13091 uint64_t spu_mrk_cnt : 20; /**< [ 30: 11](R/W) 40GBASE-R transmit marker interval count. Specifies the interval (number of 66-bit BASE-R
13092 blocks) at which the LMAC transmit logic inserts 40GBASE-R alignment markers. An internal
13093 counter in SMU is initialized to this value, counts down for each BASE-R block transmitted
13094 by the LMAC, and wraps back to the initial value from 0. The LMAC transmit logic inserts
13095 alignment markers for lanes 0, 1, 2 and 3, respectively, in the last four BASE-R blocks
13096 before the counter wraps (3, 2, 1, 0). The default value corresponds to an alignment
13097 marker period of 16363 blocks (exclusive) per lane, as specified in 802.3ba-2010. The
13098 default value should always be used for normal operation. */
13099 uint64_t reserved_31_63 : 33;
13100 #endif /* Word 0 - End */
13101 } s;
13102 struct bdk_bgxx_smux_tx_ctl_cn88xxp1
13103 {
13104 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13105 uint64_t reserved_31_63 : 33;
13106 uint64_t spu_mrk_cnt : 20; /**< [ 30: 11](R/W) 40GBASE-R transmit marker interval count. Specifies the interval (number of 66-bit BASE-R
13107 blocks) at which the LMAC transmit logic inserts 40GBASE-R alignment markers. An internal
13108 counter in SMU is initialized to this value, counts down for each BASE-R block transmitted
13109 by the LMAC, and wraps back to the initial value from 0. The LMAC transmit logic inserts
13110 alignment markers for lanes 0, 1, 2 and 3, respectively, in the last four BASE-R blocks
13111 before the counter wraps (3, 2, 1, 0). The default value corresponds to an alignment
13112 marker period of 16363 blocks (exclusive) per lane, as specified in 802.3ba-2010. The
13113 default value should always be used for normal operation. */
13114 uint64_t hg_pause_hgi : 2; /**< [ 10: 9](R/W) HGI field for hardware-generated HiGig PAUSE packets. */
13115 uint64_t hg_en : 1; /**< [ 8: 8](R/W) Enable HiGig mode.
13116 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 12, the interface is in
13117 HiGig/HiGig+ mode and the following must be set:
13118 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13119 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13120 * BGX()_SMU()_RX_UDD_SKP[LEN] = 12.
13121 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13122
13123 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 16, the interface is in
13124 HiGig2 mode and the following must be set:
13125 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13126 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13127 * BGX()_SMU()_RX_UDD_SKP[LEN] = 16.
13128 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13129 * BGX()_SMU()_CBFC_CTL[RX_EN] = 0.
13130 * BGX()_SMU()_CBFC_CTL[TX_EN] = 0. */
13131 uint64_t l2p_bp_conv : 1; /**< [ 7: 7](R/W) If set, causes TX to generate 802.3 pause packets when CMR applies logical backpressure
13132 (XOFF), if and only if BGX()_SMU()_CBFC_CTL[TX_EN] is clear and
13133 BGX()_SMU()_HG2_CONTROL[HG2TX_EN] is clear. */
13134 uint64_t ls_byp : 1; /**< [ 6: 6](R/W) Bypass the link status, as determined by the XGMII receiver, and set the link status of
13135 the transmitter to LS. */
13136 uint64_t ls : 2; /**< [ 5: 4](R/W) Link status.
13137 0 = Link OK; link runs normally. RS passes MAC data to PCS.
13138 1 = Local fault. RS layer sends continuous remote fault sequences.
13139 2 = Remote fault. RS layer sends continuous idle sequences.
13140 3 = Link drain. RS layer drops full packets to allow BGX and TNS/NIC to drain their FIFOs. */
13141 uint64_t reserved_3 : 1;
13142 uint64_t x4a_dis : 1; /**< [ 2: 2](RAZ) Reserved. */
13143 uint64_t uni_en : 1; /**< [ 1: 1](R/W) Enable unidirectional mode (IEEE Clause 66). */
13144 uint64_t dic_en : 1; /**< [ 0: 0](R/W) Enable the deficit idle counter for IFG averaging. */
13145 #else /* Word 0 - Little Endian */
13146 uint64_t dic_en : 1; /**< [ 0: 0](R/W) Enable the deficit idle counter for IFG averaging. */
13147 uint64_t uni_en : 1; /**< [ 1: 1](R/W) Enable unidirectional mode (IEEE Clause 66). */
13148 uint64_t x4a_dis : 1; /**< [ 2: 2](RAZ) Reserved. */
13149 uint64_t reserved_3 : 1;
13150 uint64_t ls : 2; /**< [ 5: 4](R/W) Link status.
13151 0 = Link OK; link runs normally. RS passes MAC data to PCS.
13152 1 = Local fault. RS layer sends continuous remote fault sequences.
13153 2 = Remote fault. RS layer sends continuous idle sequences.
13154 3 = Link drain. RS layer drops full packets to allow BGX and TNS/NIC to drain their FIFOs. */
13155 uint64_t ls_byp : 1; /**< [ 6: 6](R/W) Bypass the link status, as determined by the XGMII receiver, and set the link status of
13156 the transmitter to LS. */
13157 uint64_t l2p_bp_conv : 1; /**< [ 7: 7](R/W) If set, causes TX to generate 802.3 pause packets when CMR applies logical backpressure
13158 (XOFF), if and only if BGX()_SMU()_CBFC_CTL[TX_EN] is clear and
13159 BGX()_SMU()_HG2_CONTROL[HG2TX_EN] is clear. */
13160 uint64_t hg_en : 1; /**< [ 8: 8](R/W) Enable HiGig mode.
13161 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 12, the interface is in
13162 HiGig/HiGig+ mode and the following must be set:
13163 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13164 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13165 * BGX()_SMU()_RX_UDD_SKP[LEN] = 12.
13166 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13167
13168 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 16, the interface is in
13169 HiGig2 mode and the following must be set:
13170 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13171 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13172 * BGX()_SMU()_RX_UDD_SKP[LEN] = 16.
13173 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13174 * BGX()_SMU()_CBFC_CTL[RX_EN] = 0.
13175 * BGX()_SMU()_CBFC_CTL[TX_EN] = 0. */
13176 uint64_t hg_pause_hgi : 2; /**< [ 10: 9](R/W) HGI field for hardware-generated HiGig PAUSE packets. */
13177 uint64_t spu_mrk_cnt : 20; /**< [ 30: 11](R/W) 40GBASE-R transmit marker interval count. Specifies the interval (number of 66-bit BASE-R
13178 blocks) at which the LMAC transmit logic inserts 40GBASE-R alignment markers. An internal
13179 counter in SMU is initialized to this value, counts down for each BASE-R block transmitted
13180 by the LMAC, and wraps back to the initial value from 0. The LMAC transmit logic inserts
13181 alignment markers for lanes 0, 1, 2 and 3, respectively, in the last four BASE-R blocks
13182 before the counter wraps (3, 2, 1, 0). The default value corresponds to an alignment
13183 marker period of 16363 blocks (exclusive) per lane, as specified in 802.3ba-2010. The
13184 default value should always be used for normal operation. */
13185 uint64_t reserved_31_63 : 33;
13186 #endif /* Word 0 - End */
13187 } cn88xxp1;
13188 /* struct bdk_bgxx_smux_tx_ctl_s cn81xx; */
13189 /* struct bdk_bgxx_smux_tx_ctl_s cn83xx; */
13190 struct bdk_bgxx_smux_tx_ctl_cn88xxp2
13191 {
13192 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13193 uint64_t reserved_31_63 : 33;
13194 uint64_t spu_mrk_cnt : 20; /**< [ 30: 11](R/W) 40GBASE-R transmit marker interval count. Specifies the interval (number of 66-bit BASE-R
13195 blocks) at which the LMAC transmit logic inserts 40GBASE-R alignment markers. An internal
13196 counter in SMU is initialized to this value, counts down for each BASE-R block transmitted
13197 by the LMAC, and wraps back to the initial value from 0. The LMAC transmit logic inserts
13198 alignment markers for lanes 0, 1, 2 and 3, respectively, in the last four BASE-R blocks
13199 before the counter wraps (3, 2, 1, 0). The default value corresponds to an alignment
13200 marker period of 16363 blocks (exclusive) per lane, as specified in 802.3ba-2010. The
13201 default value should always be used for normal operation. */
13202 uint64_t hg_pause_hgi : 2; /**< [ 10: 9](R/W) HGI field for hardware-generated HiGig PAUSE packets. */
13203 uint64_t hg_en : 1; /**< [ 8: 8](R/W) Enable HiGig mode.
13204 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 12, the interface is in
13205 HiGig/HiGig+ mode and the following must be set:
13206 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13207 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13208 * BGX()_SMU()_RX_UDD_SKP[LEN] = 12.
13209 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13210
13211 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 16, the interface is in
13212 HiGig2 mode and the following must be set:
13213 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13214 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13215 * BGX()_SMU()_RX_UDD_SKP[LEN] = 16.
13216 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13217 * BGX()_SMU()_CBFC_CTL[RX_EN] = 0.
13218 * BGX()_SMU()_CBFC_CTL[TX_EN] = 0. */
13219 uint64_t l2p_bp_conv : 1; /**< [ 7: 7](R/W) If set, causes TX to generate 802.3 pause packets when CMR applies logical backpressure
13220 (XOFF), if and only if BGX()_SMU()_CBFC_CTL[TX_EN] is clear and
13221 BGX()_SMU()_HG2_CONTROL[HG2TX_EN] is clear. */
13222 uint64_t ls_byp : 1; /**< [ 6: 6](R/W) Bypass the link status, as determined by the XGMII receiver, and set the link status of
13223 the transmitter to LS. */
13224 uint64_t ls : 2; /**< [ 5: 4](R/W) Link status.
13225 0 = Link OK; link runs normally. RS passes MAC data to PCS.
13226 1 = Local fault. RS layer sends continuous remote fault sequences.
13227 2 = Remote fault. RS layer sends continuous idle sequences.
13228 3 = Link drain. RS layer drops full packets to allow BGX and TNS/NIC to drain their FIFOs. */
13229 uint64_t reserved_3 : 1;
13230 uint64_t x4a_dis : 1; /**< [ 2: 2](R/W) Disable 4-byte SOP align (effectively force 8-byte SOP align) for all 10G variants
13231 (XAUI, RXAUI, 10G). */
13232 uint64_t uni_en : 1; /**< [ 1: 1](R/W) Enable unidirectional mode (IEEE Clause 66). */
13233 uint64_t dic_en : 1; /**< [ 0: 0](R/W) Enable the deficit idle counter for IFG averaging. */
13234 #else /* Word 0 - Little Endian */
13235 uint64_t dic_en : 1; /**< [ 0: 0](R/W) Enable the deficit idle counter for IFG averaging. */
13236 uint64_t uni_en : 1; /**< [ 1: 1](R/W) Enable unidirectional mode (IEEE Clause 66). */
13237 uint64_t x4a_dis : 1; /**< [ 2: 2](R/W) Disable 4-byte SOP align (effectively force 8-byte SOP align) for all 10G variants
13238 (XAUI, RXAUI, 10G). */
13239 uint64_t reserved_3 : 1;
13240 uint64_t ls : 2; /**< [ 5: 4](R/W) Link status.
13241 0 = Link OK; link runs normally. RS passes MAC data to PCS.
13242 1 = Local fault. RS layer sends continuous remote fault sequences.
13243 2 = Remote fault. RS layer sends continuous idle sequences.
13244 3 = Link drain. RS layer drops full packets to allow BGX and TNS/NIC to drain their FIFOs. */
13245 uint64_t ls_byp : 1; /**< [ 6: 6](R/W) Bypass the link status, as determined by the XGMII receiver, and set the link status of
13246 the transmitter to LS. */
13247 uint64_t l2p_bp_conv : 1; /**< [ 7: 7](R/W) If set, causes TX to generate 802.3 pause packets when CMR applies logical backpressure
13248 (XOFF), if and only if BGX()_SMU()_CBFC_CTL[TX_EN] is clear and
13249 BGX()_SMU()_HG2_CONTROL[HG2TX_EN] is clear. */
13250 uint64_t hg_en : 1; /**< [ 8: 8](R/W) Enable HiGig mode.
13251 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 12, the interface is in
13252 HiGig/HiGig+ mode and the following must be set:
13253 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13254 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13255 * BGX()_SMU()_RX_UDD_SKP[LEN] = 12.
13256 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13257
13258 When this field is set and BGX()_SMU()_RX_UDD_SKP[LEN] = 16, the interface is in
13259 HiGig2 mode and the following must be set:
13260 * BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 0.
13261 * BGX()_SMU()_RX_UDD_SKP[FCSSEL] = 0.
13262 * BGX()_SMU()_RX_UDD_SKP[LEN] = 16.
13263 * BGX()_SMU()_TX_APPEND[PREAMBLE] = 0.
13264 * BGX()_SMU()_CBFC_CTL[RX_EN] = 0.
13265 * BGX()_SMU()_CBFC_CTL[TX_EN] = 0. */
13266 uint64_t hg_pause_hgi : 2; /**< [ 10: 9](R/W) HGI field for hardware-generated HiGig PAUSE packets. */
13267 uint64_t spu_mrk_cnt : 20; /**< [ 30: 11](R/W) 40GBASE-R transmit marker interval count. Specifies the interval (number of 66-bit BASE-R
13268 blocks) at which the LMAC transmit logic inserts 40GBASE-R alignment markers. An internal
13269 counter in SMU is initialized to this value, counts down for each BASE-R block transmitted
13270 by the LMAC, and wraps back to the initial value from 0. The LMAC transmit logic inserts
13271 alignment markers for lanes 0, 1, 2 and 3, respectively, in the last four BASE-R blocks
13272 before the counter wraps (3, 2, 1, 0). The default value corresponds to an alignment
13273 marker period of 16363 blocks (exclusive) per lane, as specified in 802.3ba-2010. The
13274 default value should always be used for normal operation. */
13275 uint64_t reserved_31_63 : 33;
13276 #endif /* Word 0 - End */
13277 } cn88xxp2;
13278 };
13279 typedef union bdk_bgxx_smux_tx_ctl bdk_bgxx_smux_tx_ctl_t;
13280
13281 static inline uint64_t BDK_BGXX_SMUX_TX_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_CTL(unsigned long a,unsigned long b)13282 static inline uint64_t BDK_BGXX_SMUX_TX_CTL(unsigned long a, unsigned long b)
13283 {
13284 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13285 return 0x87e0e0020178ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13286 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13287 return 0x87e0e0020178ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13288 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13289 return 0x87e0e0020178ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13290 __bdk_csr_fatal("BGXX_SMUX_TX_CTL", 2, a, b, 0, 0);
13291 }
13292
13293 #define typedef_BDK_BGXX_SMUX_TX_CTL(a,b) bdk_bgxx_smux_tx_ctl_t
13294 #define bustype_BDK_BGXX_SMUX_TX_CTL(a,b) BDK_CSR_TYPE_RSL
13295 #define basename_BDK_BGXX_SMUX_TX_CTL(a,b) "BGXX_SMUX_TX_CTL"
13296 #define device_bar_BDK_BGXX_SMUX_TX_CTL(a,b) 0x0 /* PF_BAR0 */
13297 #define busnum_BDK_BGXX_SMUX_TX_CTL(a,b) (a)
13298 #define arguments_BDK_BGXX_SMUX_TX_CTL(a,b) (a),(b),-1,-1
13299
13300 /**
13301 * Register (RSL) bgx#_smu#_tx_ifg
13302 *
13303 * BGX SMU TX Interframe-Gap Cycles Registers
13304 * Programming IFG1 and IFG2:
13305 * * For XAUI/RXAUI/10Gbs/40Gbs systems that require IEEE 802.3 compatibility, the IFG1+IFG2 sum
13306 * must be 12.
13307 * * In loopback mode, the IFG1+IFG2 of local and remote parties must match exactly; otherwise
13308 * one of the two sides' loopback FIFO will overrun: BGX()_SMU()_TX_INT[LB_OVRFLW].
13309 */
13310 union bdk_bgxx_smux_tx_ifg
13311 {
13312 uint64_t u;
13313 struct bdk_bgxx_smux_tx_ifg_s
13314 {
13315 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13316 uint64_t reserved_8_63 : 56;
13317 uint64_t ifg2 : 4; /**< [ 7: 4](R/W) 1/2 of the interframe gap timing (in IFG2*8 bits). */
13318 uint64_t ifg1 : 4; /**< [ 3: 0](R/W) 1/2 of the interframe gap timing (in IFG1*8 bits). */
13319 #else /* Word 0 - Little Endian */
13320 uint64_t ifg1 : 4; /**< [ 3: 0](R/W) 1/2 of the interframe gap timing (in IFG1*8 bits). */
13321 uint64_t ifg2 : 4; /**< [ 7: 4](R/W) 1/2 of the interframe gap timing (in IFG2*8 bits). */
13322 uint64_t reserved_8_63 : 56;
13323 #endif /* Word 0 - End */
13324 } s;
13325 /* struct bdk_bgxx_smux_tx_ifg_s cn; */
13326 };
13327 typedef union bdk_bgxx_smux_tx_ifg bdk_bgxx_smux_tx_ifg_t;
13328
13329 static inline uint64_t BDK_BGXX_SMUX_TX_IFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_IFG(unsigned long a,unsigned long b)13330 static inline uint64_t BDK_BGXX_SMUX_TX_IFG(unsigned long a, unsigned long b)
13331 {
13332 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13333 return 0x87e0e0020160ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13334 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13335 return 0x87e0e0020160ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13336 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13337 return 0x87e0e0020160ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13338 __bdk_csr_fatal("BGXX_SMUX_TX_IFG", 2, a, b, 0, 0);
13339 }
13340
13341 #define typedef_BDK_BGXX_SMUX_TX_IFG(a,b) bdk_bgxx_smux_tx_ifg_t
13342 #define bustype_BDK_BGXX_SMUX_TX_IFG(a,b) BDK_CSR_TYPE_RSL
13343 #define basename_BDK_BGXX_SMUX_TX_IFG(a,b) "BGXX_SMUX_TX_IFG"
13344 #define device_bar_BDK_BGXX_SMUX_TX_IFG(a,b) 0x0 /* PF_BAR0 */
13345 #define busnum_BDK_BGXX_SMUX_TX_IFG(a,b) (a)
13346 #define arguments_BDK_BGXX_SMUX_TX_IFG(a,b) (a),(b),-1,-1
13347
13348 /**
13349 * Register (RSL) bgx#_smu#_tx_int
13350 *
13351 * BGX SMU TX Interrupt Registers
13352 */
13353 union bdk_bgxx_smux_tx_int
13354 {
13355 uint64_t u;
13356 struct bdk_bgxx_smux_tx_int_s
13357 {
13358 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13359 uint64_t reserved_5_63 : 59;
13360 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1C/H) TX loopback overflow. */
13361 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1C/H) TX loopback underflow. */
13362 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1C/H) TX SMU started a packet with PTP on SOP and has not seen a commit for it from TX SPU after
13363 256 cycles so it faked a commit to CMR. */
13364 uint64_t xchange : 1; /**< [ 1: 1](R/W1C/H) Link status changed. This denotes a change to BGX()_SMU()_RX_CTL[STATUS]. */
13365 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) TX underflow. */
13366 #else /* Word 0 - Little Endian */
13367 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) TX underflow. */
13368 uint64_t xchange : 1; /**< [ 1: 1](R/W1C/H) Link status changed. This denotes a change to BGX()_SMU()_RX_CTL[STATUS]. */
13369 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1C/H) TX SMU started a packet with PTP on SOP and has not seen a commit for it from TX SPU after
13370 256 cycles so it faked a commit to CMR. */
13371 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1C/H) TX loopback underflow. */
13372 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1C/H) TX loopback overflow. */
13373 uint64_t reserved_5_63 : 59;
13374 #endif /* Word 0 - End */
13375 } s;
13376 /* struct bdk_bgxx_smux_tx_int_s cn; */
13377 };
13378 typedef union bdk_bgxx_smux_tx_int bdk_bgxx_smux_tx_int_t;
13379
13380 static inline uint64_t BDK_BGXX_SMUX_TX_INT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_INT(unsigned long a,unsigned long b)13381 static inline uint64_t BDK_BGXX_SMUX_TX_INT(unsigned long a, unsigned long b)
13382 {
13383 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13384 return 0x87e0e0020140ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13385 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13386 return 0x87e0e0020140ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13387 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13388 return 0x87e0e0020140ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13389 __bdk_csr_fatal("BGXX_SMUX_TX_INT", 2, a, b, 0, 0);
13390 }
13391
13392 #define typedef_BDK_BGXX_SMUX_TX_INT(a,b) bdk_bgxx_smux_tx_int_t
13393 #define bustype_BDK_BGXX_SMUX_TX_INT(a,b) BDK_CSR_TYPE_RSL
13394 #define basename_BDK_BGXX_SMUX_TX_INT(a,b) "BGXX_SMUX_TX_INT"
13395 #define device_bar_BDK_BGXX_SMUX_TX_INT(a,b) 0x0 /* PF_BAR0 */
13396 #define busnum_BDK_BGXX_SMUX_TX_INT(a,b) (a)
13397 #define arguments_BDK_BGXX_SMUX_TX_INT(a,b) (a),(b),-1,-1
13398
13399 /**
13400 * Register (RSL) bgx#_smu#_tx_int_ena_w1c
13401 *
13402 * BGX SMU TX Interrupt Enable Clear Registers
13403 * This register clears interrupt enable bits.
13404 */
13405 union bdk_bgxx_smux_tx_int_ena_w1c
13406 {
13407 uint64_t u;
13408 struct bdk_bgxx_smux_tx_int_ena_w1c_s
13409 {
13410 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13411 uint64_t reserved_5_63 : 59;
13412 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13413 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13414 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13415 uint64_t xchange : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[XCHANGE]. */
13416 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[UNDFLW]. */
13417 #else /* Word 0 - Little Endian */
13418 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[UNDFLW]. */
13419 uint64_t xchange : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[XCHANGE]. */
13420 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13421 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13422 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13423 uint64_t reserved_5_63 : 59;
13424 #endif /* Word 0 - End */
13425 } s;
13426 /* struct bdk_bgxx_smux_tx_int_ena_w1c_s cn81xx; */
13427 /* struct bdk_bgxx_smux_tx_int_ena_w1c_s cn88xx; */
13428 struct bdk_bgxx_smux_tx_int_ena_w1c_cn83xx
13429 {
13430 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13431 uint64_t reserved_5_63 : 59;
13432 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13433 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13434 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13435 uint64_t xchange : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[XCHANGE]. */
13436 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[UNDFLW]. */
13437 #else /* Word 0 - Little Endian */
13438 uint64_t undflw : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[UNDFLW]. */
13439 uint64_t xchange : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[XCHANGE]. */
13440 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13441 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13442 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13443 uint64_t reserved_5_63 : 59;
13444 #endif /* Word 0 - End */
13445 } cn83xx;
13446 };
13447 typedef union bdk_bgxx_smux_tx_int_ena_w1c bdk_bgxx_smux_tx_int_ena_w1c_t;
13448
13449 static inline uint64_t BDK_BGXX_SMUX_TX_INT_ENA_W1C(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_INT_ENA_W1C(unsigned long a,unsigned long b)13450 static inline uint64_t BDK_BGXX_SMUX_TX_INT_ENA_W1C(unsigned long a, unsigned long b)
13451 {
13452 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13453 return 0x87e0e0020150ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13454 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13455 return 0x87e0e0020150ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13456 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13457 return 0x87e0e0020150ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13458 __bdk_csr_fatal("BGXX_SMUX_TX_INT_ENA_W1C", 2, a, b, 0, 0);
13459 }
13460
13461 #define typedef_BDK_BGXX_SMUX_TX_INT_ENA_W1C(a,b) bdk_bgxx_smux_tx_int_ena_w1c_t
13462 #define bustype_BDK_BGXX_SMUX_TX_INT_ENA_W1C(a,b) BDK_CSR_TYPE_RSL
13463 #define basename_BDK_BGXX_SMUX_TX_INT_ENA_W1C(a,b) "BGXX_SMUX_TX_INT_ENA_W1C"
13464 #define device_bar_BDK_BGXX_SMUX_TX_INT_ENA_W1C(a,b) 0x0 /* PF_BAR0 */
13465 #define busnum_BDK_BGXX_SMUX_TX_INT_ENA_W1C(a,b) (a)
13466 #define arguments_BDK_BGXX_SMUX_TX_INT_ENA_W1C(a,b) (a),(b),-1,-1
13467
13468 /**
13469 * Register (RSL) bgx#_smu#_tx_int_ena_w1s
13470 *
13471 * BGX SMU TX Interrupt Enable Set Registers
13472 * This register sets interrupt enable bits.
13473 */
13474 union bdk_bgxx_smux_tx_int_ena_w1s
13475 {
13476 uint64_t u;
13477 struct bdk_bgxx_smux_tx_int_ena_w1s_s
13478 {
13479 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13480 uint64_t reserved_5_63 : 59;
13481 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13482 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13483 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13484 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[XCHANGE]. */
13485 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[UNDFLW]. */
13486 #else /* Word 0 - Little Endian */
13487 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[UNDFLW]. */
13488 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[XCHANGE]. */
13489 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13490 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13491 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13492 uint64_t reserved_5_63 : 59;
13493 #endif /* Word 0 - End */
13494 } s;
13495 /* struct bdk_bgxx_smux_tx_int_ena_w1s_s cn81xx; */
13496 /* struct bdk_bgxx_smux_tx_int_ena_w1s_s cn88xx; */
13497 struct bdk_bgxx_smux_tx_int_ena_w1s_cn83xx
13498 {
13499 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13500 uint64_t reserved_5_63 : 59;
13501 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13502 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13503 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13504 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[XCHANGE]. */
13505 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[UNDFLW]. */
13506 #else /* Word 0 - Little Endian */
13507 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[UNDFLW]. */
13508 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[XCHANGE]. */
13509 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13510 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13511 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13512 uint64_t reserved_5_63 : 59;
13513 #endif /* Word 0 - End */
13514 } cn83xx;
13515 };
13516 typedef union bdk_bgxx_smux_tx_int_ena_w1s bdk_bgxx_smux_tx_int_ena_w1s_t;
13517
13518 static inline uint64_t BDK_BGXX_SMUX_TX_INT_ENA_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_INT_ENA_W1S(unsigned long a,unsigned long b)13519 static inline uint64_t BDK_BGXX_SMUX_TX_INT_ENA_W1S(unsigned long a, unsigned long b)
13520 {
13521 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13522 return 0x87e0e0020158ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13523 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13524 return 0x87e0e0020158ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13525 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13526 return 0x87e0e0020158ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13527 __bdk_csr_fatal("BGXX_SMUX_TX_INT_ENA_W1S", 2, a, b, 0, 0);
13528 }
13529
13530 #define typedef_BDK_BGXX_SMUX_TX_INT_ENA_W1S(a,b) bdk_bgxx_smux_tx_int_ena_w1s_t
13531 #define bustype_BDK_BGXX_SMUX_TX_INT_ENA_W1S(a,b) BDK_CSR_TYPE_RSL
13532 #define basename_BDK_BGXX_SMUX_TX_INT_ENA_W1S(a,b) "BGXX_SMUX_TX_INT_ENA_W1S"
13533 #define device_bar_BDK_BGXX_SMUX_TX_INT_ENA_W1S(a,b) 0x0 /* PF_BAR0 */
13534 #define busnum_BDK_BGXX_SMUX_TX_INT_ENA_W1S(a,b) (a)
13535 #define arguments_BDK_BGXX_SMUX_TX_INT_ENA_W1S(a,b) (a),(b),-1,-1
13536
13537 /**
13538 * Register (RSL) bgx#_smu#_tx_int_w1s
13539 *
13540 * BGX SMU TX Interrupt Set Registers
13541 * This register sets interrupt bits.
13542 */
13543 union bdk_bgxx_smux_tx_int_w1s
13544 {
13545 uint64_t u;
13546 struct bdk_bgxx_smux_tx_int_w1s_s
13547 {
13548 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13549 uint64_t reserved_5_63 : 59;
13550 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13551 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13552 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13553 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[XCHANGE]. */
13554 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[UNDFLW]. */
13555 #else /* Word 0 - Little Endian */
13556 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[UNDFLW]. */
13557 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[XCHANGE]. */
13558 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13559 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13560 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13561 uint64_t reserved_5_63 : 59;
13562 #endif /* Word 0 - End */
13563 } s;
13564 /* struct bdk_bgxx_smux_tx_int_w1s_s cn81xx; */
13565 /* struct bdk_bgxx_smux_tx_int_w1s_s cn88xx; */
13566 struct bdk_bgxx_smux_tx_int_w1s_cn83xx
13567 {
13568 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13569 uint64_t reserved_5_63 : 59;
13570 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13571 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13572 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13573 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[XCHANGE]. */
13574 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[UNDFLW]. */
13575 #else /* Word 0 - Little Endian */
13576 uint64_t undflw : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[UNDFLW]. */
13577 uint64_t xchange : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[XCHANGE]. */
13578 uint64_t fake_commit : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[FAKE_COMMIT]. */
13579 uint64_t lb_undflw : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[LB_UNDFLW]. */
13580 uint64_t lb_ovrflw : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_SMU(0..3)_TX_INT[LB_OVRFLW]. */
13581 uint64_t reserved_5_63 : 59;
13582 #endif /* Word 0 - End */
13583 } cn83xx;
13584 };
13585 typedef union bdk_bgxx_smux_tx_int_w1s bdk_bgxx_smux_tx_int_w1s_t;
13586
13587 static inline uint64_t BDK_BGXX_SMUX_TX_INT_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_INT_W1S(unsigned long a,unsigned long b)13588 static inline uint64_t BDK_BGXX_SMUX_TX_INT_W1S(unsigned long a, unsigned long b)
13589 {
13590 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13591 return 0x87e0e0020148ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13592 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13593 return 0x87e0e0020148ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13594 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13595 return 0x87e0e0020148ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13596 __bdk_csr_fatal("BGXX_SMUX_TX_INT_W1S", 2, a, b, 0, 0);
13597 }
13598
13599 #define typedef_BDK_BGXX_SMUX_TX_INT_W1S(a,b) bdk_bgxx_smux_tx_int_w1s_t
13600 #define bustype_BDK_BGXX_SMUX_TX_INT_W1S(a,b) BDK_CSR_TYPE_RSL
13601 #define basename_BDK_BGXX_SMUX_TX_INT_W1S(a,b) "BGXX_SMUX_TX_INT_W1S"
13602 #define device_bar_BDK_BGXX_SMUX_TX_INT_W1S(a,b) 0x0 /* PF_BAR0 */
13603 #define busnum_BDK_BGXX_SMUX_TX_INT_W1S(a,b) (a)
13604 #define arguments_BDK_BGXX_SMUX_TX_INT_W1S(a,b) (a),(b),-1,-1
13605
13606 /**
13607 * Register (RSL) bgx#_smu#_tx_min_pkt
13608 *
13609 * BGX SMU TX Minimum-Size-Packet Registers
13610 */
13611 union bdk_bgxx_smux_tx_min_pkt
13612 {
13613 uint64_t u;
13614 struct bdk_bgxx_smux_tx_min_pkt_s
13615 {
13616 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13617 uint64_t reserved_8_63 : 56;
13618 uint64_t min_size : 8; /**< [ 7: 0](R/W) Min frame in bytes inclusive of FCS, if applied. Padding is only appended when
13619 BGX()_SMU()_TX_APPEND[PAD] for the corresponding port is set. When FCS is added to
13620 a packet which was padded, the FCS always appears in the four octets preceding /T/ or /E/. */
13621 #else /* Word 0 - Little Endian */
13622 uint64_t min_size : 8; /**< [ 7: 0](R/W) Min frame in bytes inclusive of FCS, if applied. Padding is only appended when
13623 BGX()_SMU()_TX_APPEND[PAD] for the corresponding port is set. When FCS is added to
13624 a packet which was padded, the FCS always appears in the four octets preceding /T/ or /E/. */
13625 uint64_t reserved_8_63 : 56;
13626 #endif /* Word 0 - End */
13627 } s;
13628 /* struct bdk_bgxx_smux_tx_min_pkt_s cn; */
13629 };
13630 typedef union bdk_bgxx_smux_tx_min_pkt bdk_bgxx_smux_tx_min_pkt_t;
13631
13632 static inline uint64_t BDK_BGXX_SMUX_TX_MIN_PKT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_MIN_PKT(unsigned long a,unsigned long b)13633 static inline uint64_t BDK_BGXX_SMUX_TX_MIN_PKT(unsigned long a, unsigned long b)
13634 {
13635 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13636 return 0x87e0e0020118ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13637 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13638 return 0x87e0e0020118ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13639 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13640 return 0x87e0e0020118ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13641 __bdk_csr_fatal("BGXX_SMUX_TX_MIN_PKT", 2, a, b, 0, 0);
13642 }
13643
13644 #define typedef_BDK_BGXX_SMUX_TX_MIN_PKT(a,b) bdk_bgxx_smux_tx_min_pkt_t
13645 #define bustype_BDK_BGXX_SMUX_TX_MIN_PKT(a,b) BDK_CSR_TYPE_RSL
13646 #define basename_BDK_BGXX_SMUX_TX_MIN_PKT(a,b) "BGXX_SMUX_TX_MIN_PKT"
13647 #define device_bar_BDK_BGXX_SMUX_TX_MIN_PKT(a,b) 0x0 /* PF_BAR0 */
13648 #define busnum_BDK_BGXX_SMUX_TX_MIN_PKT(a,b) (a)
13649 #define arguments_BDK_BGXX_SMUX_TX_MIN_PKT(a,b) (a),(b),-1,-1
13650
13651 /**
13652 * Register (RSL) bgx#_smu#_tx_pause_pkt_dmac
13653 *
13654 * BGX SMU TX PAUSE-Packet DMAC-Field Registers
13655 * This register provides the DMAC value that is placed in outbound PAUSE packets.
13656 */
13657 union bdk_bgxx_smux_tx_pause_pkt_dmac
13658 {
13659 uint64_t u;
13660 struct bdk_bgxx_smux_tx_pause_pkt_dmac_s
13661 {
13662 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13663 uint64_t reserved_48_63 : 16;
13664 uint64_t dmac : 48; /**< [ 47: 0](R/W) The DMAC field that is placed in outbound PAUSE packets. */
13665 #else /* Word 0 - Little Endian */
13666 uint64_t dmac : 48; /**< [ 47: 0](R/W) The DMAC field that is placed in outbound PAUSE packets. */
13667 uint64_t reserved_48_63 : 16;
13668 #endif /* Word 0 - End */
13669 } s;
13670 /* struct bdk_bgxx_smux_tx_pause_pkt_dmac_s cn; */
13671 };
13672 typedef union bdk_bgxx_smux_tx_pause_pkt_dmac bdk_bgxx_smux_tx_pause_pkt_dmac_t;
13673
13674 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(unsigned long a,unsigned long b)13675 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(unsigned long a, unsigned long b)
13676 {
13677 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13678 return 0x87e0e0020168ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13679 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13680 return 0x87e0e0020168ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13681 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13682 return 0x87e0e0020168ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13683 __bdk_csr_fatal("BGXX_SMUX_TX_PAUSE_PKT_DMAC", 2, a, b, 0, 0);
13684 }
13685
13686 #define typedef_BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(a,b) bdk_bgxx_smux_tx_pause_pkt_dmac_t
13687 #define bustype_BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(a,b) BDK_CSR_TYPE_RSL
13688 #define basename_BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(a,b) "BGXX_SMUX_TX_PAUSE_PKT_DMAC"
13689 #define device_bar_BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(a,b) 0x0 /* PF_BAR0 */
13690 #define busnum_BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(a,b) (a)
13691 #define arguments_BDK_BGXX_SMUX_TX_PAUSE_PKT_DMAC(a,b) (a),(b),-1,-1
13692
13693 /**
13694 * Register (RSL) bgx#_smu#_tx_pause_pkt_interval
13695 *
13696 * BGX SMU TX PAUSE-Packet Transmission-Interval Registers
13697 * This register specifies how often PAUSE packets are sent.
13698 */
13699 union bdk_bgxx_smux_tx_pause_pkt_interval
13700 {
13701 uint64_t u;
13702 struct bdk_bgxx_smux_tx_pause_pkt_interval_s
13703 {
13704 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13705 uint64_t reserved_33_63 : 31;
13706 uint64_t hg2_intra_en : 1; /**< [ 32: 32](R/W) Allow intrapacket HiGig2 message generation. Relevant only if HiGig2 message generation is enabled. */
13707 uint64_t hg2_intra_interval : 16; /**< [ 31: 16](R/W) Arbitrate for a HiGig2 message, every (INTERVAL*512) bit-times whilst sending regular
13708 packet data. Relevant only if HiGig2 message generation and [HG2_INTRA_EN] are both set.
13709 Normally, 0 \< INTERVAL \< BGX()_SMU()_TX_PAUSE_PKT_TIME.
13710
13711 INTERVAL = 0 only sends a single PAUSE packet for each backpressure event. */
13712 uint64_t interval : 16; /**< [ 15: 0](R/W) Arbitrate for a 802.3 PAUSE packet, HiGig2 message, or PFC packet every
13713 (INTERVAL * 512) bit-times.
13714 Normally, 0 \< INTERVAL \< BGX()_SMU()_TX_PAUSE_PKT_TIME[P_TIME].
13715
13716 INTERVAL = 0 only sends a single PAUSE packet for each backpressure event. */
13717 #else /* Word 0 - Little Endian */
13718 uint64_t interval : 16; /**< [ 15: 0](R/W) Arbitrate for a 802.3 PAUSE packet, HiGig2 message, or PFC packet every
13719 (INTERVAL * 512) bit-times.
13720 Normally, 0 \< INTERVAL \< BGX()_SMU()_TX_PAUSE_PKT_TIME[P_TIME].
13721
13722 INTERVAL = 0 only sends a single PAUSE packet for each backpressure event. */
13723 uint64_t hg2_intra_interval : 16; /**< [ 31: 16](R/W) Arbitrate for a HiGig2 message, every (INTERVAL*512) bit-times whilst sending regular
13724 packet data. Relevant only if HiGig2 message generation and [HG2_INTRA_EN] are both set.
13725 Normally, 0 \< INTERVAL \< BGX()_SMU()_TX_PAUSE_PKT_TIME.
13726
13727 INTERVAL = 0 only sends a single PAUSE packet for each backpressure event. */
13728 uint64_t hg2_intra_en : 1; /**< [ 32: 32](R/W) Allow intrapacket HiGig2 message generation. Relevant only if HiGig2 message generation is enabled. */
13729 uint64_t reserved_33_63 : 31;
13730 #endif /* Word 0 - End */
13731 } s;
13732 /* struct bdk_bgxx_smux_tx_pause_pkt_interval_s cn; */
13733 };
13734 typedef union bdk_bgxx_smux_tx_pause_pkt_interval bdk_bgxx_smux_tx_pause_pkt_interval_t;
13735
13736 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(unsigned long a,unsigned long b)13737 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(unsigned long a, unsigned long b)
13738 {
13739 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13740 return 0x87e0e0020120ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13741 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13742 return 0x87e0e0020120ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13743 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13744 return 0x87e0e0020120ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13745 __bdk_csr_fatal("BGXX_SMUX_TX_PAUSE_PKT_INTERVAL", 2, a, b, 0, 0);
13746 }
13747
13748 #define typedef_BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(a,b) bdk_bgxx_smux_tx_pause_pkt_interval_t
13749 #define bustype_BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(a,b) BDK_CSR_TYPE_RSL
13750 #define basename_BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(a,b) "BGXX_SMUX_TX_PAUSE_PKT_INTERVAL"
13751 #define device_bar_BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(a,b) 0x0 /* PF_BAR0 */
13752 #define busnum_BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(a,b) (a)
13753 #define arguments_BDK_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(a,b) (a),(b),-1,-1
13754
13755 /**
13756 * Register (RSL) bgx#_smu#_tx_pause_pkt_time
13757 *
13758 * BGX SMU TX PAUSE Packet Time Registers
13759 */
13760 union bdk_bgxx_smux_tx_pause_pkt_time
13761 {
13762 uint64_t u;
13763 struct bdk_bgxx_smux_tx_pause_pkt_time_s
13764 {
13765 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13766 uint64_t reserved_16_63 : 48;
13767 uint64_t p_time : 16; /**< [ 15: 0](R/W) Provides the pause_time field placed in outbound 802.3 PAUSE packets, HiGig2 messages, or
13768 PFC packets in 512 bit-times. Normally, [P_TIME] \>
13769 BGX()_SMU()_TX_PAUSE_PKT_INTERVAL[INTERVAL]. See programming notes in
13770 BGX()_SMU()_TX_PAUSE_PKT_INTERVAL. */
13771 #else /* Word 0 - Little Endian */
13772 uint64_t p_time : 16; /**< [ 15: 0](R/W) Provides the pause_time field placed in outbound 802.3 PAUSE packets, HiGig2 messages, or
13773 PFC packets in 512 bit-times. Normally, [P_TIME] \>
13774 BGX()_SMU()_TX_PAUSE_PKT_INTERVAL[INTERVAL]. See programming notes in
13775 BGX()_SMU()_TX_PAUSE_PKT_INTERVAL. */
13776 uint64_t reserved_16_63 : 48;
13777 #endif /* Word 0 - End */
13778 } s;
13779 /* struct bdk_bgxx_smux_tx_pause_pkt_time_s cn; */
13780 };
13781 typedef union bdk_bgxx_smux_tx_pause_pkt_time bdk_bgxx_smux_tx_pause_pkt_time_t;
13782
13783 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(unsigned long a,unsigned long b)13784 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(unsigned long a, unsigned long b)
13785 {
13786 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13787 return 0x87e0e0020110ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13788 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13789 return 0x87e0e0020110ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13790 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13791 return 0x87e0e0020110ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13792 __bdk_csr_fatal("BGXX_SMUX_TX_PAUSE_PKT_TIME", 2, a, b, 0, 0);
13793 }
13794
13795 #define typedef_BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(a,b) bdk_bgxx_smux_tx_pause_pkt_time_t
13796 #define bustype_BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(a,b) BDK_CSR_TYPE_RSL
13797 #define basename_BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(a,b) "BGXX_SMUX_TX_PAUSE_PKT_TIME"
13798 #define device_bar_BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(a,b) 0x0 /* PF_BAR0 */
13799 #define busnum_BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(a,b) (a)
13800 #define arguments_BDK_BGXX_SMUX_TX_PAUSE_PKT_TIME(a,b) (a),(b),-1,-1
13801
13802 /**
13803 * Register (RSL) bgx#_smu#_tx_pause_pkt_type
13804 *
13805 * BGX SMU TX PAUSE-Packet P_TYPE-Field Registers
13806 * This register provides the P_TYPE field that is placed in outbound PAUSE packets.
13807 */
13808 union bdk_bgxx_smux_tx_pause_pkt_type
13809 {
13810 uint64_t u;
13811 struct bdk_bgxx_smux_tx_pause_pkt_type_s
13812 {
13813 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13814 uint64_t reserved_16_63 : 48;
13815 uint64_t p_type : 16; /**< [ 15: 0](R/W) The P_TYPE field that is placed in outbound PAUSE packets. */
13816 #else /* Word 0 - Little Endian */
13817 uint64_t p_type : 16; /**< [ 15: 0](R/W) The P_TYPE field that is placed in outbound PAUSE packets. */
13818 uint64_t reserved_16_63 : 48;
13819 #endif /* Word 0 - End */
13820 } s;
13821 /* struct bdk_bgxx_smux_tx_pause_pkt_type_s cn; */
13822 };
13823 typedef union bdk_bgxx_smux_tx_pause_pkt_type bdk_bgxx_smux_tx_pause_pkt_type_t;
13824
13825 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(unsigned long a,unsigned long b)13826 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(unsigned long a, unsigned long b)
13827 {
13828 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13829 return 0x87e0e0020170ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13830 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13831 return 0x87e0e0020170ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13832 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13833 return 0x87e0e0020170ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13834 __bdk_csr_fatal("BGXX_SMUX_TX_PAUSE_PKT_TYPE", 2, a, b, 0, 0);
13835 }
13836
13837 #define typedef_BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(a,b) bdk_bgxx_smux_tx_pause_pkt_type_t
13838 #define bustype_BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(a,b) BDK_CSR_TYPE_RSL
13839 #define basename_BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(a,b) "BGXX_SMUX_TX_PAUSE_PKT_TYPE"
13840 #define device_bar_BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(a,b) 0x0 /* PF_BAR0 */
13841 #define busnum_BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(a,b) (a)
13842 #define arguments_BDK_BGXX_SMUX_TX_PAUSE_PKT_TYPE(a,b) (a),(b),-1,-1
13843
13844 /**
13845 * Register (RSL) bgx#_smu#_tx_pause_togo
13846 *
13847 * BGX SMU TX Time-to-Backpressure Registers
13848 */
13849 union bdk_bgxx_smux_tx_pause_togo
13850 {
13851 uint64_t u;
13852 struct bdk_bgxx_smux_tx_pause_togo_s
13853 {
13854 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13855 uint64_t reserved_32_63 : 32;
13856 uint64_t msg_time : 16; /**< [ 31: 16](RO/H) Amount of time remaining to backpressure, from the HiGig2 physical message PAUSE timer
13857 (only valid on port0). */
13858 uint64_t p_time : 16; /**< [ 15: 0](RO/H) Amount of time remaining to backpressure, from the standard 802.3 PAUSE timer. */
13859 #else /* Word 0 - Little Endian */
13860 uint64_t p_time : 16; /**< [ 15: 0](RO/H) Amount of time remaining to backpressure, from the standard 802.3 PAUSE timer. */
13861 uint64_t msg_time : 16; /**< [ 31: 16](RO/H) Amount of time remaining to backpressure, from the HiGig2 physical message PAUSE timer
13862 (only valid on port0). */
13863 uint64_t reserved_32_63 : 32;
13864 #endif /* Word 0 - End */
13865 } s;
13866 /* struct bdk_bgxx_smux_tx_pause_togo_s cn; */
13867 };
13868 typedef union bdk_bgxx_smux_tx_pause_togo bdk_bgxx_smux_tx_pause_togo_t;
13869
13870 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_TOGO(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_PAUSE_TOGO(unsigned long a,unsigned long b)13871 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_TOGO(unsigned long a, unsigned long b)
13872 {
13873 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13874 return 0x87e0e0020130ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13875 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13876 return 0x87e0e0020130ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13877 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13878 return 0x87e0e0020130ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13879 __bdk_csr_fatal("BGXX_SMUX_TX_PAUSE_TOGO", 2, a, b, 0, 0);
13880 }
13881
13882 #define typedef_BDK_BGXX_SMUX_TX_PAUSE_TOGO(a,b) bdk_bgxx_smux_tx_pause_togo_t
13883 #define bustype_BDK_BGXX_SMUX_TX_PAUSE_TOGO(a,b) BDK_CSR_TYPE_RSL
13884 #define basename_BDK_BGXX_SMUX_TX_PAUSE_TOGO(a,b) "BGXX_SMUX_TX_PAUSE_TOGO"
13885 #define device_bar_BDK_BGXX_SMUX_TX_PAUSE_TOGO(a,b) 0x0 /* PF_BAR0 */
13886 #define busnum_BDK_BGXX_SMUX_TX_PAUSE_TOGO(a,b) (a)
13887 #define arguments_BDK_BGXX_SMUX_TX_PAUSE_TOGO(a,b) (a),(b),-1,-1
13888
13889 /**
13890 * Register (RSL) bgx#_smu#_tx_pause_zero
13891 *
13892 * BGX SMU TX PAUSE Zero Registers
13893 */
13894 union bdk_bgxx_smux_tx_pause_zero
13895 {
13896 uint64_t u;
13897 struct bdk_bgxx_smux_tx_pause_zero_s
13898 {
13899 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13900 uint64_t reserved_1_63 : 63;
13901 uint64_t send : 1; /**< [ 0: 0](R/W) Send PAUSE-zero enable. When this bit is set, and the backpressure condition is clear, it
13902 allows sending a PAUSE packet with pause_time of 0 to enable the channel. */
13903 #else /* Word 0 - Little Endian */
13904 uint64_t send : 1; /**< [ 0: 0](R/W) Send PAUSE-zero enable. When this bit is set, and the backpressure condition is clear, it
13905 allows sending a PAUSE packet with pause_time of 0 to enable the channel. */
13906 uint64_t reserved_1_63 : 63;
13907 #endif /* Word 0 - End */
13908 } s;
13909 /* struct bdk_bgxx_smux_tx_pause_zero_s cn; */
13910 };
13911 typedef union bdk_bgxx_smux_tx_pause_zero bdk_bgxx_smux_tx_pause_zero_t;
13912
13913 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_ZERO(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_PAUSE_ZERO(unsigned long a,unsigned long b)13914 static inline uint64_t BDK_BGXX_SMUX_TX_PAUSE_ZERO(unsigned long a, unsigned long b)
13915 {
13916 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13917 return 0x87e0e0020138ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13918 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13919 return 0x87e0e0020138ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13920 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13921 return 0x87e0e0020138ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13922 __bdk_csr_fatal("BGXX_SMUX_TX_PAUSE_ZERO", 2, a, b, 0, 0);
13923 }
13924
13925 #define typedef_BDK_BGXX_SMUX_TX_PAUSE_ZERO(a,b) bdk_bgxx_smux_tx_pause_zero_t
13926 #define bustype_BDK_BGXX_SMUX_TX_PAUSE_ZERO(a,b) BDK_CSR_TYPE_RSL
13927 #define basename_BDK_BGXX_SMUX_TX_PAUSE_ZERO(a,b) "BGXX_SMUX_TX_PAUSE_ZERO"
13928 #define device_bar_BDK_BGXX_SMUX_TX_PAUSE_ZERO(a,b) 0x0 /* PF_BAR0 */
13929 #define busnum_BDK_BGXX_SMUX_TX_PAUSE_ZERO(a,b) (a)
13930 #define arguments_BDK_BGXX_SMUX_TX_PAUSE_ZERO(a,b) (a),(b),-1,-1
13931
13932 /**
13933 * Register (RSL) bgx#_smu#_tx_soft_pause
13934 *
13935 * BGX SMU TX Soft PAUSE Registers
13936 */
13937 union bdk_bgxx_smux_tx_soft_pause
13938 {
13939 uint64_t u;
13940 struct bdk_bgxx_smux_tx_soft_pause_s
13941 {
13942 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13943 uint64_t reserved_16_63 : 48;
13944 uint64_t p_time : 16; /**< [ 15: 0](R/W) Back off the TX bus for ([P_TIME] * 512) bit-times */
13945 #else /* Word 0 - Little Endian */
13946 uint64_t p_time : 16; /**< [ 15: 0](R/W) Back off the TX bus for ([P_TIME] * 512) bit-times */
13947 uint64_t reserved_16_63 : 48;
13948 #endif /* Word 0 - End */
13949 } s;
13950 /* struct bdk_bgxx_smux_tx_soft_pause_s cn; */
13951 };
13952 typedef union bdk_bgxx_smux_tx_soft_pause bdk_bgxx_smux_tx_soft_pause_t;
13953
13954 static inline uint64_t BDK_BGXX_SMUX_TX_SOFT_PAUSE(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_SOFT_PAUSE(unsigned long a,unsigned long b)13955 static inline uint64_t BDK_BGXX_SMUX_TX_SOFT_PAUSE(unsigned long a, unsigned long b)
13956 {
13957 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
13958 return 0x87e0e0020128ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13959 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
13960 return 0x87e0e0020128ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
13961 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
13962 return 0x87e0e0020128ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
13963 __bdk_csr_fatal("BGXX_SMUX_TX_SOFT_PAUSE", 2, a, b, 0, 0);
13964 }
13965
13966 #define typedef_BDK_BGXX_SMUX_TX_SOFT_PAUSE(a,b) bdk_bgxx_smux_tx_soft_pause_t
13967 #define bustype_BDK_BGXX_SMUX_TX_SOFT_PAUSE(a,b) BDK_CSR_TYPE_RSL
13968 #define basename_BDK_BGXX_SMUX_TX_SOFT_PAUSE(a,b) "BGXX_SMUX_TX_SOFT_PAUSE"
13969 #define device_bar_BDK_BGXX_SMUX_TX_SOFT_PAUSE(a,b) 0x0 /* PF_BAR0 */
13970 #define busnum_BDK_BGXX_SMUX_TX_SOFT_PAUSE(a,b) (a)
13971 #define arguments_BDK_BGXX_SMUX_TX_SOFT_PAUSE(a,b) (a),(b),-1,-1
13972
13973 /**
13974 * Register (RSL) bgx#_smu#_tx_thresh
13975 *
13976 * BGX SMU TX Threshold Registers
13977 */
13978 union bdk_bgxx_smux_tx_thresh
13979 {
13980 uint64_t u;
13981 struct bdk_bgxx_smux_tx_thresh_s
13982 {
13983 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
13984 uint64_t reserved_11_63 : 53;
13985 uint64_t cnt : 11; /**< [ 10: 0](R/W) Number of 128-bit words to accumulate in the TX FIFO before sending on the packet
13986 interface. This field should be large enough to prevent underflow on the packet interface
13987 and must never be set to 0x0.
13988
13989 In all modes, this register cannot exceed the TX FIFO depth configured by
13990 BGX()_CMR_TX_LMACS[LMACS]. */
13991 #else /* Word 0 - Little Endian */
13992 uint64_t cnt : 11; /**< [ 10: 0](R/W) Number of 128-bit words to accumulate in the TX FIFO before sending on the packet
13993 interface. This field should be large enough to prevent underflow on the packet interface
13994 and must never be set to 0x0.
13995
13996 In all modes, this register cannot exceed the TX FIFO depth configured by
13997 BGX()_CMR_TX_LMACS[LMACS]. */
13998 uint64_t reserved_11_63 : 53;
13999 #endif /* Word 0 - End */
14000 } s;
14001 /* struct bdk_bgxx_smux_tx_thresh_s cn; */
14002 };
14003 typedef union bdk_bgxx_smux_tx_thresh bdk_bgxx_smux_tx_thresh_t;
14004
14005 static inline uint64_t BDK_BGXX_SMUX_TX_THRESH(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SMUX_TX_THRESH(unsigned long a,unsigned long b)14006 static inline uint64_t BDK_BGXX_SMUX_TX_THRESH(unsigned long a, unsigned long b)
14007 {
14008 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14009 return 0x87e0e0020180ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14010 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14011 return 0x87e0e0020180ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14012 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14013 return 0x87e0e0020180ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14014 __bdk_csr_fatal("BGXX_SMUX_TX_THRESH", 2, a, b, 0, 0);
14015 }
14016
14017 #define typedef_BDK_BGXX_SMUX_TX_THRESH(a,b) bdk_bgxx_smux_tx_thresh_t
14018 #define bustype_BDK_BGXX_SMUX_TX_THRESH(a,b) BDK_CSR_TYPE_RSL
14019 #define basename_BDK_BGXX_SMUX_TX_THRESH(a,b) "BGXX_SMUX_TX_THRESH"
14020 #define device_bar_BDK_BGXX_SMUX_TX_THRESH(a,b) 0x0 /* PF_BAR0 */
14021 #define busnum_BDK_BGXX_SMUX_TX_THRESH(a,b) (a)
14022 #define arguments_BDK_BGXX_SMUX_TX_THRESH(a,b) (a),(b),-1,-1
14023
14024 /**
14025 * Register (RSL) bgx#_spu#_an_adv
14026 *
14027 * BGX SPU Autonegotiation Advertisement Registers
14028 * Software programs this register with the contents of the AN-link code word base page to be
14029 * transmitted during autonegotiation. (See IEEE 802.3 section 73.6 for details.) Any write
14030 * operations to this register prior to completion of autonegotiation, as indicated by
14031 * BGX()_SPU()_AN_STATUS[AN_COMPLETE], should be followed by a renegotiation in order for
14032 * the new values to take effect. Renegotiation is initiated by setting
14033 * BGX()_SPU()_AN_CONTROL[AN_RESTART]. Once autonegotiation has completed, software can
14034 * examine this register along with BGX()_SPU()_AN_LP_BASE to determine the highest
14035 * common denominator technology.
14036 */
14037 union bdk_bgxx_spux_an_adv
14038 {
14039 uint64_t u;
14040 struct bdk_bgxx_spux_an_adv_s
14041 {
14042 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14043 uint64_t reserved_48_63 : 16;
14044 uint64_t fec_req : 1; /**< [ 47: 47](R/W) FEC requested. */
14045 uint64_t fec_able : 1; /**< [ 46: 46](R/W) FEC ability. */
14046 uint64_t arsv : 19; /**< [ 45: 27](R/W) Technology ability. Reserved bits, should always be 0. */
14047 uint64_t a100g_cr10 : 1; /**< [ 26: 26](R/W) 100GBASE-CR10 ability. Should always be 0; 100GBASE-R is not supported. */
14048 uint64_t a40g_cr4 : 1; /**< [ 25: 25](R/W) 40GBASE-CR4 ability. */
14049 uint64_t a40g_kr4 : 1; /**< [ 24: 24](R/W) 40GBASE-KR4 ability. */
14050 uint64_t a10g_kr : 1; /**< [ 23: 23](R/W) 10GBASE-KR ability. */
14051 uint64_t a10g_kx4 : 1; /**< [ 22: 22](R/W) 10GBASE-KX4 ability. */
14052 uint64_t a1g_kx : 1; /**< [ 21: 21](R/W) 1000BASE-KX ability. Should always be 0; autonegotiation is not supported for 1000Base-KX. */
14053 uint64_t t : 5; /**< [ 20: 16](R/W/H) Transmitted nonce. This field is automatically updated with a pseudo-random value on entry
14054 to the AN ability detect state. */
14055 uint64_t np : 1; /**< [ 15: 15](R/W) Next page. Always 0; extended next pages are not used for 10G+ autonegotiation. */
14056 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge. Always 0 in this register. */
14057 uint64_t rf : 1; /**< [ 13: 13](R/W) Remote fault. */
14058 uint64_t xnp_able : 1; /**< [ 12: 12](R/W) Extended next page ability. */
14059 uint64_t asm_dir : 1; /**< [ 11: 11](R/W) Asymmetric PAUSE. */
14060 uint64_t pause : 1; /**< [ 10: 10](R/W) PAUSE ability. */
14061 uint64_t e : 5; /**< [ 9: 5](R/W) Echoed nonce. Provides the echoed-nonce value to use when ACK = 0 in transmitted DME page.
14062 Should always be 0x0. */
14063 uint64_t s : 5; /**< [ 4: 0](R/W) Selector. Should be 0x1 (encoding for IEEE 802.3). */
14064 #else /* Word 0 - Little Endian */
14065 uint64_t s : 5; /**< [ 4: 0](R/W) Selector. Should be 0x1 (encoding for IEEE 802.3). */
14066 uint64_t e : 5; /**< [ 9: 5](R/W) Echoed nonce. Provides the echoed-nonce value to use when ACK = 0 in transmitted DME page.
14067 Should always be 0x0. */
14068 uint64_t pause : 1; /**< [ 10: 10](R/W) PAUSE ability. */
14069 uint64_t asm_dir : 1; /**< [ 11: 11](R/W) Asymmetric PAUSE. */
14070 uint64_t xnp_able : 1; /**< [ 12: 12](R/W) Extended next page ability. */
14071 uint64_t rf : 1; /**< [ 13: 13](R/W) Remote fault. */
14072 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge. Always 0 in this register. */
14073 uint64_t np : 1; /**< [ 15: 15](R/W) Next page. Always 0; extended next pages are not used for 10G+ autonegotiation. */
14074 uint64_t t : 5; /**< [ 20: 16](R/W/H) Transmitted nonce. This field is automatically updated with a pseudo-random value on entry
14075 to the AN ability detect state. */
14076 uint64_t a1g_kx : 1; /**< [ 21: 21](R/W) 1000BASE-KX ability. Should always be 0; autonegotiation is not supported for 1000Base-KX. */
14077 uint64_t a10g_kx4 : 1; /**< [ 22: 22](R/W) 10GBASE-KX4 ability. */
14078 uint64_t a10g_kr : 1; /**< [ 23: 23](R/W) 10GBASE-KR ability. */
14079 uint64_t a40g_kr4 : 1; /**< [ 24: 24](R/W) 40GBASE-KR4 ability. */
14080 uint64_t a40g_cr4 : 1; /**< [ 25: 25](R/W) 40GBASE-CR4 ability. */
14081 uint64_t a100g_cr10 : 1; /**< [ 26: 26](R/W) 100GBASE-CR10 ability. Should always be 0; 100GBASE-R is not supported. */
14082 uint64_t arsv : 19; /**< [ 45: 27](R/W) Technology ability. Reserved bits, should always be 0. */
14083 uint64_t fec_able : 1; /**< [ 46: 46](R/W) FEC ability. */
14084 uint64_t fec_req : 1; /**< [ 47: 47](R/W) FEC requested. */
14085 uint64_t reserved_48_63 : 16;
14086 #endif /* Word 0 - End */
14087 } s;
14088 /* struct bdk_bgxx_spux_an_adv_s cn; */
14089 };
14090 typedef union bdk_bgxx_spux_an_adv bdk_bgxx_spux_an_adv_t;
14091
14092 static inline uint64_t BDK_BGXX_SPUX_AN_ADV(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_AN_ADV(unsigned long a,unsigned long b)14093 static inline uint64_t BDK_BGXX_SPUX_AN_ADV(unsigned long a, unsigned long b)
14094 {
14095 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14096 return 0x87e0e00100d8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14097 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14098 return 0x87e0e00100d8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14099 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14100 return 0x87e0e00100d8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14101 __bdk_csr_fatal("BGXX_SPUX_AN_ADV", 2, a, b, 0, 0);
14102 }
14103
14104 #define typedef_BDK_BGXX_SPUX_AN_ADV(a,b) bdk_bgxx_spux_an_adv_t
14105 #define bustype_BDK_BGXX_SPUX_AN_ADV(a,b) BDK_CSR_TYPE_RSL
14106 #define basename_BDK_BGXX_SPUX_AN_ADV(a,b) "BGXX_SPUX_AN_ADV"
14107 #define device_bar_BDK_BGXX_SPUX_AN_ADV(a,b) 0x0 /* PF_BAR0 */
14108 #define busnum_BDK_BGXX_SPUX_AN_ADV(a,b) (a)
14109 #define arguments_BDK_BGXX_SPUX_AN_ADV(a,b) (a),(b),-1,-1
14110
14111 /**
14112 * Register (RSL) bgx#_spu#_an_bp_status
14113 *
14114 * BGX SPU Autonegotiation Backplane Ethernet & BASE-R Copper Status Registers
14115 * The contents of this register are updated
14116 * during autonegotiation and are valid when BGX()_SPU()_AN_STATUS[AN_COMPLETE] is set.
14117 * At that time, one of the port type bits ([N100G_CR10], [N40G_CR4], [N40G_KR4], [N10G_KR],
14118 * [N10G_KX4],
14119 * [N1G_KX]) will be set depending on the AN priority resolution. If a BASE-R type is negotiated,
14120 * then [FEC] will be set to indicate that FEC operation has been negotiated, and will be
14121 * clear otherwise.
14122 */
14123 union bdk_bgxx_spux_an_bp_status
14124 {
14125 uint64_t u;
14126 struct bdk_bgxx_spux_an_bp_status_s
14127 {
14128 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14129 uint64_t reserved_9_63 : 55;
14130 uint64_t n100g_cr10 : 1; /**< [ 8: 8](RO/H) 100GBASE-CR10 negotiated; expected to always be 0; 100GBASE-R is not supported. */
14131 uint64_t reserved_7 : 1;
14132 uint64_t n40g_cr4 : 1; /**< [ 6: 6](RO/H) 40GBASE-CR4 negotiated. */
14133 uint64_t n40g_kr4 : 1; /**< [ 5: 5](RO/H) 40GBASE-KR4 negotiated. */
14134 uint64_t fec : 1; /**< [ 4: 4](RO/H) BASE-R FEC negotiated. */
14135 uint64_t n10g_kr : 1; /**< [ 3: 3](RO/H) 10GBASE-KR negotiated. */
14136 uint64_t n10g_kx4 : 1; /**< [ 2: 2](RO/H) 10GBASE-KX4 or CX4 negotiated (XAUI). */
14137 uint64_t n1g_kx : 1; /**< [ 1: 1](RO/H) 1000BASE-KX negotiated. */
14138 uint64_t bp_an_able : 1; /**< [ 0: 0](RO) Backplane or BASE-R copper AN Ability; always 1. */
14139 #else /* Word 0 - Little Endian */
14140 uint64_t bp_an_able : 1; /**< [ 0: 0](RO) Backplane or BASE-R copper AN Ability; always 1. */
14141 uint64_t n1g_kx : 1; /**< [ 1: 1](RO/H) 1000BASE-KX negotiated. */
14142 uint64_t n10g_kx4 : 1; /**< [ 2: 2](RO/H) 10GBASE-KX4 or CX4 negotiated (XAUI). */
14143 uint64_t n10g_kr : 1; /**< [ 3: 3](RO/H) 10GBASE-KR negotiated. */
14144 uint64_t fec : 1; /**< [ 4: 4](RO/H) BASE-R FEC negotiated. */
14145 uint64_t n40g_kr4 : 1; /**< [ 5: 5](RO/H) 40GBASE-KR4 negotiated. */
14146 uint64_t n40g_cr4 : 1; /**< [ 6: 6](RO/H) 40GBASE-CR4 negotiated. */
14147 uint64_t reserved_7 : 1;
14148 uint64_t n100g_cr10 : 1; /**< [ 8: 8](RO/H) 100GBASE-CR10 negotiated; expected to always be 0; 100GBASE-R is not supported. */
14149 uint64_t reserved_9_63 : 55;
14150 #endif /* Word 0 - End */
14151 } s;
14152 /* struct bdk_bgxx_spux_an_bp_status_s cn; */
14153 };
14154 typedef union bdk_bgxx_spux_an_bp_status bdk_bgxx_spux_an_bp_status_t;
14155
14156 static inline uint64_t BDK_BGXX_SPUX_AN_BP_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_AN_BP_STATUS(unsigned long a,unsigned long b)14157 static inline uint64_t BDK_BGXX_SPUX_AN_BP_STATUS(unsigned long a, unsigned long b)
14158 {
14159 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14160 return 0x87e0e00100f8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14161 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14162 return 0x87e0e00100f8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14163 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14164 return 0x87e0e00100f8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14165 __bdk_csr_fatal("BGXX_SPUX_AN_BP_STATUS", 2, a, b, 0, 0);
14166 }
14167
14168 #define typedef_BDK_BGXX_SPUX_AN_BP_STATUS(a,b) bdk_bgxx_spux_an_bp_status_t
14169 #define bustype_BDK_BGXX_SPUX_AN_BP_STATUS(a,b) BDK_CSR_TYPE_RSL
14170 #define basename_BDK_BGXX_SPUX_AN_BP_STATUS(a,b) "BGXX_SPUX_AN_BP_STATUS"
14171 #define device_bar_BDK_BGXX_SPUX_AN_BP_STATUS(a,b) 0x0 /* PF_BAR0 */
14172 #define busnum_BDK_BGXX_SPUX_AN_BP_STATUS(a,b) (a)
14173 #define arguments_BDK_BGXX_SPUX_AN_BP_STATUS(a,b) (a),(b),-1,-1
14174
14175 /**
14176 * Register (RSL) bgx#_spu#_an_control
14177 *
14178 * BGX SPU Autonegotiation Control Registers
14179 */
14180 union bdk_bgxx_spux_an_control
14181 {
14182 uint64_t u;
14183 struct bdk_bgxx_spux_an_control_s
14184 {
14185 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14186 uint64_t reserved_16_63 : 48;
14187 uint64_t an_reset : 1; /**< [ 15: 15](R/W1S/H) Autonegotiation reset. Setting this bit or BGX()_SPU()_CONTROL1[RESET] to 1
14188 causes the following to happen:
14189 * Resets the logical PCS (LPCS)
14190 * Sets the IEEE 802.3 PCS, FEC and AN registers for the LPCS to their default states
14191 * Resets the associated SerDes lanes.
14192
14193 It takes up to 32 coprocessor-clock cycles to reset the LPCS, after which RESET is
14194 automatically cleared. */
14195 uint64_t reserved_14 : 1;
14196 uint64_t xnp_en : 1; /**< [ 13: 13](R/W) Extended next-page enable. */
14197 uint64_t an_en : 1; /**< [ 12: 12](R/W) Autonegotiation enable. This bit should not be set when
14198 BGX()_CMR()_CONFIG[LMAC_TYPE] is set to RXAUI; autonegotiation is not supported
14199 in RXAUI mode. */
14200 uint64_t reserved_10_11 : 2;
14201 uint64_t an_restart : 1; /**< [ 9: 9](R/W1S/H) Autonegotiation restart. Writing a 1 to this bit restarts the autonegotiation process if
14202 [AN_EN] is also set. This is a self-clearing bit. */
14203 uint64_t reserved_0_8 : 9;
14204 #else /* Word 0 - Little Endian */
14205 uint64_t reserved_0_8 : 9;
14206 uint64_t an_restart : 1; /**< [ 9: 9](R/W1S/H) Autonegotiation restart. Writing a 1 to this bit restarts the autonegotiation process if
14207 [AN_EN] is also set. This is a self-clearing bit. */
14208 uint64_t reserved_10_11 : 2;
14209 uint64_t an_en : 1; /**< [ 12: 12](R/W) Autonegotiation enable. This bit should not be set when
14210 BGX()_CMR()_CONFIG[LMAC_TYPE] is set to RXAUI; autonegotiation is not supported
14211 in RXAUI mode. */
14212 uint64_t xnp_en : 1; /**< [ 13: 13](R/W) Extended next-page enable. */
14213 uint64_t reserved_14 : 1;
14214 uint64_t an_reset : 1; /**< [ 15: 15](R/W1S/H) Autonegotiation reset. Setting this bit or BGX()_SPU()_CONTROL1[RESET] to 1
14215 causes the following to happen:
14216 * Resets the logical PCS (LPCS)
14217 * Sets the IEEE 802.3 PCS, FEC and AN registers for the LPCS to their default states
14218 * Resets the associated SerDes lanes.
14219
14220 It takes up to 32 coprocessor-clock cycles to reset the LPCS, after which RESET is
14221 automatically cleared. */
14222 uint64_t reserved_16_63 : 48;
14223 #endif /* Word 0 - End */
14224 } s;
14225 /* struct bdk_bgxx_spux_an_control_s cn; */
14226 };
14227 typedef union bdk_bgxx_spux_an_control bdk_bgxx_spux_an_control_t;
14228
14229 static inline uint64_t BDK_BGXX_SPUX_AN_CONTROL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_AN_CONTROL(unsigned long a,unsigned long b)14230 static inline uint64_t BDK_BGXX_SPUX_AN_CONTROL(unsigned long a, unsigned long b)
14231 {
14232 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14233 return 0x87e0e00100c8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14234 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14235 return 0x87e0e00100c8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14236 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14237 return 0x87e0e00100c8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14238 __bdk_csr_fatal("BGXX_SPUX_AN_CONTROL", 2, a, b, 0, 0);
14239 }
14240
14241 #define typedef_BDK_BGXX_SPUX_AN_CONTROL(a,b) bdk_bgxx_spux_an_control_t
14242 #define bustype_BDK_BGXX_SPUX_AN_CONTROL(a,b) BDK_CSR_TYPE_RSL
14243 #define basename_BDK_BGXX_SPUX_AN_CONTROL(a,b) "BGXX_SPUX_AN_CONTROL"
14244 #define device_bar_BDK_BGXX_SPUX_AN_CONTROL(a,b) 0x0 /* PF_BAR0 */
14245 #define busnum_BDK_BGXX_SPUX_AN_CONTROL(a,b) (a)
14246 #define arguments_BDK_BGXX_SPUX_AN_CONTROL(a,b) (a),(b),-1,-1
14247
14248 /**
14249 * Register (RSL) bgx#_spu#_an_lp_base
14250 *
14251 * BGX SPU Autonegotiation Link-Partner Base-Page Ability Registers
14252 * This register captures the contents of the latest AN link code word base page received from
14253 * the link partner during autonegotiation. (See IEEE 802.3 section 73.6 for details.)
14254 * BGX()_SPU()_AN_STATUS[PAGE_RX] is set when this register is updated by hardware.
14255 */
14256 union bdk_bgxx_spux_an_lp_base
14257 {
14258 uint64_t u;
14259 struct bdk_bgxx_spux_an_lp_base_s
14260 {
14261 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14262 uint64_t reserved_48_63 : 16;
14263 uint64_t fec_req : 1; /**< [ 47: 47](RO/H) FEC requested. */
14264 uint64_t fec_able : 1; /**< [ 46: 46](RO/H) FEC ability. */
14265 uint64_t arsv : 19; /**< [ 45: 27](RO/H) Technology ability. Reserved bits, should always be 0. */
14266 uint64_t a100g_cr10 : 1; /**< [ 26: 26](RO/H) 100GBASE-CR10 ability. */
14267 uint64_t a40g_cr4 : 1; /**< [ 25: 25](RO/H) 40GBASE-CR4 ability. */
14268 uint64_t a40g_kr4 : 1; /**< [ 24: 24](RO/H) 40GBASE-KR4 ability. */
14269 uint64_t a10g_kr : 1; /**< [ 23: 23](RO/H) 10GBASE-KR ability. */
14270 uint64_t a10g_kx4 : 1; /**< [ 22: 22](RO/H) 10GBASE-KX4 ability. */
14271 uint64_t a1g_kx : 1; /**< [ 21: 21](RO/H) 1000BASE-KX ability. */
14272 uint64_t t : 5; /**< [ 20: 16](RO/H) Transmitted nonce. */
14273 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page. */
14274 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge. */
14275 uint64_t rf : 1; /**< [ 13: 13](RO/H) Remote fault. */
14276 uint64_t xnp_able : 1; /**< [ 12: 12](RO/H) Extended next page ability. */
14277 uint64_t asm_dir : 1; /**< [ 11: 11](RO/H) Asymmetric PAUSE. */
14278 uint64_t pause : 1; /**< [ 10: 10](RO/H) PAUSE ability. */
14279 uint64_t e : 5; /**< [ 9: 5](RO/H) Echoed nonce. */
14280 uint64_t s : 5; /**< [ 4: 0](RO/H) Selector. */
14281 #else /* Word 0 - Little Endian */
14282 uint64_t s : 5; /**< [ 4: 0](RO/H) Selector. */
14283 uint64_t e : 5; /**< [ 9: 5](RO/H) Echoed nonce. */
14284 uint64_t pause : 1; /**< [ 10: 10](RO/H) PAUSE ability. */
14285 uint64_t asm_dir : 1; /**< [ 11: 11](RO/H) Asymmetric PAUSE. */
14286 uint64_t xnp_able : 1; /**< [ 12: 12](RO/H) Extended next page ability. */
14287 uint64_t rf : 1; /**< [ 13: 13](RO/H) Remote fault. */
14288 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge. */
14289 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page. */
14290 uint64_t t : 5; /**< [ 20: 16](RO/H) Transmitted nonce. */
14291 uint64_t a1g_kx : 1; /**< [ 21: 21](RO/H) 1000BASE-KX ability. */
14292 uint64_t a10g_kx4 : 1; /**< [ 22: 22](RO/H) 10GBASE-KX4 ability. */
14293 uint64_t a10g_kr : 1; /**< [ 23: 23](RO/H) 10GBASE-KR ability. */
14294 uint64_t a40g_kr4 : 1; /**< [ 24: 24](RO/H) 40GBASE-KR4 ability. */
14295 uint64_t a40g_cr4 : 1; /**< [ 25: 25](RO/H) 40GBASE-CR4 ability. */
14296 uint64_t a100g_cr10 : 1; /**< [ 26: 26](RO/H) 100GBASE-CR10 ability. */
14297 uint64_t arsv : 19; /**< [ 45: 27](RO/H) Technology ability. Reserved bits, should always be 0. */
14298 uint64_t fec_able : 1; /**< [ 46: 46](RO/H) FEC ability. */
14299 uint64_t fec_req : 1; /**< [ 47: 47](RO/H) FEC requested. */
14300 uint64_t reserved_48_63 : 16;
14301 #endif /* Word 0 - End */
14302 } s;
14303 /* struct bdk_bgxx_spux_an_lp_base_s cn; */
14304 };
14305 typedef union bdk_bgxx_spux_an_lp_base bdk_bgxx_spux_an_lp_base_t;
14306
14307 static inline uint64_t BDK_BGXX_SPUX_AN_LP_BASE(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_AN_LP_BASE(unsigned long a,unsigned long b)14308 static inline uint64_t BDK_BGXX_SPUX_AN_LP_BASE(unsigned long a, unsigned long b)
14309 {
14310 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14311 return 0x87e0e00100e0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14312 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14313 return 0x87e0e00100e0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14314 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14315 return 0x87e0e00100e0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14316 __bdk_csr_fatal("BGXX_SPUX_AN_LP_BASE", 2, a, b, 0, 0);
14317 }
14318
14319 #define typedef_BDK_BGXX_SPUX_AN_LP_BASE(a,b) bdk_bgxx_spux_an_lp_base_t
14320 #define bustype_BDK_BGXX_SPUX_AN_LP_BASE(a,b) BDK_CSR_TYPE_RSL
14321 #define basename_BDK_BGXX_SPUX_AN_LP_BASE(a,b) "BGXX_SPUX_AN_LP_BASE"
14322 #define device_bar_BDK_BGXX_SPUX_AN_LP_BASE(a,b) 0x0 /* PF_BAR0 */
14323 #define busnum_BDK_BGXX_SPUX_AN_LP_BASE(a,b) (a)
14324 #define arguments_BDK_BGXX_SPUX_AN_LP_BASE(a,b) (a),(b),-1,-1
14325
14326 /**
14327 * Register (RSL) bgx#_spu#_an_lp_xnp
14328 *
14329 * BGX SPU Autonegotiation Link Partner Extended Next Page Ability Registers
14330 * This register captures the contents of the latest next page code word received from the link
14331 * partner during autonegotiation, if any. See section 802.3 section 73.7.7 for details.
14332 */
14333 union bdk_bgxx_spux_an_lp_xnp
14334 {
14335 uint64_t u;
14336 struct bdk_bgxx_spux_an_lp_xnp_s
14337 {
14338 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14339 uint64_t reserved_48_63 : 16;
14340 uint64_t u : 32; /**< [ 47: 16](RO/H) Unformatted code field. */
14341 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page. */
14342 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge. */
14343 uint64_t mp : 1; /**< [ 13: 13](RO/H) Message page. */
14344 uint64_t ack2 : 1; /**< [ 12: 12](RO/H) Acknowledge 2. */
14345 uint64_t toggle : 1; /**< [ 11: 11](RO/H) Toggle. */
14346 uint64_t m_u : 11; /**< [ 10: 0](RO/H) Message/unformatted code field. */
14347 #else /* Word 0 - Little Endian */
14348 uint64_t m_u : 11; /**< [ 10: 0](RO/H) Message/unformatted code field. */
14349 uint64_t toggle : 1; /**< [ 11: 11](RO/H) Toggle. */
14350 uint64_t ack2 : 1; /**< [ 12: 12](RO/H) Acknowledge 2. */
14351 uint64_t mp : 1; /**< [ 13: 13](RO/H) Message page. */
14352 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge. */
14353 uint64_t np : 1; /**< [ 15: 15](RO/H) Next page. */
14354 uint64_t u : 32; /**< [ 47: 16](RO/H) Unformatted code field. */
14355 uint64_t reserved_48_63 : 16;
14356 #endif /* Word 0 - End */
14357 } s;
14358 /* struct bdk_bgxx_spux_an_lp_xnp_s cn; */
14359 };
14360 typedef union bdk_bgxx_spux_an_lp_xnp bdk_bgxx_spux_an_lp_xnp_t;
14361
14362 static inline uint64_t BDK_BGXX_SPUX_AN_LP_XNP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_AN_LP_XNP(unsigned long a,unsigned long b)14363 static inline uint64_t BDK_BGXX_SPUX_AN_LP_XNP(unsigned long a, unsigned long b)
14364 {
14365 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14366 return 0x87e0e00100f0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14367 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14368 return 0x87e0e00100f0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14369 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14370 return 0x87e0e00100f0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14371 __bdk_csr_fatal("BGXX_SPUX_AN_LP_XNP", 2, a, b, 0, 0);
14372 }
14373
14374 #define typedef_BDK_BGXX_SPUX_AN_LP_XNP(a,b) bdk_bgxx_spux_an_lp_xnp_t
14375 #define bustype_BDK_BGXX_SPUX_AN_LP_XNP(a,b) BDK_CSR_TYPE_RSL
14376 #define basename_BDK_BGXX_SPUX_AN_LP_XNP(a,b) "BGXX_SPUX_AN_LP_XNP"
14377 #define device_bar_BDK_BGXX_SPUX_AN_LP_XNP(a,b) 0x0 /* PF_BAR0 */
14378 #define busnum_BDK_BGXX_SPUX_AN_LP_XNP(a,b) (a)
14379 #define arguments_BDK_BGXX_SPUX_AN_LP_XNP(a,b) (a),(b),-1,-1
14380
14381 /**
14382 * Register (RSL) bgx#_spu#_an_status
14383 *
14384 * BGX SPU Autonegotiation Status Registers
14385 */
14386 union bdk_bgxx_spux_an_status
14387 {
14388 uint64_t u;
14389 struct bdk_bgxx_spux_an_status_s
14390 {
14391 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14392 uint64_t reserved_10_63 : 54;
14393 uint64_t prl_flt : 1; /**< [ 9: 9](RO) Parallel detection fault. Always 0; SPU does not support parallel detection as part of the
14394 autonegotiation protocol. */
14395 uint64_t reserved_8 : 1;
14396 uint64_t xnp_stat : 1; /**< [ 7: 7](RO/H) Extended next-page status. */
14397 uint64_t page_rx : 1; /**< [ 6: 6](R/W1C/H) Page received. This latching-high bit is set when a new page has been received and stored
14398 in BGX()_SPU()_AN_LP_BASE or BGX()_SPU()_AN_LP_XNP; stays set until a 1 is
14399 written by software, autonegotiation is disabled or restarted, or next page exchange is
14400 initiated. Note that in order to avoid read side effects, this is implemented as a
14401 write-1-to-clear bit, rather than latching high read-only as specified in 802.3. */
14402 uint64_t an_complete : 1; /**< [ 5: 5](RO/H) Autonegotiation complete. Set when the autonegotiation process has been completed and
14403 the link is up and running using the negotiated highest common denominator (HCD)
14404 technology. If AN is enabled (BGX()_SPU()_AN_CONTROL[AN_EN] = 1) and this bit is
14405 read as a zero, it indicates that the AN process has not been completed, and the contents
14406 of BGX()_SPU()_AN_LP_BASE, BGX()_SPU()_AN_XNP_TX, and
14407 BGX()_SPU()_AN_LP_XNP are as defined by the current state of the autonegotiation
14408 protocol, or as written for manual configuration. This bit is always zero when AN is
14409 disabled (BGX()_SPU()_AN_CONTROL[AN_EN] = 0). */
14410 uint64_t rmt_flt : 1; /**< [ 4: 4](RO) Remote fault: Always 0. */
14411 uint64_t an_able : 1; /**< [ 3: 3](RO) Autonegotiation ability: Always 1. */
14412 uint64_t link_status : 1; /**< [ 2: 2](R/W1S/H) Link status. This bit captures the state of the link_status variable as defined in 802.3
14413 section 73.9.1. When set, indicates that a valid link has been established. When clear,
14414 indicates that the link has been invalid after this bit was last set by software. Latching
14415 low bit; stays clear until a 1 is written by software. Note that in order to avoid read
14416 side effects, this is implemented as a write-1-to-set bit, rather than latching low read-
14417 only as specified in 802.3. */
14418 uint64_t reserved_1 : 1;
14419 uint64_t lp_an_able : 1; /**< [ 0: 0](RO/H) Link partner autonegotiation ability. Set to indicate that the link partner is able to
14420 participate in the autonegotiation function, and cleared otherwise. */
14421 #else /* Word 0 - Little Endian */
14422 uint64_t lp_an_able : 1; /**< [ 0: 0](RO/H) Link partner autonegotiation ability. Set to indicate that the link partner is able to
14423 participate in the autonegotiation function, and cleared otherwise. */
14424 uint64_t reserved_1 : 1;
14425 uint64_t link_status : 1; /**< [ 2: 2](R/W1S/H) Link status. This bit captures the state of the link_status variable as defined in 802.3
14426 section 73.9.1. When set, indicates that a valid link has been established. When clear,
14427 indicates that the link has been invalid after this bit was last set by software. Latching
14428 low bit; stays clear until a 1 is written by software. Note that in order to avoid read
14429 side effects, this is implemented as a write-1-to-set bit, rather than latching low read-
14430 only as specified in 802.3. */
14431 uint64_t an_able : 1; /**< [ 3: 3](RO) Autonegotiation ability: Always 1. */
14432 uint64_t rmt_flt : 1; /**< [ 4: 4](RO) Remote fault: Always 0. */
14433 uint64_t an_complete : 1; /**< [ 5: 5](RO/H) Autonegotiation complete. Set when the autonegotiation process has been completed and
14434 the link is up and running using the negotiated highest common denominator (HCD)
14435 technology. If AN is enabled (BGX()_SPU()_AN_CONTROL[AN_EN] = 1) and this bit is
14436 read as a zero, it indicates that the AN process has not been completed, and the contents
14437 of BGX()_SPU()_AN_LP_BASE, BGX()_SPU()_AN_XNP_TX, and
14438 BGX()_SPU()_AN_LP_XNP are as defined by the current state of the autonegotiation
14439 protocol, or as written for manual configuration. This bit is always zero when AN is
14440 disabled (BGX()_SPU()_AN_CONTROL[AN_EN] = 0). */
14441 uint64_t page_rx : 1; /**< [ 6: 6](R/W1C/H) Page received. This latching-high bit is set when a new page has been received and stored
14442 in BGX()_SPU()_AN_LP_BASE or BGX()_SPU()_AN_LP_XNP; stays set until a 1 is
14443 written by software, autonegotiation is disabled or restarted, or next page exchange is
14444 initiated. Note that in order to avoid read side effects, this is implemented as a
14445 write-1-to-clear bit, rather than latching high read-only as specified in 802.3. */
14446 uint64_t xnp_stat : 1; /**< [ 7: 7](RO/H) Extended next-page status. */
14447 uint64_t reserved_8 : 1;
14448 uint64_t prl_flt : 1; /**< [ 9: 9](RO) Parallel detection fault. Always 0; SPU does not support parallel detection as part of the
14449 autonegotiation protocol. */
14450 uint64_t reserved_10_63 : 54;
14451 #endif /* Word 0 - End */
14452 } s;
14453 /* struct bdk_bgxx_spux_an_status_s cn; */
14454 };
14455 typedef union bdk_bgxx_spux_an_status bdk_bgxx_spux_an_status_t;
14456
14457 static inline uint64_t BDK_BGXX_SPUX_AN_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_AN_STATUS(unsigned long a,unsigned long b)14458 static inline uint64_t BDK_BGXX_SPUX_AN_STATUS(unsigned long a, unsigned long b)
14459 {
14460 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14461 return 0x87e0e00100d0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14462 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14463 return 0x87e0e00100d0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14464 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14465 return 0x87e0e00100d0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14466 __bdk_csr_fatal("BGXX_SPUX_AN_STATUS", 2, a, b, 0, 0);
14467 }
14468
14469 #define typedef_BDK_BGXX_SPUX_AN_STATUS(a,b) bdk_bgxx_spux_an_status_t
14470 #define bustype_BDK_BGXX_SPUX_AN_STATUS(a,b) BDK_CSR_TYPE_RSL
14471 #define basename_BDK_BGXX_SPUX_AN_STATUS(a,b) "BGXX_SPUX_AN_STATUS"
14472 #define device_bar_BDK_BGXX_SPUX_AN_STATUS(a,b) 0x0 /* PF_BAR0 */
14473 #define busnum_BDK_BGXX_SPUX_AN_STATUS(a,b) (a)
14474 #define arguments_BDK_BGXX_SPUX_AN_STATUS(a,b) (a),(b),-1,-1
14475
14476 /**
14477 * Register (RSL) bgx#_spu#_an_xnp_tx
14478 *
14479 * BGX SPU Autonegotiation Extended Next Page Transmit Registers
14480 * Software programs this register with the contents of the AN message next page or unformatted
14481 * next page link code word to be transmitted during autonegotiation. Next page exchange occurs
14482 * after the base link code words have been exchanged if either end of the link segment sets the
14483 * NP bit to 1, indicating that it has at least one next page to send. Once initiated, next page
14484 * exchange continues until both ends of the link segment set their NP bits to 0. See section
14485 * 802.3 section 73.7.7 for details.
14486 */
14487 union bdk_bgxx_spux_an_xnp_tx
14488 {
14489 uint64_t u;
14490 struct bdk_bgxx_spux_an_xnp_tx_s
14491 {
14492 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14493 uint64_t reserved_48_63 : 16;
14494 uint64_t u : 32; /**< [ 47: 16](R/W) Unformatted code field. When the MP bit is set, this field contains the 32-bit unformatted
14495 code field of the message next page. When MP is clear, this field contains the upper 32
14496 bits of the 43-bit unformatted code field of the unformatted next page. */
14497 uint64_t np : 1; /**< [ 15: 15](R/W) Next page. */
14498 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge: Always 0 in this register. */
14499 uint64_t mp : 1; /**< [ 13: 13](R/W) Message page. Set to indicate that this register contains a message next page. Clear to
14500 indicate that the register contains an unformatted next page. */
14501 uint64_t ack2 : 1; /**< [ 12: 12](R/W) Acknowledge 2. Indicates that the receiver is able to act on the information (or perform
14502 the task) defined in the message. */
14503 uint64_t toggle : 1; /**< [ 11: 11](R/W) This bit is ignored by hardware. The value of the TOGGLE bit in transmitted next pages is
14504 automatically generated by hardware. */
14505 uint64_t m_u : 11; /**< [ 10: 0](R/W) Message/unformatted code field: When the MP bit is set, this field contains the message
14506 code field (M) of the message next page. When MP is clear, this field contains the lower
14507 11 bits of the 43-bit unformatted code field of the unformatted next page. */
14508 #else /* Word 0 - Little Endian */
14509 uint64_t m_u : 11; /**< [ 10: 0](R/W) Message/unformatted code field: When the MP bit is set, this field contains the message
14510 code field (M) of the message next page. When MP is clear, this field contains the lower
14511 11 bits of the 43-bit unformatted code field of the unformatted next page. */
14512 uint64_t toggle : 1; /**< [ 11: 11](R/W) This bit is ignored by hardware. The value of the TOGGLE bit in transmitted next pages is
14513 automatically generated by hardware. */
14514 uint64_t ack2 : 1; /**< [ 12: 12](R/W) Acknowledge 2. Indicates that the receiver is able to act on the information (or perform
14515 the task) defined in the message. */
14516 uint64_t mp : 1; /**< [ 13: 13](R/W) Message page. Set to indicate that this register contains a message next page. Clear to
14517 indicate that the register contains an unformatted next page. */
14518 uint64_t ack : 1; /**< [ 14: 14](RO/H) Acknowledge: Always 0 in this register. */
14519 uint64_t np : 1; /**< [ 15: 15](R/W) Next page. */
14520 uint64_t u : 32; /**< [ 47: 16](R/W) Unformatted code field. When the MP bit is set, this field contains the 32-bit unformatted
14521 code field of the message next page. When MP is clear, this field contains the upper 32
14522 bits of the 43-bit unformatted code field of the unformatted next page. */
14523 uint64_t reserved_48_63 : 16;
14524 #endif /* Word 0 - End */
14525 } s;
14526 /* struct bdk_bgxx_spux_an_xnp_tx_s cn; */
14527 };
14528 typedef union bdk_bgxx_spux_an_xnp_tx bdk_bgxx_spux_an_xnp_tx_t;
14529
14530 static inline uint64_t BDK_BGXX_SPUX_AN_XNP_TX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_AN_XNP_TX(unsigned long a,unsigned long b)14531 static inline uint64_t BDK_BGXX_SPUX_AN_XNP_TX(unsigned long a, unsigned long b)
14532 {
14533 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14534 return 0x87e0e00100e8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14535 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14536 return 0x87e0e00100e8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14537 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14538 return 0x87e0e00100e8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14539 __bdk_csr_fatal("BGXX_SPUX_AN_XNP_TX", 2, a, b, 0, 0);
14540 }
14541
14542 #define typedef_BDK_BGXX_SPUX_AN_XNP_TX(a,b) bdk_bgxx_spux_an_xnp_tx_t
14543 #define bustype_BDK_BGXX_SPUX_AN_XNP_TX(a,b) BDK_CSR_TYPE_RSL
14544 #define basename_BDK_BGXX_SPUX_AN_XNP_TX(a,b) "BGXX_SPUX_AN_XNP_TX"
14545 #define device_bar_BDK_BGXX_SPUX_AN_XNP_TX(a,b) 0x0 /* PF_BAR0 */
14546 #define busnum_BDK_BGXX_SPUX_AN_XNP_TX(a,b) (a)
14547 #define arguments_BDK_BGXX_SPUX_AN_XNP_TX(a,b) (a),(b),-1,-1
14548
14549 /**
14550 * Register (RSL) bgx#_spu#_br_algn_status
14551 *
14552 * BGX SPU Multilane BASE-R PCS Alignment-Status Registers
14553 * This register implements the IEEE 802.3 multilane BASE-R PCS alignment status 1-4 registers
14554 * (3.50-3.53). It is valid only when the LPCS type is 40GBASE-R
14555 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always returns 0x0 for all other LPCS
14556 * types. IEEE 802.3 bits that are not applicable to 40GBASE-R (e.g. status bits for PCS lanes
14557 * 19-4) are not implemented and marked as reserved. PCS lanes 3-0 are valid and are mapped to
14558 * physical SerDes lanes based on the programming of BGX()_CMR()_CONFIG[LANE_TO_SDS].
14559 */
14560 union bdk_bgxx_spux_br_algn_status
14561 {
14562 uint64_t u;
14563 struct bdk_bgxx_spux_br_algn_status_s
14564 {
14565 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14566 uint64_t reserved_36_63 : 28;
14567 uint64_t marker_lock : 4; /**< [ 35: 32](RO/H) Marker-locked status for PCS lanes 3-0.
14568 0 = Not locked.
14569 1 = Locked. */
14570 uint64_t reserved_13_31 : 19;
14571 uint64_t alignd : 1; /**< [ 12: 12](RO/H) All lanes are locked and aligned. This bit returns 1 when the logical PCS has locked and
14572 aligned all associated receive lanes; returns 0 otherwise. For all other PCS types, this
14573 bit always returns 0. */
14574 uint64_t reserved_4_11 : 8;
14575 uint64_t block_lock : 4; /**< [ 3: 0](RO/H) Block-lock status for PCS lanes 3-0:
14576 0 = Not locked.
14577 1 = Locked. */
14578 #else /* Word 0 - Little Endian */
14579 uint64_t block_lock : 4; /**< [ 3: 0](RO/H) Block-lock status for PCS lanes 3-0:
14580 0 = Not locked.
14581 1 = Locked. */
14582 uint64_t reserved_4_11 : 8;
14583 uint64_t alignd : 1; /**< [ 12: 12](RO/H) All lanes are locked and aligned. This bit returns 1 when the logical PCS has locked and
14584 aligned all associated receive lanes; returns 0 otherwise. For all other PCS types, this
14585 bit always returns 0. */
14586 uint64_t reserved_13_31 : 19;
14587 uint64_t marker_lock : 4; /**< [ 35: 32](RO/H) Marker-locked status for PCS lanes 3-0.
14588 0 = Not locked.
14589 1 = Locked. */
14590 uint64_t reserved_36_63 : 28;
14591 #endif /* Word 0 - End */
14592 } s;
14593 /* struct bdk_bgxx_spux_br_algn_status_s cn; */
14594 };
14595 typedef union bdk_bgxx_spux_br_algn_status bdk_bgxx_spux_br_algn_status_t;
14596
14597 static inline uint64_t BDK_BGXX_SPUX_BR_ALGN_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_ALGN_STATUS(unsigned long a,unsigned long b)14598 static inline uint64_t BDK_BGXX_SPUX_BR_ALGN_STATUS(unsigned long a, unsigned long b)
14599 {
14600 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14601 return 0x87e0e0010050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14602 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14603 return 0x87e0e0010050ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14604 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14605 return 0x87e0e0010050ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14606 __bdk_csr_fatal("BGXX_SPUX_BR_ALGN_STATUS", 2, a, b, 0, 0);
14607 }
14608
14609 #define typedef_BDK_BGXX_SPUX_BR_ALGN_STATUS(a,b) bdk_bgxx_spux_br_algn_status_t
14610 #define bustype_BDK_BGXX_SPUX_BR_ALGN_STATUS(a,b) BDK_CSR_TYPE_RSL
14611 #define basename_BDK_BGXX_SPUX_BR_ALGN_STATUS(a,b) "BGXX_SPUX_BR_ALGN_STATUS"
14612 #define device_bar_BDK_BGXX_SPUX_BR_ALGN_STATUS(a,b) 0x0 /* PF_BAR0 */
14613 #define busnum_BDK_BGXX_SPUX_BR_ALGN_STATUS(a,b) (a)
14614 #define arguments_BDK_BGXX_SPUX_BR_ALGN_STATUS(a,b) (a),(b),-1,-1
14615
14616 /**
14617 * Register (RSL) bgx#_spu#_br_bip_err_cnt
14618 *
14619 * BGX SPU 40GBASE-R BIP Error-Counter Registers
14620 * This register implements the IEEE 802.3 BIP error-counter registers for PCS lanes 0-3
14621 * (3.200-3.203). It is valid only when the LPCS type is 40GBASE-R
14622 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always returns 0x0 for all other LPCS
14623 * types. The counters are indexed by the RX PCS lane number based on the Alignment Marker
14624 * detected on each lane and captured in BGX()_SPU()_BR_LANE_MAP. Each counter counts the
14625 * BIP errors for its PCS lane, and is held at all ones in case of overflow. The counters are
14626 * reset to all 0s when this register is read by software.
14627 *
14628 * The reset operation takes precedence over the increment operation; if the register is read on
14629 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
14630 * increment operation is lost. The counters are writable for test purposes, rather than read-
14631 * only as specified in IEEE 802.3.
14632 */
14633 union bdk_bgxx_spux_br_bip_err_cnt
14634 {
14635 uint64_t u;
14636 struct bdk_bgxx_spux_br_bip_err_cnt_s
14637 {
14638 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14639 uint64_t bip_err_cnt_ln3 : 16; /**< [ 63: 48](RC/W/H) BIP error counter for lane on which PCS lane 3 markers are received. */
14640 uint64_t bip_err_cnt_ln2 : 16; /**< [ 47: 32](RC/W/H) BIP error counter for lane on which PCS lane 2 markers are received. */
14641 uint64_t bip_err_cnt_ln1 : 16; /**< [ 31: 16](RC/W/H) BIP error counter for lane on which PCS lane 1 markers are received. */
14642 uint64_t bip_err_cnt_ln0 : 16; /**< [ 15: 0](RC/W/H) BIP error counter for lane on which PCS lane 0 markers are received. */
14643 #else /* Word 0 - Little Endian */
14644 uint64_t bip_err_cnt_ln0 : 16; /**< [ 15: 0](RC/W/H) BIP error counter for lane on which PCS lane 0 markers are received. */
14645 uint64_t bip_err_cnt_ln1 : 16; /**< [ 31: 16](RC/W/H) BIP error counter for lane on which PCS lane 1 markers are received. */
14646 uint64_t bip_err_cnt_ln2 : 16; /**< [ 47: 32](RC/W/H) BIP error counter for lane on which PCS lane 2 markers are received. */
14647 uint64_t bip_err_cnt_ln3 : 16; /**< [ 63: 48](RC/W/H) BIP error counter for lane on which PCS lane 3 markers are received. */
14648 #endif /* Word 0 - End */
14649 } s;
14650 /* struct bdk_bgxx_spux_br_bip_err_cnt_s cn; */
14651 };
14652 typedef union bdk_bgxx_spux_br_bip_err_cnt bdk_bgxx_spux_br_bip_err_cnt_t;
14653
14654 static inline uint64_t BDK_BGXX_SPUX_BR_BIP_ERR_CNT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_BIP_ERR_CNT(unsigned long a,unsigned long b)14655 static inline uint64_t BDK_BGXX_SPUX_BR_BIP_ERR_CNT(unsigned long a, unsigned long b)
14656 {
14657 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14658 return 0x87e0e0010058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14659 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14660 return 0x87e0e0010058ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14661 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14662 return 0x87e0e0010058ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14663 __bdk_csr_fatal("BGXX_SPUX_BR_BIP_ERR_CNT", 2, a, b, 0, 0);
14664 }
14665
14666 #define typedef_BDK_BGXX_SPUX_BR_BIP_ERR_CNT(a,b) bdk_bgxx_spux_br_bip_err_cnt_t
14667 #define bustype_BDK_BGXX_SPUX_BR_BIP_ERR_CNT(a,b) BDK_CSR_TYPE_RSL
14668 #define basename_BDK_BGXX_SPUX_BR_BIP_ERR_CNT(a,b) "BGXX_SPUX_BR_BIP_ERR_CNT"
14669 #define device_bar_BDK_BGXX_SPUX_BR_BIP_ERR_CNT(a,b) 0x0 /* PF_BAR0 */
14670 #define busnum_BDK_BGXX_SPUX_BR_BIP_ERR_CNT(a,b) (a)
14671 #define arguments_BDK_BGXX_SPUX_BR_BIP_ERR_CNT(a,b) (a),(b),-1,-1
14672
14673 /**
14674 * Register (RSL) bgx#_spu#_br_lane_map
14675 *
14676 * BGX SPU 40GBASE-R Lane-Mapping Registers
14677 * This register implements the IEEE 802.3 lane 0-3 mapping registers (3.400-3.403). It is valid
14678 * only when the LPCS type is 40GBASE-R (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always
14679 * returns 0x0 for all other LPCS types. The LNx_MAPPING field for each programmed PCS lane
14680 * (called service interface in 802.3ba-2010) is valid when that lane has achieved alignment
14681 * marker lock on the receive side (i.e. the associated
14682 * BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), and is invalid otherwise. When valid, it
14683 * returns the actual detected receive PCS lane number based on the received alignment marker
14684 * contents received on that service interface.
14685 *
14686 * The mapping is flexible because IEEE 802.3 allows multilane BASE-R receive lanes to be re-
14687 * ordered. Note that for the transmit side, each PCS lane is mapped to a physical SerDes lane
14688 * based on the programming of BGX()_CMR()_CONFIG[LANE_TO_SDS]. For the receive side,
14689 * BGX()_CMR()_CONFIG[LANE_TO_SDS] specifies the service interface to physical SerDes
14690 * lane mapping, and this register specifies the service interface to PCS lane mapping.
14691 */
14692 union bdk_bgxx_spux_br_lane_map
14693 {
14694 uint64_t u;
14695 struct bdk_bgxx_spux_br_lane_map_s
14696 {
14697 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14698 uint64_t reserved_54_63 : 10;
14699 uint64_t ln3_mapping : 6; /**< [ 53: 48](RO/H) PCS lane number received on service interface 3 */
14700 uint64_t reserved_38_47 : 10;
14701 uint64_t ln2_mapping : 6; /**< [ 37: 32](RO/H) PCS lane number received on service interface 2 */
14702 uint64_t reserved_22_31 : 10;
14703 uint64_t ln1_mapping : 6; /**< [ 21: 16](RO/H) PCS lane number received on service interface 1 */
14704 uint64_t reserved_6_15 : 10;
14705 uint64_t ln0_mapping : 6; /**< [ 5: 0](RO/H) PCS lane number received on service interface 0 */
14706 #else /* Word 0 - Little Endian */
14707 uint64_t ln0_mapping : 6; /**< [ 5: 0](RO/H) PCS lane number received on service interface 0 */
14708 uint64_t reserved_6_15 : 10;
14709 uint64_t ln1_mapping : 6; /**< [ 21: 16](RO/H) PCS lane number received on service interface 1 */
14710 uint64_t reserved_22_31 : 10;
14711 uint64_t ln2_mapping : 6; /**< [ 37: 32](RO/H) PCS lane number received on service interface 2 */
14712 uint64_t reserved_38_47 : 10;
14713 uint64_t ln3_mapping : 6; /**< [ 53: 48](RO/H) PCS lane number received on service interface 3 */
14714 uint64_t reserved_54_63 : 10;
14715 #endif /* Word 0 - End */
14716 } s;
14717 /* struct bdk_bgxx_spux_br_lane_map_s cn; */
14718 };
14719 typedef union bdk_bgxx_spux_br_lane_map bdk_bgxx_spux_br_lane_map_t;
14720
14721 static inline uint64_t BDK_BGXX_SPUX_BR_LANE_MAP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_LANE_MAP(unsigned long a,unsigned long b)14722 static inline uint64_t BDK_BGXX_SPUX_BR_LANE_MAP(unsigned long a, unsigned long b)
14723 {
14724 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14725 return 0x87e0e0010060ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14726 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14727 return 0x87e0e0010060ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14728 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14729 return 0x87e0e0010060ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14730 __bdk_csr_fatal("BGXX_SPUX_BR_LANE_MAP", 2, a, b, 0, 0);
14731 }
14732
14733 #define typedef_BDK_BGXX_SPUX_BR_LANE_MAP(a,b) bdk_bgxx_spux_br_lane_map_t
14734 #define bustype_BDK_BGXX_SPUX_BR_LANE_MAP(a,b) BDK_CSR_TYPE_RSL
14735 #define basename_BDK_BGXX_SPUX_BR_LANE_MAP(a,b) "BGXX_SPUX_BR_LANE_MAP"
14736 #define device_bar_BDK_BGXX_SPUX_BR_LANE_MAP(a,b) 0x0 /* PF_BAR0 */
14737 #define busnum_BDK_BGXX_SPUX_BR_LANE_MAP(a,b) (a)
14738 #define arguments_BDK_BGXX_SPUX_BR_LANE_MAP(a,b) (a),(b),-1,-1
14739
14740 /**
14741 * Register (RSL) bgx#_spu#_br_pmd_control
14742 *
14743 * BGX SPU 40GBASE-R PMD Control Registers
14744 */
14745 union bdk_bgxx_spux_br_pmd_control
14746 {
14747 uint64_t u;
14748 struct bdk_bgxx_spux_br_pmd_control_s
14749 {
14750 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14751 uint64_t reserved_2_63 : 62;
14752 uint64_t train_en : 1; /**< [ 1: 1](R/W) BASE-R training enable. */
14753 uint64_t train_restart : 1; /**< [ 0: 0](R/W1S/H) BASE-R training restart. Writing a 1 to this bit restarts the training process if
14754 [TRAIN_EN] is also set. This is a self-clearing bit. Software should
14755 wait a minimum of 1.7ms after BGX()_SPU()_INT[TRAINING_FAILURE] is set before
14756 restarting the training process. */
14757 #else /* Word 0 - Little Endian */
14758 uint64_t train_restart : 1; /**< [ 0: 0](R/W1S/H) BASE-R training restart. Writing a 1 to this bit restarts the training process if
14759 [TRAIN_EN] is also set. This is a self-clearing bit. Software should
14760 wait a minimum of 1.7ms after BGX()_SPU()_INT[TRAINING_FAILURE] is set before
14761 restarting the training process. */
14762 uint64_t train_en : 1; /**< [ 1: 1](R/W) BASE-R training enable. */
14763 uint64_t reserved_2_63 : 62;
14764 #endif /* Word 0 - End */
14765 } s;
14766 /* struct bdk_bgxx_spux_br_pmd_control_s cn; */
14767 };
14768 typedef union bdk_bgxx_spux_br_pmd_control bdk_bgxx_spux_br_pmd_control_t;
14769
14770 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_CONTROL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_PMD_CONTROL(unsigned long a,unsigned long b)14771 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_CONTROL(unsigned long a, unsigned long b)
14772 {
14773 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14774 return 0x87e0e0010068ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14775 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14776 return 0x87e0e0010068ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14777 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14778 return 0x87e0e0010068ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14779 __bdk_csr_fatal("BGXX_SPUX_BR_PMD_CONTROL", 2, a, b, 0, 0);
14780 }
14781
14782 #define typedef_BDK_BGXX_SPUX_BR_PMD_CONTROL(a,b) bdk_bgxx_spux_br_pmd_control_t
14783 #define bustype_BDK_BGXX_SPUX_BR_PMD_CONTROL(a,b) BDK_CSR_TYPE_RSL
14784 #define basename_BDK_BGXX_SPUX_BR_PMD_CONTROL(a,b) "BGXX_SPUX_BR_PMD_CONTROL"
14785 #define device_bar_BDK_BGXX_SPUX_BR_PMD_CONTROL(a,b) 0x0 /* PF_BAR0 */
14786 #define busnum_BDK_BGXX_SPUX_BR_PMD_CONTROL(a,b) (a)
14787 #define arguments_BDK_BGXX_SPUX_BR_PMD_CONTROL(a,b) (a),(b),-1,-1
14788
14789 /**
14790 * Register (RSL) bgx#_spu#_br_pmd_ld_cup
14791 *
14792 * BGX SPU 40GBASE-R PMD Local Device Coefficient Update Registers
14793 * This register implements 802.3 MDIO register 1.153 for 10GBASE-R (when
14794 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
14795 * and MDIO registers 1.1300-1.1303 for 40GBASE-R (when
14796 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
14797 * When link training
14798 * is in progress, each field reflects the contents of the coefficient update field in the
14799 * associated lane's outgoing training frame. The fields in this register are read/write even
14800 * though they are specified as read-only in 802.3.
14801 *
14802 * If BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register must be updated
14803 * by software during link training and hardware updates are disabled. If
14804 * BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear, this register is automatically
14805 * updated by hardware, and it should not be written by software. The lane fields in this
14806 * register are indexed by logical PCS lane ID.
14807 *
14808 * The lane 0 field (LN0_*) is valid for both
14809 * 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only valid for
14810 * 40GBASE-R.
14811 */
14812 union bdk_bgxx_spux_br_pmd_ld_cup
14813 {
14814 uint64_t u;
14815 struct bdk_bgxx_spux_br_pmd_ld_cup_s
14816 {
14817 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14818 uint64_t ln3_cup : 16; /**< [ 63: 48](R/W/H) PCS lane 3 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14819 10GBASE-R. */
14820 uint64_t ln2_cup : 16; /**< [ 47: 32](R/W/H) PCS lane 2 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14821 10GBASE-R. */
14822 uint64_t ln1_cup : 16; /**< [ 31: 16](R/W/H) PCS lane 1 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14823 10GBASE-R. */
14824 uint64_t ln0_cup : 16; /**< [ 15: 0](R/W/H) PCS lane 0 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. */
14825 #else /* Word 0 - Little Endian */
14826 uint64_t ln0_cup : 16; /**< [ 15: 0](R/W/H) PCS lane 0 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. */
14827 uint64_t ln1_cup : 16; /**< [ 31: 16](R/W/H) PCS lane 1 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14828 10GBASE-R. */
14829 uint64_t ln2_cup : 16; /**< [ 47: 32](R/W/H) PCS lane 2 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14830 10GBASE-R. */
14831 uint64_t ln3_cup : 16; /**< [ 63: 48](R/W/H) PCS lane 3 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14832 10GBASE-R. */
14833 #endif /* Word 0 - End */
14834 } s;
14835 /* struct bdk_bgxx_spux_br_pmd_ld_cup_s cn; */
14836 };
14837 typedef union bdk_bgxx_spux_br_pmd_ld_cup bdk_bgxx_spux_br_pmd_ld_cup_t;
14838
14839 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LD_CUP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_PMD_LD_CUP(unsigned long a,unsigned long b)14840 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LD_CUP(unsigned long a, unsigned long b)
14841 {
14842 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14843 return 0x87e0e0010088ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14844 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14845 return 0x87e0e0010088ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14846 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14847 return 0x87e0e0010088ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14848 __bdk_csr_fatal("BGXX_SPUX_BR_PMD_LD_CUP", 2, a, b, 0, 0);
14849 }
14850
14851 #define typedef_BDK_BGXX_SPUX_BR_PMD_LD_CUP(a,b) bdk_bgxx_spux_br_pmd_ld_cup_t
14852 #define bustype_BDK_BGXX_SPUX_BR_PMD_LD_CUP(a,b) BDK_CSR_TYPE_RSL
14853 #define basename_BDK_BGXX_SPUX_BR_PMD_LD_CUP(a,b) "BGXX_SPUX_BR_PMD_LD_CUP"
14854 #define device_bar_BDK_BGXX_SPUX_BR_PMD_LD_CUP(a,b) 0x0 /* PF_BAR0 */
14855 #define busnum_BDK_BGXX_SPUX_BR_PMD_LD_CUP(a,b) (a)
14856 #define arguments_BDK_BGXX_SPUX_BR_PMD_LD_CUP(a,b) (a),(b),-1,-1
14857
14858 /**
14859 * Register (RSL) bgx#_spu#_br_pmd_ld_rep
14860 *
14861 * BGX SPU 40GBASE-R PMD Local Device Status Report Registers
14862 * This register implements 802.3 MDIO register 1.154 for 10GBASE-R (when
14863 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R) and MDIO registers 1.1400-1.1403 for 40GBASE-R
14864 * (when BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of
14865 * training. Each field
14866 * reflects the contents of the status report field in the associated lane's outgoing training
14867 * frame. The fields in this register are read/write even though they are specified as read-only
14868 * in 802.3. If BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register must
14869 * be updated by software during link training and hardware updates are disabled. If
14870 * BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear, this register is automatically
14871 * updated by hardware, and it should not be written by software. The lane fields in this
14872 * register are indexed by logical PCS lane ID.
14873 *
14874 * The lane 0 field (LN0_*) is valid for both
14875 * 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only valid for
14876 * 40GBASE-R.
14877 */
14878 union bdk_bgxx_spux_br_pmd_ld_rep
14879 {
14880 uint64_t u;
14881 struct bdk_bgxx_spux_br_pmd_ld_rep_s
14882 {
14883 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14884 uint64_t ln3_rep : 16; /**< [ 63: 48](R/W/H) PCS lane 3 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
14885 10GBASE-R. */
14886 uint64_t ln2_rep : 16; /**< [ 47: 32](R/W/H) PCS lane 2 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
14887 10GBASE-R. */
14888 uint64_t ln1_rep : 16; /**< [ 31: 16](R/W/H) PCS lane 1 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
14889 10GBASE-R. */
14890 uint64_t ln0_rep : 16; /**< [ 15: 0](R/W/H) PCS lane 0 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. */
14891 #else /* Word 0 - Little Endian */
14892 uint64_t ln0_rep : 16; /**< [ 15: 0](R/W/H) PCS lane 0 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. */
14893 uint64_t ln1_rep : 16; /**< [ 31: 16](R/W/H) PCS lane 1 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
14894 10GBASE-R. */
14895 uint64_t ln2_rep : 16; /**< [ 47: 32](R/W/H) PCS lane 2 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
14896 10GBASE-R. */
14897 uint64_t ln3_rep : 16; /**< [ 63: 48](R/W/H) PCS lane 3 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
14898 10GBASE-R. */
14899 #endif /* Word 0 - End */
14900 } s;
14901 /* struct bdk_bgxx_spux_br_pmd_ld_rep_s cn; */
14902 };
14903 typedef union bdk_bgxx_spux_br_pmd_ld_rep bdk_bgxx_spux_br_pmd_ld_rep_t;
14904
14905 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LD_REP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_PMD_LD_REP(unsigned long a,unsigned long b)14906 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LD_REP(unsigned long a, unsigned long b)
14907 {
14908 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14909 return 0x87e0e0010090ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14910 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14911 return 0x87e0e0010090ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14912 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14913 return 0x87e0e0010090ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14914 __bdk_csr_fatal("BGXX_SPUX_BR_PMD_LD_REP", 2, a, b, 0, 0);
14915 }
14916
14917 #define typedef_BDK_BGXX_SPUX_BR_PMD_LD_REP(a,b) bdk_bgxx_spux_br_pmd_ld_rep_t
14918 #define bustype_BDK_BGXX_SPUX_BR_PMD_LD_REP(a,b) BDK_CSR_TYPE_RSL
14919 #define basename_BDK_BGXX_SPUX_BR_PMD_LD_REP(a,b) "BGXX_SPUX_BR_PMD_LD_REP"
14920 #define device_bar_BDK_BGXX_SPUX_BR_PMD_LD_REP(a,b) 0x0 /* PF_BAR0 */
14921 #define busnum_BDK_BGXX_SPUX_BR_PMD_LD_REP(a,b) (a)
14922 #define arguments_BDK_BGXX_SPUX_BR_PMD_LD_REP(a,b) (a),(b),-1,-1
14923
14924 /**
14925 * Register (RSL) bgx#_spu#_br_pmd_lp_cup
14926 *
14927 * BGX SPU 40GBASE-R PMD Link Partner Coefficient Update Registers
14928 * This register implements 802.3 MDIO register 1.152 for 10GBASE-R (when
14929 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
14930 * and MDIO registers 1.1100-1.1103 for 40GBASE-R (when
14931 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
14932 * Each field reflects
14933 * the contents of the coefficient update field in the lane's most recently received training
14934 * frame. This register should not be written when link training is enabled, i.e. when
14935 * BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is set. The lane fields in this register are indexed by
14936 * logical PCS lane ID.
14937 *
14938 * The lane 0 field (LN0_*) is valid for both 10GBASE-R and 40GBASE-R. The remaining fields
14939 * (LN1_*, LN2_*, LN3_*) are only valid for 40GBASE-R.
14940 */
14941 union bdk_bgxx_spux_br_pmd_lp_cup
14942 {
14943 uint64_t u;
14944 struct bdk_bgxx_spux_br_pmd_lp_cup_s
14945 {
14946 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
14947 uint64_t ln3_cup : 16; /**< [ 63: 48](R/W/H) PCS lane 3 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14948 10GBASE-R. */
14949 uint64_t ln2_cup : 16; /**< [ 47: 32](R/W/H) PCS lane 2 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14950 10GBASE-R. */
14951 uint64_t ln1_cup : 16; /**< [ 31: 16](R/W/H) PCS lane 1 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14952 10GBASE-R. */
14953 uint64_t ln0_cup : 16; /**< [ 15: 0](R/W/H) PCS lane 0 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. */
14954 #else /* Word 0 - Little Endian */
14955 uint64_t ln0_cup : 16; /**< [ 15: 0](R/W/H) PCS lane 0 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. */
14956 uint64_t ln1_cup : 16; /**< [ 31: 16](R/W/H) PCS lane 1 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14957 10GBASE-R. */
14958 uint64_t ln2_cup : 16; /**< [ 47: 32](R/W/H) PCS lane 2 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14959 10GBASE-R. */
14960 uint64_t ln3_cup : 16; /**< [ 63: 48](R/W/H) PCS lane 3 coefficient update: format defined by BGX_SPU_BR_TRAIN_CUP_S. Not valid for
14961 10GBASE-R. */
14962 #endif /* Word 0 - End */
14963 } s;
14964 /* struct bdk_bgxx_spux_br_pmd_lp_cup_s cn; */
14965 };
14966 typedef union bdk_bgxx_spux_br_pmd_lp_cup bdk_bgxx_spux_br_pmd_lp_cup_t;
14967
14968 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LP_CUP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_PMD_LP_CUP(unsigned long a,unsigned long b)14969 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LP_CUP(unsigned long a, unsigned long b)
14970 {
14971 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
14972 return 0x87e0e0010078ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14973 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
14974 return 0x87e0e0010078ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
14975 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
14976 return 0x87e0e0010078ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
14977 __bdk_csr_fatal("BGXX_SPUX_BR_PMD_LP_CUP", 2, a, b, 0, 0);
14978 }
14979
14980 #define typedef_BDK_BGXX_SPUX_BR_PMD_LP_CUP(a,b) bdk_bgxx_spux_br_pmd_lp_cup_t
14981 #define bustype_BDK_BGXX_SPUX_BR_PMD_LP_CUP(a,b) BDK_CSR_TYPE_RSL
14982 #define basename_BDK_BGXX_SPUX_BR_PMD_LP_CUP(a,b) "BGXX_SPUX_BR_PMD_LP_CUP"
14983 #define device_bar_BDK_BGXX_SPUX_BR_PMD_LP_CUP(a,b) 0x0 /* PF_BAR0 */
14984 #define busnum_BDK_BGXX_SPUX_BR_PMD_LP_CUP(a,b) (a)
14985 #define arguments_BDK_BGXX_SPUX_BR_PMD_LP_CUP(a,b) (a),(b),-1,-1
14986
14987 /**
14988 * Register (RSL) bgx#_spu#_br_pmd_lp_rep
14989 *
14990 * BGX SPU 40GBASE-R PMD Link Partner Status Report Registers
14991 * This register implements 802.3 MDIO register 1.153 for 10GBASE-R (when
14992 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
14993 * and MDIO registers 1.1200-1.1203 for 40GBASE-R (when
14994 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
14995 * Each field reflects
14996 * the contents of the status report field in the associated lane's most recently received
14997 * training frame. The lane fields in this register are indexed by logical PCS lane ID.
14998 *
14999 * The lane
15000 * 0 field (LN0_*) is valid for both 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*,
15001 * LN3_*) are only valid for 40GBASE-R.
15002 */
15003 union bdk_bgxx_spux_br_pmd_lp_rep
15004 {
15005 uint64_t u;
15006 struct bdk_bgxx_spux_br_pmd_lp_rep_s
15007 {
15008 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15009 uint64_t ln3_rep : 16; /**< [ 63: 48](RO/H) PCS lane 3 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
15010 10GBASE-R. */
15011 uint64_t ln2_rep : 16; /**< [ 47: 32](RO/H) PCS lane 2 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
15012 10GBASE-R. */
15013 uint64_t ln1_rep : 16; /**< [ 31: 16](RO/H) PCS lane 1 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
15014 10GBASE-R. */
15015 uint64_t ln0_rep : 16; /**< [ 15: 0](RO/H) PCS lane 0 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. */
15016 #else /* Word 0 - Little Endian */
15017 uint64_t ln0_rep : 16; /**< [ 15: 0](RO/H) PCS lane 0 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. */
15018 uint64_t ln1_rep : 16; /**< [ 31: 16](RO/H) PCS lane 1 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
15019 10GBASE-R. */
15020 uint64_t ln2_rep : 16; /**< [ 47: 32](RO/H) PCS lane 2 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
15021 10GBASE-R. */
15022 uint64_t ln3_rep : 16; /**< [ 63: 48](RO/H) PCS lane 3 status report: format defined by BGX_SPU_BR_TRAIN_REP_S. Not valid for
15023 10GBASE-R. */
15024 #endif /* Word 0 - End */
15025 } s;
15026 /* struct bdk_bgxx_spux_br_pmd_lp_rep_s cn; */
15027 };
15028 typedef union bdk_bgxx_spux_br_pmd_lp_rep bdk_bgxx_spux_br_pmd_lp_rep_t;
15029
15030 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LP_REP(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_PMD_LP_REP(unsigned long a,unsigned long b)15031 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_LP_REP(unsigned long a, unsigned long b)
15032 {
15033 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15034 return 0x87e0e0010080ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15035 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15036 return 0x87e0e0010080ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15037 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15038 return 0x87e0e0010080ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15039 __bdk_csr_fatal("BGXX_SPUX_BR_PMD_LP_REP", 2, a, b, 0, 0);
15040 }
15041
15042 #define typedef_BDK_BGXX_SPUX_BR_PMD_LP_REP(a,b) bdk_bgxx_spux_br_pmd_lp_rep_t
15043 #define bustype_BDK_BGXX_SPUX_BR_PMD_LP_REP(a,b) BDK_CSR_TYPE_RSL
15044 #define basename_BDK_BGXX_SPUX_BR_PMD_LP_REP(a,b) "BGXX_SPUX_BR_PMD_LP_REP"
15045 #define device_bar_BDK_BGXX_SPUX_BR_PMD_LP_REP(a,b) 0x0 /* PF_BAR0 */
15046 #define busnum_BDK_BGXX_SPUX_BR_PMD_LP_REP(a,b) (a)
15047 #define arguments_BDK_BGXX_SPUX_BR_PMD_LP_REP(a,b) (a),(b),-1,-1
15048
15049 /**
15050 * Register (RSL) bgx#_spu#_br_pmd_status
15051 *
15052 * BGX SPU 40GBASE-R PMD Status Registers
15053 * The lane fields in this register are indexed by logical PCS lane ID. The lane 0 field (LN0_*)
15054 * is valid for both 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only
15055 * valid for 40GBASE-R.
15056 */
15057 union bdk_bgxx_spux_br_pmd_status
15058 {
15059 uint64_t u;
15060 struct bdk_bgxx_spux_br_pmd_status_s
15061 {
15062 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15063 uint64_t reserved_16_63 : 48;
15064 uint64_t ln3_train_status : 4; /**< [ 15: 12](RO/H) PCS lane 3 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. Not
15065 valid for 10GBASE-R. */
15066 uint64_t ln2_train_status : 4; /**< [ 11: 8](RO/H) PCS lane 2 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. Not
15067 valid for 10GBASE-R. */
15068 uint64_t ln1_train_status : 4; /**< [ 7: 4](RO/H) PCS lane 1 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. Not
15069 valid for 10GBASE-R. */
15070 uint64_t ln0_train_status : 4; /**< [ 3: 0](RO/H) PCS lane 0 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. */
15071 #else /* Word 0 - Little Endian */
15072 uint64_t ln0_train_status : 4; /**< [ 3: 0](RO/H) PCS lane 0 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. */
15073 uint64_t ln1_train_status : 4; /**< [ 7: 4](RO/H) PCS lane 1 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. Not
15074 valid for 10GBASE-R. */
15075 uint64_t ln2_train_status : 4; /**< [ 11: 8](RO/H) PCS lane 2 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. Not
15076 valid for 10GBASE-R. */
15077 uint64_t ln3_train_status : 4; /**< [ 15: 12](RO/H) PCS lane 3 link training status. Format defined by BGX_SPU_BR_LANE_TRAIN_STATUS_S. Not
15078 valid for 10GBASE-R. */
15079 uint64_t reserved_16_63 : 48;
15080 #endif /* Word 0 - End */
15081 } s;
15082 /* struct bdk_bgxx_spux_br_pmd_status_s cn; */
15083 };
15084 typedef union bdk_bgxx_spux_br_pmd_status bdk_bgxx_spux_br_pmd_status_t;
15085
15086 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_PMD_STATUS(unsigned long a,unsigned long b)15087 static inline uint64_t BDK_BGXX_SPUX_BR_PMD_STATUS(unsigned long a, unsigned long b)
15088 {
15089 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15090 return 0x87e0e0010070ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15091 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15092 return 0x87e0e0010070ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15093 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15094 return 0x87e0e0010070ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15095 __bdk_csr_fatal("BGXX_SPUX_BR_PMD_STATUS", 2, a, b, 0, 0);
15096 }
15097
15098 #define typedef_BDK_BGXX_SPUX_BR_PMD_STATUS(a,b) bdk_bgxx_spux_br_pmd_status_t
15099 #define bustype_BDK_BGXX_SPUX_BR_PMD_STATUS(a,b) BDK_CSR_TYPE_RSL
15100 #define basename_BDK_BGXX_SPUX_BR_PMD_STATUS(a,b) "BGXX_SPUX_BR_PMD_STATUS"
15101 #define device_bar_BDK_BGXX_SPUX_BR_PMD_STATUS(a,b) 0x0 /* PF_BAR0 */
15102 #define busnum_BDK_BGXX_SPUX_BR_PMD_STATUS(a,b) (a)
15103 #define arguments_BDK_BGXX_SPUX_BR_PMD_STATUS(a,b) (a),(b),-1,-1
15104
15105 /**
15106 * Register (RSL) bgx#_spu#_br_status1
15107 *
15108 * BGX SPU BASE-R Status 1 Registers
15109 */
15110 union bdk_bgxx_spux_br_status1
15111 {
15112 uint64_t u;
15113 struct bdk_bgxx_spux_br_status1_s
15114 {
15115 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15116 uint64_t reserved_13_63 : 51;
15117 uint64_t rcv_lnk : 1; /**< [ 12: 12](RO/H) BASE-R receive link status.
15118 0 = BASE-R PCS receive-link down.
15119 1 = BASE-R PCS receive-link up.
15120
15121 This bit is a reflection of the PCS_status variable defined in IEEE 802.3 sections
15122 49.2.14.1 and 82.3.1. */
15123 uint64_t reserved_4_11 : 8;
15124 uint64_t prbs9 : 1; /**< [ 3: 3](RO) 10GBASE-R PRBS9 pattern testing ability. Always 0; PRBS9 pattern testing is not supported. */
15125 uint64_t prbs31 : 1; /**< [ 2: 2](RO) 10GBASE-R PRBS31 pattern testing ability. Always 0; PRBS31 pattern testing is not supported. */
15126 uint64_t hi_ber : 1; /**< [ 1: 1](RO/H) BASE-R PCS high bit-error rate.
15127 0 = 64/66 bit receiver is detecting a bit-error rate of \< 10.4.
15128 1 = 64/66 bit receiver is detecting a bit-error rate of \>= 10.4.
15129
15130 This bit is a direct reflection of the state of the HI_BER variable in the 64 B/66 B state
15131 diagram and is defined in IEEE 802.3 sections 49.2.13.2.2 and 82.2.18.2.2. */
15132 uint64_t blk_lock : 1; /**< [ 0: 0](RO/H) BASE-R PCS block lock.
15133 0 = No block lock.
15134 1 = 64/66 bit receiver for BASE-R has block lock.
15135
15136 This bit is a direct reflection of the state of the BLOCK_LOCK variable in the 64 B/66 B
15137 state diagram and is defined in IEEE 802.3 sections 49.2.13.2.2 and 82.2.18.2.2.
15138 For a multilane logical PCS (i.e. 40GBASE-R), this bit indicates that the receiver has
15139 both block lock and alignment for all lanes and is identical to
15140 BGX()_SPU()_BR_ALGN_STATUS[ALIGND]. */
15141 #else /* Word 0 - Little Endian */
15142 uint64_t blk_lock : 1; /**< [ 0: 0](RO/H) BASE-R PCS block lock.
15143 0 = No block lock.
15144 1 = 64/66 bit receiver for BASE-R has block lock.
15145
15146 This bit is a direct reflection of the state of the BLOCK_LOCK variable in the 64 B/66 B
15147 state diagram and is defined in IEEE 802.3 sections 49.2.13.2.2 and 82.2.18.2.2.
15148 For a multilane logical PCS (i.e. 40GBASE-R), this bit indicates that the receiver has
15149 both block lock and alignment for all lanes and is identical to
15150 BGX()_SPU()_BR_ALGN_STATUS[ALIGND]. */
15151 uint64_t hi_ber : 1; /**< [ 1: 1](RO/H) BASE-R PCS high bit-error rate.
15152 0 = 64/66 bit receiver is detecting a bit-error rate of \< 10.4.
15153 1 = 64/66 bit receiver is detecting a bit-error rate of \>= 10.4.
15154
15155 This bit is a direct reflection of the state of the HI_BER variable in the 64 B/66 B state
15156 diagram and is defined in IEEE 802.3 sections 49.2.13.2.2 and 82.2.18.2.2. */
15157 uint64_t prbs31 : 1; /**< [ 2: 2](RO) 10GBASE-R PRBS31 pattern testing ability. Always 0; PRBS31 pattern testing is not supported. */
15158 uint64_t prbs9 : 1; /**< [ 3: 3](RO) 10GBASE-R PRBS9 pattern testing ability. Always 0; PRBS9 pattern testing is not supported. */
15159 uint64_t reserved_4_11 : 8;
15160 uint64_t rcv_lnk : 1; /**< [ 12: 12](RO/H) BASE-R receive link status.
15161 0 = BASE-R PCS receive-link down.
15162 1 = BASE-R PCS receive-link up.
15163
15164 This bit is a reflection of the PCS_status variable defined in IEEE 802.3 sections
15165 49.2.14.1 and 82.3.1. */
15166 uint64_t reserved_13_63 : 51;
15167 #endif /* Word 0 - End */
15168 } s;
15169 /* struct bdk_bgxx_spux_br_status1_s cn; */
15170 };
15171 typedef union bdk_bgxx_spux_br_status1 bdk_bgxx_spux_br_status1_t;
15172
15173 static inline uint64_t BDK_BGXX_SPUX_BR_STATUS1(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_STATUS1(unsigned long a,unsigned long b)15174 static inline uint64_t BDK_BGXX_SPUX_BR_STATUS1(unsigned long a, unsigned long b)
15175 {
15176 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15177 return 0x87e0e0010030ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15178 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15179 return 0x87e0e0010030ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15180 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15181 return 0x87e0e0010030ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15182 __bdk_csr_fatal("BGXX_SPUX_BR_STATUS1", 2, a, b, 0, 0);
15183 }
15184
15185 #define typedef_BDK_BGXX_SPUX_BR_STATUS1(a,b) bdk_bgxx_spux_br_status1_t
15186 #define bustype_BDK_BGXX_SPUX_BR_STATUS1(a,b) BDK_CSR_TYPE_RSL
15187 #define basename_BDK_BGXX_SPUX_BR_STATUS1(a,b) "BGXX_SPUX_BR_STATUS1"
15188 #define device_bar_BDK_BGXX_SPUX_BR_STATUS1(a,b) 0x0 /* PF_BAR0 */
15189 #define busnum_BDK_BGXX_SPUX_BR_STATUS1(a,b) (a)
15190 #define arguments_BDK_BGXX_SPUX_BR_STATUS1(a,b) (a),(b),-1,-1
15191
15192 /**
15193 * Register (RSL) bgx#_spu#_br_status2
15194 *
15195 * BGX SPU BASE-R Status 2 Registers
15196 * This register implements a combination of the following IEEE 802.3 registers:
15197 * * BASE-R PCS status 2 (MDIO address 3.33).
15198 * * BASE-R BER high-order counter (MDIO address 3.44).
15199 * * Errored-blocks high-order counter (MDIO address 3.45).
15200 *
15201 * Note that the relative locations of some fields have been moved from IEEE 802.3 in order to
15202 * make the register layout more software friendly: the BER counter high-order and low-order bits
15203 * from sections 3.44 and 3.33 have been combined into the contiguous, 22-bit [BER_CNT] field;
15204 * likewise, the errored-blocks counter high-order and low-order bits from section 3.45 have been
15205 * combined into the contiguous, 22-bit [ERR_BLKS] field.
15206 */
15207 union bdk_bgxx_spux_br_status2
15208 {
15209 uint64_t u;
15210 struct bdk_bgxx_spux_br_status2_s
15211 {
15212 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15213 uint64_t reserved_62_63 : 2;
15214 uint64_t err_blks : 22; /**< [ 61: 40](RC/W/H) Errored-blocks counter. This is the BASE-R errored-blocks counter as defined by the
15215 errored_block_count variable specified in IEEE 802.3 sections 49.2.14.2 and 82.2.18.2.4.
15216 It
15217 increments by one on each block for which the BASE-R receive state machine, specified in Std
15218 802.3 diagrams 49-15 and 82-15, enters the RX_E state.
15219 Back-to-back blocks in the RX_E state are counted as transitions from RX_E to RX_E and
15220 keep incrementing the counter. The counter is reset to all zeros after this register is read
15221 by software.
15222
15223 The reset operation takes precedence over the increment operation: if the register is read
15224 on the same clock cycle as an increment operation, the counter is reset to all zeros and the
15225 increment operation is lost.
15226
15227 This field is writable for test purposes, rather than read-only as specified in IEEE
15228 802.3. */
15229 uint64_t reserved_38_39 : 2;
15230 uint64_t ber_cnt : 22; /**< [ 37: 16](RC/W/H) Bit-error-rate counter. This is the BASE-R BER counter as defined by the BER_COUNT
15231 variable in IEEE 802.3 sections 49.2.14.2 and 82.2.18.2.4. The counter is reset to all zeros
15232 after this register is read by software, and is held at all ones in case of overflow.
15233 The reset operation takes precedence over the increment operation: if the register is read
15234 on the same clock cycle an increment operation, the counter is reset to all zeros and the
15235 increment operation is lost.
15236
15237 This field is writable for test purposes, rather than read-only as specified in IEEE
15238 802.3. */
15239 uint64_t latched_lock : 1; /**< [ 15: 15](R/W1S/H) Latched-block lock.
15240 0 = No block.
15241 1 = 64/66 bit receiver for BASE-R has block lock.
15242
15243 This is a latching-low version of BGX()_SPU()_BR_STATUS1[BLK_LOCK]; it stays clear
15244 until a write-1-to-set by software. */
15245 uint64_t latched_ber : 1; /**< [ 14: 14](R/W1C/H) Latched-high bit-error rate.
15246 0 = Not a high BER.
15247 1 = 64/66 bit receiver is detecting a high BER.
15248
15249 This is a latching-high version of BGX()_SPU()_BR_STATUS1[HI_BER]; it stays set until
15250 a write-1-to-clear by software. */
15251 uint64_t reserved_0_13 : 14;
15252 #else /* Word 0 - Little Endian */
15253 uint64_t reserved_0_13 : 14;
15254 uint64_t latched_ber : 1; /**< [ 14: 14](R/W1C/H) Latched-high bit-error rate.
15255 0 = Not a high BER.
15256 1 = 64/66 bit receiver is detecting a high BER.
15257
15258 This is a latching-high version of BGX()_SPU()_BR_STATUS1[HI_BER]; it stays set until
15259 a write-1-to-clear by software. */
15260 uint64_t latched_lock : 1; /**< [ 15: 15](R/W1S/H) Latched-block lock.
15261 0 = No block.
15262 1 = 64/66 bit receiver for BASE-R has block lock.
15263
15264 This is a latching-low version of BGX()_SPU()_BR_STATUS1[BLK_LOCK]; it stays clear
15265 until a write-1-to-set by software. */
15266 uint64_t ber_cnt : 22; /**< [ 37: 16](RC/W/H) Bit-error-rate counter. This is the BASE-R BER counter as defined by the BER_COUNT
15267 variable in IEEE 802.3 sections 49.2.14.2 and 82.2.18.2.4. The counter is reset to all zeros
15268 after this register is read by software, and is held at all ones in case of overflow.
15269 The reset operation takes precedence over the increment operation: if the register is read
15270 on the same clock cycle an increment operation, the counter is reset to all zeros and the
15271 increment operation is lost.
15272
15273 This field is writable for test purposes, rather than read-only as specified in IEEE
15274 802.3. */
15275 uint64_t reserved_38_39 : 2;
15276 uint64_t err_blks : 22; /**< [ 61: 40](RC/W/H) Errored-blocks counter. This is the BASE-R errored-blocks counter as defined by the
15277 errored_block_count variable specified in IEEE 802.3 sections 49.2.14.2 and 82.2.18.2.4.
15278 It
15279 increments by one on each block for which the BASE-R receive state machine, specified in Std
15280 802.3 diagrams 49-15 and 82-15, enters the RX_E state.
15281 Back-to-back blocks in the RX_E state are counted as transitions from RX_E to RX_E and
15282 keep incrementing the counter. The counter is reset to all zeros after this register is read
15283 by software.
15284
15285 The reset operation takes precedence over the increment operation: if the register is read
15286 on the same clock cycle as an increment operation, the counter is reset to all zeros and the
15287 increment operation is lost.
15288
15289 This field is writable for test purposes, rather than read-only as specified in IEEE
15290 802.3. */
15291 uint64_t reserved_62_63 : 2;
15292 #endif /* Word 0 - End */
15293 } s;
15294 /* struct bdk_bgxx_spux_br_status2_s cn; */
15295 };
15296 typedef union bdk_bgxx_spux_br_status2 bdk_bgxx_spux_br_status2_t;
15297
15298 static inline uint64_t BDK_BGXX_SPUX_BR_STATUS2(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_STATUS2(unsigned long a,unsigned long b)15299 static inline uint64_t BDK_BGXX_SPUX_BR_STATUS2(unsigned long a, unsigned long b)
15300 {
15301 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15302 return 0x87e0e0010038ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15303 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15304 return 0x87e0e0010038ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15305 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15306 return 0x87e0e0010038ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15307 __bdk_csr_fatal("BGXX_SPUX_BR_STATUS2", 2, a, b, 0, 0);
15308 }
15309
15310 #define typedef_BDK_BGXX_SPUX_BR_STATUS2(a,b) bdk_bgxx_spux_br_status2_t
15311 #define bustype_BDK_BGXX_SPUX_BR_STATUS2(a,b) BDK_CSR_TYPE_RSL
15312 #define basename_BDK_BGXX_SPUX_BR_STATUS2(a,b) "BGXX_SPUX_BR_STATUS2"
15313 #define device_bar_BDK_BGXX_SPUX_BR_STATUS2(a,b) 0x0 /* PF_BAR0 */
15314 #define busnum_BDK_BGXX_SPUX_BR_STATUS2(a,b) (a)
15315 #define arguments_BDK_BGXX_SPUX_BR_STATUS2(a,b) (a),(b),-1,-1
15316
15317 /**
15318 * Register (RSL) bgx#_spu#_br_tp_control
15319 *
15320 * BGX SPU BASE-R Test-Pattern Control Registers
15321 * Refer to the test pattern methodology described in 802.3 sections 49.2.8 and 82.2.10.
15322 */
15323 union bdk_bgxx_spux_br_tp_control
15324 {
15325 uint64_t u;
15326 struct bdk_bgxx_spux_br_tp_control_s
15327 {
15328 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15329 uint64_t reserved_8_63 : 56;
15330 uint64_t scramble_tp : 1; /**< [ 7: 7](R/W) Select scrambled idle test pattern. This bit selects the transmit test pattern used when
15331 [TX_TP_EN] is set:
15332 0 = Square wave test pattern.
15333 1 = Scrambled idle test pattern. */
15334 uint64_t prbs9_tx : 1; /**< [ 6: 6](RO) 10GBASE-R PRBS9 TP transmit enable. Always 0; PRBS9 pattern testing is not supported. */
15335 uint64_t prbs31_rx : 1; /**< [ 5: 5](RO) 10GBASE-R PRBS31 TP receive enable. Always 0; PRBS31 pattern testing is not supported. */
15336 uint64_t prbs31_tx : 1; /**< [ 4: 4](RO) 10GBASE-R PRBS31 TP transmit enable. Always 0; PRBS31 pattern is not supported. */
15337 uint64_t tx_tp_en : 1; /**< [ 3: 3](R/W) Transmit-test-pattern enable. */
15338 uint64_t rx_tp_en : 1; /**< [ 2: 2](R/W) Receive-test-pattern enable. The only supported receive test pattern is the scrambled idle
15339 test pattern. Setting this bit enables checking of that receive pattern. */
15340 uint64_t tp_sel : 1; /**< [ 1: 1](RO/H) Square/PRBS test pattern select. Always 1 to select square wave test pattern; PRBS test
15341 patterns are not supported. */
15342 uint64_t dp_sel : 1; /**< [ 0: 0](RO) Data pattern select. Always 0; PRBS test patterns are not supported. */
15343 #else /* Word 0 - Little Endian */
15344 uint64_t dp_sel : 1; /**< [ 0: 0](RO) Data pattern select. Always 0; PRBS test patterns are not supported. */
15345 uint64_t tp_sel : 1; /**< [ 1: 1](RO/H) Square/PRBS test pattern select. Always 1 to select square wave test pattern; PRBS test
15346 patterns are not supported. */
15347 uint64_t rx_tp_en : 1; /**< [ 2: 2](R/W) Receive-test-pattern enable. The only supported receive test pattern is the scrambled idle
15348 test pattern. Setting this bit enables checking of that receive pattern. */
15349 uint64_t tx_tp_en : 1; /**< [ 3: 3](R/W) Transmit-test-pattern enable. */
15350 uint64_t prbs31_tx : 1; /**< [ 4: 4](RO) 10GBASE-R PRBS31 TP transmit enable. Always 0; PRBS31 pattern is not supported. */
15351 uint64_t prbs31_rx : 1; /**< [ 5: 5](RO) 10GBASE-R PRBS31 TP receive enable. Always 0; PRBS31 pattern testing is not supported. */
15352 uint64_t prbs9_tx : 1; /**< [ 6: 6](RO) 10GBASE-R PRBS9 TP transmit enable. Always 0; PRBS9 pattern testing is not supported. */
15353 uint64_t scramble_tp : 1; /**< [ 7: 7](R/W) Select scrambled idle test pattern. This bit selects the transmit test pattern used when
15354 [TX_TP_EN] is set:
15355 0 = Square wave test pattern.
15356 1 = Scrambled idle test pattern. */
15357 uint64_t reserved_8_63 : 56;
15358 #endif /* Word 0 - End */
15359 } s;
15360 /* struct bdk_bgxx_spux_br_tp_control_s cn; */
15361 };
15362 typedef union bdk_bgxx_spux_br_tp_control bdk_bgxx_spux_br_tp_control_t;
15363
15364 static inline uint64_t BDK_BGXX_SPUX_BR_TP_CONTROL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_TP_CONTROL(unsigned long a,unsigned long b)15365 static inline uint64_t BDK_BGXX_SPUX_BR_TP_CONTROL(unsigned long a, unsigned long b)
15366 {
15367 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15368 return 0x87e0e0010040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15369 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15370 return 0x87e0e0010040ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15371 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15372 return 0x87e0e0010040ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15373 __bdk_csr_fatal("BGXX_SPUX_BR_TP_CONTROL", 2, a, b, 0, 0);
15374 }
15375
15376 #define typedef_BDK_BGXX_SPUX_BR_TP_CONTROL(a,b) bdk_bgxx_spux_br_tp_control_t
15377 #define bustype_BDK_BGXX_SPUX_BR_TP_CONTROL(a,b) BDK_CSR_TYPE_RSL
15378 #define basename_BDK_BGXX_SPUX_BR_TP_CONTROL(a,b) "BGXX_SPUX_BR_TP_CONTROL"
15379 #define device_bar_BDK_BGXX_SPUX_BR_TP_CONTROL(a,b) 0x0 /* PF_BAR0 */
15380 #define busnum_BDK_BGXX_SPUX_BR_TP_CONTROL(a,b) (a)
15381 #define arguments_BDK_BGXX_SPUX_BR_TP_CONTROL(a,b) (a),(b),-1,-1
15382
15383 /**
15384 * Register (RSL) bgx#_spu#_br_tp_err_cnt
15385 *
15386 * BGX SPU BASE-R Test-Pattern Error-Count Registers
15387 * This register provides the BASE-R PCS test-pattern error counter.
15388 */
15389 union bdk_bgxx_spux_br_tp_err_cnt
15390 {
15391 uint64_t u;
15392 struct bdk_bgxx_spux_br_tp_err_cnt_s
15393 {
15394 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15395 uint64_t reserved_16_63 : 48;
15396 uint64_t err_cnt : 16; /**< [ 15: 0](RC/W/H) Error counter. This 16-bit counter contains the number of errors received during a pattern
15397 test. These bits are reset to all zeros when this register is read by software, and they are
15398 held at all ones in the case of overflow.
15399
15400 The test pattern methodology is described in IEEE 802.3, Sections 49.2.12 and 82.2.10.
15401 This
15402 counter counts either block errors or bit errors dependent on the test mode (see Section
15403 49.2.12). The reset operation takes precedence over the increment operation; if the
15404 register is read on the same clock cycle as an increment operation, the counter is reset
15405 to all zeros and the increment operation is lost. This field is writable for test purposes,
15406 rather than read-only as specified in IEEE 802.3. */
15407 #else /* Word 0 - Little Endian */
15408 uint64_t err_cnt : 16; /**< [ 15: 0](RC/W/H) Error counter. This 16-bit counter contains the number of errors received during a pattern
15409 test. These bits are reset to all zeros when this register is read by software, and they are
15410 held at all ones in the case of overflow.
15411
15412 The test pattern methodology is described in IEEE 802.3, Sections 49.2.12 and 82.2.10.
15413 This
15414 counter counts either block errors or bit errors dependent on the test mode (see Section
15415 49.2.12). The reset operation takes precedence over the increment operation; if the
15416 register is read on the same clock cycle as an increment operation, the counter is reset
15417 to all zeros and the increment operation is lost. This field is writable for test purposes,
15418 rather than read-only as specified in IEEE 802.3. */
15419 uint64_t reserved_16_63 : 48;
15420 #endif /* Word 0 - End */
15421 } s;
15422 /* struct bdk_bgxx_spux_br_tp_err_cnt_s cn; */
15423 };
15424 typedef union bdk_bgxx_spux_br_tp_err_cnt bdk_bgxx_spux_br_tp_err_cnt_t;
15425
15426 static inline uint64_t BDK_BGXX_SPUX_BR_TP_ERR_CNT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BR_TP_ERR_CNT(unsigned long a,unsigned long b)15427 static inline uint64_t BDK_BGXX_SPUX_BR_TP_ERR_CNT(unsigned long a, unsigned long b)
15428 {
15429 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15430 return 0x87e0e0010048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15431 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15432 return 0x87e0e0010048ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15433 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15434 return 0x87e0e0010048ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15435 __bdk_csr_fatal("BGXX_SPUX_BR_TP_ERR_CNT", 2, a, b, 0, 0);
15436 }
15437
15438 #define typedef_BDK_BGXX_SPUX_BR_TP_ERR_CNT(a,b) bdk_bgxx_spux_br_tp_err_cnt_t
15439 #define bustype_BDK_BGXX_SPUX_BR_TP_ERR_CNT(a,b) BDK_CSR_TYPE_RSL
15440 #define basename_BDK_BGXX_SPUX_BR_TP_ERR_CNT(a,b) "BGXX_SPUX_BR_TP_ERR_CNT"
15441 #define device_bar_BDK_BGXX_SPUX_BR_TP_ERR_CNT(a,b) 0x0 /* PF_BAR0 */
15442 #define busnum_BDK_BGXX_SPUX_BR_TP_ERR_CNT(a,b) (a)
15443 #define arguments_BDK_BGXX_SPUX_BR_TP_ERR_CNT(a,b) (a),(b),-1,-1
15444
15445 /**
15446 * Register (RSL) bgx#_spu#_bx_status
15447 *
15448 * BGX SPU BASE-X Status Registers
15449 */
15450 union bdk_bgxx_spux_bx_status
15451 {
15452 uint64_t u;
15453 struct bdk_bgxx_spux_bx_status_s
15454 {
15455 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15456 uint64_t reserved_13_63 : 51;
15457 uint64_t alignd : 1; /**< [ 12: 12](RO/H) 10GBASE-X lane-alignment status.
15458 0 = receive lanes not aligned.
15459 1 = receive lanes aligned. */
15460 uint64_t pattst : 1; /**< [ 11: 11](RO) Pattern-testing ability. Always 0; 10GBASE-X pattern is testing not supported. */
15461 uint64_t reserved_4_10 : 7;
15462 uint64_t lsync : 4; /**< [ 3: 0](RO/H) Lane synchronization. BASE-X lane synchronization status for PCS lanes 3-0. Each bit is
15463 set when the associated lane is code-group synchronized, and clear otherwise. If the PCS
15464 type is RXAUI (i.e. the associated BGX()_CMR()_CONFIG[LMAC_TYPE] = RXAUI), then
15465 only lanes 1-0 are valid. */
15466 #else /* Word 0 - Little Endian */
15467 uint64_t lsync : 4; /**< [ 3: 0](RO/H) Lane synchronization. BASE-X lane synchronization status for PCS lanes 3-0. Each bit is
15468 set when the associated lane is code-group synchronized, and clear otherwise. If the PCS
15469 type is RXAUI (i.e. the associated BGX()_CMR()_CONFIG[LMAC_TYPE] = RXAUI), then
15470 only lanes 1-0 are valid. */
15471 uint64_t reserved_4_10 : 7;
15472 uint64_t pattst : 1; /**< [ 11: 11](RO) Pattern-testing ability. Always 0; 10GBASE-X pattern is testing not supported. */
15473 uint64_t alignd : 1; /**< [ 12: 12](RO/H) 10GBASE-X lane-alignment status.
15474 0 = receive lanes not aligned.
15475 1 = receive lanes aligned. */
15476 uint64_t reserved_13_63 : 51;
15477 #endif /* Word 0 - End */
15478 } s;
15479 /* struct bdk_bgxx_spux_bx_status_s cn; */
15480 };
15481 typedef union bdk_bgxx_spux_bx_status bdk_bgxx_spux_bx_status_t;
15482
15483 static inline uint64_t BDK_BGXX_SPUX_BX_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_BX_STATUS(unsigned long a,unsigned long b)15484 static inline uint64_t BDK_BGXX_SPUX_BX_STATUS(unsigned long a, unsigned long b)
15485 {
15486 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15487 return 0x87e0e0010028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15488 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15489 return 0x87e0e0010028ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15490 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15491 return 0x87e0e0010028ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15492 __bdk_csr_fatal("BGXX_SPUX_BX_STATUS", 2, a, b, 0, 0);
15493 }
15494
15495 #define typedef_BDK_BGXX_SPUX_BX_STATUS(a,b) bdk_bgxx_spux_bx_status_t
15496 #define bustype_BDK_BGXX_SPUX_BX_STATUS(a,b) BDK_CSR_TYPE_RSL
15497 #define basename_BDK_BGXX_SPUX_BX_STATUS(a,b) "BGXX_SPUX_BX_STATUS"
15498 #define device_bar_BDK_BGXX_SPUX_BX_STATUS(a,b) 0x0 /* PF_BAR0 */
15499 #define busnum_BDK_BGXX_SPUX_BX_STATUS(a,b) (a)
15500 #define arguments_BDK_BGXX_SPUX_BX_STATUS(a,b) (a),(b),-1,-1
15501
15502 /**
15503 * Register (RSL) bgx#_spu#_control1
15504 *
15505 * BGX SPU Control 1 Registers
15506 */
15507 union bdk_bgxx_spux_control1
15508 {
15509 uint64_t u;
15510 struct bdk_bgxx_spux_control1_s
15511 {
15512 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15513 uint64_t reserved_16_63 : 48;
15514 uint64_t reset : 1; /**< [ 15: 15](R/W1S/H) Reset. Setting this bit or BGX()_SPU()_AN_CONTROL[AN_RESET] to 1 causes the
15515 following to happen:
15516 * Resets the logical PCS (LPCS)
15517 * Sets the IEEE 802.3 PCS, FEC and AN registers for the LPCS to their default states
15518 * Resets the associated SerDes lanes.
15519
15520 It takes up to 32 coprocessor-clock cycles to reset the LPCS, after which RESET is
15521 automatically cleared. */
15522 uint64_t loopbck : 1; /**< [ 14: 14](R/W) TX-to-RX loopback enable. When set, transmit data for each SerDes lane is looped back as
15523 receive data. */
15524 uint64_t spdsel1 : 1; /**< [ 13: 13](RO/H) Speed select 1: always 1. */
15525 uint64_t reserved_12 : 1;
15526 uint64_t lo_pwr : 1; /**< [ 11: 11](R/W) Low power enable. When set, the LPCS is disabled (overriding the associated
15527 BGX()_CMR()_CONFIG[ENABLE]), and the SerDes lanes associated with the LPCS are
15528 reset. */
15529 uint64_t reserved_7_10 : 4;
15530 uint64_t spdsel0 : 1; /**< [ 6: 6](RO/H) Speed select 0: always 1. */
15531 uint64_t spd : 4; /**< [ 5: 2](RO/H) '"Speed selection.
15532 Note that this is a read-only field rather than read/write as
15533 specified in 802.3.
15534 The LPCS speed is instead configured by the associated
15535 BGX()_CMR()_CONFIG[LMAC_TYPE]. The read values returned by this field are as
15536 follows:
15537
15538 \<pre\>
15539 LMAC_TYPE Speed SPD Read Value Comment
15540 ------------------------------------------------------
15541 XAUI 10G/20G 0x0 20G if DXAUI
15542 RXAUI 10G 0x0
15543 10G_R 10G 0x0
15544 40G_R 40G 0x3
15545 Other - X
15546 \</pre\>' */
15547 uint64_t reserved_0_1 : 2;
15548 #else /* Word 0 - Little Endian */
15549 uint64_t reserved_0_1 : 2;
15550 uint64_t spd : 4; /**< [ 5: 2](RO/H) '"Speed selection.
15551 Note that this is a read-only field rather than read/write as
15552 specified in 802.3.
15553 The LPCS speed is instead configured by the associated
15554 BGX()_CMR()_CONFIG[LMAC_TYPE]. The read values returned by this field are as
15555 follows:
15556
15557 \<pre\>
15558 LMAC_TYPE Speed SPD Read Value Comment
15559 ------------------------------------------------------
15560 XAUI 10G/20G 0x0 20G if DXAUI
15561 RXAUI 10G 0x0
15562 10G_R 10G 0x0
15563 40G_R 40G 0x3
15564 Other - X
15565 \</pre\>' */
15566 uint64_t spdsel0 : 1; /**< [ 6: 6](RO/H) Speed select 0: always 1. */
15567 uint64_t reserved_7_10 : 4;
15568 uint64_t lo_pwr : 1; /**< [ 11: 11](R/W) Low power enable. When set, the LPCS is disabled (overriding the associated
15569 BGX()_CMR()_CONFIG[ENABLE]), and the SerDes lanes associated with the LPCS are
15570 reset. */
15571 uint64_t reserved_12 : 1;
15572 uint64_t spdsel1 : 1; /**< [ 13: 13](RO/H) Speed select 1: always 1. */
15573 uint64_t loopbck : 1; /**< [ 14: 14](R/W) TX-to-RX loopback enable. When set, transmit data for each SerDes lane is looped back as
15574 receive data. */
15575 uint64_t reset : 1; /**< [ 15: 15](R/W1S/H) Reset. Setting this bit or BGX()_SPU()_AN_CONTROL[AN_RESET] to 1 causes the
15576 following to happen:
15577 * Resets the logical PCS (LPCS)
15578 * Sets the IEEE 802.3 PCS, FEC and AN registers for the LPCS to their default states
15579 * Resets the associated SerDes lanes.
15580
15581 It takes up to 32 coprocessor-clock cycles to reset the LPCS, after which RESET is
15582 automatically cleared. */
15583 uint64_t reserved_16_63 : 48;
15584 #endif /* Word 0 - End */
15585 } s;
15586 /* struct bdk_bgxx_spux_control1_s cn; */
15587 };
15588 typedef union bdk_bgxx_spux_control1 bdk_bgxx_spux_control1_t;
15589
15590 static inline uint64_t BDK_BGXX_SPUX_CONTROL1(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_CONTROL1(unsigned long a,unsigned long b)15591 static inline uint64_t BDK_BGXX_SPUX_CONTROL1(unsigned long a, unsigned long b)
15592 {
15593 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15594 return 0x87e0e0010000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15595 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15596 return 0x87e0e0010000ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15597 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15598 return 0x87e0e0010000ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15599 __bdk_csr_fatal("BGXX_SPUX_CONTROL1", 2, a, b, 0, 0);
15600 }
15601
15602 #define typedef_BDK_BGXX_SPUX_CONTROL1(a,b) bdk_bgxx_spux_control1_t
15603 #define bustype_BDK_BGXX_SPUX_CONTROL1(a,b) BDK_CSR_TYPE_RSL
15604 #define basename_BDK_BGXX_SPUX_CONTROL1(a,b) "BGXX_SPUX_CONTROL1"
15605 #define device_bar_BDK_BGXX_SPUX_CONTROL1(a,b) 0x0 /* PF_BAR0 */
15606 #define busnum_BDK_BGXX_SPUX_CONTROL1(a,b) (a)
15607 #define arguments_BDK_BGXX_SPUX_CONTROL1(a,b) (a),(b),-1,-1
15608
15609 /**
15610 * Register (RSL) bgx#_spu#_control2
15611 *
15612 * BGX SPU Control 2 Registers
15613 */
15614 union bdk_bgxx_spux_control2
15615 {
15616 uint64_t u;
15617 struct bdk_bgxx_spux_control2_s
15618 {
15619 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15620 uint64_t reserved_3_63 : 61;
15621 uint64_t pcs_type : 3; /**< [ 2: 0](RO/H) PCS type selection.
15622 Note that this is a read-only field rather than read/write as
15623 specified in 802.3.
15624 The LPCS speed is instead configured by the associated
15625 BGX()_CMR()_CONFIG[LMAC_TYPE]. The read values returned by this field are as
15626 follows:
15627
15628 \<pre\>
15629 [PCS_TYPE]
15630 LMAC_TYPE Read Value Comment
15631 -------------------------------------------------
15632 XAUI 0x1 10GBASE-X PCS type
15633 RXAUI 0x1 10GBASE-X PCS type
15634 10G_R 0x0 10GBASE-R PCS type
15635 40G_R 0x4 40GBASE-R PCS type
15636 Other Undefined Reserved
15637 \</pre\> */
15638 #else /* Word 0 - Little Endian */
15639 uint64_t pcs_type : 3; /**< [ 2: 0](RO/H) PCS type selection.
15640 Note that this is a read-only field rather than read/write as
15641 specified in 802.3.
15642 The LPCS speed is instead configured by the associated
15643 BGX()_CMR()_CONFIG[LMAC_TYPE]. The read values returned by this field are as
15644 follows:
15645
15646 \<pre\>
15647 [PCS_TYPE]
15648 LMAC_TYPE Read Value Comment
15649 -------------------------------------------------
15650 XAUI 0x1 10GBASE-X PCS type
15651 RXAUI 0x1 10GBASE-X PCS type
15652 10G_R 0x0 10GBASE-R PCS type
15653 40G_R 0x4 40GBASE-R PCS type
15654 Other Undefined Reserved
15655 \</pre\> */
15656 uint64_t reserved_3_63 : 61;
15657 #endif /* Word 0 - End */
15658 } s;
15659 /* struct bdk_bgxx_spux_control2_s cn; */
15660 };
15661 typedef union bdk_bgxx_spux_control2 bdk_bgxx_spux_control2_t;
15662
15663 static inline uint64_t BDK_BGXX_SPUX_CONTROL2(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_CONTROL2(unsigned long a,unsigned long b)15664 static inline uint64_t BDK_BGXX_SPUX_CONTROL2(unsigned long a, unsigned long b)
15665 {
15666 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15667 return 0x87e0e0010018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15668 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15669 return 0x87e0e0010018ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15670 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15671 return 0x87e0e0010018ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15672 __bdk_csr_fatal("BGXX_SPUX_CONTROL2", 2, a, b, 0, 0);
15673 }
15674
15675 #define typedef_BDK_BGXX_SPUX_CONTROL2(a,b) bdk_bgxx_spux_control2_t
15676 #define bustype_BDK_BGXX_SPUX_CONTROL2(a,b) BDK_CSR_TYPE_RSL
15677 #define basename_BDK_BGXX_SPUX_CONTROL2(a,b) "BGXX_SPUX_CONTROL2"
15678 #define device_bar_BDK_BGXX_SPUX_CONTROL2(a,b) 0x0 /* PF_BAR0 */
15679 #define busnum_BDK_BGXX_SPUX_CONTROL2(a,b) (a)
15680 #define arguments_BDK_BGXX_SPUX_CONTROL2(a,b) (a),(b),-1,-1
15681
15682 /**
15683 * Register (RSL) bgx#_spu#_fec_abil
15684 *
15685 * BGX SPU Forward Error Correction Ability Registers
15686 */
15687 union bdk_bgxx_spux_fec_abil
15688 {
15689 uint64_t u;
15690 struct bdk_bgxx_spux_fec_abil_s
15691 {
15692 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15693 uint64_t reserved_2_63 : 62;
15694 uint64_t err_abil : 1; /**< [ 1: 1](RO/H) BASE-R FEC error-indication ability. Always 1 when the LPCS type is BASE-R,
15695 i.e. BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4. Always 0 otherwise. */
15696 uint64_t fec_abil : 1; /**< [ 0: 0](RO/H) BASE-R FEC ability. Always 1 when the LPCS type is BASE-R,
15697 i.e. BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4. Always 0 otherwise. */
15698 #else /* Word 0 - Little Endian */
15699 uint64_t fec_abil : 1; /**< [ 0: 0](RO/H) BASE-R FEC ability. Always 1 when the LPCS type is BASE-R,
15700 i.e. BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4. Always 0 otherwise. */
15701 uint64_t err_abil : 1; /**< [ 1: 1](RO/H) BASE-R FEC error-indication ability. Always 1 when the LPCS type is BASE-R,
15702 i.e. BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4. Always 0 otherwise. */
15703 uint64_t reserved_2_63 : 62;
15704 #endif /* Word 0 - End */
15705 } s;
15706 /* struct bdk_bgxx_spux_fec_abil_s cn; */
15707 };
15708 typedef union bdk_bgxx_spux_fec_abil bdk_bgxx_spux_fec_abil_t;
15709
15710 static inline uint64_t BDK_BGXX_SPUX_FEC_ABIL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_FEC_ABIL(unsigned long a,unsigned long b)15711 static inline uint64_t BDK_BGXX_SPUX_FEC_ABIL(unsigned long a, unsigned long b)
15712 {
15713 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15714 return 0x87e0e0010098ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15715 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15716 return 0x87e0e0010098ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15717 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15718 return 0x87e0e0010098ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15719 __bdk_csr_fatal("BGXX_SPUX_FEC_ABIL", 2, a, b, 0, 0);
15720 }
15721
15722 #define typedef_BDK_BGXX_SPUX_FEC_ABIL(a,b) bdk_bgxx_spux_fec_abil_t
15723 #define bustype_BDK_BGXX_SPUX_FEC_ABIL(a,b) BDK_CSR_TYPE_RSL
15724 #define basename_BDK_BGXX_SPUX_FEC_ABIL(a,b) "BGXX_SPUX_FEC_ABIL"
15725 #define device_bar_BDK_BGXX_SPUX_FEC_ABIL(a,b) 0x0 /* PF_BAR0 */
15726 #define busnum_BDK_BGXX_SPUX_FEC_ABIL(a,b) (a)
15727 #define arguments_BDK_BGXX_SPUX_FEC_ABIL(a,b) (a),(b),-1,-1
15728
15729 /**
15730 * Register (RSL) bgx#_spu#_fec_control
15731 *
15732 * BGX SPU Forward Error Correction Control Registers
15733 */
15734 union bdk_bgxx_spux_fec_control
15735 {
15736 uint64_t u;
15737 struct bdk_bgxx_spux_fec_control_s
15738 {
15739 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15740 uint64_t reserved_2_63 : 62;
15741 uint64_t err_en : 1; /**< [ 1: 1](R/W) BASE-R FEC error-indication enable. This bit corresponds to FEC_Enable_Error_to_PCS
15742 variable for BASE-R as defined in 802.3 Clause 74. When FEC is enabled ([FEC_EN] is set)
15743 and this bit is set, the FEC decoder on the receive side signals an
15744 uncorrectable FEC error to the BASE-R decoder by driving a value of 2'b11 on the sync bits
15745 for some of the 32 64/66 bit blocks belonging to the uncorrectable FEC block. See
15746 802.3-2008/802.3ba-2010 section 74.7.4.5.1 for more details. */
15747 uint64_t fec_en : 1; /**< [ 0: 0](R/W) BASE-R FEC enable. When this bit is set and the LPCS type is BASE-R
15748 (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), forward error correction is enabled. FEC is
15749 disabled otherwise. Forward error correction is defined in IEEE Std
15750 802.3-2008/802.3ba-2010 Clause 74. */
15751 #else /* Word 0 - Little Endian */
15752 uint64_t fec_en : 1; /**< [ 0: 0](R/W) BASE-R FEC enable. When this bit is set and the LPCS type is BASE-R
15753 (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), forward error correction is enabled. FEC is
15754 disabled otherwise. Forward error correction is defined in IEEE Std
15755 802.3-2008/802.3ba-2010 Clause 74. */
15756 uint64_t err_en : 1; /**< [ 1: 1](R/W) BASE-R FEC error-indication enable. This bit corresponds to FEC_Enable_Error_to_PCS
15757 variable for BASE-R as defined in 802.3 Clause 74. When FEC is enabled ([FEC_EN] is set)
15758 and this bit is set, the FEC decoder on the receive side signals an
15759 uncorrectable FEC error to the BASE-R decoder by driving a value of 2'b11 on the sync bits
15760 for some of the 32 64/66 bit blocks belonging to the uncorrectable FEC block. See
15761 802.3-2008/802.3ba-2010 section 74.7.4.5.1 for more details. */
15762 uint64_t reserved_2_63 : 62;
15763 #endif /* Word 0 - End */
15764 } s;
15765 /* struct bdk_bgxx_spux_fec_control_s cn; */
15766 };
15767 typedef union bdk_bgxx_spux_fec_control bdk_bgxx_spux_fec_control_t;
15768
15769 static inline uint64_t BDK_BGXX_SPUX_FEC_CONTROL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_FEC_CONTROL(unsigned long a,unsigned long b)15770 static inline uint64_t BDK_BGXX_SPUX_FEC_CONTROL(unsigned long a, unsigned long b)
15771 {
15772 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15773 return 0x87e0e00100a0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15774 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15775 return 0x87e0e00100a0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15776 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15777 return 0x87e0e00100a0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15778 __bdk_csr_fatal("BGXX_SPUX_FEC_CONTROL", 2, a, b, 0, 0);
15779 }
15780
15781 #define typedef_BDK_BGXX_SPUX_FEC_CONTROL(a,b) bdk_bgxx_spux_fec_control_t
15782 #define bustype_BDK_BGXX_SPUX_FEC_CONTROL(a,b) BDK_CSR_TYPE_RSL
15783 #define basename_BDK_BGXX_SPUX_FEC_CONTROL(a,b) "BGXX_SPUX_FEC_CONTROL"
15784 #define device_bar_BDK_BGXX_SPUX_FEC_CONTROL(a,b) 0x0 /* PF_BAR0 */
15785 #define busnum_BDK_BGXX_SPUX_FEC_CONTROL(a,b) (a)
15786 #define arguments_BDK_BGXX_SPUX_FEC_CONTROL(a,b) (a),(b),-1,-1
15787
15788 /**
15789 * Register (RSL) bgx#_spu#_fec_corr_blks01
15790 *
15791 * BGX SPU FEC Corrected-Blocks Counters 0/1 Registers
15792 * This register is valid only when the LPCS type is BASE-R
15793 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4). The FEC corrected-block counters are
15794 * defined in IEEE 802.3 section 74.8.4.1. Each corrected-blocks counter increments by 1 for a
15795 * corrected FEC block, i.e. an FEC block that has been received with invalid parity on the
15796 * associated PCS lane and has been corrected by the FEC decoder. The counter is reset to all 0s
15797 * when the register is read, and held at all 1s in case of overflow.
15798 *
15799 * The reset operation takes precedence over the increment operation; if the register is read on
15800 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
15801 * increment operation is lost. The counters are writable for test purposes, rather than read-
15802 * only as specified in IEEE 802.3.
15803 */
15804 union bdk_bgxx_spux_fec_corr_blks01
15805 {
15806 uint64_t u;
15807 struct bdk_bgxx_spux_fec_corr_blks01_s
15808 {
15809 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15810 uint64_t ln1_corr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 1 FEC corrected blocks.
15811 * For 10GBASE-R, reserved.
15812 * For 40GBASE-R, correspond to the IEEE 802.3 FEC_corrected_blocks_counter_1 variable
15813 (registers 1.302-1.303). */
15814 uint64_t ln0_corr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 0 FEC corrected blocks.
15815 * For 10GBASE-R, corresponds to the IEEE 802.3 FEC_corrected_blocks_counter variable
15816 (registers 1.172-1.173).
15817 * For 40GBASE-R, correspond to the IEEE 802.3 FEC_corrected_blocks_counter_0 variable
15818 (registers 1.300-1.301). */
15819 #else /* Word 0 - Little Endian */
15820 uint64_t ln0_corr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 0 FEC corrected blocks.
15821 * For 10GBASE-R, corresponds to the IEEE 802.3 FEC_corrected_blocks_counter variable
15822 (registers 1.172-1.173).
15823 * For 40GBASE-R, correspond to the IEEE 802.3 FEC_corrected_blocks_counter_0 variable
15824 (registers 1.300-1.301). */
15825 uint64_t ln1_corr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 1 FEC corrected blocks.
15826 * For 10GBASE-R, reserved.
15827 * For 40GBASE-R, correspond to the IEEE 802.3 FEC_corrected_blocks_counter_1 variable
15828 (registers 1.302-1.303). */
15829 #endif /* Word 0 - End */
15830 } s;
15831 /* struct bdk_bgxx_spux_fec_corr_blks01_s cn; */
15832 };
15833 typedef union bdk_bgxx_spux_fec_corr_blks01 bdk_bgxx_spux_fec_corr_blks01_t;
15834
15835 static inline uint64_t BDK_BGXX_SPUX_FEC_CORR_BLKS01(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_FEC_CORR_BLKS01(unsigned long a,unsigned long b)15836 static inline uint64_t BDK_BGXX_SPUX_FEC_CORR_BLKS01(unsigned long a, unsigned long b)
15837 {
15838 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15839 return 0x87e0e00100a8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15840 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15841 return 0x87e0e00100a8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15842 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15843 return 0x87e0e00100a8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15844 __bdk_csr_fatal("BGXX_SPUX_FEC_CORR_BLKS01", 2, a, b, 0, 0);
15845 }
15846
15847 #define typedef_BDK_BGXX_SPUX_FEC_CORR_BLKS01(a,b) bdk_bgxx_spux_fec_corr_blks01_t
15848 #define bustype_BDK_BGXX_SPUX_FEC_CORR_BLKS01(a,b) BDK_CSR_TYPE_RSL
15849 #define basename_BDK_BGXX_SPUX_FEC_CORR_BLKS01(a,b) "BGXX_SPUX_FEC_CORR_BLKS01"
15850 #define device_bar_BDK_BGXX_SPUX_FEC_CORR_BLKS01(a,b) 0x0 /* PF_BAR0 */
15851 #define busnum_BDK_BGXX_SPUX_FEC_CORR_BLKS01(a,b) (a)
15852 #define arguments_BDK_BGXX_SPUX_FEC_CORR_BLKS01(a,b) (a),(b),-1,-1
15853
15854 /**
15855 * Register (RSL) bgx#_spu#_fec_corr_blks23
15856 *
15857 * BGX SPU FEC Corrected-Blocks Counters 2/3 Registers
15858 * This register is valid only when the LPCS type is 40GBASE-R
15859 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4). The FEC corrected-block counters are defined in
15860 * IEEE 802.3 section 74.8.4.1. Each corrected-blocks counter increments by 1 for a corrected FEC
15861 * block, i.e. an FEC block that has been received with invalid parity on the associated PCS lane
15862 * and has been corrected by the FEC decoder. The counter is reset to all 0s when the register is
15863 * read, and held at all 1s in case of overflow.
15864 *
15865 * The reset operation takes precedence over the increment operation; if the register is read on
15866 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
15867 * increment operation is lost. The counters are writable for test purposes, rather than read-
15868 * only as specified in IEEE 802.3.
15869 */
15870 union bdk_bgxx_spux_fec_corr_blks23
15871 {
15872 uint64_t u;
15873 struct bdk_bgxx_spux_fec_corr_blks23_s
15874 {
15875 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15876 uint64_t ln3_corr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 3 FEC corrected blocks. Correspond to the IEEE 802.3
15877 FEC_corrected_blocks_counter_3 variable (registers 1.306-1.307). */
15878 uint64_t ln2_corr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 2 FEC corrected blocks. Correspond to the IEEE 802.3
15879 FEC_corrected_blocks_counter_3 variable (registers 1.304-1.305). */
15880 #else /* Word 0 - Little Endian */
15881 uint64_t ln2_corr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 2 FEC corrected blocks. Correspond to the IEEE 802.3
15882 FEC_corrected_blocks_counter_3 variable (registers 1.304-1.305). */
15883 uint64_t ln3_corr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 3 FEC corrected blocks. Correspond to the IEEE 802.3
15884 FEC_corrected_blocks_counter_3 variable (registers 1.306-1.307). */
15885 #endif /* Word 0 - End */
15886 } s;
15887 /* struct bdk_bgxx_spux_fec_corr_blks23_s cn; */
15888 };
15889 typedef union bdk_bgxx_spux_fec_corr_blks23 bdk_bgxx_spux_fec_corr_blks23_t;
15890
15891 static inline uint64_t BDK_BGXX_SPUX_FEC_CORR_BLKS23(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_FEC_CORR_BLKS23(unsigned long a,unsigned long b)15892 static inline uint64_t BDK_BGXX_SPUX_FEC_CORR_BLKS23(unsigned long a, unsigned long b)
15893 {
15894 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15895 return 0x87e0e00100b0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15896 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15897 return 0x87e0e00100b0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15898 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15899 return 0x87e0e00100b0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15900 __bdk_csr_fatal("BGXX_SPUX_FEC_CORR_BLKS23", 2, a, b, 0, 0);
15901 }
15902
15903 #define typedef_BDK_BGXX_SPUX_FEC_CORR_BLKS23(a,b) bdk_bgxx_spux_fec_corr_blks23_t
15904 #define bustype_BDK_BGXX_SPUX_FEC_CORR_BLKS23(a,b) BDK_CSR_TYPE_RSL
15905 #define basename_BDK_BGXX_SPUX_FEC_CORR_BLKS23(a,b) "BGXX_SPUX_FEC_CORR_BLKS23"
15906 #define device_bar_BDK_BGXX_SPUX_FEC_CORR_BLKS23(a,b) 0x0 /* PF_BAR0 */
15907 #define busnum_BDK_BGXX_SPUX_FEC_CORR_BLKS23(a,b) (a)
15908 #define arguments_BDK_BGXX_SPUX_FEC_CORR_BLKS23(a,b) (a),(b),-1,-1
15909
15910 /**
15911 * Register (RSL) bgx#_spu#_fec_uncorr_blks01
15912 *
15913 * BGX SPU FEC Uncorrected-Blocks Counters 0/1 Registers
15914 * This register is valid only when the LPCS type is BASE-R
15915 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4). The FEC corrected-block counters are
15916 * defined in IEEE 802.3 section 74.8.4.2. Each uncorrected-blocks counter increments by 1 for an
15917 * uncorrected FEC block, i.e. an FEC block that has been received with invalid parity on the
15918 * associated PCS lane and has not been corrected by the FEC decoder. The counter is reset to all
15919 * 0s when the register is read, and held at all 1s in case of overflow.
15920 *
15921 * The reset operation takes precedence over the increment operation; if the register is read on
15922 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
15923 * increment operation is lost. The counters are writable for test purposes, rather than read-
15924 * only as specified in IEEE 802.3.
15925 */
15926 union bdk_bgxx_spux_fec_uncorr_blks01
15927 {
15928 uint64_t u;
15929 struct bdk_bgxx_spux_fec_uncorr_blks01_s
15930 {
15931 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15932 uint64_t ln1_uncorr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 1 FEC corrected blocks.
15933 * For 10GBASE-R, reserved.
15934 * For 40GBASE-R, corresponds to the IEEE 802.3 FEC_uncorrected_blocks_counter_1 variable
15935 (registers 1.702-1.703). */
15936 uint64_t ln0_uncorr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 0 FEC uncorrected blocks.
15937 * For 10GBASE-R, corresponds to the IEEE 802.3 FEC_uncorrected_blocks_counter variable
15938 (registers 1.174-1.175).
15939 * For 40GBASE-R, correspond to the IEEE 802.3 FEC_uncorrected_blocks_counter_0 variable
15940 (registers 1.700-1.701). */
15941 #else /* Word 0 - Little Endian */
15942 uint64_t ln0_uncorr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 0 FEC uncorrected blocks.
15943 * For 10GBASE-R, corresponds to the IEEE 802.3 FEC_uncorrected_blocks_counter variable
15944 (registers 1.174-1.175).
15945 * For 40GBASE-R, correspond to the IEEE 802.3 FEC_uncorrected_blocks_counter_0 variable
15946 (registers 1.700-1.701). */
15947 uint64_t ln1_uncorr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 1 FEC corrected blocks.
15948 * For 10GBASE-R, reserved.
15949 * For 40GBASE-R, corresponds to the IEEE 802.3 FEC_uncorrected_blocks_counter_1 variable
15950 (registers 1.702-1.703). */
15951 #endif /* Word 0 - End */
15952 } s;
15953 /* struct bdk_bgxx_spux_fec_uncorr_blks01_s cn; */
15954 };
15955 typedef union bdk_bgxx_spux_fec_uncorr_blks01 bdk_bgxx_spux_fec_uncorr_blks01_t;
15956
15957 static inline uint64_t BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(unsigned long a,unsigned long b)15958 static inline uint64_t BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(unsigned long a, unsigned long b)
15959 {
15960 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
15961 return 0x87e0e00100b8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15962 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
15963 return 0x87e0e00100b8ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
15964 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
15965 return 0x87e0e00100b8ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
15966 __bdk_csr_fatal("BGXX_SPUX_FEC_UNCORR_BLKS01", 2, a, b, 0, 0);
15967 }
15968
15969 #define typedef_BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(a,b) bdk_bgxx_spux_fec_uncorr_blks01_t
15970 #define bustype_BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(a,b) BDK_CSR_TYPE_RSL
15971 #define basename_BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(a,b) "BGXX_SPUX_FEC_UNCORR_BLKS01"
15972 #define device_bar_BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(a,b) 0x0 /* PF_BAR0 */
15973 #define busnum_BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(a,b) (a)
15974 #define arguments_BDK_BGXX_SPUX_FEC_UNCORR_BLKS01(a,b) (a),(b),-1,-1
15975
15976 /**
15977 * Register (RSL) bgx#_spu#_fec_uncorr_blks23
15978 *
15979 * BGX SPU FEC Uncorrected-Blocks Counters 2/3 Registers
15980 * This register is valid only when the LPCS type is 40GBASE-R
15981 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4). The FEC uncorrected-block counters are defined
15982 * in IEEE 802.3 section 74.8.4.2. Each corrected-blocks counter increments by 1 for an
15983 * uncorrected FEC block, i.e. an FEC block that has been received with invalid parity on the
15984 * associated PCS lane and has not been corrected by the FEC decoder. The counter is reset to all
15985 * 0s when the register is read, and held at all 1s in case of overflow.
15986 *
15987 * The reset operation takes precedence over the increment operation; if the register is read on
15988 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
15989 * increment operation is lost. The counters are writable for test purposes, rather than read-
15990 * only as specified in IEEE 802.3.
15991 */
15992 union bdk_bgxx_spux_fec_uncorr_blks23
15993 {
15994 uint64_t u;
15995 struct bdk_bgxx_spux_fec_uncorr_blks23_s
15996 {
15997 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
15998 uint64_t ln3_uncorr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 3 FEC uncorrected blocks. Corresponds to the IEEE 802.3
15999 FEC_uncorrected_blocks_counter_3 variable (registers 1.706-1.707). */
16000 uint64_t ln2_uncorr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 2 FEC uncorrected blocks. Corresponds to the IEEE 802.3
16001 FEC_uncorrected_blocks_counter_3 variable (registers 1.704-1.705). */
16002 #else /* Word 0 - Little Endian */
16003 uint64_t ln2_uncorr_blks : 32; /**< [ 31: 0](RC/W/H) PCS Lane 2 FEC uncorrected blocks. Corresponds to the IEEE 802.3
16004 FEC_uncorrected_blocks_counter_3 variable (registers 1.704-1.705). */
16005 uint64_t ln3_uncorr_blks : 32; /**< [ 63: 32](RC/W/H) PCS Lane 3 FEC uncorrected blocks. Corresponds to the IEEE 802.3
16006 FEC_uncorrected_blocks_counter_3 variable (registers 1.706-1.707). */
16007 #endif /* Word 0 - End */
16008 } s;
16009 /* struct bdk_bgxx_spux_fec_uncorr_blks23_s cn; */
16010 };
16011 typedef union bdk_bgxx_spux_fec_uncorr_blks23 bdk_bgxx_spux_fec_uncorr_blks23_t;
16012
16013 static inline uint64_t BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(unsigned long a,unsigned long b)16014 static inline uint64_t BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(unsigned long a, unsigned long b)
16015 {
16016 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16017 return 0x87e0e00100c0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16018 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16019 return 0x87e0e00100c0ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16020 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16021 return 0x87e0e00100c0ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16022 __bdk_csr_fatal("BGXX_SPUX_FEC_UNCORR_BLKS23", 2, a, b, 0, 0);
16023 }
16024
16025 #define typedef_BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(a,b) bdk_bgxx_spux_fec_uncorr_blks23_t
16026 #define bustype_BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(a,b) BDK_CSR_TYPE_RSL
16027 #define basename_BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(a,b) "BGXX_SPUX_FEC_UNCORR_BLKS23"
16028 #define device_bar_BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(a,b) 0x0 /* PF_BAR0 */
16029 #define busnum_BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(a,b) (a)
16030 #define arguments_BDK_BGXX_SPUX_FEC_UNCORR_BLKS23(a,b) (a),(b),-1,-1
16031
16032 /**
16033 * Register (RSL) bgx#_spu#_int
16034 *
16035 * BGX SPU Interrupt Registers
16036 */
16037 union bdk_bgxx_spux_int
16038 {
16039 uint64_t u;
16040 struct bdk_bgxx_spux_int_s
16041 {
16042 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16043 uint64_t reserved_15_63 : 49;
16044 uint64_t training_failure : 1; /**< [ 14: 14](R/W1C/H) BASE-R PMD training failure. Set when BASE-R PMD link training has failed on the 10GBASE-R
16045 lane or any 40GBASE-R lane. Valid if the LPCS type selected by
16046 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R and
16047 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is 1, and never set otherwise. */
16048 uint64_t training_done : 1; /**< [ 13: 13](R/W1C/H) BASE-R PMD training done. Set when the 10GBASE-R lane or all 40GBASE-R lanes have
16049 successfully completed BASE-R PMD link training. Valid if the LPCS type selected by
16050 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R and
16051 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is 1, and never set otherwise. */
16052 uint64_t an_complete : 1; /**< [ 12: 12](R/W1C/H) Autonegotiation complete. Set when BGX()_SPU()_AN_STATUS[AN_COMPLETE] is set,
16053 indicating that the autonegotiation process has been completed and the link is up and
16054 running using the negotiated highest common denominator (HCD) technology. */
16055 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1C/H) Autonegotiation link good. Set when the an_link_good variable is set as defined in
16056 802.3-2008 Figure 73-11, indicating that autonegotiation has completed. */
16057 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1C/H) Autonegotiation page received. This bit is set along with
16058 BGX()_SPU()_AN_STATUS[PAGE_RX] when a new page has been received and stored in
16059 BGX()_SPU()_AN_LP_BASE or BGX()_SPU()_AN_LP_XNP. */
16060 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1C/H) Uncorrectable FEC error. Set when an FEC block with an uncorrectable error is received on
16061 the 10GBASE-R lane or any 40GBASE-R lane. Valid if the LPCS type selected by
16062 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R, and never set otherwise. */
16063 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1C/H) Correctable FEC error. Set when an FEC block with a correctable error is received on the
16064 10GBASE-R lane or any 40GBASE-R lane. Valid if the LPCS type selected by
16065 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R, and never set otherwise. */
16066 uint64_t bip_err : 1; /**< [ 7: 7](R/W1C/H) 40GBASE-R bit interleaved parity error. Set when a BIP error is detected on any lane.
16067 Valid if the LPCS type selected by BGX()_CMR()_CONFIG[LMAC_TYPE] is 40GBASE-R, and
16068 never set otherwise. */
16069 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1C/H) Sync failure debug. This interrupt is provided for link problem debugging help. It is set
16070 as follows based on the LPCS type selected by BGX()_CMR()_CONFIG[LMAC_TYPE], and
16071 whether FEC is enabled or disabled by BGX()_SPU()_FEC_CONTROL[FEC_EN]:
16072 * XAUI or RXAUI: Set when any lane's PCS synchronization state transitions from
16073 SYNC_ACQUIRED_1 to SYNC_ACQUIRED_2 (see 802.3-2008 Figure 48-7).
16074 * 10GBASE-R or 40GBASE-R with FEC disabled: Set when sh_invalid_cnt increments to 1 while
16075 BLOCK_LOCK is 1 (see 802.3-2008 Figure 49-12 and 802.3ba-2010 Figure 82-20).
16076 * 10GBASE-R or 40GBASE-R with FEC enabled: Set when parity_invalid_cnt increments to 1
16077 while fec_block_lock is 1 (see 802.3-2008 Figure 74-8). */
16078 uint64_t algnlos : 1; /**< [ 5: 5](R/W1C/H) Loss of lane alignment. Set when lane-to-lane alignment is lost. This is only valid if the
16079 logical PCS is a multilane type (i.e. XAUI, RXAUI or 40GBASE-R is selected by
16080 BGX()_CMR()_CONFIG[LMAC_TYPE]), and is never set otherwise. */
16081 uint64_t synlos : 1; /**< [ 4: 4](R/W1C/H) Loss of lane sync. Lane code-group or block synchronization is lost on one or more lanes
16082 associated with the LMAC/LPCS. Set as follows based on the LPCS type selected by
16083 BGX()_CMR()_CONFIG[LMAC_TYPE], and whether FEC is enabled or disabled by
16084 BGX()_SPU()_FEC_CONTROL[FEC_EN]:
16085 * XAUI or RXAUI: Set when any lane's PCS synchronization state transitions to LOSS_OF_SYNC
16086 (see 802.3-2008 Figure 48-7)
16087 * 10GBASE-R or 40GBASE-R with FEC disabled: set when the BLOCK_LOCK variable is cleared on
16088 the 10G lane or any 40G lane (see 802.3-2008 Figure 49-12 and 802.3ba-2010 Figure 82-20).
16089 * 10GBASE-R or 40GBASE-R with FEC enabled: set when the fec_block_lock variable is cleared
16090 on the 10G lane or any 40G lane (see 802.3-2008 Figure 74-8). */
16091 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1C/H) Bit lock lost on one or more lanes associated with the LMAC/LPCS. */
16092 uint64_t err_blk : 1; /**< [ 2: 2](R/W1C/H) Errored block received. Set when an errored BASE-R block is received as described for
16093 BGX()_SPU()_BR_STATUS2[ERR_BLKS]. Valid if the LPCS type selected by
16094 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R, and never set otherwise. */
16095 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1C/H) Set when the receive link goes down, which is the same condition that sets
16096 BGX()_SPU()_STATUS2[RCVFLT]. */
16097 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1C/H) Set when the receive link comes up, which is the same condition that allows the setting of
16098 BGX()_SPU()_STATUS1[RCV_LNK]. */
16099 #else /* Word 0 - Little Endian */
16100 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1C/H) Set when the receive link comes up, which is the same condition that allows the setting of
16101 BGX()_SPU()_STATUS1[RCV_LNK]. */
16102 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1C/H) Set when the receive link goes down, which is the same condition that sets
16103 BGX()_SPU()_STATUS2[RCVFLT]. */
16104 uint64_t err_blk : 1; /**< [ 2: 2](R/W1C/H) Errored block received. Set when an errored BASE-R block is received as described for
16105 BGX()_SPU()_BR_STATUS2[ERR_BLKS]. Valid if the LPCS type selected by
16106 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R, and never set otherwise. */
16107 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1C/H) Bit lock lost on one or more lanes associated with the LMAC/LPCS. */
16108 uint64_t synlos : 1; /**< [ 4: 4](R/W1C/H) Loss of lane sync. Lane code-group or block synchronization is lost on one or more lanes
16109 associated with the LMAC/LPCS. Set as follows based on the LPCS type selected by
16110 BGX()_CMR()_CONFIG[LMAC_TYPE], and whether FEC is enabled or disabled by
16111 BGX()_SPU()_FEC_CONTROL[FEC_EN]:
16112 * XAUI or RXAUI: Set when any lane's PCS synchronization state transitions to LOSS_OF_SYNC
16113 (see 802.3-2008 Figure 48-7)
16114 * 10GBASE-R or 40GBASE-R with FEC disabled: set when the BLOCK_LOCK variable is cleared on
16115 the 10G lane or any 40G lane (see 802.3-2008 Figure 49-12 and 802.3ba-2010 Figure 82-20).
16116 * 10GBASE-R or 40GBASE-R with FEC enabled: set when the fec_block_lock variable is cleared
16117 on the 10G lane or any 40G lane (see 802.3-2008 Figure 74-8). */
16118 uint64_t algnlos : 1; /**< [ 5: 5](R/W1C/H) Loss of lane alignment. Set when lane-to-lane alignment is lost. This is only valid if the
16119 logical PCS is a multilane type (i.e. XAUI, RXAUI or 40GBASE-R is selected by
16120 BGX()_CMR()_CONFIG[LMAC_TYPE]), and is never set otherwise. */
16121 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1C/H) Sync failure debug. This interrupt is provided for link problem debugging help. It is set
16122 as follows based on the LPCS type selected by BGX()_CMR()_CONFIG[LMAC_TYPE], and
16123 whether FEC is enabled or disabled by BGX()_SPU()_FEC_CONTROL[FEC_EN]:
16124 * XAUI or RXAUI: Set when any lane's PCS synchronization state transitions from
16125 SYNC_ACQUIRED_1 to SYNC_ACQUIRED_2 (see 802.3-2008 Figure 48-7).
16126 * 10GBASE-R or 40GBASE-R with FEC disabled: Set when sh_invalid_cnt increments to 1 while
16127 BLOCK_LOCK is 1 (see 802.3-2008 Figure 49-12 and 802.3ba-2010 Figure 82-20).
16128 * 10GBASE-R or 40GBASE-R with FEC enabled: Set when parity_invalid_cnt increments to 1
16129 while fec_block_lock is 1 (see 802.3-2008 Figure 74-8). */
16130 uint64_t bip_err : 1; /**< [ 7: 7](R/W1C/H) 40GBASE-R bit interleaved parity error. Set when a BIP error is detected on any lane.
16131 Valid if the LPCS type selected by BGX()_CMR()_CONFIG[LMAC_TYPE] is 40GBASE-R, and
16132 never set otherwise. */
16133 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1C/H) Correctable FEC error. Set when an FEC block with a correctable error is received on the
16134 10GBASE-R lane or any 40GBASE-R lane. Valid if the LPCS type selected by
16135 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R, and never set otherwise. */
16136 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1C/H) Uncorrectable FEC error. Set when an FEC block with an uncorrectable error is received on
16137 the 10GBASE-R lane or any 40GBASE-R lane. Valid if the LPCS type selected by
16138 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R, and never set otherwise. */
16139 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1C/H) Autonegotiation page received. This bit is set along with
16140 BGX()_SPU()_AN_STATUS[PAGE_RX] when a new page has been received and stored in
16141 BGX()_SPU()_AN_LP_BASE or BGX()_SPU()_AN_LP_XNP. */
16142 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1C/H) Autonegotiation link good. Set when the an_link_good variable is set as defined in
16143 802.3-2008 Figure 73-11, indicating that autonegotiation has completed. */
16144 uint64_t an_complete : 1; /**< [ 12: 12](R/W1C/H) Autonegotiation complete. Set when BGX()_SPU()_AN_STATUS[AN_COMPLETE] is set,
16145 indicating that the autonegotiation process has been completed and the link is up and
16146 running using the negotiated highest common denominator (HCD) technology. */
16147 uint64_t training_done : 1; /**< [ 13: 13](R/W1C/H) BASE-R PMD training done. Set when the 10GBASE-R lane or all 40GBASE-R lanes have
16148 successfully completed BASE-R PMD link training. Valid if the LPCS type selected by
16149 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R and
16150 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is 1, and never set otherwise. */
16151 uint64_t training_failure : 1; /**< [ 14: 14](R/W1C/H) BASE-R PMD training failure. Set when BASE-R PMD link training has failed on the 10GBASE-R
16152 lane or any 40GBASE-R lane. Valid if the LPCS type selected by
16153 BGX()_CMR()_CONFIG[LMAC_TYPE] is 10GBASE-R or 40GBASE-R and
16154 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is 1, and never set otherwise. */
16155 uint64_t reserved_15_63 : 49;
16156 #endif /* Word 0 - End */
16157 } s;
16158 /* struct bdk_bgxx_spux_int_s cn; */
16159 };
16160 typedef union bdk_bgxx_spux_int bdk_bgxx_spux_int_t;
16161
16162 static inline uint64_t BDK_BGXX_SPUX_INT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_INT(unsigned long a,unsigned long b)16163 static inline uint64_t BDK_BGXX_SPUX_INT(unsigned long a, unsigned long b)
16164 {
16165 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16166 return 0x87e0e0010220ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16167 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16168 return 0x87e0e0010220ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16169 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16170 return 0x87e0e0010220ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16171 __bdk_csr_fatal("BGXX_SPUX_INT", 2, a, b, 0, 0);
16172 }
16173
16174 #define typedef_BDK_BGXX_SPUX_INT(a,b) bdk_bgxx_spux_int_t
16175 #define bustype_BDK_BGXX_SPUX_INT(a,b) BDK_CSR_TYPE_RSL
16176 #define basename_BDK_BGXX_SPUX_INT(a,b) "BGXX_SPUX_INT"
16177 #define device_bar_BDK_BGXX_SPUX_INT(a,b) 0x0 /* PF_BAR0 */
16178 #define busnum_BDK_BGXX_SPUX_INT(a,b) (a)
16179 #define arguments_BDK_BGXX_SPUX_INT(a,b) (a),(b),-1,-1
16180
16181 /**
16182 * Register (RSL) bgx#_spu#_int_ena_w1c
16183 *
16184 * BGX SPU Interrupt Enable Clear Registers
16185 * This register clears interrupt enable bits.
16186 */
16187 union bdk_bgxx_spux_int_ena_w1c
16188 {
16189 uint64_t u;
16190 struct bdk_bgxx_spux_int_ena_w1c_s
16191 {
16192 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16193 uint64_t reserved_15_63 : 49;
16194 uint64_t training_failure : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16195 uint64_t training_done : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_DONE]. */
16196 uint64_t an_complete : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[AN_COMPLETE]. */
16197 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16198 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[AN_PAGE_RX]. */
16199 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[FEC_UNCORR]. */
16200 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[FEC_CORR]. */
16201 uint64_t bip_err : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[BIP_ERR]. */
16202 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[DBG_SYNC]. */
16203 uint64_t algnlos : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[ALGNLOS]. */
16204 uint64_t synlos : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[SYNLOS]. */
16205 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[BITLCKLS]. */
16206 uint64_t err_blk : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[ERR_BLK]. */
16207 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16208 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_UP]. */
16209 #else /* Word 0 - Little Endian */
16210 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_UP]. */
16211 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16212 uint64_t err_blk : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[ERR_BLK]. */
16213 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[BITLCKLS]. */
16214 uint64_t synlos : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[SYNLOS]. */
16215 uint64_t algnlos : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[ALGNLOS]. */
16216 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[DBG_SYNC]. */
16217 uint64_t bip_err : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[BIP_ERR]. */
16218 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[FEC_CORR]. */
16219 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[FEC_UNCORR]. */
16220 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[AN_PAGE_RX]. */
16221 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16222 uint64_t an_complete : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[AN_COMPLETE]. */
16223 uint64_t training_done : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_DONE]. */
16224 uint64_t training_failure : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16225 uint64_t reserved_15_63 : 49;
16226 #endif /* Word 0 - End */
16227 } s;
16228 /* struct bdk_bgxx_spux_int_ena_w1c_s cn81xx; */
16229 /* struct bdk_bgxx_spux_int_ena_w1c_s cn88xx; */
16230 struct bdk_bgxx_spux_int_ena_w1c_cn83xx
16231 {
16232 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16233 uint64_t reserved_15_63 : 49;
16234 uint64_t training_failure : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16235 uint64_t training_done : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_DONE]. */
16236 uint64_t an_complete : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[AN_COMPLETE]. */
16237 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16238 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[AN_PAGE_RX]. */
16239 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[FEC_UNCORR]. */
16240 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[FEC_CORR]. */
16241 uint64_t bip_err : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[BIP_ERR]. */
16242 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[DBG_SYNC]. */
16243 uint64_t algnlos : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[ALGNLOS]. */
16244 uint64_t synlos : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[SYNLOS]. */
16245 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[BITLCKLS]. */
16246 uint64_t err_blk : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[ERR_BLK]. */
16247 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16248 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_UP]. */
16249 #else /* Word 0 - Little Endian */
16250 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_UP]. */
16251 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16252 uint64_t err_blk : 1; /**< [ 2: 2](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[ERR_BLK]. */
16253 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[BITLCKLS]. */
16254 uint64_t synlos : 1; /**< [ 4: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[SYNLOS]. */
16255 uint64_t algnlos : 1; /**< [ 5: 5](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[ALGNLOS]. */
16256 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[DBG_SYNC]. */
16257 uint64_t bip_err : 1; /**< [ 7: 7](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[BIP_ERR]. */
16258 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[FEC_CORR]. */
16259 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[FEC_UNCORR]. */
16260 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[AN_PAGE_RX]. */
16261 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16262 uint64_t an_complete : 1; /**< [ 12: 12](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[AN_COMPLETE]. */
16263 uint64_t training_done : 1; /**< [ 13: 13](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_DONE]. */
16264 uint64_t training_failure : 1; /**< [ 14: 14](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16265 uint64_t reserved_15_63 : 49;
16266 #endif /* Word 0 - End */
16267 } cn83xx;
16268 };
16269 typedef union bdk_bgxx_spux_int_ena_w1c bdk_bgxx_spux_int_ena_w1c_t;
16270
16271 static inline uint64_t BDK_BGXX_SPUX_INT_ENA_W1C(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_INT_ENA_W1C(unsigned long a,unsigned long b)16272 static inline uint64_t BDK_BGXX_SPUX_INT_ENA_W1C(unsigned long a, unsigned long b)
16273 {
16274 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16275 return 0x87e0e0010230ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16276 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16277 return 0x87e0e0010230ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16278 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16279 return 0x87e0e0010230ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16280 __bdk_csr_fatal("BGXX_SPUX_INT_ENA_W1C", 2, a, b, 0, 0);
16281 }
16282
16283 #define typedef_BDK_BGXX_SPUX_INT_ENA_W1C(a,b) bdk_bgxx_spux_int_ena_w1c_t
16284 #define bustype_BDK_BGXX_SPUX_INT_ENA_W1C(a,b) BDK_CSR_TYPE_RSL
16285 #define basename_BDK_BGXX_SPUX_INT_ENA_W1C(a,b) "BGXX_SPUX_INT_ENA_W1C"
16286 #define device_bar_BDK_BGXX_SPUX_INT_ENA_W1C(a,b) 0x0 /* PF_BAR0 */
16287 #define busnum_BDK_BGXX_SPUX_INT_ENA_W1C(a,b) (a)
16288 #define arguments_BDK_BGXX_SPUX_INT_ENA_W1C(a,b) (a),(b),-1,-1
16289
16290 /**
16291 * Register (RSL) bgx#_spu#_int_ena_w1s
16292 *
16293 * BGX SPU Interrupt Enable Set Registers
16294 * This register sets interrupt enable bits.
16295 */
16296 union bdk_bgxx_spux_int_ena_w1s
16297 {
16298 uint64_t u;
16299 struct bdk_bgxx_spux_int_ena_w1s_s
16300 {
16301 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16302 uint64_t reserved_15_63 : 49;
16303 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16304 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_DONE]. */
16305 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[AN_COMPLETE]. */
16306 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16307 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[AN_PAGE_RX]. */
16308 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[FEC_UNCORR]. */
16309 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[FEC_CORR]. */
16310 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[BIP_ERR]. */
16311 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[DBG_SYNC]. */
16312 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[ALGNLOS]. */
16313 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[SYNLOS]. */
16314 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[BITLCKLS]. */
16315 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[ERR_BLK]. */
16316 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16317 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_UP]. */
16318 #else /* Word 0 - Little Endian */
16319 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_UP]. */
16320 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16321 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[ERR_BLK]. */
16322 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[BITLCKLS]. */
16323 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[SYNLOS]. */
16324 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[ALGNLOS]. */
16325 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[DBG_SYNC]. */
16326 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[BIP_ERR]. */
16327 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[FEC_CORR]. */
16328 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[FEC_UNCORR]. */
16329 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[AN_PAGE_RX]. */
16330 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16331 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[AN_COMPLETE]. */
16332 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_DONE]. */
16333 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16334 uint64_t reserved_15_63 : 49;
16335 #endif /* Word 0 - End */
16336 } s;
16337 /* struct bdk_bgxx_spux_int_ena_w1s_s cn81xx; */
16338 /* struct bdk_bgxx_spux_int_ena_w1s_s cn88xx; */
16339 struct bdk_bgxx_spux_int_ena_w1s_cn83xx
16340 {
16341 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16342 uint64_t reserved_15_63 : 49;
16343 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16344 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_DONE]. */
16345 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[AN_COMPLETE]. */
16346 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16347 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[AN_PAGE_RX]. */
16348 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[FEC_UNCORR]. */
16349 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[FEC_CORR]. */
16350 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[BIP_ERR]. */
16351 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[DBG_SYNC]. */
16352 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[ALGNLOS]. */
16353 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[SYNLOS]. */
16354 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[BITLCKLS]. */
16355 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[ERR_BLK]. */
16356 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16357 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_UP]. */
16358 #else /* Word 0 - Little Endian */
16359 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_UP]. */
16360 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16361 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[ERR_BLK]. */
16362 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[BITLCKLS]. */
16363 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[SYNLOS]. */
16364 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[ALGNLOS]. */
16365 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[DBG_SYNC]. */
16366 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[BIP_ERR]. */
16367 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[FEC_CORR]. */
16368 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[FEC_UNCORR]. */
16369 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[AN_PAGE_RX]. */
16370 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16371 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[AN_COMPLETE]. */
16372 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_DONE]. */
16373 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16374 uint64_t reserved_15_63 : 49;
16375 #endif /* Word 0 - End */
16376 } cn83xx;
16377 };
16378 typedef union bdk_bgxx_spux_int_ena_w1s bdk_bgxx_spux_int_ena_w1s_t;
16379
16380 static inline uint64_t BDK_BGXX_SPUX_INT_ENA_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_INT_ENA_W1S(unsigned long a,unsigned long b)16381 static inline uint64_t BDK_BGXX_SPUX_INT_ENA_W1S(unsigned long a, unsigned long b)
16382 {
16383 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16384 return 0x87e0e0010238ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16385 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16386 return 0x87e0e0010238ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16387 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16388 return 0x87e0e0010238ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16389 __bdk_csr_fatal("BGXX_SPUX_INT_ENA_W1S", 2, a, b, 0, 0);
16390 }
16391
16392 #define typedef_BDK_BGXX_SPUX_INT_ENA_W1S(a,b) bdk_bgxx_spux_int_ena_w1s_t
16393 #define bustype_BDK_BGXX_SPUX_INT_ENA_W1S(a,b) BDK_CSR_TYPE_RSL
16394 #define basename_BDK_BGXX_SPUX_INT_ENA_W1S(a,b) "BGXX_SPUX_INT_ENA_W1S"
16395 #define device_bar_BDK_BGXX_SPUX_INT_ENA_W1S(a,b) 0x0 /* PF_BAR0 */
16396 #define busnum_BDK_BGXX_SPUX_INT_ENA_W1S(a,b) (a)
16397 #define arguments_BDK_BGXX_SPUX_INT_ENA_W1S(a,b) (a),(b),-1,-1
16398
16399 /**
16400 * Register (RSL) bgx#_spu#_int_w1s
16401 *
16402 * BGX SPU Interrupt Set Registers
16403 * This register sets interrupt bits.
16404 */
16405 union bdk_bgxx_spux_int_w1s
16406 {
16407 uint64_t u;
16408 struct bdk_bgxx_spux_int_w1s_s
16409 {
16410 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16411 uint64_t reserved_15_63 : 49;
16412 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16413 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[TRAINING_DONE]. */
16414 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[AN_COMPLETE]. */
16415 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16416 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[AN_PAGE_RX]. */
16417 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[FEC_UNCORR]. */
16418 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[FEC_CORR]. */
16419 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[BIP_ERR]. */
16420 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[DBG_SYNC]. */
16421 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[ALGNLOS]. */
16422 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[SYNLOS]. */
16423 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[BITLCKLS]. */
16424 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[ERR_BLK]. */
16425 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16426 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[RX_LINK_UP]. */
16427 #else /* Word 0 - Little Endian */
16428 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[RX_LINK_UP]. */
16429 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16430 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[ERR_BLK]. */
16431 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[BITLCKLS]. */
16432 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[SYNLOS]. */
16433 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[ALGNLOS]. */
16434 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[DBG_SYNC]. */
16435 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[BIP_ERR]. */
16436 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[FEC_CORR]. */
16437 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[FEC_UNCORR]. */
16438 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[AN_PAGE_RX]. */
16439 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16440 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[AN_COMPLETE]. */
16441 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[TRAINING_DONE]. */
16442 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..1)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16443 uint64_t reserved_15_63 : 49;
16444 #endif /* Word 0 - End */
16445 } s;
16446 /* struct bdk_bgxx_spux_int_w1s_s cn81xx; */
16447 /* struct bdk_bgxx_spux_int_w1s_s cn88xx; */
16448 struct bdk_bgxx_spux_int_w1s_cn83xx
16449 {
16450 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16451 uint64_t reserved_15_63 : 49;
16452 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16453 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[TRAINING_DONE]. */
16454 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[AN_COMPLETE]. */
16455 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16456 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[AN_PAGE_RX]. */
16457 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[FEC_UNCORR]. */
16458 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[FEC_CORR]. */
16459 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[BIP_ERR]. */
16460 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[DBG_SYNC]. */
16461 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[ALGNLOS]. */
16462 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[SYNLOS]. */
16463 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[BITLCKLS]. */
16464 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[ERR_BLK]. */
16465 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16466 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[RX_LINK_UP]. */
16467 #else /* Word 0 - Little Endian */
16468 uint64_t rx_link_up : 1; /**< [ 0: 0](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[RX_LINK_UP]. */
16469 uint64_t rx_link_down : 1; /**< [ 1: 1](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[RX_LINK_DOWN]. */
16470 uint64_t err_blk : 1; /**< [ 2: 2](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[ERR_BLK]. */
16471 uint64_t bitlckls : 1; /**< [ 3: 3](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[BITLCKLS]. */
16472 uint64_t synlos : 1; /**< [ 4: 4](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[SYNLOS]. */
16473 uint64_t algnlos : 1; /**< [ 5: 5](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[ALGNLOS]. */
16474 uint64_t dbg_sync : 1; /**< [ 6: 6](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[DBG_SYNC]. */
16475 uint64_t bip_err : 1; /**< [ 7: 7](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[BIP_ERR]. */
16476 uint64_t fec_corr : 1; /**< [ 8: 8](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[FEC_CORR]. */
16477 uint64_t fec_uncorr : 1; /**< [ 9: 9](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[FEC_UNCORR]. */
16478 uint64_t an_page_rx : 1; /**< [ 10: 10](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[AN_PAGE_RX]. */
16479 uint64_t an_link_good : 1; /**< [ 11: 11](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[AN_LINK_GOOD]. */
16480 uint64_t an_complete : 1; /**< [ 12: 12](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[AN_COMPLETE]. */
16481 uint64_t training_done : 1; /**< [ 13: 13](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[TRAINING_DONE]. */
16482 uint64_t training_failure : 1; /**< [ 14: 14](R/W1S/H) Reads or sets BGX(0..3)_SPU(0..3)_INT[TRAINING_FAILURE]. */
16483 uint64_t reserved_15_63 : 49;
16484 #endif /* Word 0 - End */
16485 } cn83xx;
16486 };
16487 typedef union bdk_bgxx_spux_int_w1s bdk_bgxx_spux_int_w1s_t;
16488
16489 static inline uint64_t BDK_BGXX_SPUX_INT_W1S(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_INT_W1S(unsigned long a,unsigned long b)16490 static inline uint64_t BDK_BGXX_SPUX_INT_W1S(unsigned long a, unsigned long b)
16491 {
16492 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16493 return 0x87e0e0010228ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16494 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16495 return 0x87e0e0010228ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16496 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16497 return 0x87e0e0010228ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16498 __bdk_csr_fatal("BGXX_SPUX_INT_W1S", 2, a, b, 0, 0);
16499 }
16500
16501 #define typedef_BDK_BGXX_SPUX_INT_W1S(a,b) bdk_bgxx_spux_int_w1s_t
16502 #define bustype_BDK_BGXX_SPUX_INT_W1S(a,b) BDK_CSR_TYPE_RSL
16503 #define basename_BDK_BGXX_SPUX_INT_W1S(a,b) "BGXX_SPUX_INT_W1S"
16504 #define device_bar_BDK_BGXX_SPUX_INT_W1S(a,b) 0x0 /* PF_BAR0 */
16505 #define busnum_BDK_BGXX_SPUX_INT_W1S(a,b) (a)
16506 #define arguments_BDK_BGXX_SPUX_INT_W1S(a,b) (a),(b),-1,-1
16507
16508 /**
16509 * Register (RSL) bgx#_spu#_lpcs_states
16510 *
16511 * BGX SPU BASE-X Transmit/Receive States Registers
16512 */
16513 union bdk_bgxx_spux_lpcs_states
16514 {
16515 uint64_t u;
16516 struct bdk_bgxx_spux_lpcs_states_s
16517 {
16518 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16519 uint64_t reserved_15_63 : 49;
16520 uint64_t br_rx_sm : 3; /**< [ 14: 12](RO/H) BASE-R receive state machine state */
16521 uint64_t reserved_10_11 : 2;
16522 uint64_t bx_rx_sm : 2; /**< [ 9: 8](RO/H) BASE-X receive state machine state */
16523 uint64_t deskew_am_found : 4; /**< [ 7: 4](RO/H) 40GBASE-R deskew state machine alignment marker found flag per logical PCS lane ID. */
16524 uint64_t reserved_3 : 1;
16525 uint64_t deskew_sm : 3; /**< [ 2: 0](RO/H) BASE-X and 40GBASE-R deskew state machine state */
16526 #else /* Word 0 - Little Endian */
16527 uint64_t deskew_sm : 3; /**< [ 2: 0](RO/H) BASE-X and 40GBASE-R deskew state machine state */
16528 uint64_t reserved_3 : 1;
16529 uint64_t deskew_am_found : 4; /**< [ 7: 4](RO/H) 40GBASE-R deskew state machine alignment marker found flag per logical PCS lane ID. */
16530 uint64_t bx_rx_sm : 2; /**< [ 9: 8](RO/H) BASE-X receive state machine state */
16531 uint64_t reserved_10_11 : 2;
16532 uint64_t br_rx_sm : 3; /**< [ 14: 12](RO/H) BASE-R receive state machine state */
16533 uint64_t reserved_15_63 : 49;
16534 #endif /* Word 0 - End */
16535 } s;
16536 /* struct bdk_bgxx_spux_lpcs_states_s cn; */
16537 };
16538 typedef union bdk_bgxx_spux_lpcs_states bdk_bgxx_spux_lpcs_states_t;
16539
16540 static inline uint64_t BDK_BGXX_SPUX_LPCS_STATES(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_LPCS_STATES(unsigned long a,unsigned long b)16541 static inline uint64_t BDK_BGXX_SPUX_LPCS_STATES(unsigned long a, unsigned long b)
16542 {
16543 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16544 return 0x87e0e0010208ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16545 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16546 return 0x87e0e0010208ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16547 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16548 return 0x87e0e0010208ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16549 __bdk_csr_fatal("BGXX_SPUX_LPCS_STATES", 2, a, b, 0, 0);
16550 }
16551
16552 #define typedef_BDK_BGXX_SPUX_LPCS_STATES(a,b) bdk_bgxx_spux_lpcs_states_t
16553 #define bustype_BDK_BGXX_SPUX_LPCS_STATES(a,b) BDK_CSR_TYPE_RSL
16554 #define basename_BDK_BGXX_SPUX_LPCS_STATES(a,b) "BGXX_SPUX_LPCS_STATES"
16555 #define device_bar_BDK_BGXX_SPUX_LPCS_STATES(a,b) 0x0 /* PF_BAR0 */
16556 #define busnum_BDK_BGXX_SPUX_LPCS_STATES(a,b) (a)
16557 #define arguments_BDK_BGXX_SPUX_LPCS_STATES(a,b) (a),(b),-1,-1
16558
16559 /**
16560 * Register (RSL) bgx#_spu#_misc_control
16561 *
16562 * BGX SPU Miscellaneous Control Registers
16563 * "* RX logical PCS lane polarity vector \<3:0\> = [XOR_RXPLRT]\<3:0\> ^ {4{[RXPLRT]}}.
16564 * * TX logical PCS lane polarity vector \<3:0\> = [XOR_TXPLRT]\<3:0\> ^ {4{[TXPLRT]}}.
16565 *
16566 * In short, keep [RXPLRT] and [TXPLRT] cleared, and use [XOR_RXPLRT] and [XOR_TXPLRT] fields to
16567 * define
16568 * the polarity per logical PCS lane. Only bit 0 of vector is used for 10GBASE-R, and only bits
16569 * 1:0 of vector are used for RXAUI."
16570 */
16571 union bdk_bgxx_spux_misc_control
16572 {
16573 uint64_t u;
16574 struct bdk_bgxx_spux_misc_control_s
16575 {
16576 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16577 uint64_t reserved_13_63 : 51;
16578 uint64_t rx_packet_dis : 1; /**< [ 12: 12](R/W) Receive packet disable. Software can set or clear this bit at any time to gracefully
16579 disable or re-enable packet reception by the LPCS. If this bit is set while a packet is
16580 being received, the packet is completed and all subsequent received packets are discarded
16581 by the LPCS. Similarly, if this bit is cleared while a received packet is being discarded,
16582 packet reception resumes after the current packet is fully discarded. When set for a
16583 40GBASE-R or 10GBASE-R LMAC/LPCS type (selected by BGX()_CMR()_CONFIG[LMAC_TYPE]),
16584 received errors and faults will be ignored while receive packets are discarded; idles will
16585 be sent to the MAC layer (SMU) and the errored blocks counter
16586 (BGX()_SPU()_BR_STATUS2[ERR_BLKS]) will not increment. */
16587 uint64_t skip_after_term : 1; /**< [ 11: 11](R/W) Enable sending of idle skip after terminate. This bit is meaningful when the logical PCS
16588 type is XAUI or RXAUI (selected by BGX()_CMR()_CONFIG[LMAC_TYPE]), and has no
16589 effect otherwise. When set, the LMAC/LPCS transmits more idle skip columns for clock
16590 compensation. Typically set in HiGig/HiGig2 modes; clear otherwise. This field can be set
16591 to ensure sufficient density of XAUI idle skip (||R||) columns with a small transmit
16592 inter-frame gap (IFG) in order to allow the link partner's receiver to delete ||R||
16593 columns as needed for clock rate compensation. It is usually set when the LMAC's transmit
16594 IFG is set to eight bytes in HiGig/HiGig2 modes (i.e. BGX()_SMU()_TX_IFG[IFG1] +
16595 BGX()_SMU()_TX_IFG[IFG2] = 8), and should be cleared when the transmit IFG is
16596 greater than eight bytes. When this bit is set, the SPU will send an ||R|| column after a
16597 ||T0|| column (terminate in lane 0) if no ||R|| was sent in the previous IFG. This is a
16598 minor deviation from the functionality specified in 802.3-2008 Figure 48-6 (PCS transmit
16599 source state diagram), whereby the state will transition directly from SEND_DATA to
16600 SEND_RANDOM_R after ||T0|| if no ||R|| was transmitted in the previous IFG. Sending ||R||
16601 after ||T0|| only (and not ||T1||, |T2|| or ||T3||) ensures that the check_end function at
16602 the receiving end, as defined in 802.3-2008 sub-clause 48.2.6.1.4, does not detect an
16603 error due to this functional change. When this bit is clear, the LMAC will fully conform
16604 to the functionality specified in Figure 48-6. */
16605 uint64_t intlv_rdisp : 1; /**< [ 10: 10](R/W) RXAUI interleaved running disparity. This bit is meaningful when the logical PCS type is
16606 RXAUI (BGX()_CMR()_CONFIG[LMAC_TYPE] = RXAUI), and has no effect otherwise. It
16607 selects which disparity calculation to use when combining or splitting the RXAUI lanes, as
16608 follows:
16609
16610 _ 0 = Common running disparity. Common running disparity is computed for even and odd
16611 code-
16612 groups of an RXAUI lane, i.e. interleave lanes before PCS layer as described in the Dune
16613 Networks/Broadcom RXAUI v2.1 specification. This obeys 6.25GHz SerDes disparity.
16614
16615 _ 1 = Interleaved running disparity: Running disparity is computed separately for even and
16616 odd code-groups of an RXAUI lane, i.e. interleave lanes after PCS layer as described in
16617 the Marvell RXAUI Interface specification. This does not obey 6.25GHz SerDes disparity. */
16618 uint64_t xor_rxplrt : 4; /**< [ 9: 6](R/W) RX polarity control per logical PCS lane */
16619 uint64_t xor_txplrt : 4; /**< [ 5: 2](R/W) TX polarity control per logical PCS lane */
16620 uint64_t rxplrt : 1; /**< [ 1: 1](R/W) Receive polarity. 1 = inverted polarity. 0 = normal polarity. */
16621 uint64_t txplrt : 1; /**< [ 0: 0](R/W) Transmit polarity. 1 = inverted polarity. 0 = normal polarity. */
16622 #else /* Word 0 - Little Endian */
16623 uint64_t txplrt : 1; /**< [ 0: 0](R/W) Transmit polarity. 1 = inverted polarity. 0 = normal polarity. */
16624 uint64_t rxplrt : 1; /**< [ 1: 1](R/W) Receive polarity. 1 = inverted polarity. 0 = normal polarity. */
16625 uint64_t xor_txplrt : 4; /**< [ 5: 2](R/W) TX polarity control per logical PCS lane */
16626 uint64_t xor_rxplrt : 4; /**< [ 9: 6](R/W) RX polarity control per logical PCS lane */
16627 uint64_t intlv_rdisp : 1; /**< [ 10: 10](R/W) RXAUI interleaved running disparity. This bit is meaningful when the logical PCS type is
16628 RXAUI (BGX()_CMR()_CONFIG[LMAC_TYPE] = RXAUI), and has no effect otherwise. It
16629 selects which disparity calculation to use when combining or splitting the RXAUI lanes, as
16630 follows:
16631
16632 _ 0 = Common running disparity. Common running disparity is computed for even and odd
16633 code-
16634 groups of an RXAUI lane, i.e. interleave lanes before PCS layer as described in the Dune
16635 Networks/Broadcom RXAUI v2.1 specification. This obeys 6.25GHz SerDes disparity.
16636
16637 _ 1 = Interleaved running disparity: Running disparity is computed separately for even and
16638 odd code-groups of an RXAUI lane, i.e. interleave lanes after PCS layer as described in
16639 the Marvell RXAUI Interface specification. This does not obey 6.25GHz SerDes disparity. */
16640 uint64_t skip_after_term : 1; /**< [ 11: 11](R/W) Enable sending of idle skip after terminate. This bit is meaningful when the logical PCS
16641 type is XAUI or RXAUI (selected by BGX()_CMR()_CONFIG[LMAC_TYPE]), and has no
16642 effect otherwise. When set, the LMAC/LPCS transmits more idle skip columns for clock
16643 compensation. Typically set in HiGig/HiGig2 modes; clear otherwise. This field can be set
16644 to ensure sufficient density of XAUI idle skip (||R||) columns with a small transmit
16645 inter-frame gap (IFG) in order to allow the link partner's receiver to delete ||R||
16646 columns as needed for clock rate compensation. It is usually set when the LMAC's transmit
16647 IFG is set to eight bytes in HiGig/HiGig2 modes (i.e. BGX()_SMU()_TX_IFG[IFG1] +
16648 BGX()_SMU()_TX_IFG[IFG2] = 8), and should be cleared when the transmit IFG is
16649 greater than eight bytes. When this bit is set, the SPU will send an ||R|| column after a
16650 ||T0|| column (terminate in lane 0) if no ||R|| was sent in the previous IFG. This is a
16651 minor deviation from the functionality specified in 802.3-2008 Figure 48-6 (PCS transmit
16652 source state diagram), whereby the state will transition directly from SEND_DATA to
16653 SEND_RANDOM_R after ||T0|| if no ||R|| was transmitted in the previous IFG. Sending ||R||
16654 after ||T0|| only (and not ||T1||, |T2|| or ||T3||) ensures that the check_end function at
16655 the receiving end, as defined in 802.3-2008 sub-clause 48.2.6.1.4, does not detect an
16656 error due to this functional change. When this bit is clear, the LMAC will fully conform
16657 to the functionality specified in Figure 48-6. */
16658 uint64_t rx_packet_dis : 1; /**< [ 12: 12](R/W) Receive packet disable. Software can set or clear this bit at any time to gracefully
16659 disable or re-enable packet reception by the LPCS. If this bit is set while a packet is
16660 being received, the packet is completed and all subsequent received packets are discarded
16661 by the LPCS. Similarly, if this bit is cleared while a received packet is being discarded,
16662 packet reception resumes after the current packet is fully discarded. When set for a
16663 40GBASE-R or 10GBASE-R LMAC/LPCS type (selected by BGX()_CMR()_CONFIG[LMAC_TYPE]),
16664 received errors and faults will be ignored while receive packets are discarded; idles will
16665 be sent to the MAC layer (SMU) and the errored blocks counter
16666 (BGX()_SPU()_BR_STATUS2[ERR_BLKS]) will not increment. */
16667 uint64_t reserved_13_63 : 51;
16668 #endif /* Word 0 - End */
16669 } s;
16670 /* struct bdk_bgxx_spux_misc_control_s cn; */
16671 };
16672 typedef union bdk_bgxx_spux_misc_control bdk_bgxx_spux_misc_control_t;
16673
16674 static inline uint64_t BDK_BGXX_SPUX_MISC_CONTROL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_MISC_CONTROL(unsigned long a,unsigned long b)16675 static inline uint64_t BDK_BGXX_SPUX_MISC_CONTROL(unsigned long a, unsigned long b)
16676 {
16677 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16678 return 0x87e0e0010218ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16679 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16680 return 0x87e0e0010218ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16681 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16682 return 0x87e0e0010218ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16683 __bdk_csr_fatal("BGXX_SPUX_MISC_CONTROL", 2, a, b, 0, 0);
16684 }
16685
16686 #define typedef_BDK_BGXX_SPUX_MISC_CONTROL(a,b) bdk_bgxx_spux_misc_control_t
16687 #define bustype_BDK_BGXX_SPUX_MISC_CONTROL(a,b) BDK_CSR_TYPE_RSL
16688 #define basename_BDK_BGXX_SPUX_MISC_CONTROL(a,b) "BGXX_SPUX_MISC_CONTROL"
16689 #define device_bar_BDK_BGXX_SPUX_MISC_CONTROL(a,b) 0x0 /* PF_BAR0 */
16690 #define busnum_BDK_BGXX_SPUX_MISC_CONTROL(a,b) (a)
16691 #define arguments_BDK_BGXX_SPUX_MISC_CONTROL(a,b) (a),(b),-1,-1
16692
16693 /**
16694 * Register (RSL) bgx#_spu#_spd_abil
16695 *
16696 * BGX SPU PCS Speed Ability Registers
16697 */
16698 union bdk_bgxx_spux_spd_abil
16699 {
16700 uint64_t u;
16701 struct bdk_bgxx_spux_spd_abil_s
16702 {
16703 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16704 uint64_t reserved_4_63 : 60;
16705 uint64_t hundredgb : 1; /**< [ 3: 3](RO) 100G capable. Always 0. */
16706 uint64_t fortygb : 1; /**< [ 2: 2](RO/H) 40G capable. Always 1. */
16707 uint64_t tenpasst : 1; /**< [ 1: 1](RO) 10PASS-TS/2BASE-TL capable. Always 0. */
16708 uint64_t tengb : 1; /**< [ 0: 0](RO/H) 10G capable. Always 1. */
16709 #else /* Word 0 - Little Endian */
16710 uint64_t tengb : 1; /**< [ 0: 0](RO/H) 10G capable. Always 1. */
16711 uint64_t tenpasst : 1; /**< [ 1: 1](RO) 10PASS-TS/2BASE-TL capable. Always 0. */
16712 uint64_t fortygb : 1; /**< [ 2: 2](RO/H) 40G capable. Always 1. */
16713 uint64_t hundredgb : 1; /**< [ 3: 3](RO) 100G capable. Always 0. */
16714 uint64_t reserved_4_63 : 60;
16715 #endif /* Word 0 - End */
16716 } s;
16717 /* struct bdk_bgxx_spux_spd_abil_s cn; */
16718 };
16719 typedef union bdk_bgxx_spux_spd_abil bdk_bgxx_spux_spd_abil_t;
16720
16721 static inline uint64_t BDK_BGXX_SPUX_SPD_ABIL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_SPD_ABIL(unsigned long a,unsigned long b)16722 static inline uint64_t BDK_BGXX_SPUX_SPD_ABIL(unsigned long a, unsigned long b)
16723 {
16724 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16725 return 0x87e0e0010010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16726 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16727 return 0x87e0e0010010ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16728 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16729 return 0x87e0e0010010ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16730 __bdk_csr_fatal("BGXX_SPUX_SPD_ABIL", 2, a, b, 0, 0);
16731 }
16732
16733 #define typedef_BDK_BGXX_SPUX_SPD_ABIL(a,b) bdk_bgxx_spux_spd_abil_t
16734 #define bustype_BDK_BGXX_SPUX_SPD_ABIL(a,b) BDK_CSR_TYPE_RSL
16735 #define basename_BDK_BGXX_SPUX_SPD_ABIL(a,b) "BGXX_SPUX_SPD_ABIL"
16736 #define device_bar_BDK_BGXX_SPUX_SPD_ABIL(a,b) 0x0 /* PF_BAR0 */
16737 #define busnum_BDK_BGXX_SPUX_SPD_ABIL(a,b) (a)
16738 #define arguments_BDK_BGXX_SPUX_SPD_ABIL(a,b) (a),(b),-1,-1
16739
16740 /**
16741 * Register (RSL) bgx#_spu#_status1
16742 *
16743 * BGX SPU Status 1 Registers
16744 */
16745 union bdk_bgxx_spux_status1
16746 {
16747 uint64_t u;
16748 struct bdk_bgxx_spux_status1_s
16749 {
16750 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16751 uint64_t reserved_8_63 : 56;
16752 uint64_t flt : 1; /**< [ 7: 7](RO/H) Fault condition detected.
16753 This bit is a logical OR of BGX()_SPU()_STATUS2[XMTFLT, RCVFLT]. */
16754 uint64_t reserved_3_6 : 4;
16755 uint64_t rcv_lnk : 1; /**< [ 2: 2](R/W1S/H) PCS receive link status:
16756 0 = receive link down.
16757 1 = receive link up.
16758
16759 This is a latching-low bit; it stays clear until a write-1-to-set by software.
16760
16761 For a BASE-X logical PCS type (in the associated BGX()_CMR()_CONFIG[LMAC_TYPE] =
16762 XAUI or RXAUI), this is a latching-low version of BGX()_SPU()_BX_STATUS[ALIGND].
16763
16764 For a BASE-R logical PCS type (in the associated BGX()_CMR()_CONFIG[LMAC_TYPE] =
16765 10G_R or 40G_R), this is a latching-low version of
16766 BGX()_SPU()_BR_STATUS1[RCV_LNK]. */
16767 uint64_t lpable : 1; /**< [ 1: 1](RO) Low-power ability. Always returns 1 to indicate that the LPCS supports low-power mode. */
16768 uint64_t reserved_0 : 1;
16769 #else /* Word 0 - Little Endian */
16770 uint64_t reserved_0 : 1;
16771 uint64_t lpable : 1; /**< [ 1: 1](RO) Low-power ability. Always returns 1 to indicate that the LPCS supports low-power mode. */
16772 uint64_t rcv_lnk : 1; /**< [ 2: 2](R/W1S/H) PCS receive link status:
16773 0 = receive link down.
16774 1 = receive link up.
16775
16776 This is a latching-low bit; it stays clear until a write-1-to-set by software.
16777
16778 For a BASE-X logical PCS type (in the associated BGX()_CMR()_CONFIG[LMAC_TYPE] =
16779 XAUI or RXAUI), this is a latching-low version of BGX()_SPU()_BX_STATUS[ALIGND].
16780
16781 For a BASE-R logical PCS type (in the associated BGX()_CMR()_CONFIG[LMAC_TYPE] =
16782 10G_R or 40G_R), this is a latching-low version of
16783 BGX()_SPU()_BR_STATUS1[RCV_LNK]. */
16784 uint64_t reserved_3_6 : 4;
16785 uint64_t flt : 1; /**< [ 7: 7](RO/H) Fault condition detected.
16786 This bit is a logical OR of BGX()_SPU()_STATUS2[XMTFLT, RCVFLT]. */
16787 uint64_t reserved_8_63 : 56;
16788 #endif /* Word 0 - End */
16789 } s;
16790 /* struct bdk_bgxx_spux_status1_s cn; */
16791 };
16792 typedef union bdk_bgxx_spux_status1 bdk_bgxx_spux_status1_t;
16793
16794 static inline uint64_t BDK_BGXX_SPUX_STATUS1(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_STATUS1(unsigned long a,unsigned long b)16795 static inline uint64_t BDK_BGXX_SPUX_STATUS1(unsigned long a, unsigned long b)
16796 {
16797 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16798 return 0x87e0e0010008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16799 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16800 return 0x87e0e0010008ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16801 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16802 return 0x87e0e0010008ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16803 __bdk_csr_fatal("BGXX_SPUX_STATUS1", 2, a, b, 0, 0);
16804 }
16805
16806 #define typedef_BDK_BGXX_SPUX_STATUS1(a,b) bdk_bgxx_spux_status1_t
16807 #define bustype_BDK_BGXX_SPUX_STATUS1(a,b) BDK_CSR_TYPE_RSL
16808 #define basename_BDK_BGXX_SPUX_STATUS1(a,b) "BGXX_SPUX_STATUS1"
16809 #define device_bar_BDK_BGXX_SPUX_STATUS1(a,b) 0x0 /* PF_BAR0 */
16810 #define busnum_BDK_BGXX_SPUX_STATUS1(a,b) (a)
16811 #define arguments_BDK_BGXX_SPUX_STATUS1(a,b) (a),(b),-1,-1
16812
16813 /**
16814 * Register (RSL) bgx#_spu#_status2
16815 *
16816 * BGX SPU Status 2 Registers
16817 */
16818 union bdk_bgxx_spux_status2
16819 {
16820 uint64_t u;
16821 struct bdk_bgxx_spux_status2_s
16822 {
16823 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16824 uint64_t reserved_16_63 : 48;
16825 uint64_t dev : 2; /**< [ 15: 14](RO/H) Device present. Always returns 0x2 to indicate a device is present at this address. */
16826 uint64_t reserved_12_13 : 2;
16827 uint64_t xmtflt : 1; /**< [ 11: 11](RO/H) Transmit fault. Always returns 0. */
16828 uint64_t rcvflt : 1; /**< [ 10: 10](R/W1C/H) Receive fault: 1 = receive fault. 0 = no receive fault. Latching high bit; stays set until
16829 a write-1-to-clear by software. */
16830 uint64_t reserved_6_9 : 4;
16831 uint64_t hundredgb_r : 1; /**< [ 5: 5](RO) 100GBASE-R capable. Always 0. */
16832 uint64_t fortygb_r : 1; /**< [ 4: 4](RO/H) 40GBASE-R capable. Always 1. */
16833 uint64_t tengb_t : 1; /**< [ 3: 3](RO) 10GBASE-T capable. Always 0. */
16834 uint64_t tengb_w : 1; /**< [ 2: 2](RO) 10GBASE-W capable. Always 0. */
16835 uint64_t tengb_x : 1; /**< [ 1: 1](RO/H) 10GBASE-X capable. Always 1. */
16836 uint64_t tengb_r : 1; /**< [ 0: 0](RO/H) 10GBASE-R capable. Always 1. */
16837 #else /* Word 0 - Little Endian */
16838 uint64_t tengb_r : 1; /**< [ 0: 0](RO/H) 10GBASE-R capable. Always 1. */
16839 uint64_t tengb_x : 1; /**< [ 1: 1](RO/H) 10GBASE-X capable. Always 1. */
16840 uint64_t tengb_w : 1; /**< [ 2: 2](RO) 10GBASE-W capable. Always 0. */
16841 uint64_t tengb_t : 1; /**< [ 3: 3](RO) 10GBASE-T capable. Always 0. */
16842 uint64_t fortygb_r : 1; /**< [ 4: 4](RO/H) 40GBASE-R capable. Always 1. */
16843 uint64_t hundredgb_r : 1; /**< [ 5: 5](RO) 100GBASE-R capable. Always 0. */
16844 uint64_t reserved_6_9 : 4;
16845 uint64_t rcvflt : 1; /**< [ 10: 10](R/W1C/H) Receive fault: 1 = receive fault. 0 = no receive fault. Latching high bit; stays set until
16846 a write-1-to-clear by software. */
16847 uint64_t xmtflt : 1; /**< [ 11: 11](RO/H) Transmit fault. Always returns 0. */
16848 uint64_t reserved_12_13 : 2;
16849 uint64_t dev : 2; /**< [ 15: 14](RO/H) Device present. Always returns 0x2 to indicate a device is present at this address. */
16850 uint64_t reserved_16_63 : 48;
16851 #endif /* Word 0 - End */
16852 } s;
16853 /* struct bdk_bgxx_spux_status2_s cn; */
16854 };
16855 typedef union bdk_bgxx_spux_status2 bdk_bgxx_spux_status2_t;
16856
16857 static inline uint64_t BDK_BGXX_SPUX_STATUS2(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPUX_STATUS2(unsigned long a,unsigned long b)16858 static inline uint64_t BDK_BGXX_SPUX_STATUS2(unsigned long a, unsigned long b)
16859 {
16860 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
16861 return 0x87e0e0010020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16862 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
16863 return 0x87e0e0010020ll + 0x1000000ll * ((a) & 0x3) + 0x100000ll * ((b) & 0x3);
16864 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
16865 return 0x87e0e0010020ll + 0x1000000ll * ((a) & 0x1) + 0x100000ll * ((b) & 0x3);
16866 __bdk_csr_fatal("BGXX_SPUX_STATUS2", 2, a, b, 0, 0);
16867 }
16868
16869 #define typedef_BDK_BGXX_SPUX_STATUS2(a,b) bdk_bgxx_spux_status2_t
16870 #define bustype_BDK_BGXX_SPUX_STATUS2(a,b) BDK_CSR_TYPE_RSL
16871 #define basename_BDK_BGXX_SPUX_STATUS2(a,b) "BGXX_SPUX_STATUS2"
16872 #define device_bar_BDK_BGXX_SPUX_STATUS2(a,b) 0x0 /* PF_BAR0 */
16873 #define busnum_BDK_BGXX_SPUX_STATUS2(a,b) (a)
16874 #define arguments_BDK_BGXX_SPUX_STATUS2(a,b) (a),(b),-1,-1
16875
16876 /**
16877 * Register (RSL) bgx#_spu_bist_status
16878 *
16879 * BGX SPU BIST Status Registers
16880 * This register provides memory BIST status from the SPU receive buffer lane FIFOs.
16881 */
16882 union bdk_bgxx_spu_bist_status
16883 {
16884 uint64_t u;
16885 struct bdk_bgxx_spu_bist_status_s
16886 {
16887 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16888 uint64_t reserved_4_63 : 60;
16889 uint64_t rx_buf_bist_status : 4; /**< [ 3: 0](RO/H) SPU receive buffer BIST status for lanes 3-0. One bit per SerDes lane, set to indicate
16890 BIST
16891 failure for the associated receive buffer lane FIFO. */
16892 #else /* Word 0 - Little Endian */
16893 uint64_t rx_buf_bist_status : 4; /**< [ 3: 0](RO/H) SPU receive buffer BIST status for lanes 3-0. One bit per SerDes lane, set to indicate
16894 BIST
16895 failure for the associated receive buffer lane FIFO. */
16896 uint64_t reserved_4_63 : 60;
16897 #endif /* Word 0 - End */
16898 } s;
16899 /* struct bdk_bgxx_spu_bist_status_s cn; */
16900 };
16901 typedef union bdk_bgxx_spu_bist_status bdk_bgxx_spu_bist_status_t;
16902
16903 static inline uint64_t BDK_BGXX_SPU_BIST_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_BIST_STATUS(unsigned long a)16904 static inline uint64_t BDK_BGXX_SPU_BIST_STATUS(unsigned long a)
16905 {
16906 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
16907 return 0x87e0e0010330ll + 0x1000000ll * ((a) & 0x1);
16908 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
16909 return 0x87e0e0010330ll + 0x1000000ll * ((a) & 0x3);
16910 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
16911 return 0x87e0e0010330ll + 0x1000000ll * ((a) & 0x1);
16912 __bdk_csr_fatal("BGXX_SPU_BIST_STATUS", 1, a, 0, 0, 0);
16913 }
16914
16915 #define typedef_BDK_BGXX_SPU_BIST_STATUS(a) bdk_bgxx_spu_bist_status_t
16916 #define bustype_BDK_BGXX_SPU_BIST_STATUS(a) BDK_CSR_TYPE_RSL
16917 #define basename_BDK_BGXX_SPU_BIST_STATUS(a) "BGXX_SPU_BIST_STATUS"
16918 #define device_bar_BDK_BGXX_SPU_BIST_STATUS(a) 0x0 /* PF_BAR0 */
16919 #define busnum_BDK_BGXX_SPU_BIST_STATUS(a) (a)
16920 #define arguments_BDK_BGXX_SPU_BIST_STATUS(a) (a),-1,-1,-1
16921
16922 /**
16923 * Register (RSL) bgx#_spu_dbg_control
16924 *
16925 * BGX SPU Debug Control Registers
16926 */
16927 union bdk_bgxx_spu_dbg_control
16928 {
16929 uint64_t u;
16930 struct bdk_bgxx_spu_dbg_control_s
16931 {
16932 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
16933 uint64_t reserved_56_63 : 8;
16934 uint64_t ms_clk_period : 12; /**< [ 55: 44](R/W) Millisecond clock period. Specifies the number of microsecond clock ticks per millisecond,
16935 minus one. The default value of 999 (0x3E7) should be used during normal operation; other
16936 values may be used for test/debug purposes. */
16937 uint64_t us_clk_period : 12; /**< [ 43: 32](R/W) Microsecond clock period. Specifies the number of SCLK cycles per microseconds, minus one.
16938 For example, if SCLK runs at 1.3 GHz, the number of SCLK cycles per microsecond is 1,300
16939 so the value of this field should be 1,299 (0x513). This is used by the BASE-R BER monitor
16940 timers. */
16941 uint64_t reserved_31 : 1;
16942 uint64_t br_ber_mon_dis : 1; /**< [ 30: 30](R/W) BASE-R bit error rate monitor disable. This bit should be clear for normal operation.
16943 Setting it disables the BASE-R BER monitor state machine defined in 802.3-2008 Figure
16944 49-13 for 10GBASE-R and 802.3ba-2010 Figure 82-13 for 40GBASE-R. */
16945 uint64_t an_nonce_match_dis : 1; /**< [ 29: 29](R/W) Autonegotiation nonce match disable. This bit should be clear for normal operation.
16946 Setting it disables Nonce Match check by forcing nonce_match variable to 0 in the
16947 autonegotiation arbitration state diagram, as defined in 802.3-2008 Figure 73-11. This bit
16948 can
16949 be set by software for test purposes, e.g. for running autonegotiation in loopback mode. */
16950 uint64_t timestamp_norm_dis : 1; /**< [ 28: 28](R/W) 40GBASE-R RX timestamp normalization disable. This bit controls the generation of the
16951 receive SOP timestamp passed to the SMU sub-block for a 40GBASE-R LMAC/LPCS. When this bit
16952 is clear, SPU normalizes the receive SOP timestamp in order to compensate for lane-to-lane
16953 skew on a 40GBASE-R link, as described below. When this bit is set, timestamp
16954 normalization is disabled and SPU directly passes the captured SOP timestamp values to
16955 SMU.
16956
16957 In 40GBASE-R mode, a packet's SOP block can be transferred on any of the LMAC's lanes. In
16958 the presence of lane-to-lane skew, the SOP delay from transmit (by the link partner) to
16959 receive by SPU varies depending on which lane is used by the SOP block. This variation
16960 reduces the accuracy of the received SOP timestamp relative to when it was transmitted by
16961 the link partner.
16962
16963 SPU captures the timestamp of the alignment marker received on each SerDes lane during
16964 align/skew detection; the captured value can be read from the SerDes lane's
16965 BGX()_SPU_SDS()_SKEW_STATUS[SKEW_STATUS] field (BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP]
16966 sub-field). If
16967 alignment markers are transmitted at about the same time on all lanes by the link partner,
16968 then the difference between the BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] values for a pair
16969 of lanes represents the
16970 approximate skew between those lanes.
16971
16972 SPU uses the 40GBASE-R LMAC's programmed PCS lane 0 as a reference and computes the
16973 BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] delta of every other lane relative to PCS lane 0.
16974 When normalization is
16975 enabled, SPU adjusts the timestamp of a received SOP by subtracting the receiving lane's
16976 BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] delta from the captured timestamp value. The
16977 adjusted/normalized timestamp
16978 value is then passed to SMU along with the SOP.
16979
16980 Software can determine the actual maximum skew of a 40GBASE-R link by examining the
16981 BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] values in the BGX()_SPU_SDS()_SKEW_STATUS
16982 registers, and decide if
16983 timestamp normalization should be enabled or disabled to improve PTP accuracy.
16984 Normalization improves accuracy for larger skew values but reduces the accuracy (due to
16985 timestamp measurement errors) for small skew values. */
16986 uint64_t rx_buf_flip_synd : 8; /**< [ 27: 20](R/W) Flip SPU receive buffer FIFO ECC bits. Two bits per SerDes lane; used to inject single-bit
16987 and
16988 double-bit errors into the ECC field on writes to the associated SPU receive buffer lane
16989 FIFO, as
16990 follows:
16991 0x0 = Normal operation.
16992 0x1 = SBE on ECC bit 0.
16993 0x2 = SBE on ECC bit 1.
16994 0x3 = DBE on ECC bits 1:0. */
16995 uint64_t br_pmd_train_soft_en : 1; /**< [ 19: 19](R/W) Enable BASE-R PMD software controlled link training. This bit configures the operation
16996 mode for BASE-R link training for all LMACs and lanes. When this bit is set along with
16997 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] for a given LMAC, the BASE-R link training
16998 protocol for that LMAC is executed under software control, whereby the contents the
16999 BGX()_SPU()_BR_PMD_LD_CUP and BGX()_SPU()_BR_PMD_LD_REP registers are
17000 updated by software. When this bit is clear and
17001 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is set, the link training protocol is fully
17002 automated in hardware, whereby the contents BGX()_SPU()_BR_PMD_LD_CUP and
17003 BGX()_SPU()_BR_PMD_LD_REP registers are automatically updated by hardware. */
17004 uint64_t an_arb_link_chk_en : 1; /**< [ 18: 18](R/W) Enable link status checking by autonegotiation arbitration state machine. When
17005 autonegotiation is enabled (BGX()_SPU()_AN_CONTROL[AN_EN] is set), this bit controls
17006 the behavior of the autonegotiation arbitration state machine when it reaches the AN GOOD
17007 CHECK state after DME pages are successfully exchanged, as defined in Figure 73-11 in
17008 802.3-2008.
17009
17010 When this bit is set and the negotiated highest common denominator (HCD) technology
17011 matches BGX()_CMR()_CONFIG[LMAC_TYPE], the autonegotiation arbitration SM
17012 performs the actions defined for the AN GOOD CHECK state in Figure 73-11, i.e. run the
17013 link_fail_inhibit timer and eventually transition to the AN GOOD or TRANSMIT DISABLE
17014 state.
17015
17016 When this bit is clear or the HCD technology does not match BGX()_CMR()_CONFIG[LMAC_TYPE],
17017 the AN arbitration
17018 SM stays in the AN GOOD CHECK state, with the expectation that software will perform the
17019 appropriate actions to complete the autonegotiation protocol, as follows:
17020
17021 * If this bit is clear and the HCD technology matches BGX()_CMR()_CONFIG[LMAC_TYPE], clear
17022 BGX()_SPU()_AN_CONTROL[AN_EN].
17023
17024 * Otherwise, disable the LPCS by clearing the BGX()_CMR()_CONFIG[ENABLE], clear
17025 BGX()_SPU()_AN_CONTROL[AN_EN], reconfigure the LPCS with the correct
17026 BGX()_CMR()_CONFIG[LMAC_TYPE],
17027 and re-enable the LPCS by setting BGX()_CMR()_CONFIG[ENABLE].
17028
17029 In both cases, software should implement the link_fail_inhibit timer and verify the link
17030 status as specified for the AN GOOD CHECK state. */
17031 uint64_t rx_buf_cor_dis : 1; /**< [ 17: 17](R/W) When set, disables ECC correction on all SPU receive buffer FIFOs. */
17032 uint64_t scramble_dis : 1; /**< [ 16: 16](R/W) BASE-R scrambler/descrambler disable. Setting this bit to 1 disables the BASE-R scrambler
17033 & descrambler functions and FEC PN-2112 scrambler & descrambler functions for debug
17034 purposes. */
17035 uint64_t reserved_15 : 1;
17036 uint64_t marker_rxp : 15; /**< [ 14: 0](R/W) BASE-R alignment marker receive period. For a multilane BASE-R logical PCS (i.e.
17037 40GBASE-R), this field specifies the expected alignment marker receive period per lane,
17038 i.e. the expected number of received 66b non-marker blocks between consecutive markers on
17039 the same lane. The default value corresponds to a period of 16363 blocks (exclusive) as
17040 specified in 802.3ba-2010. Must be greater than 64. */
17041 #else /* Word 0 - Little Endian */
17042 uint64_t marker_rxp : 15; /**< [ 14: 0](R/W) BASE-R alignment marker receive period. For a multilane BASE-R logical PCS (i.e.
17043 40GBASE-R), this field specifies the expected alignment marker receive period per lane,
17044 i.e. the expected number of received 66b non-marker blocks between consecutive markers on
17045 the same lane. The default value corresponds to a period of 16363 blocks (exclusive) as
17046 specified in 802.3ba-2010. Must be greater than 64. */
17047 uint64_t reserved_15 : 1;
17048 uint64_t scramble_dis : 1; /**< [ 16: 16](R/W) BASE-R scrambler/descrambler disable. Setting this bit to 1 disables the BASE-R scrambler
17049 & descrambler functions and FEC PN-2112 scrambler & descrambler functions for debug
17050 purposes. */
17051 uint64_t rx_buf_cor_dis : 1; /**< [ 17: 17](R/W) When set, disables ECC correction on all SPU receive buffer FIFOs. */
17052 uint64_t an_arb_link_chk_en : 1; /**< [ 18: 18](R/W) Enable link status checking by autonegotiation arbitration state machine. When
17053 autonegotiation is enabled (BGX()_SPU()_AN_CONTROL[AN_EN] is set), this bit controls
17054 the behavior of the autonegotiation arbitration state machine when it reaches the AN GOOD
17055 CHECK state after DME pages are successfully exchanged, as defined in Figure 73-11 in
17056 802.3-2008.
17057
17058 When this bit is set and the negotiated highest common denominator (HCD) technology
17059 matches BGX()_CMR()_CONFIG[LMAC_TYPE], the autonegotiation arbitration SM
17060 performs the actions defined for the AN GOOD CHECK state in Figure 73-11, i.e. run the
17061 link_fail_inhibit timer and eventually transition to the AN GOOD or TRANSMIT DISABLE
17062 state.
17063
17064 When this bit is clear or the HCD technology does not match BGX()_CMR()_CONFIG[LMAC_TYPE],
17065 the AN arbitration
17066 SM stays in the AN GOOD CHECK state, with the expectation that software will perform the
17067 appropriate actions to complete the autonegotiation protocol, as follows:
17068
17069 * If this bit is clear and the HCD technology matches BGX()_CMR()_CONFIG[LMAC_TYPE], clear
17070 BGX()_SPU()_AN_CONTROL[AN_EN].
17071
17072 * Otherwise, disable the LPCS by clearing the BGX()_CMR()_CONFIG[ENABLE], clear
17073 BGX()_SPU()_AN_CONTROL[AN_EN], reconfigure the LPCS with the correct
17074 BGX()_CMR()_CONFIG[LMAC_TYPE],
17075 and re-enable the LPCS by setting BGX()_CMR()_CONFIG[ENABLE].
17076
17077 In both cases, software should implement the link_fail_inhibit timer and verify the link
17078 status as specified for the AN GOOD CHECK state. */
17079 uint64_t br_pmd_train_soft_en : 1; /**< [ 19: 19](R/W) Enable BASE-R PMD software controlled link training. This bit configures the operation
17080 mode for BASE-R link training for all LMACs and lanes. When this bit is set along with
17081 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] for a given LMAC, the BASE-R link training
17082 protocol for that LMAC is executed under software control, whereby the contents the
17083 BGX()_SPU()_BR_PMD_LD_CUP and BGX()_SPU()_BR_PMD_LD_REP registers are
17084 updated by software. When this bit is clear and
17085 BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is set, the link training protocol is fully
17086 automated in hardware, whereby the contents BGX()_SPU()_BR_PMD_LD_CUP and
17087 BGX()_SPU()_BR_PMD_LD_REP registers are automatically updated by hardware. */
17088 uint64_t rx_buf_flip_synd : 8; /**< [ 27: 20](R/W) Flip SPU receive buffer FIFO ECC bits. Two bits per SerDes lane; used to inject single-bit
17089 and
17090 double-bit errors into the ECC field on writes to the associated SPU receive buffer lane
17091 FIFO, as
17092 follows:
17093 0x0 = Normal operation.
17094 0x1 = SBE on ECC bit 0.
17095 0x2 = SBE on ECC bit 1.
17096 0x3 = DBE on ECC bits 1:0. */
17097 uint64_t timestamp_norm_dis : 1; /**< [ 28: 28](R/W) 40GBASE-R RX timestamp normalization disable. This bit controls the generation of the
17098 receive SOP timestamp passed to the SMU sub-block for a 40GBASE-R LMAC/LPCS. When this bit
17099 is clear, SPU normalizes the receive SOP timestamp in order to compensate for lane-to-lane
17100 skew on a 40GBASE-R link, as described below. When this bit is set, timestamp
17101 normalization is disabled and SPU directly passes the captured SOP timestamp values to
17102 SMU.
17103
17104 In 40GBASE-R mode, a packet's SOP block can be transferred on any of the LMAC's lanes. In
17105 the presence of lane-to-lane skew, the SOP delay from transmit (by the link partner) to
17106 receive by SPU varies depending on which lane is used by the SOP block. This variation
17107 reduces the accuracy of the received SOP timestamp relative to when it was transmitted by
17108 the link partner.
17109
17110 SPU captures the timestamp of the alignment marker received on each SerDes lane during
17111 align/skew detection; the captured value can be read from the SerDes lane's
17112 BGX()_SPU_SDS()_SKEW_STATUS[SKEW_STATUS] field (BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP]
17113 sub-field). If
17114 alignment markers are transmitted at about the same time on all lanes by the link partner,
17115 then the difference between the BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] values for a pair
17116 of lanes represents the
17117 approximate skew between those lanes.
17118
17119 SPU uses the 40GBASE-R LMAC's programmed PCS lane 0 as a reference and computes the
17120 BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] delta of every other lane relative to PCS lane 0.
17121 When normalization is
17122 enabled, SPU adjusts the timestamp of a received SOP by subtracting the receiving lane's
17123 BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] delta from the captured timestamp value. The
17124 adjusted/normalized timestamp
17125 value is then passed to SMU along with the SOP.
17126
17127 Software can determine the actual maximum skew of a 40GBASE-R link by examining the
17128 BGX_SPU_SDS_SKEW_STATUS_S[AM_TIMESTAMP] values in the BGX()_SPU_SDS()_SKEW_STATUS
17129 registers, and decide if
17130 timestamp normalization should be enabled or disabled to improve PTP accuracy.
17131 Normalization improves accuracy for larger skew values but reduces the accuracy (due to
17132 timestamp measurement errors) for small skew values. */
17133 uint64_t an_nonce_match_dis : 1; /**< [ 29: 29](R/W) Autonegotiation nonce match disable. This bit should be clear for normal operation.
17134 Setting it disables Nonce Match check by forcing nonce_match variable to 0 in the
17135 autonegotiation arbitration state diagram, as defined in 802.3-2008 Figure 73-11. This bit
17136 can
17137 be set by software for test purposes, e.g. for running autonegotiation in loopback mode. */
17138 uint64_t br_ber_mon_dis : 1; /**< [ 30: 30](R/W) BASE-R bit error rate monitor disable. This bit should be clear for normal operation.
17139 Setting it disables the BASE-R BER monitor state machine defined in 802.3-2008 Figure
17140 49-13 for 10GBASE-R and 802.3ba-2010 Figure 82-13 for 40GBASE-R. */
17141 uint64_t reserved_31 : 1;
17142 uint64_t us_clk_period : 12; /**< [ 43: 32](R/W) Microsecond clock period. Specifies the number of SCLK cycles per microseconds, minus one.
17143 For example, if SCLK runs at 1.3 GHz, the number of SCLK cycles per microsecond is 1,300
17144 so the value of this field should be 1,299 (0x513). This is used by the BASE-R BER monitor
17145 timers. */
17146 uint64_t ms_clk_period : 12; /**< [ 55: 44](R/W) Millisecond clock period. Specifies the number of microsecond clock ticks per millisecond,
17147 minus one. The default value of 999 (0x3E7) should be used during normal operation; other
17148 values may be used for test/debug purposes. */
17149 uint64_t reserved_56_63 : 8;
17150 #endif /* Word 0 - End */
17151 } s;
17152 /* struct bdk_bgxx_spu_dbg_control_s cn; */
17153 };
17154 typedef union bdk_bgxx_spu_dbg_control bdk_bgxx_spu_dbg_control_t;
17155
17156 static inline uint64_t BDK_BGXX_SPU_DBG_CONTROL(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_DBG_CONTROL(unsigned long a)17157 static inline uint64_t BDK_BGXX_SPU_DBG_CONTROL(unsigned long a)
17158 {
17159 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
17160 return 0x87e0e0010300ll + 0x1000000ll * ((a) & 0x1);
17161 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
17162 return 0x87e0e0010300ll + 0x1000000ll * ((a) & 0x3);
17163 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
17164 return 0x87e0e0010300ll + 0x1000000ll * ((a) & 0x1);
17165 __bdk_csr_fatal("BGXX_SPU_DBG_CONTROL", 1, a, 0, 0, 0);
17166 }
17167
17168 #define typedef_BDK_BGXX_SPU_DBG_CONTROL(a) bdk_bgxx_spu_dbg_control_t
17169 #define bustype_BDK_BGXX_SPU_DBG_CONTROL(a) BDK_CSR_TYPE_RSL
17170 #define basename_BDK_BGXX_SPU_DBG_CONTROL(a) "BGXX_SPU_DBG_CONTROL"
17171 #define device_bar_BDK_BGXX_SPU_DBG_CONTROL(a) 0x0 /* PF_BAR0 */
17172 #define busnum_BDK_BGXX_SPU_DBG_CONTROL(a) (a)
17173 #define arguments_BDK_BGXX_SPU_DBG_CONTROL(a) (a),-1,-1,-1
17174
17175 /**
17176 * Register (RSL) bgx#_spu_mem_int
17177 *
17178 * BGX SPU Memory Interrupt Registers
17179 */
17180 union bdk_bgxx_spu_mem_int
17181 {
17182 uint64_t u;
17183 struct bdk_bgxx_spu_mem_int_s
17184 {
17185 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17186 uint64_t reserved_8_63 : 56;
17187 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1C/H) SPU receive buffer single-bit error for lanes 3-0. One bit per physical SerDes lane. Each
17188 bit is set when the associated receive buffer lane FIFO detects a single-bit ECC error. */
17189 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1C/H) SPU receive buffer double-bit error for lanes 3-0. One bit per physical SerDes lane. Each
17190 bit is set when the associated receive buffer lane FIFO detects a double-bit ECC error. */
17191 #else /* Word 0 - Little Endian */
17192 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1C/H) SPU receive buffer double-bit error for lanes 3-0. One bit per physical SerDes lane. Each
17193 bit is set when the associated receive buffer lane FIFO detects a double-bit ECC error. */
17194 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1C/H) SPU receive buffer single-bit error for lanes 3-0. One bit per physical SerDes lane. Each
17195 bit is set when the associated receive buffer lane FIFO detects a single-bit ECC error. */
17196 uint64_t reserved_8_63 : 56;
17197 #endif /* Word 0 - End */
17198 } s;
17199 /* struct bdk_bgxx_spu_mem_int_s cn; */
17200 };
17201 typedef union bdk_bgxx_spu_mem_int bdk_bgxx_spu_mem_int_t;
17202
17203 static inline uint64_t BDK_BGXX_SPU_MEM_INT(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_MEM_INT(unsigned long a)17204 static inline uint64_t BDK_BGXX_SPU_MEM_INT(unsigned long a)
17205 {
17206 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
17207 return 0x87e0e0010310ll + 0x1000000ll * ((a) & 0x1);
17208 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
17209 return 0x87e0e0010310ll + 0x1000000ll * ((a) & 0x3);
17210 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
17211 return 0x87e0e0010310ll + 0x1000000ll * ((a) & 0x1);
17212 __bdk_csr_fatal("BGXX_SPU_MEM_INT", 1, a, 0, 0, 0);
17213 }
17214
17215 #define typedef_BDK_BGXX_SPU_MEM_INT(a) bdk_bgxx_spu_mem_int_t
17216 #define bustype_BDK_BGXX_SPU_MEM_INT(a) BDK_CSR_TYPE_RSL
17217 #define basename_BDK_BGXX_SPU_MEM_INT(a) "BGXX_SPU_MEM_INT"
17218 #define device_bar_BDK_BGXX_SPU_MEM_INT(a) 0x0 /* PF_BAR0 */
17219 #define busnum_BDK_BGXX_SPU_MEM_INT(a) (a)
17220 #define arguments_BDK_BGXX_SPU_MEM_INT(a) (a),-1,-1,-1
17221
17222 /**
17223 * Register (RSL) bgx#_spu_mem_int_ena_w1c
17224 *
17225 * BGX SPU Memory Interrupt Enable Clear Registers
17226 * This register clears interrupt enable bits.
17227 */
17228 union bdk_bgxx_spu_mem_int_ena_w1c
17229 {
17230 uint64_t u;
17231 struct bdk_bgxx_spu_mem_int_ena_w1c_s
17232 {
17233 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17234 uint64_t reserved_8_63 : 56;
17235 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_SBE]. */
17236 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_DBE]. */
17237 #else /* Word 0 - Little Endian */
17238 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_DBE]. */
17239 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1C/H) Reads or clears enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_SBE]. */
17240 uint64_t reserved_8_63 : 56;
17241 #endif /* Word 0 - End */
17242 } s;
17243 /* struct bdk_bgxx_spu_mem_int_ena_w1c_s cn81xx; */
17244 /* struct bdk_bgxx_spu_mem_int_ena_w1c_s cn88xx; */
17245 struct bdk_bgxx_spu_mem_int_ena_w1c_cn83xx
17246 {
17247 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17248 uint64_t reserved_8_63 : 56;
17249 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_SBE]. */
17250 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_DBE]. */
17251 #else /* Word 0 - Little Endian */
17252 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_DBE]. */
17253 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1C/H) Reads or clears enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_SBE]. */
17254 uint64_t reserved_8_63 : 56;
17255 #endif /* Word 0 - End */
17256 } cn83xx;
17257 };
17258 typedef union bdk_bgxx_spu_mem_int_ena_w1c bdk_bgxx_spu_mem_int_ena_w1c_t;
17259
17260 static inline uint64_t BDK_BGXX_SPU_MEM_INT_ENA_W1C(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_MEM_INT_ENA_W1C(unsigned long a)17261 static inline uint64_t BDK_BGXX_SPU_MEM_INT_ENA_W1C(unsigned long a)
17262 {
17263 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
17264 return 0x87e0e0010320ll + 0x1000000ll * ((a) & 0x1);
17265 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
17266 return 0x87e0e0010320ll + 0x1000000ll * ((a) & 0x3);
17267 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
17268 return 0x87e0e0010320ll + 0x1000000ll * ((a) & 0x1);
17269 __bdk_csr_fatal("BGXX_SPU_MEM_INT_ENA_W1C", 1, a, 0, 0, 0);
17270 }
17271
17272 #define typedef_BDK_BGXX_SPU_MEM_INT_ENA_W1C(a) bdk_bgxx_spu_mem_int_ena_w1c_t
17273 #define bustype_BDK_BGXX_SPU_MEM_INT_ENA_W1C(a) BDK_CSR_TYPE_RSL
17274 #define basename_BDK_BGXX_SPU_MEM_INT_ENA_W1C(a) "BGXX_SPU_MEM_INT_ENA_W1C"
17275 #define device_bar_BDK_BGXX_SPU_MEM_INT_ENA_W1C(a) 0x0 /* PF_BAR0 */
17276 #define busnum_BDK_BGXX_SPU_MEM_INT_ENA_W1C(a) (a)
17277 #define arguments_BDK_BGXX_SPU_MEM_INT_ENA_W1C(a) (a),-1,-1,-1
17278
17279 /**
17280 * Register (RSL) bgx#_spu_mem_int_ena_w1s
17281 *
17282 * BGX SPU Memory Interrupt Enable Set Registers
17283 * This register sets interrupt enable bits.
17284 */
17285 union bdk_bgxx_spu_mem_int_ena_w1s
17286 {
17287 uint64_t u;
17288 struct bdk_bgxx_spu_mem_int_ena_w1s_s
17289 {
17290 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17291 uint64_t reserved_8_63 : 56;
17292 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_SBE]. */
17293 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_DBE]. */
17294 #else /* Word 0 - Little Endian */
17295 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_DBE]. */
17296 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets enable for BGX(0..1)_SPU_MEM_INT[RX_BUF_SBE]. */
17297 uint64_t reserved_8_63 : 56;
17298 #endif /* Word 0 - End */
17299 } s;
17300 /* struct bdk_bgxx_spu_mem_int_ena_w1s_s cn81xx; */
17301 /* struct bdk_bgxx_spu_mem_int_ena_w1s_s cn88xx; */
17302 struct bdk_bgxx_spu_mem_int_ena_w1s_cn83xx
17303 {
17304 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17305 uint64_t reserved_8_63 : 56;
17306 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_SBE]. */
17307 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_DBE]. */
17308 #else /* Word 0 - Little Endian */
17309 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_DBE]. */
17310 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets enable for BGX(0..3)_SPU_MEM_INT[RX_BUF_SBE]. */
17311 uint64_t reserved_8_63 : 56;
17312 #endif /* Word 0 - End */
17313 } cn83xx;
17314 };
17315 typedef union bdk_bgxx_spu_mem_int_ena_w1s bdk_bgxx_spu_mem_int_ena_w1s_t;
17316
17317 static inline uint64_t BDK_BGXX_SPU_MEM_INT_ENA_W1S(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_MEM_INT_ENA_W1S(unsigned long a)17318 static inline uint64_t BDK_BGXX_SPU_MEM_INT_ENA_W1S(unsigned long a)
17319 {
17320 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
17321 return 0x87e0e0010328ll + 0x1000000ll * ((a) & 0x1);
17322 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
17323 return 0x87e0e0010328ll + 0x1000000ll * ((a) & 0x3);
17324 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
17325 return 0x87e0e0010328ll + 0x1000000ll * ((a) & 0x1);
17326 __bdk_csr_fatal("BGXX_SPU_MEM_INT_ENA_W1S", 1, a, 0, 0, 0);
17327 }
17328
17329 #define typedef_BDK_BGXX_SPU_MEM_INT_ENA_W1S(a) bdk_bgxx_spu_mem_int_ena_w1s_t
17330 #define bustype_BDK_BGXX_SPU_MEM_INT_ENA_W1S(a) BDK_CSR_TYPE_RSL
17331 #define basename_BDK_BGXX_SPU_MEM_INT_ENA_W1S(a) "BGXX_SPU_MEM_INT_ENA_W1S"
17332 #define device_bar_BDK_BGXX_SPU_MEM_INT_ENA_W1S(a) 0x0 /* PF_BAR0 */
17333 #define busnum_BDK_BGXX_SPU_MEM_INT_ENA_W1S(a) (a)
17334 #define arguments_BDK_BGXX_SPU_MEM_INT_ENA_W1S(a) (a),-1,-1,-1
17335
17336 /**
17337 * Register (RSL) bgx#_spu_mem_int_w1s
17338 *
17339 * BGX SPU Memory Interrupt Set Registers
17340 * This register sets interrupt bits.
17341 */
17342 union bdk_bgxx_spu_mem_int_w1s
17343 {
17344 uint64_t u;
17345 struct bdk_bgxx_spu_mem_int_w1s_s
17346 {
17347 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17348 uint64_t reserved_8_63 : 56;
17349 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets BGX(0..1)_SPU_MEM_INT[RX_BUF_SBE]. */
17350 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets BGX(0..1)_SPU_MEM_INT[RX_BUF_DBE]. */
17351 #else /* Word 0 - Little Endian */
17352 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets BGX(0..1)_SPU_MEM_INT[RX_BUF_DBE]. */
17353 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets BGX(0..1)_SPU_MEM_INT[RX_BUF_SBE]. */
17354 uint64_t reserved_8_63 : 56;
17355 #endif /* Word 0 - End */
17356 } s;
17357 /* struct bdk_bgxx_spu_mem_int_w1s_s cn81xx; */
17358 /* struct bdk_bgxx_spu_mem_int_w1s_s cn88xx; */
17359 struct bdk_bgxx_spu_mem_int_w1s_cn83xx
17360 {
17361 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17362 uint64_t reserved_8_63 : 56;
17363 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets BGX(0..3)_SPU_MEM_INT[RX_BUF_SBE]. */
17364 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets BGX(0..3)_SPU_MEM_INT[RX_BUF_DBE]. */
17365 #else /* Word 0 - Little Endian */
17366 uint64_t rx_buf_dbe : 4; /**< [ 3: 0](R/W1S/H) Reads or sets BGX(0..3)_SPU_MEM_INT[RX_BUF_DBE]. */
17367 uint64_t rx_buf_sbe : 4; /**< [ 7: 4](R/W1S/H) Reads or sets BGX(0..3)_SPU_MEM_INT[RX_BUF_SBE]. */
17368 uint64_t reserved_8_63 : 56;
17369 #endif /* Word 0 - End */
17370 } cn83xx;
17371 };
17372 typedef union bdk_bgxx_spu_mem_int_w1s bdk_bgxx_spu_mem_int_w1s_t;
17373
17374 static inline uint64_t BDK_BGXX_SPU_MEM_INT_W1S(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_MEM_INT_W1S(unsigned long a)17375 static inline uint64_t BDK_BGXX_SPU_MEM_INT_W1S(unsigned long a)
17376 {
17377 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
17378 return 0x87e0e0010318ll + 0x1000000ll * ((a) & 0x1);
17379 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
17380 return 0x87e0e0010318ll + 0x1000000ll * ((a) & 0x3);
17381 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
17382 return 0x87e0e0010318ll + 0x1000000ll * ((a) & 0x1);
17383 __bdk_csr_fatal("BGXX_SPU_MEM_INT_W1S", 1, a, 0, 0, 0);
17384 }
17385
17386 #define typedef_BDK_BGXX_SPU_MEM_INT_W1S(a) bdk_bgxx_spu_mem_int_w1s_t
17387 #define bustype_BDK_BGXX_SPU_MEM_INT_W1S(a) BDK_CSR_TYPE_RSL
17388 #define basename_BDK_BGXX_SPU_MEM_INT_W1S(a) "BGXX_SPU_MEM_INT_W1S"
17389 #define device_bar_BDK_BGXX_SPU_MEM_INT_W1S(a) 0x0 /* PF_BAR0 */
17390 #define busnum_BDK_BGXX_SPU_MEM_INT_W1S(a) (a)
17391 #define arguments_BDK_BGXX_SPU_MEM_INT_W1S(a) (a),-1,-1,-1
17392
17393 /**
17394 * Register (RSL) bgx#_spu_mem_status
17395 *
17396 * BGX SPU Memory Status Registers
17397 * This register provides memory ECC status from the SPU receive buffer lane FIFOs.
17398 */
17399 union bdk_bgxx_spu_mem_status
17400 {
17401 uint64_t u;
17402 struct bdk_bgxx_spu_mem_status_s
17403 {
17404 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17405 uint64_t reserved_32_63 : 32;
17406 uint64_t rx_buf_ecc_synd : 32; /**< [ 31: 0](RO/H) SPU receive buffer ECC syndromes for lanes 3-0. 8-bit syndrome sub-field per SerDes lane.
17407 Each
17408 8-bit sub-field contains the syndrome of the latest single-bit or double-bit ECC error
17409 detected by the associated receive buffer lane FIFO, i.e. it is loaded when the
17410 corresponding
17411 BGX()_SPU_MEM_INT[RX_BUF_SBE] or BGX()_SPU_MEM_INT[RX_BUF_DBE] bit is set. */
17412 #else /* Word 0 - Little Endian */
17413 uint64_t rx_buf_ecc_synd : 32; /**< [ 31: 0](RO/H) SPU receive buffer ECC syndromes for lanes 3-0. 8-bit syndrome sub-field per SerDes lane.
17414 Each
17415 8-bit sub-field contains the syndrome of the latest single-bit or double-bit ECC error
17416 detected by the associated receive buffer lane FIFO, i.e. it is loaded when the
17417 corresponding
17418 BGX()_SPU_MEM_INT[RX_BUF_SBE] or BGX()_SPU_MEM_INT[RX_BUF_DBE] bit is set. */
17419 uint64_t reserved_32_63 : 32;
17420 #endif /* Word 0 - End */
17421 } s;
17422 /* struct bdk_bgxx_spu_mem_status_s cn; */
17423 };
17424 typedef union bdk_bgxx_spu_mem_status bdk_bgxx_spu_mem_status_t;
17425
17426 static inline uint64_t BDK_BGXX_SPU_MEM_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_MEM_STATUS(unsigned long a)17427 static inline uint64_t BDK_BGXX_SPU_MEM_STATUS(unsigned long a)
17428 {
17429 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=1))
17430 return 0x87e0e0010308ll + 0x1000000ll * ((a) & 0x1);
17431 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
17432 return 0x87e0e0010308ll + 0x1000000ll * ((a) & 0x3);
17433 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=1))
17434 return 0x87e0e0010308ll + 0x1000000ll * ((a) & 0x1);
17435 __bdk_csr_fatal("BGXX_SPU_MEM_STATUS", 1, a, 0, 0, 0);
17436 }
17437
17438 #define typedef_BDK_BGXX_SPU_MEM_STATUS(a) bdk_bgxx_spu_mem_status_t
17439 #define bustype_BDK_BGXX_SPU_MEM_STATUS(a) BDK_CSR_TYPE_RSL
17440 #define basename_BDK_BGXX_SPU_MEM_STATUS(a) "BGXX_SPU_MEM_STATUS"
17441 #define device_bar_BDK_BGXX_SPU_MEM_STATUS(a) 0x0 /* PF_BAR0 */
17442 #define busnum_BDK_BGXX_SPU_MEM_STATUS(a) (a)
17443 #define arguments_BDK_BGXX_SPU_MEM_STATUS(a) (a),-1,-1,-1
17444
17445 /**
17446 * Register (RSL) bgx#_spu_sds#_skew_status
17447 *
17448 * BGX SPU SerDes Lane Skew Status Registers
17449 * This register provides SerDes lane skew status. One register per physical SerDes lane.
17450 */
17451 union bdk_bgxx_spu_sdsx_skew_status
17452 {
17453 uint64_t u;
17454 struct bdk_bgxx_spu_sdsx_skew_status_s
17455 {
17456 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17457 uint64_t reserved_32_63 : 32;
17458 uint64_t skew_status : 32; /**< [ 31: 0](RO/H) Format defined by BGX_SPU_SDS_SKEW_STATUS_S. */
17459 #else /* Word 0 - Little Endian */
17460 uint64_t skew_status : 32; /**< [ 31: 0](RO/H) Format defined by BGX_SPU_SDS_SKEW_STATUS_S. */
17461 uint64_t reserved_32_63 : 32;
17462 #endif /* Word 0 - End */
17463 } s;
17464 /* struct bdk_bgxx_spu_sdsx_skew_status_s cn; */
17465 };
17466 typedef union bdk_bgxx_spu_sdsx_skew_status bdk_bgxx_spu_sdsx_skew_status_t;
17467
17468 static inline uint64_t BDK_BGXX_SPU_SDSX_SKEW_STATUS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_SDSX_SKEW_STATUS(unsigned long a,unsigned long b)17469 static inline uint64_t BDK_BGXX_SPU_SDSX_SKEW_STATUS(unsigned long a, unsigned long b)
17470 {
17471 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
17472 return 0x87e0e0010340ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x3);
17473 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
17474 return 0x87e0e0010340ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x3);
17475 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
17476 return 0x87e0e0010340ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x3);
17477 __bdk_csr_fatal("BGXX_SPU_SDSX_SKEW_STATUS", 2, a, b, 0, 0);
17478 }
17479
17480 #define typedef_BDK_BGXX_SPU_SDSX_SKEW_STATUS(a,b) bdk_bgxx_spu_sdsx_skew_status_t
17481 #define bustype_BDK_BGXX_SPU_SDSX_SKEW_STATUS(a,b) BDK_CSR_TYPE_RSL
17482 #define basename_BDK_BGXX_SPU_SDSX_SKEW_STATUS(a,b) "BGXX_SPU_SDSX_SKEW_STATUS"
17483 #define device_bar_BDK_BGXX_SPU_SDSX_SKEW_STATUS(a,b) 0x0 /* PF_BAR0 */
17484 #define busnum_BDK_BGXX_SPU_SDSX_SKEW_STATUS(a,b) (a)
17485 #define arguments_BDK_BGXX_SPU_SDSX_SKEW_STATUS(a,b) (a),(b),-1,-1
17486
17487 /**
17488 * Register (RSL) bgx#_spu_sds#_states
17489 *
17490 * BGX SPU SerDes States Registers
17491 * This register provides SerDes lane states. One register per physical SerDes lane.
17492 */
17493 union bdk_bgxx_spu_sdsx_states
17494 {
17495 uint64_t u;
17496 struct bdk_bgxx_spu_sdsx_states_s
17497 {
17498 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
17499 uint64_t reserved_52_63 : 12;
17500 uint64_t am_lock_invld_cnt : 2; /**< [ 51: 50](RO/H) 40GBASE-R alignment marker lock state machine invalid AM counter. */
17501 uint64_t am_lock_sm : 2; /**< [ 49: 48](RO/H) 40GBASE-R alignment marker lock state machine state. */
17502 uint64_t reserved_45_47 : 3;
17503 uint64_t train_sm : 3; /**< [ 44: 42](RO/H) Link training state machine state. */
17504 uint64_t train_code_viol : 1; /**< [ 41: 41](RO/H) Link training code violation in received control channel. */
17505 uint64_t train_frame_lock : 1; /**< [ 40: 40](RO/H) Link training frame lock status. */
17506 uint64_t train_lock_found_1st_marker : 1;/**< [ 39: 39](RO/H) Link training lock state machine found first marker flag. */
17507 uint64_t train_lock_bad_markers : 3; /**< [ 38: 36](RO/H) Link training lock state machine bad markers counter. */
17508 uint64_t reserved_35 : 1;
17509 uint64_t an_arb_sm : 3; /**< [ 34: 32](RO/H) Autonegotiation arbitration state machine state. */
17510 uint64_t an_rx_sm : 2; /**< [ 31: 30](RO/H) Autonegotiation receive state machine state. */
17511 uint64_t reserved_29 : 1;
17512 uint64_t fec_block_sync : 1; /**< [ 28: 28](RO/H) FEC block sync status. */
17513 uint64_t fec_sync_cnt : 4; /**< [ 27: 24](RO/H) FEC block sync state machine good/bad parity block counter. */
17514 uint64_t reserved_23 : 1;
17515 uint64_t br_sh_invld_cnt : 7; /**< [ 22: 16](RO/H) BASE-R lock state machine invalid sync header counter. */
17516 uint64_t br_block_lock : 1; /**< [ 15: 15](RO/H) BASE-R block lock status. */
17517 uint64_t br_sh_cnt : 11; /**< [ 14: 4](RO/H) BASE-R lock state machine sync header counter */
17518 uint64_t bx_sync_sm : 4; /**< [ 3: 0](RO/H) BASE-X PCS synchronization state machine state */
17519 #else /* Word 0 - Little Endian */
17520 uint64_t bx_sync_sm : 4; /**< [ 3: 0](RO/H) BASE-X PCS synchronization state machine state */
17521 uint64_t br_sh_cnt : 11; /**< [ 14: 4](RO/H) BASE-R lock state machine sync header counter */
17522 uint64_t br_block_lock : 1; /**< [ 15: 15](RO/H) BASE-R block lock status. */
17523 uint64_t br_sh_invld_cnt : 7; /**< [ 22: 16](RO/H) BASE-R lock state machine invalid sync header counter. */
17524 uint64_t reserved_23 : 1;
17525 uint64_t fec_sync_cnt : 4; /**< [ 27: 24](RO/H) FEC block sync state machine good/bad parity block counter. */
17526 uint64_t fec_block_sync : 1; /**< [ 28: 28](RO/H) FEC block sync status. */
17527 uint64_t reserved_29 : 1;
17528 uint64_t an_rx_sm : 2; /**< [ 31: 30](RO/H) Autonegotiation receive state machine state. */
17529 uint64_t an_arb_sm : 3; /**< [ 34: 32](RO/H) Autonegotiation arbitration state machine state. */
17530 uint64_t reserved_35 : 1;
17531 uint64_t train_lock_bad_markers : 3; /**< [ 38: 36](RO/H) Link training lock state machine bad markers counter. */
17532 uint64_t train_lock_found_1st_marker : 1;/**< [ 39: 39](RO/H) Link training lock state machine found first marker flag. */
17533 uint64_t train_frame_lock : 1; /**< [ 40: 40](RO/H) Link training frame lock status. */
17534 uint64_t train_code_viol : 1; /**< [ 41: 41](RO/H) Link training code violation in received control channel. */
17535 uint64_t train_sm : 3; /**< [ 44: 42](RO/H) Link training state machine state. */
17536 uint64_t reserved_45_47 : 3;
17537 uint64_t am_lock_sm : 2; /**< [ 49: 48](RO/H) 40GBASE-R alignment marker lock state machine state. */
17538 uint64_t am_lock_invld_cnt : 2; /**< [ 51: 50](RO/H) 40GBASE-R alignment marker lock state machine invalid AM counter. */
17539 uint64_t reserved_52_63 : 12;
17540 #endif /* Word 0 - End */
17541 } s;
17542 /* struct bdk_bgxx_spu_sdsx_states_s cn; */
17543 };
17544 typedef union bdk_bgxx_spu_sdsx_states bdk_bgxx_spu_sdsx_states_t;
17545
17546 static inline uint64_t BDK_BGXX_SPU_SDSX_STATES(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_BGXX_SPU_SDSX_STATES(unsigned long a,unsigned long b)17547 static inline uint64_t BDK_BGXX_SPU_SDSX_STATES(unsigned long a, unsigned long b)
17548 {
17549 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=1) && (b<=3)))
17550 return 0x87e0e0010360ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x3);
17551 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
17552 return 0x87e0e0010360ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x3);
17553 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=1) && (b<=3)))
17554 return 0x87e0e0010360ll + 0x1000000ll * ((a) & 0x1) + 8ll * ((b) & 0x3);
17555 __bdk_csr_fatal("BGXX_SPU_SDSX_STATES", 2, a, b, 0, 0);
17556 }
17557
17558 #define typedef_BDK_BGXX_SPU_SDSX_STATES(a,b) bdk_bgxx_spu_sdsx_states_t
17559 #define bustype_BDK_BGXX_SPU_SDSX_STATES(a,b) BDK_CSR_TYPE_RSL
17560 #define basename_BDK_BGXX_SPU_SDSX_STATES(a,b) "BGXX_SPU_SDSX_STATES"
17561 #define device_bar_BDK_BGXX_SPU_SDSX_STATES(a,b) 0x0 /* PF_BAR0 */
17562 #define busnum_BDK_BGXX_SPU_SDSX_STATES(a,b) (a)
17563 #define arguments_BDK_BGXX_SPU_SDSX_STATES(a,b) (a),(b),-1,-1
17564
17565 #endif /* __BDK_CSRS_BGX_H__ */
17566