1/***********************license start***************
2 * Copyright (c) 2003-2012  Cavium Inc. (support@cavium.com). All rights
3 * reserved.
4 *
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 *   * Redistributions of source code must retain the above copyright
11 *     notice, this list of conditions and the following disclaimer.
12 *
13 *   * Redistributions in binary form must reproduce the above
14 *     copyright notice, this list of conditions and the following
15 *     disclaimer in the documentation and/or other materials provided
16 *     with the distribution.
17
18 *   * Neither the name of Cavium Inc. nor the names of
19 *     its contributors may be used to endorse or promote products
20 *     derived from this software without specific prior written
21 *     permission.
22
23 * This Software, including technical data, may be subject to U.S. export  control
24 * laws, including the U.S. Export Administration Act and its  associated
25 * regulations, and may be subject to export or import  regulations in other
26 * countries.
27
28 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29 * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
30 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32 * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
37 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38 ***********************license end**************************************/
39
40
41/**
42 * cvmx-pip-defs.h
43 *
44 * Configuration and status register (CSR) type definitions for
45 * Octeon pip.
46 *
47 * This file is auto generated. Do not edit.
48 *
49 * <hr>$Revision$<hr>
50 *
51 */
52#ifndef __CVMX_PIP_DEFS_H__
53#define __CVMX_PIP_DEFS_H__
54
55#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
56static inline uint64_t CVMX_PIP_ALT_SKIP_CFGX(unsigned long offset)
57{
58	if (!(
59	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
60	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
61	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
62	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
63		cvmx_warn("CVMX_PIP_ALT_SKIP_CFGX(%lu) is invalid on this chip\n", offset);
64	return CVMX_ADD_IO_SEG(0x00011800A0002A00ull) + ((offset) & 3) * 8;
65}
66#else
67#define CVMX_PIP_ALT_SKIP_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002A00ull) + ((offset) & 3) * 8)
68#endif
69#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
70#define CVMX_PIP_BCK_PRS CVMX_PIP_BCK_PRS_FUNC()
71static inline uint64_t CVMX_PIP_BCK_PRS_FUNC(void)
72{
73	if (!(OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN58XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
74		cvmx_warn("CVMX_PIP_BCK_PRS not supported on this chip\n");
75	return CVMX_ADD_IO_SEG(0x00011800A0000038ull);
76}
77#else
78#define CVMX_PIP_BCK_PRS (CVMX_ADD_IO_SEG(0x00011800A0000038ull))
79#endif
80#define CVMX_PIP_BIST_STATUS (CVMX_ADD_IO_SEG(0x00011800A0000000ull))
81#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
82static inline uint64_t CVMX_PIP_BSEL_EXT_CFGX(unsigned long offset)
83{
84	if (!(
85	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
86	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
87	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
88		cvmx_warn("CVMX_PIP_BSEL_EXT_CFGX(%lu) is invalid on this chip\n", offset);
89	return CVMX_ADD_IO_SEG(0x00011800A0002800ull) + ((offset) & 3) * 16;
90}
91#else
92#define CVMX_PIP_BSEL_EXT_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002800ull) + ((offset) & 3) * 16)
93#endif
94#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
95static inline uint64_t CVMX_PIP_BSEL_EXT_POSX(unsigned long offset)
96{
97	if (!(
98	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
99	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
100	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
101		cvmx_warn("CVMX_PIP_BSEL_EXT_POSX(%lu) is invalid on this chip\n", offset);
102	return CVMX_ADD_IO_SEG(0x00011800A0002808ull) + ((offset) & 3) * 16;
103}
104#else
105#define CVMX_PIP_BSEL_EXT_POSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002808ull) + ((offset) & 3) * 16)
106#endif
107#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
108static inline uint64_t CVMX_PIP_BSEL_TBL_ENTX(unsigned long offset)
109{
110	if (!(
111	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 511))) ||
112	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 511))) ||
113	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 511)))))
114		cvmx_warn("CVMX_PIP_BSEL_TBL_ENTX(%lu) is invalid on this chip\n", offset);
115	return CVMX_ADD_IO_SEG(0x00011800A0003000ull) + ((offset) & 511) * 8;
116}
117#else
118#define CVMX_PIP_BSEL_TBL_ENTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0003000ull) + ((offset) & 511) * 8)
119#endif
120#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
121#define CVMX_PIP_CLKEN CVMX_PIP_CLKEN_FUNC()
122static inline uint64_t CVMX_PIP_CLKEN_FUNC(void)
123{
124	if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
125		cvmx_warn("CVMX_PIP_CLKEN not supported on this chip\n");
126	return CVMX_ADD_IO_SEG(0x00011800A0000040ull);
127}
128#else
129#define CVMX_PIP_CLKEN (CVMX_ADD_IO_SEG(0x00011800A0000040ull))
130#endif
131#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
132static inline uint64_t CVMX_PIP_CRC_CTLX(unsigned long offset)
133{
134	if (!(
135	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
136	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
137		cvmx_warn("CVMX_PIP_CRC_CTLX(%lu) is invalid on this chip\n", offset);
138	return CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8;
139}
140#else
141#define CVMX_PIP_CRC_CTLX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8)
142#endif
143#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
144static inline uint64_t CVMX_PIP_CRC_IVX(unsigned long offset)
145{
146	if (!(
147	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
148	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
149		cvmx_warn("CVMX_PIP_CRC_IVX(%lu) is invalid on this chip\n", offset);
150	return CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8;
151}
152#else
153#define CVMX_PIP_CRC_IVX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8)
154#endif
155#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
156static inline uint64_t CVMX_PIP_DEC_IPSECX(unsigned long offset)
157{
158	if (!(
159	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
160	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
161	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
162	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 3))) ||
163	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3))) ||
164	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3))) ||
165	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
166	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
167	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3))) ||
168	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
169	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
170	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
171		cvmx_warn("CVMX_PIP_DEC_IPSECX(%lu) is invalid on this chip\n", offset);
172	return CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8;
173}
174#else
175#define CVMX_PIP_DEC_IPSECX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8)
176#endif
177#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
178#define CVMX_PIP_DSA_SRC_GRP CVMX_PIP_DSA_SRC_GRP_FUNC()
179static inline uint64_t CVMX_PIP_DSA_SRC_GRP_FUNC(void)
180{
181	if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
182		cvmx_warn("CVMX_PIP_DSA_SRC_GRP not supported on this chip\n");
183	return CVMX_ADD_IO_SEG(0x00011800A0000190ull);
184}
185#else
186#define CVMX_PIP_DSA_SRC_GRP (CVMX_ADD_IO_SEG(0x00011800A0000190ull))
187#endif
188#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
189#define CVMX_PIP_DSA_VID_GRP CVMX_PIP_DSA_VID_GRP_FUNC()
190static inline uint64_t CVMX_PIP_DSA_VID_GRP_FUNC(void)
191{
192	if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
193		cvmx_warn("CVMX_PIP_DSA_VID_GRP not supported on this chip\n");
194	return CVMX_ADD_IO_SEG(0x00011800A0000198ull);
195}
196#else
197#define CVMX_PIP_DSA_VID_GRP (CVMX_ADD_IO_SEG(0x00011800A0000198ull))
198#endif
199#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
200static inline uint64_t CVMX_PIP_FRM_LEN_CHKX(unsigned long offset)
201{
202	if (!(
203	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) ||
204	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
205	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 1))) ||
206	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
207	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
208	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
209	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
210	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
211		cvmx_warn("CVMX_PIP_FRM_LEN_CHKX(%lu) is invalid on this chip\n", offset);
212	return CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8;
213}
214#else
215#define CVMX_PIP_FRM_LEN_CHKX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8)
216#endif
217#define CVMX_PIP_GBL_CFG (CVMX_ADD_IO_SEG(0x00011800A0000028ull))
218#define CVMX_PIP_GBL_CTL (CVMX_ADD_IO_SEG(0x00011800A0000020ull))
219#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
220#define CVMX_PIP_HG_PRI_QOS CVMX_PIP_HG_PRI_QOS_FUNC()
221static inline uint64_t CVMX_PIP_HG_PRI_QOS_FUNC(void)
222{
223	if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
224		cvmx_warn("CVMX_PIP_HG_PRI_QOS not supported on this chip\n");
225	return CVMX_ADD_IO_SEG(0x00011800A00001A0ull);
226}
227#else
228#define CVMX_PIP_HG_PRI_QOS (CVMX_ADD_IO_SEG(0x00011800A00001A0ull))
229#endif
230#define CVMX_PIP_INT_EN (CVMX_ADD_IO_SEG(0x00011800A0000010ull))
231#define CVMX_PIP_INT_REG (CVMX_ADD_IO_SEG(0x00011800A0000008ull))
232#define CVMX_PIP_IP_OFFSET (CVMX_ADD_IO_SEG(0x00011800A0000060ull))
233#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
234static inline uint64_t CVMX_PIP_PRI_TBLX(unsigned long offset)
235{
236	if (!(
237	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 255)))))
238		cvmx_warn("CVMX_PIP_PRI_TBLX(%lu) is invalid on this chip\n", offset);
239	return CVMX_ADD_IO_SEG(0x00011800A0004000ull) + ((offset) & 255) * 8;
240}
241#else
242#define CVMX_PIP_PRI_TBLX(offset) (CVMX_ADD_IO_SEG(0x00011800A0004000ull) + ((offset) & 255) * 8)
243#endif
244#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
245static inline uint64_t CVMX_PIP_PRT_CFGBX(unsigned long offset)
246{
247	if (!(
248	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
249	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)) || ((offset >= 44) && (offset <= 47)))) ||
250	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
251	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
252		cvmx_warn("CVMX_PIP_PRT_CFGBX(%lu) is invalid on this chip\n", offset);
253	return CVMX_ADD_IO_SEG(0x00011800A0008000ull) + ((offset) & 63) * 8;
254}
255#else
256#define CVMX_PIP_PRT_CFGBX(offset) (CVMX_ADD_IO_SEG(0x00011800A0008000ull) + ((offset) & 63) * 8)
257#endif
258#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
259static inline uint64_t CVMX_PIP_PRT_CFGX(unsigned long offset)
260{
261	if (!(
262	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
263	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
264	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
265	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
266	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
267	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
268	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
269	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
270	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
271	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
272	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
273	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
274		cvmx_warn("CVMX_PIP_PRT_CFGX(%lu) is invalid on this chip\n", offset);
275	return CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8;
276}
277#else
278#define CVMX_PIP_PRT_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8)
279#endif
280#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
281static inline uint64_t CVMX_PIP_PRT_TAGX(unsigned long offset)
282{
283	if (!(
284	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
285	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
286	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
287	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
288	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
289	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
290	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
291	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
292	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
293	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
294	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
295	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
296		cvmx_warn("CVMX_PIP_PRT_TAGX(%lu) is invalid on this chip\n", offset);
297	return CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8;
298}
299#else
300#define CVMX_PIP_PRT_TAGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8)
301#endif
302#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
303static inline uint64_t CVMX_PIP_QOS_DIFFX(unsigned long offset)
304{
305	if (!(
306	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
307	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
308	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
309	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
310	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
311	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
312	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
313	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 63))) ||
314	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63))) ||
315	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 63))) ||
316	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 63)))))
317		cvmx_warn("CVMX_PIP_QOS_DIFFX(%lu) is invalid on this chip\n", offset);
318	return CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8;
319}
320#else
321#define CVMX_PIP_QOS_DIFFX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8)
322#endif
323#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
324static inline uint64_t CVMX_PIP_QOS_VLANX(unsigned long offset)
325{
326	if (!(
327	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
328	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
329	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
330	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
331	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
332	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
333	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
334	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
335	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
336	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
337	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
338		cvmx_warn("CVMX_PIP_QOS_VLANX(%lu) is invalid on this chip\n", offset);
339	return CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8;
340}
341#else
342#define CVMX_PIP_QOS_VLANX(offset) (CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8)
343#endif
344#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
345static inline uint64_t CVMX_PIP_QOS_WATCHX(unsigned long offset)
346{
347	if (!(
348	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
349	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
350	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
351	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
352	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
353	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
354	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
355	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
356	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
357	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
358	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
359	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
360		cvmx_warn("CVMX_PIP_QOS_WATCHX(%lu) is invalid on this chip\n", offset);
361	return CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8;
362}
363#else
364#define CVMX_PIP_QOS_WATCHX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8)
365#endif
366#define CVMX_PIP_RAW_WORD (CVMX_ADD_IO_SEG(0x00011800A00000B0ull))
367#define CVMX_PIP_SFT_RST (CVMX_ADD_IO_SEG(0x00011800A0000030ull))
368#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
369static inline uint64_t CVMX_PIP_STAT0_PRTX(unsigned long offset)
370{
371	if (!(
372	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
373	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
374	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
375	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
376	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
377	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
378	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
379	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
380	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
381	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
382	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
383		cvmx_warn("CVMX_PIP_STAT0_PRTX(%lu) is invalid on this chip\n", offset);
384	return CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80;
385}
386#else
387#define CVMX_PIP_STAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80)
388#endif
389#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
390static inline uint64_t CVMX_PIP_STAT0_X(unsigned long offset)
391{
392	if (!(
393	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
394		cvmx_warn("CVMX_PIP_STAT0_X(%lu) is invalid on this chip\n", offset);
395	return CVMX_ADD_IO_SEG(0x00011800A0040000ull) + ((offset) & 63) * 128;
396}
397#else
398#define CVMX_PIP_STAT0_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040000ull) + ((offset) & 63) * 128)
399#endif
400#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
401static inline uint64_t CVMX_PIP_STAT10_PRTX(unsigned long offset)
402{
403	if (!(
404	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
405	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
406	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
407	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
408	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
409	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
410		cvmx_warn("CVMX_PIP_STAT10_PRTX(%lu) is invalid on this chip\n", offset);
411	return CVMX_ADD_IO_SEG(0x00011800A0001480ull) + ((offset) & 63) * 16;
412}
413#else
414#define CVMX_PIP_STAT10_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001480ull) + ((offset) & 63) * 16)
415#endif
416#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
417static inline uint64_t CVMX_PIP_STAT10_X(unsigned long offset)
418{
419	if (!(
420	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
421		cvmx_warn("CVMX_PIP_STAT10_X(%lu) is invalid on this chip\n", offset);
422	return CVMX_ADD_IO_SEG(0x00011800A0040050ull) + ((offset) & 63) * 128;
423}
424#else
425#define CVMX_PIP_STAT10_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040050ull) + ((offset) & 63) * 128)
426#endif
427#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
428static inline uint64_t CVMX_PIP_STAT11_PRTX(unsigned long offset)
429{
430	if (!(
431	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
432	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
433	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
434	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
435	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
436	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
437		cvmx_warn("CVMX_PIP_STAT11_PRTX(%lu) is invalid on this chip\n", offset);
438	return CVMX_ADD_IO_SEG(0x00011800A0001488ull) + ((offset) & 63) * 16;
439}
440#else
441#define CVMX_PIP_STAT11_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001488ull) + ((offset) & 63) * 16)
442#endif
443#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
444static inline uint64_t CVMX_PIP_STAT11_X(unsigned long offset)
445{
446	if (!(
447	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
448		cvmx_warn("CVMX_PIP_STAT11_X(%lu) is invalid on this chip\n", offset);
449	return CVMX_ADD_IO_SEG(0x00011800A0040058ull) + ((offset) & 63) * 128;
450}
451#else
452#define CVMX_PIP_STAT11_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040058ull) + ((offset) & 63) * 128)
453#endif
454#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
455static inline uint64_t CVMX_PIP_STAT1_PRTX(unsigned long offset)
456{
457	if (!(
458	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
459	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
460	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
461	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
462	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
463	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
464	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
465	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
466	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
467	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
468	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
469		cvmx_warn("CVMX_PIP_STAT1_PRTX(%lu) is invalid on this chip\n", offset);
470	return CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80;
471}
472#else
473#define CVMX_PIP_STAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80)
474#endif
475#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
476static inline uint64_t CVMX_PIP_STAT1_X(unsigned long offset)
477{
478	if (!(
479	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
480		cvmx_warn("CVMX_PIP_STAT1_X(%lu) is invalid on this chip\n", offset);
481	return CVMX_ADD_IO_SEG(0x00011800A0040008ull) + ((offset) & 63) * 128;
482}
483#else
484#define CVMX_PIP_STAT1_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040008ull) + ((offset) & 63) * 128)
485#endif
486#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
487static inline uint64_t CVMX_PIP_STAT2_PRTX(unsigned long offset)
488{
489	if (!(
490	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
491	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
492	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
493	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
494	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
495	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
496	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
497	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
498	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
499	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
500	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
501		cvmx_warn("CVMX_PIP_STAT2_PRTX(%lu) is invalid on this chip\n", offset);
502	return CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80;
503}
504#else
505#define CVMX_PIP_STAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80)
506#endif
507#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
508static inline uint64_t CVMX_PIP_STAT2_X(unsigned long offset)
509{
510	if (!(
511	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
512		cvmx_warn("CVMX_PIP_STAT2_X(%lu) is invalid on this chip\n", offset);
513	return CVMX_ADD_IO_SEG(0x00011800A0040010ull) + ((offset) & 63) * 128;
514}
515#else
516#define CVMX_PIP_STAT2_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040010ull) + ((offset) & 63) * 128)
517#endif
518#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
519static inline uint64_t CVMX_PIP_STAT3_PRTX(unsigned long offset)
520{
521	if (!(
522	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
523	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
524	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
525	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
526	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
527	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
528	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
529	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
530	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
531	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
532	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
533		cvmx_warn("CVMX_PIP_STAT3_PRTX(%lu) is invalid on this chip\n", offset);
534	return CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80;
535}
536#else
537#define CVMX_PIP_STAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80)
538#endif
539#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
540static inline uint64_t CVMX_PIP_STAT3_X(unsigned long offset)
541{
542	if (!(
543	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
544		cvmx_warn("CVMX_PIP_STAT3_X(%lu) is invalid on this chip\n", offset);
545	return CVMX_ADD_IO_SEG(0x00011800A0040018ull) + ((offset) & 63) * 128;
546}
547#else
548#define CVMX_PIP_STAT3_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040018ull) + ((offset) & 63) * 128)
549#endif
550#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
551static inline uint64_t CVMX_PIP_STAT4_PRTX(unsigned long offset)
552{
553	if (!(
554	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
555	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
556	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
557	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
558	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
559	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
560	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
561	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
562	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
563	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
564	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
565		cvmx_warn("CVMX_PIP_STAT4_PRTX(%lu) is invalid on this chip\n", offset);
566	return CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80;
567}
568#else
569#define CVMX_PIP_STAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80)
570#endif
571#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
572static inline uint64_t CVMX_PIP_STAT4_X(unsigned long offset)
573{
574	if (!(
575	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
576		cvmx_warn("CVMX_PIP_STAT4_X(%lu) is invalid on this chip\n", offset);
577	return CVMX_ADD_IO_SEG(0x00011800A0040020ull) + ((offset) & 63) * 128;
578}
579#else
580#define CVMX_PIP_STAT4_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040020ull) + ((offset) & 63) * 128)
581#endif
582#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
583static inline uint64_t CVMX_PIP_STAT5_PRTX(unsigned long offset)
584{
585	if (!(
586	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
587	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
588	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
589	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
590	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
591	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
592	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
593	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
594	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
595	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
596	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
597		cvmx_warn("CVMX_PIP_STAT5_PRTX(%lu) is invalid on this chip\n", offset);
598	return CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80;
599}
600#else
601#define CVMX_PIP_STAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80)
602#endif
603#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
604static inline uint64_t CVMX_PIP_STAT5_X(unsigned long offset)
605{
606	if (!(
607	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
608		cvmx_warn("CVMX_PIP_STAT5_X(%lu) is invalid on this chip\n", offset);
609	return CVMX_ADD_IO_SEG(0x00011800A0040028ull) + ((offset) & 63) * 128;
610}
611#else
612#define CVMX_PIP_STAT5_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040028ull) + ((offset) & 63) * 128)
613#endif
614#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
615static inline uint64_t CVMX_PIP_STAT6_PRTX(unsigned long offset)
616{
617	if (!(
618	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
619	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
620	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
621	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
622	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
623	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
624	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
625	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
626	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
627	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
628	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
629		cvmx_warn("CVMX_PIP_STAT6_PRTX(%lu) is invalid on this chip\n", offset);
630	return CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80;
631}
632#else
633#define CVMX_PIP_STAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80)
634#endif
635#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
636static inline uint64_t CVMX_PIP_STAT6_X(unsigned long offset)
637{
638	if (!(
639	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
640		cvmx_warn("CVMX_PIP_STAT6_X(%lu) is invalid on this chip\n", offset);
641	return CVMX_ADD_IO_SEG(0x00011800A0040030ull) + ((offset) & 63) * 128;
642}
643#else
644#define CVMX_PIP_STAT6_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040030ull) + ((offset) & 63) * 128)
645#endif
646#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
647static inline uint64_t CVMX_PIP_STAT7_PRTX(unsigned long offset)
648{
649	if (!(
650	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
651	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
652	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
653	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
654	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
655	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
656	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
657	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
658	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
659	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
660	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
661		cvmx_warn("CVMX_PIP_STAT7_PRTX(%lu) is invalid on this chip\n", offset);
662	return CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80;
663}
664#else
665#define CVMX_PIP_STAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80)
666#endif
667#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
668static inline uint64_t CVMX_PIP_STAT7_X(unsigned long offset)
669{
670	if (!(
671	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
672		cvmx_warn("CVMX_PIP_STAT7_X(%lu) is invalid on this chip\n", offset);
673	return CVMX_ADD_IO_SEG(0x00011800A0040038ull) + ((offset) & 63) * 128;
674}
675#else
676#define CVMX_PIP_STAT7_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040038ull) + ((offset) & 63) * 128)
677#endif
678#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
679static inline uint64_t CVMX_PIP_STAT8_PRTX(unsigned long offset)
680{
681	if (!(
682	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
683	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
684	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
685	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
686	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
687	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
688	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
689	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
690	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
691	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
692	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
693		cvmx_warn("CVMX_PIP_STAT8_PRTX(%lu) is invalid on this chip\n", offset);
694	return CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80;
695}
696#else
697#define CVMX_PIP_STAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80)
698#endif
699#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
700static inline uint64_t CVMX_PIP_STAT8_X(unsigned long offset)
701{
702	if (!(
703	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
704		cvmx_warn("CVMX_PIP_STAT8_X(%lu) is invalid on this chip\n", offset);
705	return CVMX_ADD_IO_SEG(0x00011800A0040040ull) + ((offset) & 63) * 128;
706}
707#else
708#define CVMX_PIP_STAT8_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040040ull) + ((offset) & 63) * 128)
709#endif
710#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
711static inline uint64_t CVMX_PIP_STAT9_PRTX(unsigned long offset)
712{
713	if (!(
714	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
715	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
716	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
717	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
718	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
719	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
720	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
721	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
722	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
723	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
724	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
725		cvmx_warn("CVMX_PIP_STAT9_PRTX(%lu) is invalid on this chip\n", offset);
726	return CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80;
727}
728#else
729#define CVMX_PIP_STAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80)
730#endif
731#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
732static inline uint64_t CVMX_PIP_STAT9_X(unsigned long offset)
733{
734	if (!(
735	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
736		cvmx_warn("CVMX_PIP_STAT9_X(%lu) is invalid on this chip\n", offset);
737	return CVMX_ADD_IO_SEG(0x00011800A0040048ull) + ((offset) & 63) * 128;
738}
739#else
740#define CVMX_PIP_STAT9_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040048ull) + ((offset) & 63) * 128)
741#endif
742#define CVMX_PIP_STAT_CTL (CVMX_ADD_IO_SEG(0x00011800A0000018ull))
743#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
744static inline uint64_t CVMX_PIP_STAT_INB_ERRSX(unsigned long offset)
745{
746	if (!(
747	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
748	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
749	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
750	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
751	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
752	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
753	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
754	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
755	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
756	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
757	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
758		cvmx_warn("CVMX_PIP_STAT_INB_ERRSX(%lu) is invalid on this chip\n", offset);
759	return CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32;
760}
761#else
762#define CVMX_PIP_STAT_INB_ERRSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32)
763#endif
764#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
765static inline uint64_t CVMX_PIP_STAT_INB_ERRS_PKNDX(unsigned long offset)
766{
767	if (!(
768	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
769		cvmx_warn("CVMX_PIP_STAT_INB_ERRS_PKNDX(%lu) is invalid on this chip\n", offset);
770	return CVMX_ADD_IO_SEG(0x00011800A0020010ull) + ((offset) & 63) * 32;
771}
772#else
773#define CVMX_PIP_STAT_INB_ERRS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020010ull) + ((offset) & 63) * 32)
774#endif
775#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
776static inline uint64_t CVMX_PIP_STAT_INB_OCTSX(unsigned long offset)
777{
778	if (!(
779	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
780	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
781	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
782	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
783	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
784	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
785	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
786	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
787	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
788	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
789	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
790		cvmx_warn("CVMX_PIP_STAT_INB_OCTSX(%lu) is invalid on this chip\n", offset);
791	return CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32;
792}
793#else
794#define CVMX_PIP_STAT_INB_OCTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32)
795#endif
796#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
797static inline uint64_t CVMX_PIP_STAT_INB_OCTS_PKNDX(unsigned long offset)
798{
799	if (!(
800	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
801		cvmx_warn("CVMX_PIP_STAT_INB_OCTS_PKNDX(%lu) is invalid on this chip\n", offset);
802	return CVMX_ADD_IO_SEG(0x00011800A0020008ull) + ((offset) & 63) * 32;
803}
804#else
805#define CVMX_PIP_STAT_INB_OCTS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020008ull) + ((offset) & 63) * 32)
806#endif
807#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
808static inline uint64_t CVMX_PIP_STAT_INB_PKTSX(unsigned long offset)
809{
810	if (!(
811	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
812	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
813	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
814	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
815	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
816	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
817	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
818	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
819	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
820	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
821	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
822		cvmx_warn("CVMX_PIP_STAT_INB_PKTSX(%lu) is invalid on this chip\n", offset);
823	return CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32;
824}
825#else
826#define CVMX_PIP_STAT_INB_PKTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32)
827#endif
828#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
829static inline uint64_t CVMX_PIP_STAT_INB_PKTS_PKNDX(unsigned long offset)
830{
831	if (!(
832	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
833		cvmx_warn("CVMX_PIP_STAT_INB_PKTS_PKNDX(%lu) is invalid on this chip\n", offset);
834	return CVMX_ADD_IO_SEG(0x00011800A0020000ull) + ((offset) & 63) * 32;
835}
836#else
837#define CVMX_PIP_STAT_INB_PKTS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020000ull) + ((offset) & 63) * 32)
838#endif
839#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
840static inline uint64_t CVMX_PIP_SUB_PKIND_FCSX(unsigned long block_id)
841{
842	if (!(
843	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id == 0)))))
844		cvmx_warn("CVMX_PIP_SUB_PKIND_FCSX(%lu) is invalid on this chip\n", block_id);
845	return CVMX_ADD_IO_SEG(0x00011800A0080000ull);
846}
847#else
848#define CVMX_PIP_SUB_PKIND_FCSX(block_id) (CVMX_ADD_IO_SEG(0x00011800A0080000ull))
849#endif
850#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
851static inline uint64_t CVMX_PIP_TAG_INCX(unsigned long offset)
852{
853	if (!(
854	      (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
855	      (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
856	      (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
857	      (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
858	      (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
859	      (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
860	      (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
861	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 63))) ||
862	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63))) ||
863	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 63))) ||
864	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
865	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 63)))))
866		cvmx_warn("CVMX_PIP_TAG_INCX(%lu) is invalid on this chip\n", offset);
867	return CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8;
868}
869#else
870#define CVMX_PIP_TAG_INCX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8)
871#endif
872#define CVMX_PIP_TAG_MASK (CVMX_ADD_IO_SEG(0x00011800A0000070ull))
873#define CVMX_PIP_TAG_SECRET (CVMX_ADD_IO_SEG(0x00011800A0000068ull))
874#define CVMX_PIP_TODO_ENTRY (CVMX_ADD_IO_SEG(0x00011800A0000078ull))
875#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
876static inline uint64_t CVMX_PIP_VLAN_ETYPESX(unsigned long offset)
877{
878	if (!(
879	      (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
880	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
881	      (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
882	      (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1)))))
883		cvmx_warn("CVMX_PIP_VLAN_ETYPESX(%lu) is invalid on this chip\n", offset);
884	return CVMX_ADD_IO_SEG(0x00011800A00001C0ull) + ((offset) & 1) * 8;
885}
886#else
887#define CVMX_PIP_VLAN_ETYPESX(offset) (CVMX_ADD_IO_SEG(0x00011800A00001C0ull) + ((offset) & 1) * 8)
888#endif
889#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
890static inline uint64_t CVMX_PIP_XSTAT0_PRTX(unsigned long offset)
891{
892	if (!(
893	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
894	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
895		cvmx_warn("CVMX_PIP_XSTAT0_PRTX(%lu) is invalid on this chip\n", offset);
896	return CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40;
897}
898#else
899#define CVMX_PIP_XSTAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40)
900#endif
901#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
902static inline uint64_t CVMX_PIP_XSTAT10_PRTX(unsigned long offset)
903{
904	if (!(
905	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
906	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
907		cvmx_warn("CVMX_PIP_XSTAT10_PRTX(%lu) is invalid on this chip\n", offset);
908	return CVMX_ADD_IO_SEG(0x00011800A0001700ull) + ((offset) & 63) * 16 - 16*40;
909}
910#else
911#define CVMX_PIP_XSTAT10_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001700ull) + ((offset) & 63) * 16 - 16*40)
912#endif
913#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
914static inline uint64_t CVMX_PIP_XSTAT11_PRTX(unsigned long offset)
915{
916	if (!(
917	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
918	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
919		cvmx_warn("CVMX_PIP_XSTAT11_PRTX(%lu) is invalid on this chip\n", offset);
920	return CVMX_ADD_IO_SEG(0x00011800A0001708ull) + ((offset) & 63) * 16 - 16*40;
921}
922#else
923#define CVMX_PIP_XSTAT11_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001708ull) + ((offset) & 63) * 16 - 16*40)
924#endif
925#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
926static inline uint64_t CVMX_PIP_XSTAT1_PRTX(unsigned long offset)
927{
928	if (!(
929	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
930	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
931		cvmx_warn("CVMX_PIP_XSTAT1_PRTX(%lu) is invalid on this chip\n", offset);
932	return CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40;
933}
934#else
935#define CVMX_PIP_XSTAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40)
936#endif
937#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
938static inline uint64_t CVMX_PIP_XSTAT2_PRTX(unsigned long offset)
939{
940	if (!(
941	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
942	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
943		cvmx_warn("CVMX_PIP_XSTAT2_PRTX(%lu) is invalid on this chip\n", offset);
944	return CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40;
945}
946#else
947#define CVMX_PIP_XSTAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40)
948#endif
949#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
950static inline uint64_t CVMX_PIP_XSTAT3_PRTX(unsigned long offset)
951{
952	if (!(
953	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
954	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
955		cvmx_warn("CVMX_PIP_XSTAT3_PRTX(%lu) is invalid on this chip\n", offset);
956	return CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40;
957}
958#else
959#define CVMX_PIP_XSTAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40)
960#endif
961#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
962static inline uint64_t CVMX_PIP_XSTAT4_PRTX(unsigned long offset)
963{
964	if (!(
965	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
966	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
967		cvmx_warn("CVMX_PIP_XSTAT4_PRTX(%lu) is invalid on this chip\n", offset);
968	return CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40;
969}
970#else
971#define CVMX_PIP_XSTAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40)
972#endif
973#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
974static inline uint64_t CVMX_PIP_XSTAT5_PRTX(unsigned long offset)
975{
976	if (!(
977	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
978	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
979		cvmx_warn("CVMX_PIP_XSTAT5_PRTX(%lu) is invalid on this chip\n", offset);
980	return CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40;
981}
982#else
983#define CVMX_PIP_XSTAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40)
984#endif
985#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
986static inline uint64_t CVMX_PIP_XSTAT6_PRTX(unsigned long offset)
987{
988	if (!(
989	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
990	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
991		cvmx_warn("CVMX_PIP_XSTAT6_PRTX(%lu) is invalid on this chip\n", offset);
992	return CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40;
993}
994#else
995#define CVMX_PIP_XSTAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40)
996#endif
997#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
998static inline uint64_t CVMX_PIP_XSTAT7_PRTX(unsigned long offset)
999{
1000	if (!(
1001	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
1002	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
1003		cvmx_warn("CVMX_PIP_XSTAT7_PRTX(%lu) is invalid on this chip\n", offset);
1004	return CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40;
1005}
1006#else
1007#define CVMX_PIP_XSTAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40)
1008#endif
1009#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
1010static inline uint64_t CVMX_PIP_XSTAT8_PRTX(unsigned long offset)
1011{
1012	if (!(
1013	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
1014	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
1015		cvmx_warn("CVMX_PIP_XSTAT8_PRTX(%lu) is invalid on this chip\n", offset);
1016	return CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40;
1017}
1018#else
1019#define CVMX_PIP_XSTAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40)
1020#endif
1021#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
1022static inline uint64_t CVMX_PIP_XSTAT9_PRTX(unsigned long offset)
1023{
1024	if (!(
1025	      (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
1026	      (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
1027		cvmx_warn("CVMX_PIP_XSTAT9_PRTX(%lu) is invalid on this chip\n", offset);
1028	return CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40;
1029}
1030#else
1031#define CVMX_PIP_XSTAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40)
1032#endif
1033
1034/**
1035 * cvmx_pip_alt_skip_cfg#
1036 *
1037 * Notes:
1038 * The actual SKIP I determined by HW is based on the packet contents.  BIT0 and
1039 * BIT1 make up a two value value that the selects the skip value as follows.
1040 *
1041 *    lookup_value = LEN ? ( packet_in_bits[BIT1], packet_in_bits[BIT0] ) : ( 0, packet_in_bits[BIT0] );
1042 *    SKIP I       = lookup_value == 3 ? SKIP3 :
1043 *                   lookup_value == 2 ? SKIP2 :
1044 *                   lookup_value == 1 ? SKIP1 :
1045 *                   PIP_PRT_CFG<pknd>[SKIP];
1046 */
1047union cvmx_pip_alt_skip_cfgx {
1048	uint64_t u64;
1049	struct cvmx_pip_alt_skip_cfgx_s {
1050#ifdef __BIG_ENDIAN_BITFIELD
1051	uint64_t reserved_57_63               : 7;
1052	uint64_t len                          : 1;  /**< Indicates the length of the selection field
1053                                                         0 = 0,    BIT0
1054                                                         1 = BIT1, BIT0 */
1055	uint64_t reserved_46_55               : 10;
1056	uint64_t bit1                         : 6;  /**< Indicates the bit location in the first word of
1057                                                         the packet to use to select the skip amount.
1058                                                         BIT1 must be present in the packet. */
1059	uint64_t reserved_38_39               : 2;
1060	uint64_t bit0                         : 6;  /**< Indicates the bit location in the first word of
1061                                                         the packet to use to select the skip amount.
1062                                                         BIT0 must be present in the packet. */
1063	uint64_t reserved_23_31               : 9;
1064	uint64_t skip3                        : 7;  /**< Indicates number of bytes to skip from start of
1065                                                         packet 0-64 */
1066	uint64_t reserved_15_15               : 1;
1067	uint64_t skip2                        : 7;  /**< Indicates number of bytes to skip from start of
1068                                                         packet 0-64 */
1069	uint64_t reserved_7_7                 : 1;
1070	uint64_t skip1                        : 7;  /**< Indicates number of bytes to skip from start of
1071                                                         packet 0-64 */
1072#else
1073	uint64_t skip1                        : 7;
1074	uint64_t reserved_7_7                 : 1;
1075	uint64_t skip2                        : 7;
1076	uint64_t reserved_15_15               : 1;
1077	uint64_t skip3                        : 7;
1078	uint64_t reserved_23_31               : 9;
1079	uint64_t bit0                         : 6;
1080	uint64_t reserved_38_39               : 2;
1081	uint64_t bit1                         : 6;
1082	uint64_t reserved_46_55               : 10;
1083	uint64_t len                          : 1;
1084	uint64_t reserved_57_63               : 7;
1085#endif
1086	} s;
1087	struct cvmx_pip_alt_skip_cfgx_s       cn61xx;
1088	struct cvmx_pip_alt_skip_cfgx_s       cn66xx;
1089	struct cvmx_pip_alt_skip_cfgx_s       cn68xx;
1090	struct cvmx_pip_alt_skip_cfgx_s       cnf71xx;
1091};
1092typedef union cvmx_pip_alt_skip_cfgx cvmx_pip_alt_skip_cfgx_t;
1093
1094/**
1095 * cvmx_pip_bck_prs
1096 *
1097 * PIP_BCK_PRS = PIP's Back Pressure Register
1098 *
1099 * When to assert backpressure based on the todo list filling up
1100 */
1101union cvmx_pip_bck_prs {
1102	uint64_t u64;
1103	struct cvmx_pip_bck_prs_s {
1104#ifdef __BIG_ENDIAN_BITFIELD
1105	uint64_t bckprs                       : 1;  /**< PIP is currently asserting backpressure to IOB
1106                                                         Backpressure from PIP will assert when the
1107                                                         entries to the todo list exceed HIWATER.
1108                                                         Backpressure will be held until the todo entries
1109                                                         is less than or equal to LOWATER. */
1110	uint64_t reserved_13_62               : 50;
1111	uint64_t hiwater                      : 5;  /**< Water mark in the todo list to assert backpressure
1112                                                         Legal values are 1-26.  A 0 value will deadlock
1113                                                         the machine.  A value > 26, will trash memory */
1114	uint64_t reserved_5_7                 : 3;
1115	uint64_t lowater                      : 5;  /**< Water mark in the todo list to release backpressure
1116                                                         The LOWATER value should be < HIWATER. */
1117#else
1118	uint64_t lowater                      : 5;
1119	uint64_t reserved_5_7                 : 3;
1120	uint64_t hiwater                      : 5;
1121	uint64_t reserved_13_62               : 50;
1122	uint64_t bckprs                       : 1;
1123#endif
1124	} s;
1125	struct cvmx_pip_bck_prs_s             cn38xx;
1126	struct cvmx_pip_bck_prs_s             cn38xxp2;
1127	struct cvmx_pip_bck_prs_s             cn56xx;
1128	struct cvmx_pip_bck_prs_s             cn56xxp1;
1129	struct cvmx_pip_bck_prs_s             cn58xx;
1130	struct cvmx_pip_bck_prs_s             cn58xxp1;
1131	struct cvmx_pip_bck_prs_s             cn61xx;
1132	struct cvmx_pip_bck_prs_s             cn63xx;
1133	struct cvmx_pip_bck_prs_s             cn63xxp1;
1134	struct cvmx_pip_bck_prs_s             cn66xx;
1135	struct cvmx_pip_bck_prs_s             cn68xx;
1136	struct cvmx_pip_bck_prs_s             cn68xxp1;
1137	struct cvmx_pip_bck_prs_s             cnf71xx;
1138};
1139typedef union cvmx_pip_bck_prs cvmx_pip_bck_prs_t;
1140
1141/**
1142 * cvmx_pip_bist_status
1143 *
1144 * PIP_BIST_STATUS = PIP's BIST Results
1145 *
1146 */
1147union cvmx_pip_bist_status {
1148	uint64_t u64;
1149	struct cvmx_pip_bist_status_s {
1150#ifdef __BIG_ENDIAN_BITFIELD
1151	uint64_t reserved_22_63               : 42;
1152	uint64_t bist                         : 22; /**< BIST Results.
1153                                                         HW sets a bit in BIST for for memory that fails
1154                                                         BIST. */
1155#else
1156	uint64_t bist                         : 22;
1157	uint64_t reserved_22_63               : 42;
1158#endif
1159	} s;
1160	struct cvmx_pip_bist_status_cn30xx {
1161#ifdef __BIG_ENDIAN_BITFIELD
1162	uint64_t reserved_18_63               : 46;
1163	uint64_t bist                         : 18; /**< BIST Results.
1164                                                         HW sets a bit in BIST for for memory that fails
1165                                                         BIST. */
1166#else
1167	uint64_t bist                         : 18;
1168	uint64_t reserved_18_63               : 46;
1169#endif
1170	} cn30xx;
1171	struct cvmx_pip_bist_status_cn30xx    cn31xx;
1172	struct cvmx_pip_bist_status_cn30xx    cn38xx;
1173	struct cvmx_pip_bist_status_cn30xx    cn38xxp2;
1174	struct cvmx_pip_bist_status_cn50xx {
1175#ifdef __BIG_ENDIAN_BITFIELD
1176	uint64_t reserved_17_63               : 47;
1177	uint64_t bist                         : 17; /**< BIST Results.
1178                                                         HW sets a bit in BIST for for memory that fails
1179                                                         BIST. */
1180#else
1181	uint64_t bist                         : 17;
1182	uint64_t reserved_17_63               : 47;
1183#endif
1184	} cn50xx;
1185	struct cvmx_pip_bist_status_cn30xx    cn52xx;
1186	struct cvmx_pip_bist_status_cn30xx    cn52xxp1;
1187	struct cvmx_pip_bist_status_cn30xx    cn56xx;
1188	struct cvmx_pip_bist_status_cn30xx    cn56xxp1;
1189	struct cvmx_pip_bist_status_cn30xx    cn58xx;
1190	struct cvmx_pip_bist_status_cn30xx    cn58xxp1;
1191	struct cvmx_pip_bist_status_cn61xx {
1192#ifdef __BIG_ENDIAN_BITFIELD
1193	uint64_t reserved_20_63               : 44;
1194	uint64_t bist                         : 20; /**< BIST Results.
1195                                                         HW sets a bit in BIST for for memory that fails
1196                                                         BIST. */
1197#else
1198	uint64_t bist                         : 20;
1199	uint64_t reserved_20_63               : 44;
1200#endif
1201	} cn61xx;
1202	struct cvmx_pip_bist_status_cn30xx    cn63xx;
1203	struct cvmx_pip_bist_status_cn30xx    cn63xxp1;
1204	struct cvmx_pip_bist_status_cn61xx    cn66xx;
1205	struct cvmx_pip_bist_status_s         cn68xx;
1206	struct cvmx_pip_bist_status_cn61xx    cn68xxp1;
1207	struct cvmx_pip_bist_status_cn61xx    cnf71xx;
1208};
1209typedef union cvmx_pip_bist_status cvmx_pip_bist_status_t;
1210
1211/**
1212 * cvmx_pip_bsel_ext_cfg#
1213 *
1214 * PIP_BSEL_EXT_CFGX = Bit Select Extractor config register containing the
1215 * tag, offset, and skip values to be used when using the corresponding extractor.
1216 */
1217union cvmx_pip_bsel_ext_cfgx {
1218	uint64_t u64;
1219	struct cvmx_pip_bsel_ext_cfgx_s {
1220#ifdef __BIG_ENDIAN_BITFIELD
1221	uint64_t reserved_56_63               : 8;
1222	uint64_t upper_tag                    : 16; /**< Extra Tag bits to be added to tag field from table
1223                                                         Only included when PIP_PRT_TAG[INC_PRT]=0
1224                                                         WORD2[TAG<31:16>] */
1225	uint64_t tag                          : 8;  /**< Extra Tag bits to be added to tag field from table
1226                                                         WORD2[TAG<15:8>] */
1227	uint64_t reserved_25_31               : 7;
1228	uint64_t offset                       : 9;  /**< Indicates offset to add to extractor mem adr
1229                                                         to get final address to the lookup table */
1230	uint64_t reserved_7_15                : 9;
1231	uint64_t skip                         : 7;  /**< Indicates number of bytes to skip from start of
1232                                                         packet 0-64 */
1233#else
1234	uint64_t skip                         : 7;
1235	uint64_t reserved_7_15                : 9;
1236	uint64_t offset                       : 9;
1237	uint64_t reserved_25_31               : 7;
1238	uint64_t tag                          : 8;
1239	uint64_t upper_tag                    : 16;
1240	uint64_t reserved_56_63               : 8;
1241#endif
1242	} s;
1243	struct cvmx_pip_bsel_ext_cfgx_s       cn61xx;
1244	struct cvmx_pip_bsel_ext_cfgx_s       cn68xx;
1245	struct cvmx_pip_bsel_ext_cfgx_s       cnf71xx;
1246};
1247typedef union cvmx_pip_bsel_ext_cfgx cvmx_pip_bsel_ext_cfgx_t;
1248
1249/**
1250 * cvmx_pip_bsel_ext_pos#
1251 *
1252 * PIP_BSEL_EXT_POSX = Bit Select Extractor config register containing the 8
1253 * bit positions and valids to be used when using the corresponding extractor.
1254 *
1255 * Notes:
1256 * Examples on bit positioning:
1257 *   the most-significant-bit of the 3rd byte         ... PIP_BSEL_EXT_CFG*[SKIP]=1 POSn=15 (decimal) or
1258 *                                                        PIP_BSEL_EXT_CFG*[SKIP]=0 POSn=23 (decimal)
1259 *   the least-significant-bit of the 5th byte        ... PIP_BSEL_EXT_CFG*[SKIP]=4 POSn=0
1260 *   the second-least-significant bit of the 1st byte ... PIP_BSEL_EXT_CFG*[SKIP]=0 POSn=1
1261 *
1262 * POSn_VAL and POSn correspond to <n> in the resultant index into
1263 * PIP_BSEL_TBL_ENT. When only x bits (0 < x < 7) are to be extracted,
1264 * POS[7:x] should normally be clear.
1265 */
1266union cvmx_pip_bsel_ext_posx {
1267	uint64_t u64;
1268	struct cvmx_pip_bsel_ext_posx_s {
1269#ifdef __BIG_ENDIAN_BITFIELD
1270	uint64_t pos7_val                     : 1;  /**< Valid bit for bit position 7 */
1271	uint64_t pos7                         : 7;  /**< Bit position for the 8th bit  from 128 bit segment
1272                                                         of pkt that is defined by the SKIP field of
1273                                                         PIP_BSEL_EXT_CFG register. */
1274	uint64_t pos6_val                     : 1;  /**< Valid bit for bit position 6 */
1275	uint64_t pos6                         : 7;  /**< Bit position for the 7th bit  from 128 bit segment
1276                                                         of pkt that is defined by the SKIP field of
1277                                                         PIP_BSEL_EXT_CFG register. */
1278	uint64_t pos5_val                     : 1;  /**< Valid bit for bit position 5 */
1279	uint64_t pos5                         : 7;  /**< Bit position for the 6th bit  from 128 bit segment
1280                                                         of pkt that is defined by the SKIP field of
1281                                                         PIP_BSEL_EXT_CFG register. */
1282	uint64_t pos4_val                     : 1;  /**< Valid bit for bit position 4 */
1283	uint64_t pos4                         : 7;  /**< Bit position for the 5th bit  from 128 bit segment
1284                                                         of pkt that is defined by the SKIP field of
1285                                                         PIP_BSEL_EXT_CFG register. */
1286	uint64_t pos3_val                     : 1;  /**< Valid bit for bit position 3 */
1287	uint64_t pos3                         : 7;  /**< Bit position for the 4th bit  from 128 bit segment
1288                                                         of pkt that is defined by the SKIP field of
1289                                                         PIP_BSEL_EXT_CFG register. */
1290	uint64_t pos2_val                     : 1;  /**< Valid bit for bit position 2 */
1291	uint64_t pos2                         : 7;  /**< Bit position for the 3rd bit  from 128 bit segment
1292                                                         of pkt that is defined by the SKIP field of
1293                                                         PIP_BSEL_EXT_CFG register. */
1294	uint64_t pos1_val                     : 1;  /**< Valid bit for bit position 1 */
1295	uint64_t pos1                         : 7;  /**< Bit position for the 2nd bit  from 128 bit segment
1296                                                         of pkt that is defined by the SKIP field of
1297                                                         PIP_BSEL_EXT_CFG register. */
1298	uint64_t pos0_val                     : 1;  /**< Valid bit for bit position 0 */
1299	uint64_t pos0                         : 7;  /**< Bit position for the 1st bit  from 128 bit segment
1300                                                         of pkt that is defined by the SKIP field of
1301                                                         PIP_BSEL_EXT_CFG register. */
1302#else
1303	uint64_t pos0                         : 7;
1304	uint64_t pos0_val                     : 1;
1305	uint64_t pos1                         : 7;
1306	uint64_t pos1_val                     : 1;
1307	uint64_t pos2                         : 7;
1308	uint64_t pos2_val                     : 1;
1309	uint64_t pos3                         : 7;
1310	uint64_t pos3_val                     : 1;
1311	uint64_t pos4                         : 7;
1312	uint64_t pos4_val                     : 1;
1313	uint64_t pos5                         : 7;
1314	uint64_t pos5_val                     : 1;
1315	uint64_t pos6                         : 7;
1316	uint64_t pos6_val                     : 1;
1317	uint64_t pos7                         : 7;
1318	uint64_t pos7_val                     : 1;
1319#endif
1320	} s;
1321	struct cvmx_pip_bsel_ext_posx_s       cn61xx;
1322	struct cvmx_pip_bsel_ext_posx_s       cn68xx;
1323	struct cvmx_pip_bsel_ext_posx_s       cnf71xx;
1324};
1325typedef union cvmx_pip_bsel_ext_posx cvmx_pip_bsel_ext_posx_t;
1326
1327/**
1328 * cvmx_pip_bsel_tbl_ent#
1329 *
1330 * PIP_BSEL_TBL_ENTX = Entry for the extractor table
1331 *
1332 */
1333union cvmx_pip_bsel_tbl_entx {
1334	uint64_t u64;
1335	struct cvmx_pip_bsel_tbl_entx_s {
1336#ifdef __BIG_ENDIAN_BITFIELD
1337	uint64_t tag_en                       : 1;  /**< Enables the use of the TAG field */
1338	uint64_t grp_en                       : 1;  /**< Enables the use of the GRP field */
1339	uint64_t tt_en                        : 1;  /**< Enables the use of the TT field */
1340	uint64_t qos_en                       : 1;  /**< Enables the use of the QOS field */
1341	uint64_t reserved_40_59               : 20;
1342	uint64_t tag                          : 8;  /**< TAG bits to be used if TAG_EN is set */
1343	uint64_t reserved_22_31               : 10;
1344	uint64_t grp                          : 6;  /**< GRP field to be used if GRP_EN is set */
1345	uint64_t reserved_10_15               : 6;
1346	uint64_t tt                           : 2;  /**< TT field to be used if TT_EN is set */
1347	uint64_t reserved_3_7                 : 5;
1348	uint64_t qos                          : 3;  /**< QOS field to be used if QOS_EN is set */
1349#else
1350	uint64_t qos                          : 3;
1351	uint64_t reserved_3_7                 : 5;
1352	uint64_t tt                           : 2;
1353	uint64_t reserved_10_15               : 6;
1354	uint64_t grp                          : 6;
1355	uint64_t reserved_22_31               : 10;
1356	uint64_t tag                          : 8;
1357	uint64_t reserved_40_59               : 20;
1358	uint64_t qos_en                       : 1;
1359	uint64_t tt_en                        : 1;
1360	uint64_t grp_en                       : 1;
1361	uint64_t tag_en                       : 1;
1362#endif
1363	} s;
1364	struct cvmx_pip_bsel_tbl_entx_cn61xx {
1365#ifdef __BIG_ENDIAN_BITFIELD
1366	uint64_t tag_en                       : 1;  /**< Enables the use of the TAG field */
1367	uint64_t grp_en                       : 1;  /**< Enables the use of the GRP field */
1368	uint64_t tt_en                        : 1;  /**< Enables the use of the TT field */
1369	uint64_t qos_en                       : 1;  /**< Enables the use of the QOS field */
1370	uint64_t reserved_40_59               : 20;
1371	uint64_t tag                          : 8;  /**< TAG bits to be used if TAG_EN is set */
1372	uint64_t reserved_20_31               : 12;
1373	uint64_t grp                          : 4;  /**< GRP field to be used if GRP_EN is set */
1374	uint64_t reserved_10_15               : 6;
1375	uint64_t tt                           : 2;  /**< TT field to be used if TT_EN is set */
1376	uint64_t reserved_3_7                 : 5;
1377	uint64_t qos                          : 3;  /**< QOS field to be used if QOS_EN is set */
1378#else
1379	uint64_t qos                          : 3;
1380	uint64_t reserved_3_7                 : 5;
1381	uint64_t tt                           : 2;
1382	uint64_t reserved_10_15               : 6;
1383	uint64_t grp                          : 4;
1384	uint64_t reserved_20_31               : 12;
1385	uint64_t tag                          : 8;
1386	uint64_t reserved_40_59               : 20;
1387	uint64_t qos_en                       : 1;
1388	uint64_t tt_en                        : 1;
1389	uint64_t grp_en                       : 1;
1390	uint64_t tag_en                       : 1;
1391#endif
1392	} cn61xx;
1393	struct cvmx_pip_bsel_tbl_entx_s       cn68xx;
1394	struct cvmx_pip_bsel_tbl_entx_cn61xx  cnf71xx;
1395};
1396typedef union cvmx_pip_bsel_tbl_entx cvmx_pip_bsel_tbl_entx_t;
1397
1398/**
1399 * cvmx_pip_clken
1400 */
1401union cvmx_pip_clken {
1402	uint64_t u64;
1403	struct cvmx_pip_clken_s {
1404#ifdef __BIG_ENDIAN_BITFIELD
1405	uint64_t reserved_1_63                : 63;
1406	uint64_t clken                        : 1;  /**< Controls the conditional clocking within PIP
1407                                                         0=Allow HW to control the clocks
1408                                                         1=Force the clocks to be always on */
1409#else
1410	uint64_t clken                        : 1;
1411	uint64_t reserved_1_63                : 63;
1412#endif
1413	} s;
1414	struct cvmx_pip_clken_s               cn61xx;
1415	struct cvmx_pip_clken_s               cn63xx;
1416	struct cvmx_pip_clken_s               cn63xxp1;
1417	struct cvmx_pip_clken_s               cn66xx;
1418	struct cvmx_pip_clken_s               cn68xx;
1419	struct cvmx_pip_clken_s               cn68xxp1;
1420	struct cvmx_pip_clken_s               cnf71xx;
1421};
1422typedef union cvmx_pip_clken cvmx_pip_clken_t;
1423
1424/**
1425 * cvmx_pip_crc_ctl#
1426 *
1427 * PIP_CRC_CTL = PIP CRC Control Register
1428 *
1429 * Controls datapath reflection when calculating CRC
1430 */
1431union cvmx_pip_crc_ctlx {
1432	uint64_t u64;
1433	struct cvmx_pip_crc_ctlx_s {
1434#ifdef __BIG_ENDIAN_BITFIELD
1435	uint64_t reserved_2_63                : 62;
1436	uint64_t invres                       : 1;  /**< Invert the result */
1437	uint64_t reflect                      : 1;  /**< Reflect the bits in each byte.
1438                                                          Byte order does not change.
1439                                                         - 0: CRC is calculated MSB to LSB
1440                                                         - 1: CRC is calculated LSB to MSB */
1441#else
1442	uint64_t reflect                      : 1;
1443	uint64_t invres                       : 1;
1444	uint64_t reserved_2_63                : 62;
1445#endif
1446	} s;
1447	struct cvmx_pip_crc_ctlx_s            cn38xx;
1448	struct cvmx_pip_crc_ctlx_s            cn38xxp2;
1449	struct cvmx_pip_crc_ctlx_s            cn58xx;
1450	struct cvmx_pip_crc_ctlx_s            cn58xxp1;
1451};
1452typedef union cvmx_pip_crc_ctlx cvmx_pip_crc_ctlx_t;
1453
1454/**
1455 * cvmx_pip_crc_iv#
1456 *
1457 * PIP_CRC_IV = PIP CRC IV Register
1458 *
1459 * Determines the IV used by the CRC algorithm
1460 *
1461 * Notes:
1462 * * PIP_CRC_IV
1463 * PIP_CRC_IV controls the initial state of the CRC algorithm.  Octane can
1464 * support a wide range of CRC algorithms and as such, the IV must be
1465 * carefully constructed to meet the specific algorithm.  The code below
1466 * determines the value to program into Octane based on the algorthim's IV
1467 * and width.  In the case of Octane, the width should always be 32.
1468 *
1469 * PIP_CRC_IV0 sets the IV for ports 0-15 while PIP_CRC_IV1 sets the IV for
1470 * ports 16-31.
1471 *
1472 *  unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
1473 *  [
1474 *    int i;
1475 *    int doit;
1476 *    unsigned int current_val = algorithm_iv;
1477 *
1478 *    for(i = 0; i < w; i++) [
1479 *      doit = current_val & 0x1;
1480 *
1481 *      if(doit) current_val ^= poly;
1482 *      assert(!(current_val & 0x1));
1483 *
1484 *      current_val = (current_val >> 1) | (doit << (w-1));
1485 *    ]
1486 *
1487 *    return current_val;
1488 *  ]
1489 */
1490union cvmx_pip_crc_ivx {
1491	uint64_t u64;
1492	struct cvmx_pip_crc_ivx_s {
1493#ifdef __BIG_ENDIAN_BITFIELD
1494	uint64_t reserved_32_63               : 32;
1495	uint64_t iv                           : 32; /**< IV used by the CRC algorithm.  Default is FCS32. */
1496#else
1497	uint64_t iv                           : 32;
1498	uint64_t reserved_32_63               : 32;
1499#endif
1500	} s;
1501	struct cvmx_pip_crc_ivx_s             cn38xx;
1502	struct cvmx_pip_crc_ivx_s             cn38xxp2;
1503	struct cvmx_pip_crc_ivx_s             cn58xx;
1504	struct cvmx_pip_crc_ivx_s             cn58xxp1;
1505};
1506typedef union cvmx_pip_crc_ivx cvmx_pip_crc_ivx_t;
1507
1508/**
1509 * cvmx_pip_dec_ipsec#
1510 *
1511 * PIP_DEC_IPSEC = UDP or TCP ports to watch for DEC IPSEC
1512 *
1513 * PIP sets the dec_ipsec based on TCP or UDP destination port.
1514 */
1515union cvmx_pip_dec_ipsecx {
1516	uint64_t u64;
1517	struct cvmx_pip_dec_ipsecx_s {
1518#ifdef __BIG_ENDIAN_BITFIELD
1519	uint64_t reserved_18_63               : 46;
1520	uint64_t tcp                          : 1;  /**< This DPRT should be used for TCP packets */
1521	uint64_t udp                          : 1;  /**< This DPRT should be used for UDP packets */
1522	uint64_t dprt                         : 16; /**< UDP or TCP destination port to match on */
1523#else
1524	uint64_t dprt                         : 16;
1525	uint64_t udp                          : 1;
1526	uint64_t tcp                          : 1;
1527	uint64_t reserved_18_63               : 46;
1528#endif
1529	} s;
1530	struct cvmx_pip_dec_ipsecx_s          cn30xx;
1531	struct cvmx_pip_dec_ipsecx_s          cn31xx;
1532	struct cvmx_pip_dec_ipsecx_s          cn38xx;
1533	struct cvmx_pip_dec_ipsecx_s          cn38xxp2;
1534	struct cvmx_pip_dec_ipsecx_s          cn50xx;
1535	struct cvmx_pip_dec_ipsecx_s          cn52xx;
1536	struct cvmx_pip_dec_ipsecx_s          cn52xxp1;
1537	struct cvmx_pip_dec_ipsecx_s          cn56xx;
1538	struct cvmx_pip_dec_ipsecx_s          cn56xxp1;
1539	struct cvmx_pip_dec_ipsecx_s          cn58xx;
1540	struct cvmx_pip_dec_ipsecx_s          cn58xxp1;
1541	struct cvmx_pip_dec_ipsecx_s          cn61xx;
1542	struct cvmx_pip_dec_ipsecx_s          cn63xx;
1543	struct cvmx_pip_dec_ipsecx_s          cn63xxp1;
1544	struct cvmx_pip_dec_ipsecx_s          cn66xx;
1545	struct cvmx_pip_dec_ipsecx_s          cn68xx;
1546	struct cvmx_pip_dec_ipsecx_s          cn68xxp1;
1547	struct cvmx_pip_dec_ipsecx_s          cnf71xx;
1548};
1549typedef union cvmx_pip_dec_ipsecx cvmx_pip_dec_ipsecx_t;
1550
1551/**
1552 * cvmx_pip_dsa_src_grp
1553 */
1554union cvmx_pip_dsa_src_grp {
1555	uint64_t u64;
1556	struct cvmx_pip_dsa_src_grp_s {
1557#ifdef __BIG_ENDIAN_BITFIELD
1558	uint64_t map15                        : 4;  /**< DSA Group Algorithm */
1559	uint64_t map14                        : 4;  /**< DSA Group Algorithm */
1560	uint64_t map13                        : 4;  /**< DSA Group Algorithm */
1561	uint64_t map12                        : 4;  /**< DSA Group Algorithm */
1562	uint64_t map11                        : 4;  /**< DSA Group Algorithm */
1563	uint64_t map10                        : 4;  /**< DSA Group Algorithm */
1564	uint64_t map9                         : 4;  /**< DSA Group Algorithm */
1565	uint64_t map8                         : 4;  /**< DSA Group Algorithm */
1566	uint64_t map7                         : 4;  /**< DSA Group Algorithm */
1567	uint64_t map6                         : 4;  /**< DSA Group Algorithm */
1568	uint64_t map5                         : 4;  /**< DSA Group Algorithm */
1569	uint64_t map4                         : 4;  /**< DSA Group Algorithm */
1570	uint64_t map3                         : 4;  /**< DSA Group Algorithm */
1571	uint64_t map2                         : 4;  /**< DSA Group Algorithm */
1572	uint64_t map1                         : 4;  /**< DSA Group Algorithm */
1573	uint64_t map0                         : 4;  /**< DSA Group Algorithm
1574                                                         Use the DSA source id to compute GRP */
1575#else
1576	uint64_t map0                         : 4;
1577	uint64_t map1                         : 4;
1578	uint64_t map2                         : 4;
1579	uint64_t map3                         : 4;
1580	uint64_t map4                         : 4;
1581	uint64_t map5                         : 4;
1582	uint64_t map6                         : 4;
1583	uint64_t map7                         : 4;
1584	uint64_t map8                         : 4;
1585	uint64_t map9                         : 4;
1586	uint64_t map10                        : 4;
1587	uint64_t map11                        : 4;
1588	uint64_t map12                        : 4;
1589	uint64_t map13                        : 4;
1590	uint64_t map14                        : 4;
1591	uint64_t map15                        : 4;
1592#endif
1593	} s;
1594	struct cvmx_pip_dsa_src_grp_s         cn52xx;
1595	struct cvmx_pip_dsa_src_grp_s         cn52xxp1;
1596	struct cvmx_pip_dsa_src_grp_s         cn56xx;
1597	struct cvmx_pip_dsa_src_grp_s         cn61xx;
1598	struct cvmx_pip_dsa_src_grp_s         cn63xx;
1599	struct cvmx_pip_dsa_src_grp_s         cn63xxp1;
1600	struct cvmx_pip_dsa_src_grp_s         cn66xx;
1601	struct cvmx_pip_dsa_src_grp_s         cn68xx;
1602	struct cvmx_pip_dsa_src_grp_s         cn68xxp1;
1603	struct cvmx_pip_dsa_src_grp_s         cnf71xx;
1604};
1605typedef union cvmx_pip_dsa_src_grp cvmx_pip_dsa_src_grp_t;
1606
1607/**
1608 * cvmx_pip_dsa_vid_grp
1609 */
1610union cvmx_pip_dsa_vid_grp {
1611	uint64_t u64;
1612	struct cvmx_pip_dsa_vid_grp_s {
1613#ifdef __BIG_ENDIAN_BITFIELD
1614	uint64_t map15                        : 4;  /**< DSA Group Algorithm */
1615	uint64_t map14                        : 4;  /**< DSA Group Algorithm */
1616	uint64_t map13                        : 4;  /**< DSA Group Algorithm */
1617	uint64_t map12                        : 4;  /**< DSA Group Algorithm */
1618	uint64_t map11                        : 4;  /**< DSA Group Algorithm */
1619	uint64_t map10                        : 4;  /**< DSA Group Algorithm */
1620	uint64_t map9                         : 4;  /**< DSA Group Algorithm */
1621	uint64_t map8                         : 4;  /**< DSA Group Algorithm */
1622	uint64_t map7                         : 4;  /**< DSA Group Algorithm */
1623	uint64_t map6                         : 4;  /**< DSA Group Algorithm */
1624	uint64_t map5                         : 4;  /**< DSA Group Algorithm */
1625	uint64_t map4                         : 4;  /**< DSA Group Algorithm */
1626	uint64_t map3                         : 4;  /**< DSA Group Algorithm */
1627	uint64_t map2                         : 4;  /**< DSA Group Algorithm */
1628	uint64_t map1                         : 4;  /**< DSA Group Algorithm */
1629	uint64_t map0                         : 4;  /**< DSA Group Algorithm
1630                                                         Use the DSA source id to compute GRP */
1631#else
1632	uint64_t map0                         : 4;
1633	uint64_t map1                         : 4;
1634	uint64_t map2                         : 4;
1635	uint64_t map3                         : 4;
1636	uint64_t map4                         : 4;
1637	uint64_t map5                         : 4;
1638	uint64_t map6                         : 4;
1639	uint64_t map7                         : 4;
1640	uint64_t map8                         : 4;
1641	uint64_t map9                         : 4;
1642	uint64_t map10                        : 4;
1643	uint64_t map11                        : 4;
1644	uint64_t map12                        : 4;
1645	uint64_t map13                        : 4;
1646	uint64_t map14                        : 4;
1647	uint64_t map15                        : 4;
1648#endif
1649	} s;
1650	struct cvmx_pip_dsa_vid_grp_s         cn52xx;
1651	struct cvmx_pip_dsa_vid_grp_s         cn52xxp1;
1652	struct cvmx_pip_dsa_vid_grp_s         cn56xx;
1653	struct cvmx_pip_dsa_vid_grp_s         cn61xx;
1654	struct cvmx_pip_dsa_vid_grp_s         cn63xx;
1655	struct cvmx_pip_dsa_vid_grp_s         cn63xxp1;
1656	struct cvmx_pip_dsa_vid_grp_s         cn66xx;
1657	struct cvmx_pip_dsa_vid_grp_s         cn68xx;
1658	struct cvmx_pip_dsa_vid_grp_s         cn68xxp1;
1659	struct cvmx_pip_dsa_vid_grp_s         cnf71xx;
1660};
1661typedef union cvmx_pip_dsa_vid_grp cvmx_pip_dsa_vid_grp_t;
1662
1663/**
1664 * cvmx_pip_frm_len_chk#
1665 *
1666 * Notes:
1667 * PIP_FRM_LEN_CHK0 is used for packets on packet interface0, PCI, PCI RAW, and PKO loopback ports.
1668 * PIP_FRM_LEN_CHK1 is unused.
1669 */
1670union cvmx_pip_frm_len_chkx {
1671	uint64_t u64;
1672	struct cvmx_pip_frm_len_chkx_s {
1673#ifdef __BIG_ENDIAN_BITFIELD
1674	uint64_t reserved_32_63               : 32;
1675	uint64_t maxlen                       : 16; /**< Byte count for Max-sized frame check
1676                                                         PIP_PRT_CFGn[MAXERR_EN] enables the check for
1677                                                         port n.
1678                                                         If enabled, failing packets set the MAXERR
1679                                                         interrupt and work-queue entry WORD2[opcode] is
1680                                                         set to OVER_FCS (0x3, if packet has bad FCS) or
1681                                                         OVER_ERR (0x4, if packet has good FCS).
1682                                                         The effective MAXLEN used by HW is
1683                                                         PIP_PRT_CFG[DSA_EN] == 0,
1684                                                          PIP_FRM_LEN_CHK[MAXLEN] + 4*VV + 4*VS
1685                                                         PIP_PRT_CFG[DSA_EN] == 1,
1686                                                          PIP_FRM_LEN_CHK[MAXLEN] + PIP_PRT_CFG[SKIP]+4*VS
1687                                                         If PTP_MODE, the 8B timestamp is prepended to the
1688                                                          packet.  MAXLEN should be increased by 8 to
1689                                                          compensate for the additional timestamp field. */
1690	uint64_t minlen                       : 16; /**< Byte count for Min-sized frame check
1691                                                         PIP_PRT_CFGn[MINERR_EN] enables the check for
1692                                                         port n.
1693                                                         If enabled, failing packets set the MINERR
1694                                                         interrupt and work-queue entry WORD2[opcode] is
1695                                                         set to UNDER_FCS (0x6, if packet has bad FCS) or
1696                                                         UNDER_ERR (0x8, if packet has good FCS).
1697                                                         If PTP_MODE, the 8B timestamp is prepended to the
1698                                                          packet.  MINLEN should be increased by 8 to
1699                                                          compensate for the additional timestamp field. */
1700#else
1701	uint64_t minlen                       : 16;
1702	uint64_t maxlen                       : 16;
1703	uint64_t reserved_32_63               : 32;
1704#endif
1705	} s;
1706	struct cvmx_pip_frm_len_chkx_s        cn50xx;
1707	struct cvmx_pip_frm_len_chkx_s        cn52xx;
1708	struct cvmx_pip_frm_len_chkx_s        cn52xxp1;
1709	struct cvmx_pip_frm_len_chkx_s        cn56xx;
1710	struct cvmx_pip_frm_len_chkx_s        cn56xxp1;
1711	struct cvmx_pip_frm_len_chkx_s        cn61xx;
1712	struct cvmx_pip_frm_len_chkx_s        cn63xx;
1713	struct cvmx_pip_frm_len_chkx_s        cn63xxp1;
1714	struct cvmx_pip_frm_len_chkx_s        cn66xx;
1715	struct cvmx_pip_frm_len_chkx_s        cn68xx;
1716	struct cvmx_pip_frm_len_chkx_s        cn68xxp1;
1717	struct cvmx_pip_frm_len_chkx_s        cnf71xx;
1718};
1719typedef union cvmx_pip_frm_len_chkx cvmx_pip_frm_len_chkx_t;
1720
1721/**
1722 * cvmx_pip_gbl_cfg
1723 *
1724 * PIP_GBL_CFG = PIP's Global Config Register
1725 *
1726 * Global config information that applies to all ports.
1727 *
1728 * Notes:
1729 * * IP6_UDP
1730 * IPv4 allows optional UDP checksum by sending the all 0's patterns.  IPv6
1731 * outlaws this and the spec says to always check UDP checksum.  This mode
1732 * bit allows the user to treat IPv6 as IPv4, meaning that the all 0's
1733 * pattern will cause a UDP checksum pass.
1734 */
1735union cvmx_pip_gbl_cfg {
1736	uint64_t u64;
1737	struct cvmx_pip_gbl_cfg_s {
1738#ifdef __BIG_ENDIAN_BITFIELD
1739	uint64_t reserved_19_63               : 45;
1740	uint64_t tag_syn                      : 1;  /**< Do not include src_crc for TCP/SYN&!ACK packets
1741                                                         0 = include src_crc
1742                                                         1 = tag hash is dst_crc for TCP/SYN&!ACK packets */
1743	uint64_t ip6_udp                      : 1;  /**< IPv6/UDP checksum is not optional
1744                                                         0 = Allow optional checksum code
1745                                                         1 = Do not allow optional checksum code */
1746	uint64_t max_l2                       : 1;  /**< Config bit to choose the largest L2 frame size
1747                                                         Chooses the value of the L2 Type/Length field
1748                                                         to classify the frame as length.
1749                                                         0 = 1500 / 0x5dc
1750                                                         1 = 1535 / 0x5ff */
1751	uint64_t reserved_11_15               : 5;
1752	uint64_t raw_shf                      : 3;  /**< RAW Packet shift amount
1753                                                         Number of bytes to pad a RAW packet. */
1754	uint64_t reserved_3_7                 : 5;
1755	uint64_t nip_shf                      : 3;  /**< Non-IP shift amount
1756                                                         Number of bytes to pad a packet that has been
1757                                                         classified as not IP. */
1758#else
1759	uint64_t nip_shf                      : 3;
1760	uint64_t reserved_3_7                 : 5;
1761	uint64_t raw_shf                      : 3;
1762	uint64_t reserved_11_15               : 5;
1763	uint64_t max_l2                       : 1;
1764	uint64_t ip6_udp                      : 1;
1765	uint64_t tag_syn                      : 1;
1766	uint64_t reserved_19_63               : 45;
1767#endif
1768	} s;
1769	struct cvmx_pip_gbl_cfg_s             cn30xx;
1770	struct cvmx_pip_gbl_cfg_s             cn31xx;
1771	struct cvmx_pip_gbl_cfg_s             cn38xx;
1772	struct cvmx_pip_gbl_cfg_s             cn38xxp2;
1773	struct cvmx_pip_gbl_cfg_s             cn50xx;
1774	struct cvmx_pip_gbl_cfg_s             cn52xx;
1775	struct cvmx_pip_gbl_cfg_s             cn52xxp1;
1776	struct cvmx_pip_gbl_cfg_s             cn56xx;
1777	struct cvmx_pip_gbl_cfg_s             cn56xxp1;
1778	struct cvmx_pip_gbl_cfg_s             cn58xx;
1779	struct cvmx_pip_gbl_cfg_s             cn58xxp1;
1780	struct cvmx_pip_gbl_cfg_s             cn61xx;
1781	struct cvmx_pip_gbl_cfg_s             cn63xx;
1782	struct cvmx_pip_gbl_cfg_s             cn63xxp1;
1783	struct cvmx_pip_gbl_cfg_s             cn66xx;
1784	struct cvmx_pip_gbl_cfg_s             cn68xx;
1785	struct cvmx_pip_gbl_cfg_s             cn68xxp1;
1786	struct cvmx_pip_gbl_cfg_s             cnf71xx;
1787};
1788typedef union cvmx_pip_gbl_cfg cvmx_pip_gbl_cfg_t;
1789
1790/**
1791 * cvmx_pip_gbl_ctl
1792 *
1793 * PIP_GBL_CTL = PIP's Global Control Register
1794 *
1795 * Global control information.  These are the global checker enables for
1796 * IPv4/IPv6 and TCP/UDP parsing.  The enables effect all ports.
1797 *
1798 * Notes:
1799 * The following text describes the conditions in which each checker will
1800 * assert and flag an exception.  By disabling the checker, the exception will
1801 * not be flagged and the packet will be parsed as best it can.  Note, by
1802 * disabling conditions, packets can be parsed incorrectly (.i.e. IP_MAL and
1803 * L4_MAL could cause bits to be seen in the wrong place.  IP_CHK and L4_CHK
1804 * means that the packet was corrupted).
1805 *
1806 * * IP_CHK
1807 *   Indicates that an IPv4 packet contained an IPv4 header checksum
1808 *   violations.  Only applies to packets classified as IPv4.
1809 *
1810 * * IP_MAL
1811 *   Indicates that the packet was malformed.  Malformed packets are defined as
1812 *   packets that are not long enough to cover the IP header or not long enough
1813 *   to cover the length in the IP header.
1814 *
1815 * * IP_HOP
1816 *   Indicates that the IPv4 TTL field or IPv6 HOP field is zero.
1817 *
1818 * * IP4_OPTS
1819 *   Indicates the presence of IPv4 options.  It is set when the length != 5.
1820 *   This only applies to packets classified as IPv4.
1821 *
1822 * * IP6_EEXT
1823 *   Indicate the presence of IPv6 early extension headers.  These bits only
1824 *   apply to packets classified as IPv6.  Bit 0 will flag early extensions
1825 *   when next_header is any one of the following...
1826 *
1827 *         - hop-by-hop (0)
1828 *         - destination (60)
1829 *         - routing (43)
1830 *
1831 *   Bit 1 will flag early extentions when next_header is NOT any of the
1832 *   following...
1833 *
1834 *         - TCP (6)
1835 *         - UDP (17)
1836 *         - fragmentation (44)
1837 *         - ICMP (58)
1838 *         - IPSEC ESP (50)
1839 *         - IPSEC AH (51)
1840 *         - IPCOMP
1841 *
1842 * * L4_MAL
1843 *   Indicates that a TCP or UDP packet is not long enough to cover the TCP or
1844 *   UDP header.
1845 *
1846 * * L4_PRT
1847 *   Indicates that a TCP or UDP packet has an illegal port number - either the
1848 *   source or destination port is zero.
1849 *
1850 * * L4_CHK
1851 *   Indicates that a packet classified as either TCP or UDP contains an L4
1852 *   checksum failure
1853 *
1854 * * L4_LEN
1855 *   Indicates that the TCP or UDP length does not match the the IP length.
1856 *
1857 * * TCP_FLAG
1858 *   Indicates any of the following conditions...
1859 *
1860 *         [URG, ACK, PSH, RST, SYN, FIN] : tcp_flag
1861 *         6'b000001: (FIN only)
1862 *         6'b000000: (0)
1863 *         6'bxxx1x1: (RST+FIN+*)
1864 *         6'b1xxx1x: (URG+SYN+*)
1865 *         6'bxxx11x: (RST+SYN+*)
1866 *         6'bxxxx11: (SYN+FIN+*)
1867 */
1868union cvmx_pip_gbl_ctl {
1869	uint64_t u64;
1870	struct cvmx_pip_gbl_ctl_s {
1871#ifdef __BIG_ENDIAN_BITFIELD
1872	uint64_t reserved_29_63               : 35;
1873	uint64_t egrp_dis                     : 1;  /**< PKT_INST_HDR extended group field disable
1874                                                         When set, HW will ignore the EGRP field of the
1875                                                         PKT_INST_HDR - bits 47:46. */
1876	uint64_t ihmsk_dis                    : 1;  /**< Instruction Header Mask Disable
1877                                                         0=Allow NTAG,NTT,NGRP,NQOS bits in the
1878                                                           instruction header to control which fields from
1879                                                           the instruction header are used for WQE WORD2.
1880                                                         1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
1881                                                           instruction header and act as if these fields
1882                                                           were zero.  Thus always use the TAG,TT,GRP,QOS
1883                                                           (depending on the instruction header length)
1884                                                           from the instruction header for the WQE WORD2. */
1885	uint64_t dsa_grp_tvid                 : 1;  /**< DSA Group Algorithm
1886                                                         Use the DSA source id to compute GRP */
1887	uint64_t dsa_grp_scmd                 : 1;  /**< DSA Group Algorithm
1888                                                         Use the DSA source id to compute GRP when the
1889                                                         DSA tag command to TO_CPU */
1890	uint64_t dsa_grp_sid                  : 1;  /**< DSA Group Algorithm
1891                                                         Use the DSA VLAN id to compute GRP */
1892	uint64_t reserved_21_23               : 3;
1893	uint64_t ring_en                      : 1;  /**< Enable DPI ring information in WQE */
1894	uint64_t reserved_17_19               : 3;
1895	uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
1896                                                         Does not apply to DPI ports (32-35)
1897                                                         When using 2-byte instruction header words,
1898                                                         either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1899	uint64_t vs_wqe                       : 1;  /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
1900                                                         0=use the 1st (network order) VLAN
1901                                                         1=use the 2nd (network order) VLAN */
1902	uint64_t vs_qos                       : 1;  /**< Which DSA/VLAN priority to use when VLAN Stacking
1903                                                         0=use the 1st (network order) VLAN
1904                                                         1=use the 2nd (network order) VLAN */
1905	uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
1906	uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
1907	uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
1908	uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
1909	uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
1910	uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
1911	uint64_t reserved_6_7                 : 2;
1912	uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
1913	uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
1914	uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
1915	uint64_t ip_mal                       : 1;  /**< Enable malformed check */
1916	uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
1917#else
1918	uint64_t ip_chk                       : 1;
1919	uint64_t ip_mal                       : 1;
1920	uint64_t ip_hop                       : 1;
1921	uint64_t ip4_opts                     : 1;
1922	uint64_t ip6_eext                     : 2;
1923	uint64_t reserved_6_7                 : 2;
1924	uint64_t l4_mal                       : 1;
1925	uint64_t l4_prt                       : 1;
1926	uint64_t l4_chk                       : 1;
1927	uint64_t l4_len                       : 1;
1928	uint64_t tcp_flag                     : 1;
1929	uint64_t l2_mal                       : 1;
1930	uint64_t vs_qos                       : 1;
1931	uint64_t vs_wqe                       : 1;
1932	uint64_t ignrs                        : 1;
1933	uint64_t reserved_17_19               : 3;
1934	uint64_t ring_en                      : 1;
1935	uint64_t reserved_21_23               : 3;
1936	uint64_t dsa_grp_sid                  : 1;
1937	uint64_t dsa_grp_scmd                 : 1;
1938	uint64_t dsa_grp_tvid                 : 1;
1939	uint64_t ihmsk_dis                    : 1;
1940	uint64_t egrp_dis                     : 1;
1941	uint64_t reserved_29_63               : 35;
1942#endif
1943	} s;
1944	struct cvmx_pip_gbl_ctl_cn30xx {
1945#ifdef __BIG_ENDIAN_BITFIELD
1946	uint64_t reserved_17_63               : 47;
1947	uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
1948                                                         Only applies to the packet interface prts (0-31)
1949                                                         When using 2-byte instruction header words,
1950                                                         either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1951	uint64_t vs_wqe                       : 1;  /**< Which VLAN CFI and ID to use when VLAN Stacking
1952                                                         0=use the 1st (network order) VLAN
1953                                                         1=use the 2nd (network order) VLAN */
1954	uint64_t vs_qos                       : 1;  /**< Which VLAN priority to use when VLAN Stacking
1955                                                         0=use the 1st (network order) VLAN
1956                                                         1=use the 2nd (network order) VLAN */
1957	uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
1958	uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
1959	uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
1960	uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
1961	uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
1962	uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
1963	uint64_t reserved_6_7                 : 2;
1964	uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
1965	uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
1966	uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
1967	uint64_t ip_mal                       : 1;  /**< Enable malformed check */
1968	uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
1969#else
1970	uint64_t ip_chk                       : 1;
1971	uint64_t ip_mal                       : 1;
1972	uint64_t ip_hop                       : 1;
1973	uint64_t ip4_opts                     : 1;
1974	uint64_t ip6_eext                     : 2;
1975	uint64_t reserved_6_7                 : 2;
1976	uint64_t l4_mal                       : 1;
1977	uint64_t l4_prt                       : 1;
1978	uint64_t l4_chk                       : 1;
1979	uint64_t l4_len                       : 1;
1980	uint64_t tcp_flag                     : 1;
1981	uint64_t l2_mal                       : 1;
1982	uint64_t vs_qos                       : 1;
1983	uint64_t vs_wqe                       : 1;
1984	uint64_t ignrs                        : 1;
1985	uint64_t reserved_17_63               : 47;
1986#endif
1987	} cn30xx;
1988	struct cvmx_pip_gbl_ctl_cn30xx        cn31xx;
1989	struct cvmx_pip_gbl_ctl_cn30xx        cn38xx;
1990	struct cvmx_pip_gbl_ctl_cn30xx        cn38xxp2;
1991	struct cvmx_pip_gbl_ctl_cn30xx        cn50xx;
1992	struct cvmx_pip_gbl_ctl_cn52xx {
1993#ifdef __BIG_ENDIAN_BITFIELD
1994	uint64_t reserved_27_63               : 37;
1995	uint64_t dsa_grp_tvid                 : 1;  /**< DSA Group Algorithm
1996                                                         Use the DSA source id to compute GRP */
1997	uint64_t dsa_grp_scmd                 : 1;  /**< DSA Group Algorithm
1998                                                         Use the DSA source id to compute GRP when the
1999                                                         DSA tag command to TO_CPU */
2000	uint64_t dsa_grp_sid                  : 1;  /**< DSA Group Algorithm
2001                                                         Use the DSA VLAN id to compute GRP */
2002	uint64_t reserved_21_23               : 3;
2003	uint64_t ring_en                      : 1;  /**< Enable PCIe ring information in WQE */
2004	uint64_t reserved_17_19               : 3;
2005	uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
2006                                                         Does not apply to PCI ports (32-35)
2007                                                         When using 2-byte instruction header words,
2008                                                         either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2009	uint64_t vs_wqe                       : 1;  /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2010                                                         0=use the 1st (network order) VLAN
2011                                                         1=use the 2nd (network order) VLAN */
2012	uint64_t vs_qos                       : 1;  /**< Which DSA/VLAN priority to use when VLAN Stacking
2013                                                         0=use the 1st (network order) VLAN
2014                                                         1=use the 2nd (network order) VLAN */
2015	uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
2016	uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
2017	uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
2018	uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
2019	uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
2020	uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
2021	uint64_t reserved_6_7                 : 2;
2022	uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
2023	uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
2024	uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
2025	uint64_t ip_mal                       : 1;  /**< Enable malformed check */
2026	uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
2027#else
2028	uint64_t ip_chk                       : 1;
2029	uint64_t ip_mal                       : 1;
2030	uint64_t ip_hop                       : 1;
2031	uint64_t ip4_opts                     : 1;
2032	uint64_t ip6_eext                     : 2;
2033	uint64_t reserved_6_7                 : 2;
2034	uint64_t l4_mal                       : 1;
2035	uint64_t l4_prt                       : 1;
2036	uint64_t l4_chk                       : 1;
2037	uint64_t l4_len                       : 1;
2038	uint64_t tcp_flag                     : 1;
2039	uint64_t l2_mal                       : 1;
2040	uint64_t vs_qos                       : 1;
2041	uint64_t vs_wqe                       : 1;
2042	uint64_t ignrs                        : 1;
2043	uint64_t reserved_17_19               : 3;
2044	uint64_t ring_en                      : 1;
2045	uint64_t reserved_21_23               : 3;
2046	uint64_t dsa_grp_sid                  : 1;
2047	uint64_t dsa_grp_scmd                 : 1;
2048	uint64_t dsa_grp_tvid                 : 1;
2049	uint64_t reserved_27_63               : 37;
2050#endif
2051	} cn52xx;
2052	struct cvmx_pip_gbl_ctl_cn52xx        cn52xxp1;
2053	struct cvmx_pip_gbl_ctl_cn52xx        cn56xx;
2054	struct cvmx_pip_gbl_ctl_cn56xxp1 {
2055#ifdef __BIG_ENDIAN_BITFIELD
2056	uint64_t reserved_21_63               : 43;
2057	uint64_t ring_en                      : 1;  /**< Enable PCIe ring information in WQE */
2058	uint64_t reserved_17_19               : 3;
2059	uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
2060                                                         Does not apply to PCI ports (32-35)
2061                                                         When using 2-byte instruction header words,
2062                                                         either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2063	uint64_t vs_wqe                       : 1;  /**< Which VLAN CFI and ID to use when VLAN Stacking
2064                                                         0=use the 1st (network order) VLAN
2065                                                         1=use the 2nd (network order) VLAN */
2066	uint64_t vs_qos                       : 1;  /**< Which VLAN priority to use when VLAN Stacking
2067                                                         0=use the 1st (network order) VLAN
2068                                                         1=use the 2nd (network order) VLAN */
2069	uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
2070	uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
2071	uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
2072	uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
2073	uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
2074	uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
2075	uint64_t reserved_6_7                 : 2;
2076	uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
2077	uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
2078	uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
2079	uint64_t ip_mal                       : 1;  /**< Enable malformed check */
2080	uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
2081#else
2082	uint64_t ip_chk                       : 1;
2083	uint64_t ip_mal                       : 1;
2084	uint64_t ip_hop                       : 1;
2085	uint64_t ip4_opts                     : 1;
2086	uint64_t ip6_eext                     : 2;
2087	uint64_t reserved_6_7                 : 2;
2088	uint64_t l4_mal                       : 1;
2089	uint64_t l4_prt                       : 1;
2090	uint64_t l4_chk                       : 1;
2091	uint64_t l4_len                       : 1;
2092	uint64_t tcp_flag                     : 1;
2093	uint64_t l2_mal                       : 1;
2094	uint64_t vs_qos                       : 1;
2095	uint64_t vs_wqe                       : 1;
2096	uint64_t ignrs                        : 1;
2097	uint64_t reserved_17_19               : 3;
2098	uint64_t ring_en                      : 1;
2099	uint64_t reserved_21_63               : 43;
2100#endif
2101	} cn56xxp1;
2102	struct cvmx_pip_gbl_ctl_cn30xx        cn58xx;
2103	struct cvmx_pip_gbl_ctl_cn30xx        cn58xxp1;
2104	struct cvmx_pip_gbl_ctl_cn61xx {
2105#ifdef __BIG_ENDIAN_BITFIELD
2106	uint64_t reserved_28_63               : 36;
2107	uint64_t ihmsk_dis                    : 1;  /**< Instruction Header Mask Disable
2108                                                         0=Allow NTAG,NTT,NGRP,NQOS bits in the
2109                                                           instruction header to control which fields from
2110                                                           the instruction header are used for WQE WORD2.
2111                                                         1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
2112                                                           instruction header and act as if these fields
2113                                                           were zero.  Thus always use the TAG,TT,GRP,QOS
2114                                                           (depending on the instruction header length)
2115                                                           from the instruction header for the WQE WORD2. */
2116	uint64_t dsa_grp_tvid                 : 1;  /**< DSA Group Algorithm
2117                                                         Use the DSA source id to compute GRP */
2118	uint64_t dsa_grp_scmd                 : 1;  /**< DSA Group Algorithm
2119                                                         Use the DSA source id to compute GRP when the
2120                                                         DSA tag command to TO_CPU */
2121	uint64_t dsa_grp_sid                  : 1;  /**< DSA Group Algorithm
2122                                                         Use the DSA VLAN id to compute GRP */
2123	uint64_t reserved_21_23               : 3;
2124	uint64_t ring_en                      : 1;  /**< Enable DPI ring information in WQE */
2125	uint64_t reserved_17_19               : 3;
2126	uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
2127                                                         Does not apply to DPI ports (32-35)
2128                                                         When using 2-byte instruction header words,
2129                                                         either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2130	uint64_t vs_wqe                       : 1;  /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2131                                                         0=use the 1st (network order) VLAN
2132                                                         1=use the 2nd (network order) VLAN */
2133	uint64_t vs_qos                       : 1;  /**< Which DSA/VLAN priority to use when VLAN Stacking
2134                                                         0=use the 1st (network order) VLAN
2135                                                         1=use the 2nd (network order) VLAN */
2136	uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
2137	uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
2138	uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
2139	uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
2140	uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
2141	uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
2142	uint64_t reserved_6_7                 : 2;
2143	uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
2144	uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
2145	uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
2146	uint64_t ip_mal                       : 1;  /**< Enable malformed check */
2147	uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
2148#else
2149	uint64_t ip_chk                       : 1;
2150	uint64_t ip_mal                       : 1;
2151	uint64_t ip_hop                       : 1;
2152	uint64_t ip4_opts                     : 1;
2153	uint64_t ip6_eext                     : 2;
2154	uint64_t reserved_6_7                 : 2;
2155	uint64_t l4_mal                       : 1;
2156	uint64_t l4_prt                       : 1;
2157	uint64_t l4_chk                       : 1;
2158	uint64_t l4_len                       : 1;
2159	uint64_t tcp_flag                     : 1;
2160	uint64_t l2_mal                       : 1;
2161	uint64_t vs_qos                       : 1;
2162	uint64_t vs_wqe                       : 1;
2163	uint64_t ignrs                        : 1;
2164	uint64_t reserved_17_19               : 3;
2165	uint64_t ring_en                      : 1;
2166	uint64_t reserved_21_23               : 3;
2167	uint64_t dsa_grp_sid                  : 1;
2168	uint64_t dsa_grp_scmd                 : 1;
2169	uint64_t dsa_grp_tvid                 : 1;
2170	uint64_t ihmsk_dis                    : 1;
2171	uint64_t reserved_28_63               : 36;
2172#endif
2173	} cn61xx;
2174	struct cvmx_pip_gbl_ctl_cn61xx        cn63xx;
2175	struct cvmx_pip_gbl_ctl_cn61xx        cn63xxp1;
2176	struct cvmx_pip_gbl_ctl_cn61xx        cn66xx;
2177	struct cvmx_pip_gbl_ctl_cn68xx {
2178#ifdef __BIG_ENDIAN_BITFIELD
2179	uint64_t reserved_29_63               : 35;
2180	uint64_t egrp_dis                     : 1;  /**< PKT_INST_HDR extended group field disable
2181                                                         When set, HW will ignore the EGRP field of the
2182                                                         PKT_INST_HDR - bits 47:46. */
2183	uint64_t ihmsk_dis                    : 1;  /**< Instruction Header Mask Disable
2184                                                         0=Allow NTAG,NTT,NGRP,NQOS bits in the
2185                                                           instruction header to control which fields from
2186                                                           the instruction header are used for WQE WORD2.
2187                                                         1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
2188                                                           instruction header and act as if these fields
2189                                                           were zero.  Thus always use the TAG,TT,GRP,QOS
2190                                                           (depending on the instruction header length)
2191                                                           from the instruction header for the WQE WORD2. */
2192	uint64_t dsa_grp_tvid                 : 1;  /**< DSA Group Algorithm
2193                                                         Use the DSA source id to compute GRP */
2194	uint64_t dsa_grp_scmd                 : 1;  /**< DSA Group Algorithm
2195                                                         Use the DSA source id to compute GRP when the
2196                                                         DSA tag command to TO_CPU */
2197	uint64_t dsa_grp_sid                  : 1;  /**< DSA Group Algorithm
2198                                                         Use the DSA VLAN id to compute GRP */
2199	uint64_t reserved_17_23               : 7;
2200	uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
2201                                                         When using 2-byte instruction header words,
2202                                                         either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2203	uint64_t vs_wqe                       : 1;  /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2204                                                         0=use the 1st (network order) VLAN
2205                                                         1=use the 2nd (network order) VLAN */
2206	uint64_t vs_qos                       : 1;  /**< Which DSA/VLAN priority to use when VLAN Stacking
2207                                                         0=use the 1st (network order) VLAN
2208                                                         1=use the 2nd (network order) VLAN */
2209	uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
2210	uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
2211	uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
2212	uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
2213	uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
2214	uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
2215	uint64_t reserved_6_7                 : 2;
2216	uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
2217	uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
2218	uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
2219	uint64_t ip_mal                       : 1;  /**< Enable malformed check */
2220	uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
2221#else
2222	uint64_t ip_chk                       : 1;
2223	uint64_t ip_mal                       : 1;
2224	uint64_t ip_hop                       : 1;
2225	uint64_t ip4_opts                     : 1;
2226	uint64_t ip6_eext                     : 2;
2227	uint64_t reserved_6_7                 : 2;
2228	uint64_t l4_mal                       : 1;
2229	uint64_t l4_prt                       : 1;
2230	uint64_t l4_chk                       : 1;
2231	uint64_t l4_len                       : 1;
2232	uint64_t tcp_flag                     : 1;
2233	uint64_t l2_mal                       : 1;
2234	uint64_t vs_qos                       : 1;
2235	uint64_t vs_wqe                       : 1;
2236	uint64_t ignrs                        : 1;
2237	uint64_t reserved_17_23               : 7;
2238	uint64_t dsa_grp_sid                  : 1;
2239	uint64_t dsa_grp_scmd                 : 1;
2240	uint64_t dsa_grp_tvid                 : 1;
2241	uint64_t ihmsk_dis                    : 1;
2242	uint64_t egrp_dis                     : 1;
2243	uint64_t reserved_29_63               : 35;
2244#endif
2245	} cn68xx;
2246	struct cvmx_pip_gbl_ctl_cn68xxp1 {
2247#ifdef __BIG_ENDIAN_BITFIELD
2248	uint64_t reserved_28_63               : 36;
2249	uint64_t ihmsk_dis                    : 1;  /**< Instruction Header Mask Disable
2250                                                         0=Allow NTAG,NTT,NGRP,NQOS bits in the
2251                                                           instruction header to control which fields from
2252                                                           the instruction header are used for WQE WORD2.
2253                                                         1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
2254                                                           instruction header and act as if these fields
2255                                                           were zero.  Thus always use the TAG,TT,GRP,QOS
2256                                                           (depending on the instruction header length)
2257                                                           from the instruction header for the WQE WORD2. */
2258	uint64_t dsa_grp_tvid                 : 1;  /**< DSA Group Algorithm
2259                                                         Use the DSA source id to compute GRP */
2260	uint64_t dsa_grp_scmd                 : 1;  /**< DSA Group Algorithm
2261                                                         Use the DSA source id to compute GRP when the
2262                                                         DSA tag command to TO_CPU */
2263	uint64_t dsa_grp_sid                  : 1;  /**< DSA Group Algorithm
2264                                                         Use the DSA VLAN id to compute GRP */
2265	uint64_t reserved_17_23               : 7;
2266	uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
2267                                                         When using 2-byte instruction header words,
2268                                                         either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2269	uint64_t vs_wqe                       : 1;  /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2270                                                         0=use the 1st (network order) VLAN
2271                                                         1=use the 2nd (network order) VLAN */
2272	uint64_t vs_qos                       : 1;  /**< Which DSA/VLAN priority to use when VLAN Stacking
2273                                                         0=use the 1st (network order) VLAN
2274                                                         1=use the 2nd (network order) VLAN */
2275	uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
2276	uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
2277	uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
2278	uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
2279	uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
2280	uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
2281	uint64_t reserved_6_7                 : 2;
2282	uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
2283	uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
2284	uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
2285	uint64_t ip_mal                       : 1;  /**< Enable malformed check */
2286	uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
2287#else
2288	uint64_t ip_chk                       : 1;
2289	uint64_t ip_mal                       : 1;
2290	uint64_t ip_hop                       : 1;
2291	uint64_t ip4_opts                     : 1;
2292	uint64_t ip6_eext                     : 2;
2293	uint64_t reserved_6_7                 : 2;
2294	uint64_t l4_mal                       : 1;
2295	uint64_t l4_prt                       : 1;
2296	uint64_t l4_chk                       : 1;
2297	uint64_t l4_len                       : 1;
2298	uint64_t tcp_flag                     : 1;
2299	uint64_t l2_mal                       : 1;
2300	uint64_t vs_qos                       : 1;
2301	uint64_t vs_wqe                       : 1;
2302	uint64_t ignrs                        : 1;
2303	uint64_t reserved_17_23               : 7;
2304	uint64_t dsa_grp_sid                  : 1;
2305	uint64_t dsa_grp_scmd                 : 1;
2306	uint64_t dsa_grp_tvid                 : 1;
2307	uint64_t ihmsk_dis                    : 1;
2308	uint64_t reserved_28_63               : 36;
2309#endif
2310	} cn68xxp1;
2311	struct cvmx_pip_gbl_ctl_cn61xx        cnf71xx;
2312};
2313typedef union cvmx_pip_gbl_ctl cvmx_pip_gbl_ctl_t;
2314
2315/**
2316 * cvmx_pip_hg_pri_qos
2317 *
2318 * Notes:
2319 * This register controls accesses to the HG_QOS_TABLE.  To write an entry of
2320 * the table, write PIP_HG_PRI_QOS with PRI=table address, QOS=priority level,
2321 * UP_QOS=1.  To read an entry of the table, write PIP_HG_PRI_QOS with
2322 * PRI=table address, QOS=dont_carepriority level, UP_QOS=0 and then read
2323 * PIP_HG_PRI_QOS.  The table data will be in PIP_HG_PRI_QOS[QOS].
2324 */
2325union cvmx_pip_hg_pri_qos {
2326	uint64_t u64;
2327	struct cvmx_pip_hg_pri_qos_s {
2328#ifdef __BIG_ENDIAN_BITFIELD
2329	uint64_t reserved_13_63               : 51;
2330	uint64_t up_qos                       : 1;  /**< When written to '1', updates the entry in the
2331                                                         HG_QOS_TABLE as specified by PRI to a value of
2332                                                         QOS as follows
2333                                                         HG_QOS_TABLE[PRI] = QOS */
2334	uint64_t reserved_11_11               : 1;
2335	uint64_t qos                          : 3;  /**< QOS Map level to priority */
2336	uint64_t reserved_6_7                 : 2;
2337	uint64_t pri                          : 6;  /**< The priority level from HiGig header
2338                                                         HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
2339                                                         HiGig2       PRI = [DP[1:0], TC[3:0]] */
2340#else
2341	uint64_t pri                          : 6;
2342	uint64_t reserved_6_7                 : 2;
2343	uint64_t qos                          : 3;
2344	uint64_t reserved_11_11               : 1;
2345	uint64_t up_qos                       : 1;
2346	uint64_t reserved_13_63               : 51;
2347#endif
2348	} s;
2349	struct cvmx_pip_hg_pri_qos_s          cn52xx;
2350	struct cvmx_pip_hg_pri_qos_s          cn52xxp1;
2351	struct cvmx_pip_hg_pri_qos_s          cn56xx;
2352	struct cvmx_pip_hg_pri_qos_s          cn61xx;
2353	struct cvmx_pip_hg_pri_qos_s          cn63xx;
2354	struct cvmx_pip_hg_pri_qos_s          cn63xxp1;
2355	struct cvmx_pip_hg_pri_qos_s          cn66xx;
2356	struct cvmx_pip_hg_pri_qos_s          cnf71xx;
2357};
2358typedef union cvmx_pip_hg_pri_qos cvmx_pip_hg_pri_qos_t;
2359
2360/**
2361 * cvmx_pip_int_en
2362 *
2363 * PIP_INT_EN = PIP's Interrupt Enable Register
2364 *
2365 * Determines if hardward should raise an interrupt to software
2366 * when an exception event occurs.
2367 */
2368union cvmx_pip_int_en {
2369	uint64_t u64;
2370	struct cvmx_pip_int_en_s {
2371#ifdef __BIG_ENDIAN_BITFIELD
2372	uint64_t reserved_13_63               : 51;
2373	uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
2374                                                         stripping in IPD is enable */
2375	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2376	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2377	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2378	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2379	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2380	uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2381	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
2382	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2383	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2384	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2385	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
2386	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2387#else
2388	uint64_t pktdrp                       : 1;
2389	uint64_t crcerr                       : 1;
2390	uint64_t bckprs                       : 1;
2391	uint64_t prtnxa                       : 1;
2392	uint64_t badtag                       : 1;
2393	uint64_t skprunt                      : 1;
2394	uint64_t todoovr                      : 1;
2395	uint64_t feperr                       : 1;
2396	uint64_t beperr                       : 1;
2397	uint64_t minerr                       : 1;
2398	uint64_t maxerr                       : 1;
2399	uint64_t lenerr                       : 1;
2400	uint64_t punyerr                      : 1;
2401	uint64_t reserved_13_63               : 51;
2402#endif
2403	} s;
2404	struct cvmx_pip_int_en_cn30xx {
2405#ifdef __BIG_ENDIAN_BITFIELD
2406	uint64_t reserved_9_63                : 55;
2407	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2408	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2409	uint64_t todoovr                      : 1;  /**< Todo list overflow
2410                                                         (not used in O2P) */
2411	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
2412	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2413	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2414	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure
2415                                                         (not used in O2P) */
2416	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
2417                                                         (not used in O2P) */
2418	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2419#else
2420	uint64_t pktdrp                       : 1;
2421	uint64_t crcerr                       : 1;
2422	uint64_t bckprs                       : 1;
2423	uint64_t prtnxa                       : 1;
2424	uint64_t badtag                       : 1;
2425	uint64_t skprunt                      : 1;
2426	uint64_t todoovr                      : 1;
2427	uint64_t feperr                       : 1;
2428	uint64_t beperr                       : 1;
2429	uint64_t reserved_9_63                : 55;
2430#endif
2431	} cn30xx;
2432	struct cvmx_pip_int_en_cn30xx         cn31xx;
2433	struct cvmx_pip_int_en_cn30xx         cn38xx;
2434	struct cvmx_pip_int_en_cn30xx         cn38xxp2;
2435	struct cvmx_pip_int_en_cn50xx {
2436#ifdef __BIG_ENDIAN_BITFIELD
2437	uint64_t reserved_12_63               : 52;
2438	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2439	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2440	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2441	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2442	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2443	uint64_t todoovr                      : 1;  /**< Todo list overflow */
2444	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
2445	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2446	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2447	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2448	uint64_t reserved_1_1                 : 1;
2449	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2450#else
2451	uint64_t pktdrp                       : 1;
2452	uint64_t reserved_1_1                 : 1;
2453	uint64_t bckprs                       : 1;
2454	uint64_t prtnxa                       : 1;
2455	uint64_t badtag                       : 1;
2456	uint64_t skprunt                      : 1;
2457	uint64_t todoovr                      : 1;
2458	uint64_t feperr                       : 1;
2459	uint64_t beperr                       : 1;
2460	uint64_t minerr                       : 1;
2461	uint64_t maxerr                       : 1;
2462	uint64_t lenerr                       : 1;
2463	uint64_t reserved_12_63               : 52;
2464#endif
2465	} cn50xx;
2466	struct cvmx_pip_int_en_cn52xx {
2467#ifdef __BIG_ENDIAN_BITFIELD
2468	uint64_t reserved_13_63               : 51;
2469	uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
2470                                                         stripping in IPD is enable */
2471	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2472	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2473	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2474	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2475	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2476	uint64_t todoovr                      : 1;  /**< Todo list overflow */
2477	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
2478	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2479	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2480	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2481	uint64_t reserved_1_1                 : 1;
2482	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2483#else
2484	uint64_t pktdrp                       : 1;
2485	uint64_t reserved_1_1                 : 1;
2486	uint64_t bckprs                       : 1;
2487	uint64_t prtnxa                       : 1;
2488	uint64_t badtag                       : 1;
2489	uint64_t skprunt                      : 1;
2490	uint64_t todoovr                      : 1;
2491	uint64_t feperr                       : 1;
2492	uint64_t beperr                       : 1;
2493	uint64_t minerr                       : 1;
2494	uint64_t maxerr                       : 1;
2495	uint64_t lenerr                       : 1;
2496	uint64_t punyerr                      : 1;
2497	uint64_t reserved_13_63               : 51;
2498#endif
2499	} cn52xx;
2500	struct cvmx_pip_int_en_cn52xx         cn52xxp1;
2501	struct cvmx_pip_int_en_s              cn56xx;
2502	struct cvmx_pip_int_en_cn56xxp1 {
2503#ifdef __BIG_ENDIAN_BITFIELD
2504	uint64_t reserved_12_63               : 52;
2505	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2506	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2507	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2508	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2509	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2510	uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2511	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
2512	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2513	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2514	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2515	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
2516                                                         (Disabled in 56xx) */
2517	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2518#else
2519	uint64_t pktdrp                       : 1;
2520	uint64_t crcerr                       : 1;
2521	uint64_t bckprs                       : 1;
2522	uint64_t prtnxa                       : 1;
2523	uint64_t badtag                       : 1;
2524	uint64_t skprunt                      : 1;
2525	uint64_t todoovr                      : 1;
2526	uint64_t feperr                       : 1;
2527	uint64_t beperr                       : 1;
2528	uint64_t minerr                       : 1;
2529	uint64_t maxerr                       : 1;
2530	uint64_t lenerr                       : 1;
2531	uint64_t reserved_12_63               : 52;
2532#endif
2533	} cn56xxp1;
2534	struct cvmx_pip_int_en_cn58xx {
2535#ifdef __BIG_ENDIAN_BITFIELD
2536	uint64_t reserved_13_63               : 51;
2537	uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
2538                                                         stripping in IPD is enable */
2539	uint64_t reserved_9_11                : 3;
2540	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2541	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2542	uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2543	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
2544	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2545	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2546	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2547	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
2548	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2549#else
2550	uint64_t pktdrp                       : 1;
2551	uint64_t crcerr                       : 1;
2552	uint64_t bckprs                       : 1;
2553	uint64_t prtnxa                       : 1;
2554	uint64_t badtag                       : 1;
2555	uint64_t skprunt                      : 1;
2556	uint64_t todoovr                      : 1;
2557	uint64_t feperr                       : 1;
2558	uint64_t beperr                       : 1;
2559	uint64_t reserved_9_11                : 3;
2560	uint64_t punyerr                      : 1;
2561	uint64_t reserved_13_63               : 51;
2562#endif
2563	} cn58xx;
2564	struct cvmx_pip_int_en_cn30xx         cn58xxp1;
2565	struct cvmx_pip_int_en_s              cn61xx;
2566	struct cvmx_pip_int_en_s              cn63xx;
2567	struct cvmx_pip_int_en_s              cn63xxp1;
2568	struct cvmx_pip_int_en_s              cn66xx;
2569	struct cvmx_pip_int_en_s              cn68xx;
2570	struct cvmx_pip_int_en_s              cn68xxp1;
2571	struct cvmx_pip_int_en_s              cnf71xx;
2572};
2573typedef union cvmx_pip_int_en cvmx_pip_int_en_t;
2574
2575/**
2576 * cvmx_pip_int_reg
2577 *
2578 * PIP_INT_REG = PIP's Interrupt Register
2579 *
2580 * Any exception event that occurs is captured in the PIP_INT_REG.
2581 * PIP_INT_REG will set the exception bit regardless of the value
2582 * of PIP_INT_EN.  PIP_INT_EN only controls if an interrupt is
2583 * raised to software.
2584 *
2585 * Notes:
2586 * * TODOOVR
2587 *   The PIP Todo list stores packets that have been received and require work
2588 *   queue entry generation.  PIP will normally assert backpressure when the
2589 *   list fills up such that any error is normally is result of a programming
2590 *   the PIP_BCK_PRS[HIWATER] incorrectly.  PIP itself can handle 29M
2591 *   packets/sec X500MHz or 15Gbs X 64B packets.
2592 *
2593 * * SKPRUNT
2594 *   If a packet size is less then the amount programmed in the per port
2595 *   skippers, then there will be nothing to parse and the entire packet will
2596 *   basically be skipped over.  This is probably not what the user desired, so
2597 *   there is an indication to software.
2598 *
2599 * * BADTAG
2600 *   A tag is considered bad when it is resued by a new packet before it was
2601 *   released by PIP.  PIP considers a tag released by one of two methods.
2602 *   . QOS dropped so that it is released over the pip__ipd_release bus.
2603 *   . WorkQ entry is validated by the pip__ipd_done signal
2604 *
2605 * * PRTNXA
2606 *   If PIP receives a packet that is not in the valid port range, the port
2607 *   processed will be mapped into the valid port space (the mapping is
2608 *   currently unpredictable) and the PRTNXA bit will be set.  PRTNXA will be
2609 *   set for packets received under the following conditions:
2610 *
2611 *   * packet ports (ports 0-31)
2612 *     - GMX_INF_MODE[TYPE]==0 (SGMII), received port is 4-15 or 20-31
2613 *     - GMX_INF_MODE[TYPE]==1 (XAUI),  received port is 1-15 or 17-31
2614 *   * upper ports (pci and loopback ports 32-63)
2615 *     - received port is 40-47 or 52-63
2616 *
2617 * * BCKPRS
2618 *   PIP can assert backpressure to the receive logic when the todo list
2619 *   exceeds a high-water mark (see PIP_BCK_PRS for more details).  When this
2620 *   occurs, PIP can raise an interrupt to software.
2621 *
2622 * * CRCERR
2623 *   Octane can compute CRC in two places.  Each RGMII port will compute its
2624 *   own CRC, but PIP can provide an additional check or check loopback or
2625 *   PCI ports. If PIP computes a bad CRC, then PIP will raise an interrupt.
2626 *
2627 * * PKTDRP
2628 *   PIP can drop packets based on QOS results received from IPD.  If the QOS
2629 *   algorithm decides to drop a packet, PIP will assert an interrupt.
2630 */
2631union cvmx_pip_int_reg {
2632	uint64_t u64;
2633	struct cvmx_pip_int_reg_s {
2634#ifdef __BIG_ENDIAN_BITFIELD
2635	uint64_t reserved_13_63               : 51;
2636	uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
2637                                                         stripping in IPD is enable */
2638	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2639	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2640	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2641	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2642	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2643	uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2644	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
2645                                                         This interrupt can occur with received PARTIAL
2646                                                         packets that are truncated to SKIP bytes or
2647                                                         smaller. */
2648	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2649	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2650	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2651	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
2652	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2653#else
2654	uint64_t pktdrp                       : 1;
2655	uint64_t crcerr                       : 1;
2656	uint64_t bckprs                       : 1;
2657	uint64_t prtnxa                       : 1;
2658	uint64_t badtag                       : 1;
2659	uint64_t skprunt                      : 1;
2660	uint64_t todoovr                      : 1;
2661	uint64_t feperr                       : 1;
2662	uint64_t beperr                       : 1;
2663	uint64_t minerr                       : 1;
2664	uint64_t maxerr                       : 1;
2665	uint64_t lenerr                       : 1;
2666	uint64_t punyerr                      : 1;
2667	uint64_t reserved_13_63               : 51;
2668#endif
2669	} s;
2670	struct cvmx_pip_int_reg_cn30xx {
2671#ifdef __BIG_ENDIAN_BITFIELD
2672	uint64_t reserved_9_63                : 55;
2673	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2674	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2675	uint64_t todoovr                      : 1;  /**< Todo list overflow
2676                                                         (not used in O2P) */
2677	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
2678                                                         This interrupt can occur with received PARTIAL
2679                                                         packets that are truncated to SKIP bytes or
2680                                                         smaller. */
2681	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2682	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2683	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure
2684                                                         (not used in O2P) */
2685	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
2686                                                         (not used in O2P) */
2687	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2688#else
2689	uint64_t pktdrp                       : 1;
2690	uint64_t crcerr                       : 1;
2691	uint64_t bckprs                       : 1;
2692	uint64_t prtnxa                       : 1;
2693	uint64_t badtag                       : 1;
2694	uint64_t skprunt                      : 1;
2695	uint64_t todoovr                      : 1;
2696	uint64_t feperr                       : 1;
2697	uint64_t beperr                       : 1;
2698	uint64_t reserved_9_63                : 55;
2699#endif
2700	} cn30xx;
2701	struct cvmx_pip_int_reg_cn30xx        cn31xx;
2702	struct cvmx_pip_int_reg_cn30xx        cn38xx;
2703	struct cvmx_pip_int_reg_cn30xx        cn38xxp2;
2704	struct cvmx_pip_int_reg_cn50xx {
2705#ifdef __BIG_ENDIAN_BITFIELD
2706	uint64_t reserved_12_63               : 52;
2707	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2708	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2709	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2710	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2711	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2712	uint64_t todoovr                      : 1;  /**< Todo list overflow */
2713	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
2714                                                         This interrupt can occur with received PARTIAL
2715                                                         packets that are truncated to SKIP bytes or
2716                                                         smaller. */
2717	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2718	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2719	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2720	uint64_t reserved_1_1                 : 1;
2721	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2722#else
2723	uint64_t pktdrp                       : 1;
2724	uint64_t reserved_1_1                 : 1;
2725	uint64_t bckprs                       : 1;
2726	uint64_t prtnxa                       : 1;
2727	uint64_t badtag                       : 1;
2728	uint64_t skprunt                      : 1;
2729	uint64_t todoovr                      : 1;
2730	uint64_t feperr                       : 1;
2731	uint64_t beperr                       : 1;
2732	uint64_t minerr                       : 1;
2733	uint64_t maxerr                       : 1;
2734	uint64_t lenerr                       : 1;
2735	uint64_t reserved_12_63               : 52;
2736#endif
2737	} cn50xx;
2738	struct cvmx_pip_int_reg_cn52xx {
2739#ifdef __BIG_ENDIAN_BITFIELD
2740	uint64_t reserved_13_63               : 51;
2741	uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
2742                                                         stripping in IPD is enable */
2743	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2744	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2745	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2746	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2747	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2748	uint64_t todoovr                      : 1;  /**< Todo list overflow */
2749	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
2750                                                         This interrupt can occur with received PARTIAL
2751                                                         packets that are truncated to SKIP bytes or
2752                                                         smaller. */
2753	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2754	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2755	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2756	uint64_t reserved_1_1                 : 1;
2757	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2758#else
2759	uint64_t pktdrp                       : 1;
2760	uint64_t reserved_1_1                 : 1;
2761	uint64_t bckprs                       : 1;
2762	uint64_t prtnxa                       : 1;
2763	uint64_t badtag                       : 1;
2764	uint64_t skprunt                      : 1;
2765	uint64_t todoovr                      : 1;
2766	uint64_t feperr                       : 1;
2767	uint64_t beperr                       : 1;
2768	uint64_t minerr                       : 1;
2769	uint64_t maxerr                       : 1;
2770	uint64_t lenerr                       : 1;
2771	uint64_t punyerr                      : 1;
2772	uint64_t reserved_13_63               : 51;
2773#endif
2774	} cn52xx;
2775	struct cvmx_pip_int_reg_cn52xx        cn52xxp1;
2776	struct cvmx_pip_int_reg_s             cn56xx;
2777	struct cvmx_pip_int_reg_cn56xxp1 {
2778#ifdef __BIG_ENDIAN_BITFIELD
2779	uint64_t reserved_12_63               : 52;
2780	uint64_t lenerr                       : 1;  /**< Frame was received with length error */
2781	uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
2782	uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
2783	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2784	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2785	uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2786	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
2787                                                         This interrupt can occur with received PARTIAL
2788                                                         packets that are truncated to SKIP bytes or
2789                                                         smaller. */
2790	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2791	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2792	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2793	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
2794                                                         (Disabled in 56xx) */
2795	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2796#else
2797	uint64_t pktdrp                       : 1;
2798	uint64_t crcerr                       : 1;
2799	uint64_t bckprs                       : 1;
2800	uint64_t prtnxa                       : 1;
2801	uint64_t badtag                       : 1;
2802	uint64_t skprunt                      : 1;
2803	uint64_t todoovr                      : 1;
2804	uint64_t feperr                       : 1;
2805	uint64_t beperr                       : 1;
2806	uint64_t minerr                       : 1;
2807	uint64_t maxerr                       : 1;
2808	uint64_t lenerr                       : 1;
2809	uint64_t reserved_12_63               : 52;
2810#endif
2811	} cn56xxp1;
2812	struct cvmx_pip_int_reg_cn58xx {
2813#ifdef __BIG_ENDIAN_BITFIELD
2814	uint64_t reserved_13_63               : 51;
2815	uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
2816                                                         stripping in IPD is enable */
2817	uint64_t reserved_9_11                : 3;
2818	uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
2819	uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
2820	uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2821	uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
2822                                                         This interrupt can occur with received PARTIAL
2823                                                         packets that are truncated to SKIP bytes or
2824                                                         smaller. */
2825	uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
2826	uint64_t prtnxa                       : 1;  /**< Non-existent port */
2827	uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
2828	uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
2829	uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
2830#else
2831	uint64_t pktdrp                       : 1;
2832	uint64_t crcerr                       : 1;
2833	uint64_t bckprs                       : 1;
2834	uint64_t prtnxa                       : 1;
2835	uint64_t badtag                       : 1;
2836	uint64_t skprunt                      : 1;
2837	uint64_t todoovr                      : 1;
2838	uint64_t feperr                       : 1;
2839	uint64_t beperr                       : 1;
2840	uint64_t reserved_9_11                : 3;
2841	uint64_t punyerr                      : 1;
2842	uint64_t reserved_13_63               : 51;
2843#endif
2844	} cn58xx;
2845	struct cvmx_pip_int_reg_cn30xx        cn58xxp1;
2846	struct cvmx_pip_int_reg_s             cn61xx;
2847	struct cvmx_pip_int_reg_s             cn63xx;
2848	struct cvmx_pip_int_reg_s             cn63xxp1;
2849	struct cvmx_pip_int_reg_s             cn66xx;
2850	struct cvmx_pip_int_reg_s             cn68xx;
2851	struct cvmx_pip_int_reg_s             cn68xxp1;
2852	struct cvmx_pip_int_reg_s             cnf71xx;
2853};
2854typedef union cvmx_pip_int_reg cvmx_pip_int_reg_t;
2855
2856/**
2857 * cvmx_pip_ip_offset
2858 *
2859 * PIP_IP_OFFSET = Location of the IP in the workQ entry
2860 *
2861 * An 8-byte offset to find the start of the IP header in the data portion of IP workQ entires
2862 *
2863 * Notes:
2864 * In normal configurations, OFFSET must be set in the 0..4 range to allow the
2865 * entire IP and TCP/UDP headers to be buffered in HW and calculate the L4
2866 * checksum for TCP/UDP packets.
2867 *
2868 * The MAX value of OFFSET is determined by the the types of packets that can
2869 * be sent to PIP as follows...
2870 *
2871 * Packet Type              MAX OFFSET
2872 * IPv4/TCP/UDP             7
2873 * IPv6/TCP/UDP             5
2874 * IPv6/without L4 parsing  6
2875 *
2876 * If the L4 can be ignored, then the MAX OFFSET for IPv6 packets can increase
2877 * to 6.  Here are the following programming restrictions for IPv6 packets and
2878 * OFFSET==6:
2879 *
2880 *  . PIP_GBL_CTL[TCP_FLAG] == 0
2881 *  . PIP_GBL_CTL[L4_LEN]   == 0
2882 *  . PIP_GBL_CTL[L4_CHK]   == 0
2883 *  . PIP_GBL_CTL[L4_PRT]   == 0
2884 *  . PIP_GBL_CTL[L4_MAL]   == 0
2885 *  . PIP_DEC_IPSEC[TCP]    == 0
2886 *  . PIP_DEC_IPSEC[UDP]    == 0
2887 *  . PIP_PRT_TAG[IP6_DPRT] == 0
2888 *  . PIP_PRT_TAG[IP6_SPRT] == 0
2889 *  . PIP_PRT_TAG[TCP6_TAG] == 0
2890 *  . PIP_GBL_CFG[TAG_SYN]  == 0
2891 */
2892union cvmx_pip_ip_offset {
2893	uint64_t u64;
2894	struct cvmx_pip_ip_offset_s {
2895#ifdef __BIG_ENDIAN_BITFIELD
2896	uint64_t reserved_3_63                : 61;
2897	uint64_t offset                       : 3;  /**< Number of 8B ticks to include in workQ entry
2898                                                          prior to IP data
2899                                                         - 0:  0 Bytes / IP start at WORD4 of workQ entry
2900                                                         - 1:  8 Bytes / IP start at WORD5 of workQ entry
2901                                                         - 2: 16 Bytes / IP start at WORD6 of workQ entry
2902                                                         - 3: 24 Bytes / IP start at WORD7 of workQ entry
2903                                                         - 4: 32 Bytes / IP start at WORD8 of workQ entry
2904                                                         - 5: 40 Bytes / IP start at WORD9 of workQ entry
2905                                                         - 6: 48 Bytes / IP start at WORD10 of workQ entry
2906                                                         - 7: 56 Bytes / IP start at WORD11 of workQ entry */
2907#else
2908	uint64_t offset                       : 3;
2909	uint64_t reserved_3_63                : 61;
2910#endif
2911	} s;
2912	struct cvmx_pip_ip_offset_s           cn30xx;
2913	struct cvmx_pip_ip_offset_s           cn31xx;
2914	struct cvmx_pip_ip_offset_s           cn38xx;
2915	struct cvmx_pip_ip_offset_s           cn38xxp2;
2916	struct cvmx_pip_ip_offset_s           cn50xx;
2917	struct cvmx_pip_ip_offset_s           cn52xx;
2918	struct cvmx_pip_ip_offset_s           cn52xxp1;
2919	struct cvmx_pip_ip_offset_s           cn56xx;
2920	struct cvmx_pip_ip_offset_s           cn56xxp1;
2921	struct cvmx_pip_ip_offset_s           cn58xx;
2922	struct cvmx_pip_ip_offset_s           cn58xxp1;
2923	struct cvmx_pip_ip_offset_s           cn61xx;
2924	struct cvmx_pip_ip_offset_s           cn63xx;
2925	struct cvmx_pip_ip_offset_s           cn63xxp1;
2926	struct cvmx_pip_ip_offset_s           cn66xx;
2927	struct cvmx_pip_ip_offset_s           cn68xx;
2928	struct cvmx_pip_ip_offset_s           cn68xxp1;
2929	struct cvmx_pip_ip_offset_s           cnf71xx;
2930};
2931typedef union cvmx_pip_ip_offset cvmx_pip_ip_offset_t;
2932
2933/**
2934 * cvmx_pip_pri_tbl#
2935 *
2936 * Notes:
2937 * The priority level from HiGig header is as follows
2938 *
2939 * HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
2940 * HiGig2       PRI = [DP[1:0], TC[3:0]]
2941 *
2942 * DSA          PRI = WORD0[15:13]
2943 *
2944 * VLAN         PRI = VLAN[15:13]
2945 *
2946 * DIFFSERV         = IP.TOS/CLASS<7:2>
2947 */
2948union cvmx_pip_pri_tblx {
2949	uint64_t u64;
2950	struct cvmx_pip_pri_tblx_s {
2951#ifdef __BIG_ENDIAN_BITFIELD
2952	uint64_t diff2_padd                   : 8;  /**< Diffserv port-add */
2953	uint64_t hg2_padd                     : 8;  /**< HG_PRI port-add */
2954	uint64_t vlan2_padd                   : 8;  /**< VLAN port-add */
2955	uint64_t reserved_38_39               : 2;
2956	uint64_t diff2_bpid                   : 6;  /**< Diffserv backpressure ID */
2957	uint64_t reserved_30_31               : 2;
2958	uint64_t hg2_bpid                     : 6;  /**< HG_PRI backpressure ID */
2959	uint64_t reserved_22_23               : 2;
2960	uint64_t vlan2_bpid                   : 6;  /**< VLAN backpressure ID */
2961	uint64_t reserved_11_15               : 5;
2962	uint64_t diff2_qos                    : 3;  /**< Diffserv QOS level */
2963	uint64_t reserved_7_7                 : 1;
2964	uint64_t hg2_qos                      : 3;  /**< HG_PRI QOS level */
2965	uint64_t reserved_3_3                 : 1;
2966	uint64_t vlan2_qos                    : 3;  /**< VLAN QOS level */
2967#else
2968	uint64_t vlan2_qos                    : 3;
2969	uint64_t reserved_3_3                 : 1;
2970	uint64_t hg2_qos                      : 3;
2971	uint64_t reserved_7_7                 : 1;
2972	uint64_t diff2_qos                    : 3;
2973	uint64_t reserved_11_15               : 5;
2974	uint64_t vlan2_bpid                   : 6;
2975	uint64_t reserved_22_23               : 2;
2976	uint64_t hg2_bpid                     : 6;
2977	uint64_t reserved_30_31               : 2;
2978	uint64_t diff2_bpid                   : 6;
2979	uint64_t reserved_38_39               : 2;
2980	uint64_t vlan2_padd                   : 8;
2981	uint64_t hg2_padd                     : 8;
2982	uint64_t diff2_padd                   : 8;
2983#endif
2984	} s;
2985	struct cvmx_pip_pri_tblx_s            cn68xx;
2986	struct cvmx_pip_pri_tblx_s            cn68xxp1;
2987};
2988typedef union cvmx_pip_pri_tblx cvmx_pip_pri_tblx_t;
2989
2990/**
2991 * cvmx_pip_prt_cfg#
2992 *
2993 * PIP_PRT_CFGX = Per port config information
2994 *
2995 */
2996union cvmx_pip_prt_cfgx {
2997	uint64_t u64;
2998	struct cvmx_pip_prt_cfgx_s {
2999#ifdef __BIG_ENDIAN_BITFIELD
3000	uint64_t reserved_55_63               : 9;
3001	uint64_t ih_pri                       : 1;  /**< Use the PRI/QOS field in the instruction header
3002                                                         as the PRIORITY in BPID calculations. */
3003	uint64_t len_chk_sel                  : 1;  /**< Selects which PIP_FRM_LEN_CHK register is used
3004                                                         for this port-kind for MINERR and MAXERR checks.
3005                                                         LEN_CHK_SEL=0, use PIP_FRM_LEN_CHK0
3006                                                         LEN_CHK_SEL=1, use PIP_FRM_LEN_CHK1 */
3007	uint64_t pad_len                      : 1;  /**< When set, disables the length check for pkts with
3008                                                         padding in the client data */
3009	uint64_t vlan_len                     : 1;  /**< When set, disables the length check for DSA/VLAN
3010                                                         pkts */
3011	uint64_t lenerr_en                    : 1;  /**< L2 length error check enable
3012                                                         Frame was received with length error
3013                                                          Typically, this check will not be enabled for
3014                                                          incoming packets on the DPI and sRIO ports
3015                                                          because the CRC bytes may not normally be
3016                                                          present. */
3017	uint64_t maxerr_en                    : 1;  /**< Max frame error check enable
3018                                                         Frame was received with length > max_length
3019                                                         max_length is defined by PIP_FRM_LEN_CHK[MAXLEN] */
3020	uint64_t minerr_en                    : 1;  /**< Min frame error check enable
3021                                                         Frame was received with length < min_length
3022                                                          Typically, this check will not be enabled for
3023                                                          incoming packets on the DPI and sRIO ports
3024                                                          because the CRC bytes may not normally be
3025                                                          present.
3026                                                          min_length is defined by PIP_FRM_LEN_CHK[MINLEN] */
3027	uint64_t grp_wat_47                   : 4;  /**< GRP Watcher enable
3028                                                         (Watchers 4-7) */
3029	uint64_t qos_wat_47                   : 4;  /**< QOS Watcher enable
3030                                                         (Watchers 4-7) */
3031	uint64_t reserved_37_39               : 3;
3032	uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
3033                                                         Normally, IPD will never drop a packet that PIP
3034                                                         indicates is RAW.
3035                                                         0=never drop RAW packets based on RED algorithm
3036                                                         1=allow RAW packet drops based on RED algorithm */
3037	uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
3038                                                         calculating mask tag hash */
3039	uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
3040                                                         configuration.  If DYN_RS is set then
3041                                                         PKT_INST_HDR[RS] is not used.  When using 2-byte
3042                                                         instruction header words, either DYN_RS or
3043                                                         PIP_GBL_CTL[IGNRS] should be set. */
3044	uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
3045                                                         Internally set for RAWFULL/RAWSCHED packets
3046                                                         on the DPI ports (32-35).
3047                                                         Internally cleared for all other packets on the
3048                                                         DPI ports (32-35).
3049                                                         Must be zero in DSA mode */
3050	uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
3051	uint64_t hg_qos                       : 1;  /**< When set, uses the HiGig priority bits as a
3052                                                         lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
3053                                                         to determine the QOS value
3054                                                         HG_QOS must not be set when HIGIG_EN=0 */
3055	uint64_t qos                          : 3;  /**< Default QOS level of the port */
3056	uint64_t qos_wat                      : 4;  /**< QOS Watcher enable
3057                                                         (Watchers 0-3) */
3058	uint64_t qos_vsel                     : 1;  /**< Which QOS in PIP_QOS_VLAN to use
3059                                                         0 = PIP_QOS_VLAN[QOS]
3060                                                         1 = PIP_QOS_VLAN[QOS1] */
3061	uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
3062                                                         if DSA/VLAN exists, it is used
3063                                                         else if IP exists, Diffserv is used
3064                                                         else the per port default is used
3065                                                         Watchers are still highest priority */
3066	uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
3067	uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
3068	uint64_t reserved_13_15               : 3;
3069	uint64_t crc_en                       : 1;  /**< CRC Checking enabled */
3070	uint64_t higig_en                     : 1;  /**< Enable HiGig parsing
3071                                                         Should not be set for DPI ports (ports 32-35)
3072                                                         Should not be set for sRIO ports (ports 40-47)
3073                                                         Should not be set for ports in which PTP_MODE=1
3074                                                         When HIGIG_EN=1:
3075                                                          DSA_EN field below must be zero
3076                                                          PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3077                                                          SKIP field below is both Skip I size and the
3078                                                            size of the HiGig* header (12 or 16 bytes) */
3079	uint64_t dsa_en                       : 1;  /**< Enable DSA tag parsing
3080                                                         Should not be set for sRIO (ports 40-47)
3081                                                         Should not be set for ports in which PTP_MODE=1
3082                                                         When DSA_EN=1:
3083                                                          HIGIG_EN field above must be zero
3084                                                          SKIP field below is size of DSA tag (4, 8, or
3085                                                            12 bytes) rather than the size of Skip I
3086                                                          total SKIP (Skip I + header + Skip II
3087                                                            must be zero
3088                                                          INST_HDR field above must be zero (non-DPI
3089                                                            ports)
3090                                                          PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3091                                                          For DPI ports, SLI_PKT*_INSTR_HEADER[USE_IHDR]
3092                                                            and DPI_INST_HDR[R] should be clear
3093                                                          MODE field below must be "skip to L2" */
3094	cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
3095                                                         0 = no packet inspection (Uninterpreted)
3096                                                         1 = L2 parsing / skip to L2
3097                                                         2 = IP parsing / skip to L3
3098                                                         3 = (illegal)
3099                                                         Must be 2 ("skip to L2") when in DSA mode. */
3100	uint64_t reserved_7_7                 : 1;
3101	uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.
3102                                                         HW forces the SKIP to zero for packets on DPI
3103                                                         ports (32-35) when a PKT_INST_HDR is present.
3104                                                         See PIP_PRT_CFGB[ALT_SKP*] and PIP_ALT_SKIP_CFG.
3105                                                         See HRM sections "Parse Mode and Skip Length
3106                                                         Selection" and "Legal Skip Values"
3107                                                         for further details.
3108                                                         In DSA mode, indicates the DSA header length, not
3109                                                           Skip I size. (Must be 4,8,or 12)
3110                                                         In HIGIG mode, indicates both the Skip I size and
3111                                                           the HiGig header size (Must be 12 or 16).
3112                                                         If PTP_MODE, the 8B timestamp is prepended to the
3113                                                          packet.  SKIP should be increased by 8 to
3114                                                          compensate for the additional timestamp field. */
3115#else
3116	uint64_t skip                         : 7;
3117	uint64_t reserved_7_7                 : 1;
3118	cvmx_pip_port_parse_mode_t mode       : 2;
3119	uint64_t dsa_en                       : 1;
3120	uint64_t higig_en                     : 1;
3121	uint64_t crc_en                       : 1;
3122	uint64_t reserved_13_15               : 3;
3123	uint64_t qos_vlan                     : 1;
3124	uint64_t qos_diff                     : 1;
3125	uint64_t qos_vod                      : 1;
3126	uint64_t qos_vsel                     : 1;
3127	uint64_t qos_wat                      : 4;
3128	uint64_t qos                          : 3;
3129	uint64_t hg_qos                       : 1;
3130	uint64_t grp_wat                      : 4;
3131	uint64_t inst_hdr                     : 1;
3132	uint64_t dyn_rs                       : 1;
3133	uint64_t tag_inc                      : 2;
3134	uint64_t rawdrp                       : 1;
3135	uint64_t reserved_37_39               : 3;
3136	uint64_t qos_wat_47                   : 4;
3137	uint64_t grp_wat_47                   : 4;
3138	uint64_t minerr_en                    : 1;
3139	uint64_t maxerr_en                    : 1;
3140	uint64_t lenerr_en                    : 1;
3141	uint64_t vlan_len                     : 1;
3142	uint64_t pad_len                      : 1;
3143	uint64_t len_chk_sel                  : 1;
3144	uint64_t ih_pri                       : 1;
3145	uint64_t reserved_55_63               : 9;
3146#endif
3147	} s;
3148	struct cvmx_pip_prt_cfgx_cn30xx {
3149#ifdef __BIG_ENDIAN_BITFIELD
3150	uint64_t reserved_37_63               : 27;
3151	uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
3152                                                         Normally, IPD will never drop a packet that PIP
3153                                                         indicates is RAW.
3154                                                         0=never drop RAW packets based on RED algorithm
3155                                                         1=allow RAW packet drops based on RED algorithm */
3156	uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
3157                                                         calculating mask tag hash */
3158	uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
3159                                                         configuration.  If DYN_RS is set then
3160                                                         PKT_INST_HDR[RS] is not used.  When using 2-byte
3161                                                         instruction header words, either DYN_RS or
3162                                                         PIP_GBL_CTL[IGNRS] should be set. */
3163	uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
3164                                                         (not for PCI prts, 32-35) */
3165	uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
3166	uint64_t reserved_27_27               : 1;
3167	uint64_t qos                          : 3;  /**< Default QOS level of the port */
3168	uint64_t qos_wat                      : 4;  /**< QOS Watcher enable */
3169	uint64_t reserved_18_19               : 2;
3170	uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
3171	uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
3172	uint64_t reserved_10_15               : 6;
3173	cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
3174                                                         0 = no packet inspection (Uninterpreted)
3175                                                         1 = L2 parsing / skip to L2
3176                                                         2 = IP parsing / skip to L3
3177                                                         3 = PCI Raw (illegal for software to set) */
3178	uint64_t reserved_7_7                 : 1;
3179	uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
3180                                                         apply to packets on PCI ports when a PKT_INST_HDR
3181                                                         is present.  See section 7.2.7 - Legal Skip
3182                                                         Values for further details. */
3183#else
3184	uint64_t skip                         : 7;
3185	uint64_t reserved_7_7                 : 1;
3186	cvmx_pip_port_parse_mode_t mode       : 2;
3187	uint64_t reserved_10_15               : 6;
3188	uint64_t qos_vlan                     : 1;
3189	uint64_t qos_diff                     : 1;
3190	uint64_t reserved_18_19               : 2;
3191	uint64_t qos_wat                      : 4;
3192	uint64_t qos                          : 3;
3193	uint64_t reserved_27_27               : 1;
3194	uint64_t grp_wat                      : 4;
3195	uint64_t inst_hdr                     : 1;
3196	uint64_t dyn_rs                       : 1;
3197	uint64_t tag_inc                      : 2;
3198	uint64_t rawdrp                       : 1;
3199	uint64_t reserved_37_63               : 27;
3200#endif
3201	} cn30xx;
3202	struct cvmx_pip_prt_cfgx_cn30xx       cn31xx;
3203	struct cvmx_pip_prt_cfgx_cn38xx {
3204#ifdef __BIG_ENDIAN_BITFIELD
3205	uint64_t reserved_37_63               : 27;
3206	uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
3207                                                         Normally, IPD will never drop a packet that PIP
3208                                                         indicates is RAW.
3209                                                         0=never drop RAW packets based on RED algorithm
3210                                                         1=allow RAW packet drops based on RED algorithm */
3211	uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
3212                                                         calculating mask tag hash */
3213	uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
3214                                                         configuration.  If DYN_RS is set then
3215                                                         PKT_INST_HDR[RS] is not used.  When using 2-byte
3216                                                         instruction header words, either DYN_RS or
3217                                                         PIP_GBL_CTL[IGNRS] should be set. */
3218	uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
3219                                                         (not for PCI prts, 32-35) */
3220	uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
3221	uint64_t reserved_27_27               : 1;
3222	uint64_t qos                          : 3;  /**< Default QOS level of the port */
3223	uint64_t qos_wat                      : 4;  /**< QOS Watcher enable */
3224	uint64_t reserved_18_19               : 2;
3225	uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
3226	uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
3227	uint64_t reserved_13_15               : 3;
3228	uint64_t crc_en                       : 1;  /**< CRC Checking enabled (for ports 0-31 only) */
3229	uint64_t reserved_10_11               : 2;
3230	cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
3231                                                         0 = no packet inspection (Uninterpreted)
3232                                                         1 = L2 parsing / skip to L2
3233                                                         2 = IP parsing / skip to L3
3234                                                         3 = PCI Raw (illegal for software to set) */
3235	uint64_t reserved_7_7                 : 1;
3236	uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
3237                                                         apply to packets on PCI ports when a PKT_INST_HDR
3238                                                         is present.  See section 7.2.7 - Legal Skip
3239                                                         Values for further details. */
3240#else
3241	uint64_t skip                         : 7;
3242	uint64_t reserved_7_7                 : 1;
3243	cvmx_pip_port_parse_mode_t mode       : 2;
3244	uint64_t reserved_10_11               : 2;
3245	uint64_t crc_en                       : 1;
3246	uint64_t reserved_13_15               : 3;
3247	uint64_t qos_vlan                     : 1;
3248	uint64_t qos_diff                     : 1;
3249	uint64_t reserved_18_19               : 2;
3250	uint64_t qos_wat                      : 4;
3251	uint64_t qos                          : 3;
3252	uint64_t reserved_27_27               : 1;
3253	uint64_t grp_wat                      : 4;
3254	uint64_t inst_hdr                     : 1;
3255	uint64_t dyn_rs                       : 1;
3256	uint64_t tag_inc                      : 2;
3257	uint64_t rawdrp                       : 1;
3258	uint64_t reserved_37_63               : 27;
3259#endif
3260	} cn38xx;
3261	struct cvmx_pip_prt_cfgx_cn38xx       cn38xxp2;
3262	struct cvmx_pip_prt_cfgx_cn50xx {
3263#ifdef __BIG_ENDIAN_BITFIELD
3264	uint64_t reserved_53_63               : 11;
3265	uint64_t pad_len                      : 1;  /**< When set, disables the length check for pkts with
3266                                                         padding in the client data */
3267	uint64_t vlan_len                     : 1;  /**< When set, disables the length check for VLAN pkts */
3268	uint64_t lenerr_en                    : 1;  /**< L2 length error check enable
3269                                                         Frame was received with length error */
3270	uint64_t maxerr_en                    : 1;  /**< Max frame error check enable
3271                                                         Frame was received with length > max_length */
3272	uint64_t minerr_en                    : 1;  /**< Min frame error check enable
3273                                                         Frame was received with length < min_length */
3274	uint64_t grp_wat_47                   : 4;  /**< GRP Watcher enable
3275                                                         (Watchers 4-7) */
3276	uint64_t qos_wat_47                   : 4;  /**< QOS Watcher enable
3277                                                         (Watchers 4-7) */
3278	uint64_t reserved_37_39               : 3;
3279	uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
3280                                                         Normally, IPD will never drop a packet that PIP
3281                                                         indicates is RAW.
3282                                                         0=never drop RAW packets based on RED algorithm
3283                                                         1=allow RAW packet drops based on RED algorithm */
3284	uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
3285                                                         calculating mask tag hash */
3286	uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
3287                                                         configuration.  If DYN_RS is set then
3288                                                         PKT_INST_HDR[RS] is not used.  When using 2-byte
3289                                                         instruction header words, either DYN_RS or
3290                                                         PIP_GBL_CTL[IGNRS] should be set. */
3291	uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
3292                                                         (not for PCI prts, 32-35) */
3293	uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
3294	uint64_t reserved_27_27               : 1;
3295	uint64_t qos                          : 3;  /**< Default QOS level of the port */
3296	uint64_t qos_wat                      : 4;  /**< QOS Watcher enable
3297                                                         (Watchers 0-3) */
3298	uint64_t reserved_19_19               : 1;
3299	uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
3300                                                         if VLAN exists, it is used
3301                                                         else if IP exists, Diffserv is used
3302                                                         else the per port default is used
3303                                                         Watchers are still highest priority */
3304	uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
3305	uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
3306	uint64_t reserved_13_15               : 3;
3307	uint64_t crc_en                       : 1;  /**< CRC Checking enabled
3308                                                         (Disabled in 5020) */
3309	uint64_t reserved_10_11               : 2;
3310	cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
3311                                                         0 = no packet inspection (Uninterpreted)
3312                                                         1 = L2 parsing / skip to L2
3313                                                         2 = IP parsing / skip to L3
3314                                                         3 = PCI Raw (illegal for software to set) */
3315	uint64_t reserved_7_7                 : 1;
3316	uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
3317                                                         apply to packets on PCI ports when a PKT_INST_HDR
3318                                                         is present.  See section 7.2.7 - Legal Skip
3319                                                         Values for further details. */
3320#else
3321	uint64_t skip                         : 7;
3322	uint64_t reserved_7_7                 : 1;
3323	cvmx_pip_port_parse_mode_t mode       : 2;
3324	uint64_t reserved_10_11               : 2;
3325	uint64_t crc_en                       : 1;
3326	uint64_t reserved_13_15               : 3;
3327	uint64_t qos_vlan                     : 1;
3328	uint64_t qos_diff                     : 1;
3329	uint64_t qos_vod                      : 1;
3330	uint64_t reserved_19_19               : 1;
3331	uint64_t qos_wat                      : 4;
3332	uint64_t qos                          : 3;
3333	uint64_t reserved_27_27               : 1;
3334	uint64_t grp_wat                      : 4;
3335	uint64_t inst_hdr                     : 1;
3336	uint64_t dyn_rs                       : 1;
3337	uint64_t tag_inc                      : 2;
3338	uint64_t rawdrp                       : 1;
3339	uint64_t reserved_37_39               : 3;
3340	uint64_t qos_wat_47                   : 4;
3341	uint64_t grp_wat_47                   : 4;
3342	uint64_t minerr_en                    : 1;
3343	uint64_t maxerr_en                    : 1;
3344	uint64_t lenerr_en                    : 1;
3345	uint64_t vlan_len                     : 1;
3346	uint64_t pad_len                      : 1;
3347	uint64_t reserved_53_63               : 11;
3348#endif
3349	} cn50xx;
3350	struct cvmx_pip_prt_cfgx_cn52xx {
3351#ifdef __BIG_ENDIAN_BITFIELD
3352	uint64_t reserved_53_63               : 11;
3353	uint64_t pad_len                      : 1;  /**< When set, disables the length check for pkts with
3354                                                         padding in the client data */
3355	uint64_t vlan_len                     : 1;  /**< When set, disables the length check for DSA/VLAN
3356                                                         pkts */
3357	uint64_t lenerr_en                    : 1;  /**< L2 length error check enable
3358                                                         Frame was received with length error
3359                                                          Typically, this check will not be enabled for
3360                                                          incoming packets on the PCIe ports. */
3361	uint64_t maxerr_en                    : 1;  /**< Max frame error check enable
3362                                                         Frame was received with length > max_length */
3363	uint64_t minerr_en                    : 1;  /**< Min frame error check enable
3364                                                         Frame was received with length < min_length
3365                                                          Typically, this check will not be enabled for
3366                                                          incoming packets on the PCIe ports. */
3367	uint64_t grp_wat_47                   : 4;  /**< GRP Watcher enable
3368                                                         (Watchers 4-7) */
3369	uint64_t qos_wat_47                   : 4;  /**< QOS Watcher enable
3370                                                         (Watchers 4-7) */
3371	uint64_t reserved_37_39               : 3;
3372	uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
3373                                                         Normally, IPD will never drop a packet that PIP
3374                                                         indicates is RAW.
3375                                                         0=never drop RAW packets based on RED algorithm
3376                                                         1=allow RAW packet drops based on RED algorithm */
3377	uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
3378                                                         calculating mask tag hash */
3379	uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
3380                                                         configuration.  If DYN_RS is set then
3381                                                         PKT_INST_HDR[RS] is not used.  When using 2-byte
3382                                                         instruction header words, either DYN_RS or
3383                                                         PIP_GBL_CTL[IGNRS] should be set. */
3384	uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
3385                                                         (not for PCI ports, 32-35)
3386                                                         Must be zero in DSA mode */
3387	uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
3388	uint64_t hg_qos                       : 1;  /**< When set, uses the HiGig priority bits as a
3389                                                         lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
3390                                                         to determine the QOS value
3391                                                         HG_QOS must not be set when HIGIG_EN=0 */
3392	uint64_t qos                          : 3;  /**< Default QOS level of the port */
3393	uint64_t qos_wat                      : 4;  /**< QOS Watcher enable
3394                                                         (Watchers 0-3) */
3395	uint64_t qos_vsel                     : 1;  /**< Which QOS in PIP_QOS_VLAN to use
3396                                                         0 = PIP_QOS_VLAN[QOS]
3397                                                         1 = PIP_QOS_VLAN[QOS1] */
3398	uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
3399                                                         if DSA/VLAN exists, it is used
3400                                                         else if IP exists, Diffserv is used
3401                                                         else the per port default is used
3402                                                         Watchers are still highest priority */
3403	uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
3404	uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
3405	uint64_t reserved_13_15               : 3;
3406	uint64_t crc_en                       : 1;  /**< CRC Checking enabled
3407                                                         (Disabled in 52xx) */
3408	uint64_t higig_en                     : 1;  /**< Enable HiGig parsing
3409                                                         When HIGIG_EN=1:
3410                                                          DSA_EN field below must be zero
3411                                                          SKIP field below is both Skip I size and the
3412                                                            size of the HiGig* header (12 or 16 bytes) */
3413	uint64_t dsa_en                       : 1;  /**< Enable DSA tag parsing
3414                                                         When DSA_EN=1:
3415                                                          HIGIG_EN field above must be zero
3416                                                          SKIP field below is size of DSA tag (4, 8, or
3417                                                            12 bytes) rather than the size of Skip I
3418                                                          total SKIP (Skip I + header + Skip II
3419                                                            must be zero
3420                                                          INST_HDR field above must be zero
3421                                                          MODE field below must be "skip to L2" */
3422	cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
3423                                                         0 = no packet inspection (Uninterpreted)
3424                                                         1 = L2 parsing / skip to L2
3425                                                         2 = IP parsing / skip to L3
3426                                                         3 = (illegal)
3427                                                         Must be 2 ("skip to L2") when in DSA mode. */
3428	uint64_t reserved_7_7                 : 1;
3429	uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.
3430                                                         See section 7.2.7 - Legal Skip
3431                                                         Values for further details.
3432                                                         In DSA mode, indicates the DSA header length, not
3433                                                           Skip I size. (Must be 4,8,or 12)
3434                                                         In HIGIG mode, indicates both the Skip I size and
3435                                                           the HiGig header size (Must be 12 or 16). */
3436#else
3437	uint64_t skip                         : 7;
3438	uint64_t reserved_7_7                 : 1;
3439	cvmx_pip_port_parse_mode_t mode       : 2;
3440	uint64_t dsa_en                       : 1;
3441	uint64_t higig_en                     : 1;
3442	uint64_t crc_en                       : 1;
3443	uint64_t reserved_13_15               : 3;
3444	uint64_t qos_vlan                     : 1;
3445	uint64_t qos_diff                     : 1;
3446	uint64_t qos_vod                      : 1;
3447	uint64_t qos_vsel                     : 1;
3448	uint64_t qos_wat                      : 4;
3449	uint64_t qos                          : 3;
3450	uint64_t hg_qos                       : 1;
3451	uint64_t grp_wat                      : 4;
3452	uint64_t inst_hdr                     : 1;
3453	uint64_t dyn_rs                       : 1;
3454	uint64_t tag_inc                      : 2;
3455	uint64_t rawdrp                       : 1;
3456	uint64_t reserved_37_39               : 3;
3457	uint64_t qos_wat_47                   : 4;
3458	uint64_t grp_wat_47                   : 4;
3459	uint64_t minerr_en                    : 1;
3460	uint64_t maxerr_en                    : 1;
3461	uint64_t lenerr_en                    : 1;
3462	uint64_t vlan_len                     : 1;
3463	uint64_t pad_len                      : 1;
3464	uint64_t reserved_53_63               : 11;
3465#endif
3466	} cn52xx;
3467	struct cvmx_pip_prt_cfgx_cn52xx       cn52xxp1;
3468	struct cvmx_pip_prt_cfgx_cn52xx       cn56xx;
3469	struct cvmx_pip_prt_cfgx_cn50xx       cn56xxp1;
3470	struct cvmx_pip_prt_cfgx_cn58xx {
3471#ifdef __BIG_ENDIAN_BITFIELD
3472	uint64_t reserved_37_63               : 27;
3473	uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
3474                                                         Normally, IPD will never drop a packet that PIP
3475                                                         indicates is RAW.
3476                                                         0=never drop RAW packets based on RED algorithm
3477                                                         1=allow RAW packet drops based on RED algorithm */
3478	uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
3479                                                         calculating mask tag hash */
3480	uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
3481                                                         configuration.  If DYN_RS is set then
3482                                                         PKT_INST_HDR[RS] is not used.  When using 2-byte
3483                                                         instruction header words, either DYN_RS or
3484                                                         PIP_GBL_CTL[IGNRS] should be set. */
3485	uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
3486                                                         (not for PCI prts, 32-35) */
3487	uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
3488	uint64_t reserved_27_27               : 1;
3489	uint64_t qos                          : 3;  /**< Default QOS level of the port */
3490	uint64_t qos_wat                      : 4;  /**< QOS Watcher enable */
3491	uint64_t reserved_19_19               : 1;
3492	uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
3493                                                         if VLAN exists, it is used
3494                                                         else if IP exists, Diffserv is used
3495                                                         else the per port default is used
3496                                                         Watchers are still highest priority */
3497	uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
3498	uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
3499	uint64_t reserved_13_15               : 3;
3500	uint64_t crc_en                       : 1;  /**< CRC Checking enabled (for ports 0-31 only) */
3501	uint64_t reserved_10_11               : 2;
3502	cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
3503                                                         0 = no packet inspection (Uninterpreted)
3504                                                         1 = L2 parsing / skip to L2
3505                                                         2 = IP parsing / skip to L3
3506                                                         3 = PCI Raw (illegal for software to set) */
3507	uint64_t reserved_7_7                 : 1;
3508	uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
3509                                                         apply to packets on PCI ports when a PKT_INST_HDR
3510                                                         is present.  See section 7.2.7 - Legal Skip
3511                                                         Values for further details. */
3512#else
3513	uint64_t skip                         : 7;
3514	uint64_t reserved_7_7                 : 1;
3515	cvmx_pip_port_parse_mode_t mode       : 2;
3516	uint64_t reserved_10_11               : 2;
3517	uint64_t crc_en                       : 1;
3518	uint64_t reserved_13_15               : 3;
3519	uint64_t qos_vlan                     : 1;
3520	uint64_t qos_diff                     : 1;
3521	uint64_t qos_vod                      : 1;
3522	uint64_t reserved_19_19               : 1;
3523	uint64_t qos_wat                      : 4;
3524	uint64_t qos                          : 3;
3525	uint64_t reserved_27_27               : 1;
3526	uint64_t grp_wat                      : 4;
3527	uint64_t inst_hdr                     : 1;
3528	uint64_t dyn_rs                       : 1;
3529	uint64_t tag_inc                      : 2;
3530	uint64_t rawdrp                       : 1;
3531	uint64_t reserved_37_63               : 27;
3532#endif
3533	} cn58xx;
3534	struct cvmx_pip_prt_cfgx_cn58xx       cn58xxp1;
3535	struct cvmx_pip_prt_cfgx_cn52xx       cn61xx;
3536	struct cvmx_pip_prt_cfgx_cn52xx       cn63xx;
3537	struct cvmx_pip_prt_cfgx_cn52xx       cn63xxp1;
3538	struct cvmx_pip_prt_cfgx_cn52xx       cn66xx;
3539	struct cvmx_pip_prt_cfgx_cn68xx {
3540#ifdef __BIG_ENDIAN_BITFIELD
3541	uint64_t reserved_55_63               : 9;
3542	uint64_t ih_pri                       : 1;  /**< Use the PRI/QOS field in the instruction header
3543                                                         as the PRIORITY in BPID calculations. */
3544	uint64_t len_chk_sel                  : 1;  /**< Selects which PIP_FRM_LEN_CHK register is used
3545                                                         for this port-kind for MINERR and MAXERR checks.
3546                                                         LEN_CHK_SEL=0, use PIP_FRM_LEN_CHK0
3547                                                         LEN_CHK_SEL=1, use PIP_FRM_LEN_CHK1 */
3548	uint64_t pad_len                      : 1;  /**< When set, disables the length check for pkts with
3549                                                         padding in the client data */
3550	uint64_t vlan_len                     : 1;  /**< When set, disables the length check for DSA/VLAN
3551                                                         pkts */
3552	uint64_t lenerr_en                    : 1;  /**< L2 length error check enable
3553                                                         Frame was received with length error
3554                                                          Typically, this check will not be enabled for
3555                                                          incoming packets on the DPI rings
3556                                                          because the CRC bytes may not normally be
3557                                                          present. */
3558	uint64_t maxerr_en                    : 1;  /**< Max frame error check enable
3559                                                         Frame was received with length > max_length
3560                                                         max_length is defined by PIP_FRM_LEN_CHK[MAXLEN] */
3561	uint64_t minerr_en                    : 1;  /**< Min frame error check enable
3562                                                         Frame was received with length < min_length
3563                                                          Typically, this check will not be enabled for
3564                                                          incoming packets on the DPI rings
3565                                                          because the CRC bytes may not normally be
3566                                                          present.
3567                                                          min_length is defined by PIP_FRM_LEN_CHK[MINLEN] */
3568	uint64_t grp_wat_47                   : 4;  /**< GRP Watcher enable
3569                                                         (Watchers 4-7) */
3570	uint64_t qos_wat_47                   : 4;  /**< QOS Watcher enable
3571                                                         (Watchers 4-7) */
3572	uint64_t reserved_37_39               : 3;
3573	uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
3574                                                         Normally, IPD will never drop a packet in which
3575                                                         PKT_INST_HDR[R] is set.
3576                                                         0=never drop RAW packets based on RED algorithm
3577                                                         1=allow RAW packet drops based on RED algorithm */
3578	uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
3579                                                         calculating mask tag hash */
3580	uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
3581                                                         configuration.  If DYN_RS is set then
3582                                                         PKT_INST_HDR[RS] is not used.  When using 2-byte
3583                                                         instruction header words, either DYN_RS or
3584                                                         PIP_GBL_CTL[IGNRS] should be set. */
3585	uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
3586                                                         Normally INST_HDR should be set for packets that
3587                                                         include a PKT_INST_HDR prepended by DPI hardware.
3588                                                         (If SLI_PORTx_PKIND[RPK_ENB]=0, for packets that
3589                                                         include a PKT_INST_HDR prepended by DPI,
3590                                                         PIP internally sets INST_HDR before using it.)
3591                                                         Must be zero in DSA mode */
3592	uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
3593	uint64_t hg_qos                       : 1;  /**< When set, uses the HiGig priority bits as a
3594                                                         lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
3595                                                         to determine the QOS value
3596                                                         HG_QOS must not be set when HIGIG_EN=0 */
3597	uint64_t qos                          : 3;  /**< Default QOS level of the port */
3598	uint64_t qos_wat                      : 4;  /**< QOS Watcher enable
3599                                                         (Watchers 0-3) */
3600	uint64_t reserved_19_19               : 1;
3601	uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
3602                                                         if DSA/VLAN exists, it is used
3603                                                         else if IP exists, Diffserv is used
3604                                                         else the per port default is used
3605                                                         Watchers are still highest priority */
3606	uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
3607	uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
3608	uint64_t reserved_13_15               : 3;
3609	uint64_t crc_en                       : 1;  /**< CRC Checking enabled */
3610	uint64_t higig_en                     : 1;  /**< Enable HiGig parsing
3611                                                         Normally HIGIG_EN should be clear for packets that
3612                                                         include a PKT_INST_HDR prepended by DPI hardware.
3613                                                         (If SLI_PORTx_PKIND[RPK_ENB]=0, for packets that
3614                                                         include a PKT_INST_HDR prepended by DPI,
3615                                                         PIP internally clears HIGIG_EN before using it.)
3616                                                         Should not be set for ports in which PTP_MODE=1
3617                                                         When HIGIG_EN=1:
3618                                                          DSA_EN field below must be zero
3619                                                          PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3620                                                          SKIP field below is both Skip I size and the
3621                                                            size of the HiGig* header (12 or 16 bytes) */
3622	uint64_t dsa_en                       : 1;  /**< Enable DSA tag parsing
3623                                                         Should not be set for ports in which PTP_MODE=1
3624                                                         When DSA_EN=1:
3625                                                          HIGIG_EN field above must be zero
3626                                                          SKIP field below is size of DSA tag (4, 8, or
3627                                                            12 bytes) rather than the size of Skip I
3628                                                          total SKIP (Skip I + header + Skip II
3629                                                            must be zero
3630                                                          INST_HDR field above must be zero
3631                                                          PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3632                                                          For DPI rings, DPI hardware must not prepend
3633                                                          a PKT_INST_HDR when DSA_EN=1.
3634                                                          MODE field below must be "skip to L2" */
3635	cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
3636                                                         0 = no packet inspection (Uninterpreted)
3637                                                         1 = L2 parsing / skip to L2
3638                                                         2 = IP parsing / skip to L3
3639                                                         3 = (illegal)
3640                                                         Must be 2 ("skip to L2") when in DSA mode. */
3641	uint64_t reserved_7_7                 : 1;
3642	uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.
3643                                                         Should normally be zero for  packets on
3644                                                         DPI rings when a PKT_INST_HDR is prepended by DPI
3645                                                         hardware.
3646                                                         See PIP_PRT_CFGB[ALT_SKP*] and PIP_ALT_SKIP_CFG.
3647                                                         See HRM sections "Parse Mode and Skip Length
3648                                                         Selection" and "Legal Skip Values"
3649                                                         for further details.
3650                                                         In DSA mode, indicates the DSA header length, not
3651                                                           Skip I size. (Must be 4,8,or 12)
3652                                                         In HIGIG mode, indicates both the Skip I size and
3653                                                           the HiGig header size (Must be 12 or 16).
3654                                                         If PTP_MODE, the 8B timestamp is prepended to the
3655                                                          packet.  SKIP should be increased by 8 to
3656                                                          compensate for the additional timestamp field. */
3657#else
3658	uint64_t skip                         : 7;
3659	uint64_t reserved_7_7                 : 1;
3660	cvmx_pip_port_parse_mode_t mode       : 2;
3661	uint64_t dsa_en                       : 1;
3662	uint64_t higig_en                     : 1;
3663	uint64_t crc_en                       : 1;
3664	uint64_t reserved_13_15               : 3;
3665	uint64_t qos_vlan                     : 1;
3666	uint64_t qos_diff                     : 1;
3667	uint64_t qos_vod                      : 1;
3668	uint64_t reserved_19_19               : 1;
3669	uint64_t qos_wat                      : 4;
3670	uint64_t qos                          : 3;
3671	uint64_t hg_qos                       : 1;
3672	uint64_t grp_wat                      : 4;
3673	uint64_t inst_hdr                     : 1;
3674	uint64_t dyn_rs                       : 1;
3675	uint64_t tag_inc                      : 2;
3676	uint64_t rawdrp                       : 1;
3677	uint64_t reserved_37_39               : 3;
3678	uint64_t qos_wat_47                   : 4;
3679	uint64_t grp_wat_47                   : 4;
3680	uint64_t minerr_en                    : 1;
3681	uint64_t maxerr_en                    : 1;
3682	uint64_t lenerr_en                    : 1;
3683	uint64_t vlan_len                     : 1;
3684	uint64_t pad_len                      : 1;
3685	uint64_t len_chk_sel                  : 1;
3686	uint64_t ih_pri                       : 1;
3687	uint64_t reserved_55_63               : 9;
3688#endif
3689	} cn68xx;
3690	struct cvmx_pip_prt_cfgx_cn68xx       cn68xxp1;
3691	struct cvmx_pip_prt_cfgx_cn52xx       cnf71xx;
3692};
3693typedef union cvmx_pip_prt_cfgx cvmx_pip_prt_cfgx_t;
3694
3695/**
3696 * cvmx_pip_prt_cfgb#
3697 *
3698 * Notes:
3699 * PIP_PRT_CFGB* does not exist prior to pass 1.2.
3700 *
3701 */
3702union cvmx_pip_prt_cfgbx {
3703	uint64_t u64;
3704	struct cvmx_pip_prt_cfgbx_s {
3705#ifdef __BIG_ENDIAN_BITFIELD
3706	uint64_t reserved_39_63               : 25;
3707	uint64_t alt_skp_sel                  : 2;  /**< Alternate skip selector
3708                                                         When enabled (ALT_SKP_EN), selects which of the
3709                                                         four PIP_ALT_SKIP_CFGx to use with the packets
3710                                                         arriving on the port-kind. */
3711	uint64_t alt_skp_en                   : 1;  /**< Enable the alternate skip selector
3712                                                         When enabled, the HW is able to recompute the
3713                                                         SKIP I value based on the packet contents.
3714                                                         Up to two of the initial 64 bits of the header
3715                                                         are used along with four PIP_ALT_SKIP_CFGx to
3716                                                         determine the updated SKIP I value.
3717                                                         The bits of the packet used should be present in
3718                                                         all packets.
3719                                                         PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
3720                                                         when ALT_SKP_EN is set.
3721                                                         ALT_SKP_EN must not be set for DPI ports (32-35)
3722                                                         when a PKT_INST_HDR is present.
3723                                                         ALT_SKP_EN should not be enabled for ports which
3724                                                         have GMX_RX_FRM_CTL[PTP_MODE] set as the timestamp
3725                                                         will be prepended onto the initial 64 bits of the
3726                                                         packet. */
3727	uint64_t reserved_35_35               : 1;
3728	uint64_t bsel_num                     : 2;  /**< Which of the 4 bit select extractors to use
3729                                                         (Alias to PIP_PRT_CFG) */
3730	uint64_t bsel_en                      : 1;  /**< Enable to turn on/off use of bit select extractor
3731                                                         (Alias to PIP_PRT_CFG) */
3732	uint64_t reserved_24_31               : 8;
3733	uint64_t base                         : 8;  /**< Base priority address into the table */
3734	uint64_t reserved_6_15                : 10;
3735	uint64_t bpid                         : 6;  /**< Default BPID to use for packets on this port-kind. */
3736#else
3737	uint64_t bpid                         : 6;
3738	uint64_t reserved_6_15                : 10;
3739	uint64_t base                         : 8;
3740	uint64_t reserved_24_31               : 8;
3741	uint64_t bsel_en                      : 1;
3742	uint64_t bsel_num                     : 2;
3743	uint64_t reserved_35_35               : 1;
3744	uint64_t alt_skp_en                   : 1;
3745	uint64_t alt_skp_sel                  : 2;
3746	uint64_t reserved_39_63               : 25;
3747#endif
3748	} s;
3749	struct cvmx_pip_prt_cfgbx_cn61xx {
3750#ifdef __BIG_ENDIAN_BITFIELD
3751	uint64_t reserved_39_63               : 25;
3752	uint64_t alt_skp_sel                  : 2;  /**< Alternate skip selector
3753                                                         When enabled (ALT_SKP_EN), selects which of the
3754                                                         four PIP_ALT_SKIP_CFGx to use with the packets
3755                                                         arriving on the port-kind. */
3756	uint64_t alt_skp_en                   : 1;  /**< Enable the alternate skip selector
3757                                                         When enabled, the HW is able to recompute the
3758                                                         SKIP I value based on the packet contents.
3759                                                         Up to two of the initial 64 bits of the header
3760                                                         are used along with four PIP_ALT_SKIP_CFGx to
3761                                                         determine the updated SKIP I value.
3762                                                         The bits of the packet used should be present in
3763                                                         all packets.
3764                                                         PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
3765                                                         when ALT_SKP_EN is set.
3766                                                         ALT_SKP_EN must not be set for DPI ports (32-35)
3767                                                         when a PKT_INST_HDR is present.
3768                                                         ALT_SKP_EN should not be enabled for ports which
3769                                                         have GMX_RX_FRM_CTL[PTP_MODE] set as the timestamp
3770                                                         will be prepended onto the initial 64 bits of the
3771                                                         packet. */
3772	uint64_t reserved_35_35               : 1;
3773	uint64_t bsel_num                     : 2;  /**< Which of the 4 bit select extractors to use
3774                                                         (Alias to PIP_PRT_CFG) */
3775	uint64_t bsel_en                      : 1;  /**< Enable to turn on/off use of bit select extractor
3776                                                         (Alias to PIP_PRT_CFG) */
3777	uint64_t reserved_0_31                : 32;
3778#else
3779	uint64_t reserved_0_31                : 32;
3780	uint64_t bsel_en                      : 1;
3781	uint64_t bsel_num                     : 2;
3782	uint64_t reserved_35_35               : 1;
3783	uint64_t alt_skp_en                   : 1;
3784	uint64_t alt_skp_sel                  : 2;
3785	uint64_t reserved_39_63               : 25;
3786#endif
3787	} cn61xx;
3788	struct cvmx_pip_prt_cfgbx_cn66xx {
3789#ifdef __BIG_ENDIAN_BITFIELD
3790	uint64_t reserved_39_63               : 25;
3791	uint64_t alt_skp_sel                  : 2;  /**< Alternate skip selector
3792                                                         When enabled (ALT_SKP_EN), selects which of the
3793                                                         four PIP_ALT_SKIP_CFGx to use with the packets
3794                                                         arriving on the port-kind. */
3795	uint64_t alt_skp_en                   : 1;  /**< Enable the alternate skip selector
3796                                                         When enabled, the HW is able to recompute the
3797                                                         SKIP I value based on the packet contents.
3798                                                         Up to two of the initial 64 bits of the header
3799                                                         are used along with four PIP_ALT_SKIP_CFGx to
3800                                                         determine the updated SKIP I value.
3801                                                         The bits of the packet used should be present in
3802                                                         all packets.
3803                                                         PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
3804                                                         when ALT_SKP_EN is set.
3805                                                         ALT_SKP_EN must not be set for DPI ports (32-35)
3806                                                         when a PKT_INST_HDR is present. */
3807	uint64_t reserved_0_35                : 36;
3808#else
3809	uint64_t reserved_0_35                : 36;
3810	uint64_t alt_skp_en                   : 1;
3811	uint64_t alt_skp_sel                  : 2;
3812	uint64_t reserved_39_63               : 25;
3813#endif
3814	} cn66xx;
3815	struct cvmx_pip_prt_cfgbx_s           cn68xx;
3816	struct cvmx_pip_prt_cfgbx_cn68xxp1 {
3817#ifdef __BIG_ENDIAN_BITFIELD
3818	uint64_t reserved_24_63               : 40;
3819	uint64_t base                         : 8;  /**< Base priority address into the table */
3820	uint64_t reserved_6_15                : 10;
3821	uint64_t bpid                         : 6;  /**< Default BPID to use for packets on this port-kind. */
3822#else
3823	uint64_t bpid                         : 6;
3824	uint64_t reserved_6_15                : 10;
3825	uint64_t base                         : 8;
3826	uint64_t reserved_24_63               : 40;
3827#endif
3828	} cn68xxp1;
3829	struct cvmx_pip_prt_cfgbx_cn61xx      cnf71xx;
3830};
3831typedef union cvmx_pip_prt_cfgbx cvmx_pip_prt_cfgbx_t;
3832
3833/**
3834 * cvmx_pip_prt_tag#
3835 *
3836 * PIP_PRT_TAGX = Per port config information
3837 *
3838 */
3839union cvmx_pip_prt_tagx {
3840	uint64_t u64;
3841	struct cvmx_pip_prt_tagx_s {
3842#ifdef __BIG_ENDIAN_BITFIELD
3843	uint64_t reserved_54_63               : 10;
3844	uint64_t portadd_en                   : 1;  /**< Enables PIP to optionally increment the incoming
3845                                                         port from the MACs based on port-kind
3846                                                         configuration and packet contents. */
3847	uint64_t inc_hwchk                    : 1;  /**< Include the HW_checksum into WORD0 of the WQE
3848                                                         instead of the L4PTR.  This mode will be
3849                                                         deprecated in future products. */
3850	uint64_t reserved_50_51               : 2;
3851	uint64_t grptagbase_msb               : 2;  /**< Most significant 2 bits of the GRPTAGBASE value. */
3852	uint64_t reserved_46_47               : 2;
3853	uint64_t grptagmask_msb               : 2;  /**< Most significant 2 bits of the GRPTAGMASK value.
3854                                                         group when GRPTAG is set. */
3855	uint64_t reserved_42_43               : 2;
3856	uint64_t grp_msb                      : 2;  /**< Most significant 2 bits of the 6-bit value
3857                                                         indicating the group to schedule to. */
3858	uint64_t grptagbase                   : 4;  /**< Offset to use when computing group from tag bits
3859                                                         when GRPTAG is set. */
3860	uint64_t grptagmask                   : 4;  /**< Which bits of the tag to exclude when computing
3861                                                         group when GRPTAG is set. */
3862	uint64_t grptag                       : 1;  /**< When set, use the lower bit of the tag to compute
3863                                                         the group in the work queue entry
3864                                                         GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
3865	uint64_t grptag_mskip                 : 1;  /**< When set, GRPTAG will be used regardless if the
3866                                                         packet IS_IP. */
3867	uint64_t tag_mode                     : 2;  /**< Which tag algorithm to use
3868                                                         0 = always use tuple tag algorithm
3869                                                         1 = always use mask tag algorithm
3870                                                         2 = if packet is IP, use tuple else use mask
3871                                                         3 = tuple XOR mask */
3872	uint64_t inc_vs                       : 2;  /**< determines the DSA/VLAN ID (VID) to be included in
3873                                                         tuple tag when VLAN stacking is detected
3874                                                         0 = do not include VID in tuple tag generation
3875                                                         1 = include VID (VLAN0) in hash
3876                                                         2 = include VID (VLAN1) in hash
3877                                                         3 = include VID ([VLAN0,VLAN1]) in hash */
3878	uint64_t inc_vlan                     : 1;  /**< when set, the DSA/VLAN ID is included in tuple tag
3879                                                         when VLAN stacking is not detected
3880                                                         0 = do not include VID in tuple tag generation
3881                                                         1 = include VID in hash */
3882	uint64_t inc_prt_flag                 : 1;  /**< sets whether the port is included in tuple tag */
3883	uint64_t ip6_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
3884                                                         included in tuple tag for IPv6 packets */
3885	uint64_t ip4_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
3886                                                         included in tuple tag for IPv4 */
3887	uint64_t ip6_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
3888                                                         included in tuple tag for IPv6 packets */
3889	uint64_t ip4_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
3890                                                         included in tuple tag for IPv4 */
3891	uint64_t ip6_nxth_flag                : 1;  /**< sets whether ipv6 includes next header in tuple
3892                                                         tag hash */
3893	uint64_t ip4_pctl_flag                : 1;  /**< sets whether ipv4 includes protocol in tuple
3894                                                         tag hash */
3895	uint64_t ip6_dst_flag                 : 1;  /**< sets whether ipv6 includes dst address in tuple
3896                                                         tag hash */
3897	uint64_t ip4_dst_flag                 : 1;  /**< sets whether ipv4 includes dst address in tuple
3898                                                         tag hash */
3899	uint64_t ip6_src_flag                 : 1;  /**< sets whether ipv6 includes src address in tuple
3900                                                         tag hash */
3901	uint64_t ip4_src_flag                 : 1;  /**< sets whether ipv4 includes src address in tuple
3902                                                         tag hash */
3903	cvmx_pow_tag_type_t tcp6_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv6)
3904                                                         0 = ordered tags
3905                                                         1 = atomic tags
3906                                                         2 = Null tags */
3907	cvmx_pow_tag_type_t tcp4_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv4)
3908                                                         0 = ordered tags
3909                                                         1 = atomic tags
3910                                                         2 = Null tags */
3911	cvmx_pow_tag_type_t ip6_tag_type      : 2;  /**< sets whether IPv6 packet tag type
3912                                                         0 = ordered tags
3913                                                         1 = atomic tags
3914                                                         2 = Null tags */
3915	cvmx_pow_tag_type_t ip4_tag_type      : 2;  /**< sets whether IPv4 packet tag type
3916                                                         0 = ordered tags
3917                                                         1 = atomic tags
3918                                                         2 = Null tags */
3919	cvmx_pow_tag_type_t non_tag_type      : 2;  /**< sets whether non-IP packet tag type
3920                                                         0 = ordered tags
3921                                                         1 = atomic tags
3922                                                         2 = Null tags */
3923	uint64_t grp                          : 4;  /**< 4-bit value indicating the group to schedule to */
3924#else
3925	uint64_t grp                          : 4;
3926	cvmx_pow_tag_type_t non_tag_type      : 2;
3927	cvmx_pow_tag_type_t ip4_tag_type      : 2;
3928	cvmx_pow_tag_type_t ip6_tag_type      : 2;
3929	cvmx_pow_tag_type_t tcp4_tag_type     : 2;
3930	cvmx_pow_tag_type_t tcp6_tag_type     : 2;
3931	uint64_t ip4_src_flag                 : 1;
3932	uint64_t ip6_src_flag                 : 1;
3933	uint64_t ip4_dst_flag                 : 1;
3934	uint64_t ip6_dst_flag                 : 1;
3935	uint64_t ip4_pctl_flag                : 1;
3936	uint64_t ip6_nxth_flag                : 1;
3937	uint64_t ip4_sprt_flag                : 1;
3938	uint64_t ip6_sprt_flag                : 1;
3939	uint64_t ip4_dprt_flag                : 1;
3940	uint64_t ip6_dprt_flag                : 1;
3941	uint64_t inc_prt_flag                 : 1;
3942	uint64_t inc_vlan                     : 1;
3943	uint64_t inc_vs                       : 2;
3944	uint64_t tag_mode                     : 2;
3945	uint64_t grptag_mskip                 : 1;
3946	uint64_t grptag                       : 1;
3947	uint64_t grptagmask                   : 4;
3948	uint64_t grptagbase                   : 4;
3949	uint64_t grp_msb                      : 2;
3950	uint64_t reserved_42_43               : 2;
3951	uint64_t grptagmask_msb               : 2;
3952	uint64_t reserved_46_47               : 2;
3953	uint64_t grptagbase_msb               : 2;
3954	uint64_t reserved_50_51               : 2;
3955	uint64_t inc_hwchk                    : 1;
3956	uint64_t portadd_en                   : 1;
3957	uint64_t reserved_54_63               : 10;
3958#endif
3959	} s;
3960	struct cvmx_pip_prt_tagx_cn30xx {
3961#ifdef __BIG_ENDIAN_BITFIELD
3962	uint64_t reserved_40_63               : 24;
3963	uint64_t grptagbase                   : 4;  /**< Offset to use when computing group from tag bits
3964                                                         when GRPTAG is set. */
3965	uint64_t grptagmask                   : 4;  /**< Which bits of the tag to exclude when computing
3966                                                         group when GRPTAG is set. */
3967	uint64_t grptag                       : 1;  /**< When set, use the lower bit of the tag to compute
3968                                                         the group in the work queue entry
3969                                                         GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
3970	uint64_t reserved_30_30               : 1;
3971	uint64_t tag_mode                     : 2;  /**< Which tag algorithm to use
3972                                                         0 = always use tuple tag algorithm
3973                                                         1 = always use mask tag algorithm
3974                                                         2 = if packet is IP, use tuple else use mask
3975                                                         3 = tuple XOR mask */
3976	uint64_t inc_vs                       : 2;  /**< determines the VLAN ID (VID) to be included in
3977                                                         tuple tag when VLAN stacking is detected
3978                                                         0 = do not include VID in tuple tag generation
3979                                                         1 = include VID (VLAN0) in hash
3980                                                         2 = include VID (VLAN1) in hash
3981                                                         3 = include VID ([VLAN0,VLAN1]) in hash */
3982	uint64_t inc_vlan                     : 1;  /**< when set, the VLAN ID is included in tuple tag
3983                                                         when VLAN stacking is not detected
3984                                                         0 = do not include VID in tuple tag generation
3985                                                         1 = include VID in hash */
3986	uint64_t inc_prt_flag                 : 1;  /**< sets whether the port is included in tuple tag */
3987	uint64_t ip6_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
3988                                                         included in tuple tag for IPv6 packets */
3989	uint64_t ip4_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
3990                                                         included in tuple tag for IPv4 */
3991	uint64_t ip6_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
3992                                                         included in tuple tag for IPv6 packets */
3993	uint64_t ip4_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
3994                                                         included in tuple tag for IPv4 */
3995	uint64_t ip6_nxth_flag                : 1;  /**< sets whether ipv6 includes next header in tuple
3996                                                         tag hash */
3997	uint64_t ip4_pctl_flag                : 1;  /**< sets whether ipv4 includes protocol in tuple
3998                                                         tag hash */
3999	uint64_t ip6_dst_flag                 : 1;  /**< sets whether ipv6 includes dst address in tuple
4000                                                         tag hash */
4001	uint64_t ip4_dst_flag                 : 1;  /**< sets whether ipv4 includes dst address in tuple
4002                                                         tag hash */
4003	uint64_t ip6_src_flag                 : 1;  /**< sets whether ipv6 includes src address in tuple
4004                                                         tag hash */
4005	uint64_t ip4_src_flag                 : 1;  /**< sets whether ipv4 includes src address in tuple
4006                                                         tag hash */
4007	cvmx_pow_tag_type_t tcp6_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv6)
4008                                                         0 = ordered tags
4009                                                         1 = atomic tags
4010                                                         2 = Null tags */
4011	cvmx_pow_tag_type_t tcp4_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv4)
4012                                                         0 = ordered tags
4013                                                         1 = atomic tags
4014                                                         2 = Null tags */
4015	cvmx_pow_tag_type_t ip6_tag_type      : 2;  /**< sets whether IPv6 packet tag type
4016                                                         0 = ordered tags
4017                                                         1 = atomic tags
4018                                                         2 = Null tags */
4019	cvmx_pow_tag_type_t ip4_tag_type      : 2;  /**< sets whether IPv4 packet tag type
4020                                                         0 = ordered tags
4021                                                         1 = atomic tags
4022                                                         2 = Null tags */
4023	cvmx_pow_tag_type_t non_tag_type      : 2;  /**< sets whether non-IP packet tag type
4024                                                         0 = ordered tags
4025                                                         1 = atomic tags
4026                                                         2 = Null tags */
4027	uint64_t grp                          : 4;  /**< 4-bit value indicating the group to schedule to */
4028#else
4029	uint64_t grp                          : 4;
4030	cvmx_pow_tag_type_t non_tag_type      : 2;
4031	cvmx_pow_tag_type_t ip4_tag_type      : 2;
4032	cvmx_pow_tag_type_t ip6_tag_type      : 2;
4033	cvmx_pow_tag_type_t tcp4_tag_type     : 2;
4034	cvmx_pow_tag_type_t tcp6_tag_type     : 2;
4035	uint64_t ip4_src_flag                 : 1;
4036	uint64_t ip6_src_flag                 : 1;
4037	uint64_t ip4_dst_flag                 : 1;
4038	uint64_t ip6_dst_flag                 : 1;
4039	uint64_t ip4_pctl_flag                : 1;
4040	uint64_t ip6_nxth_flag                : 1;
4041	uint64_t ip4_sprt_flag                : 1;
4042	uint64_t ip6_sprt_flag                : 1;
4043	uint64_t ip4_dprt_flag                : 1;
4044	uint64_t ip6_dprt_flag                : 1;
4045	uint64_t inc_prt_flag                 : 1;
4046	uint64_t inc_vlan                     : 1;
4047	uint64_t inc_vs                       : 2;
4048	uint64_t tag_mode                     : 2;
4049	uint64_t reserved_30_30               : 1;
4050	uint64_t grptag                       : 1;
4051	uint64_t grptagmask                   : 4;
4052	uint64_t grptagbase                   : 4;
4053	uint64_t reserved_40_63               : 24;
4054#endif
4055	} cn30xx;
4056	struct cvmx_pip_prt_tagx_cn30xx       cn31xx;
4057	struct cvmx_pip_prt_tagx_cn30xx       cn38xx;
4058	struct cvmx_pip_prt_tagx_cn30xx       cn38xxp2;
4059	struct cvmx_pip_prt_tagx_cn50xx {
4060#ifdef __BIG_ENDIAN_BITFIELD
4061	uint64_t reserved_40_63               : 24;
4062	uint64_t grptagbase                   : 4;  /**< Offset to use when computing group from tag bits
4063                                                         when GRPTAG is set. */
4064	uint64_t grptagmask                   : 4;  /**< Which bits of the tag to exclude when computing
4065                                                         group when GRPTAG is set. */
4066	uint64_t grptag                       : 1;  /**< When set, use the lower bit of the tag to compute
4067                                                         the group in the work queue entry
4068                                                         GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
4069	uint64_t grptag_mskip                 : 1;  /**< When set, GRPTAG will be used regardless if the
4070                                                         packet IS_IP. */
4071	uint64_t tag_mode                     : 2;  /**< Which tag algorithm to use
4072                                                         0 = always use tuple tag algorithm
4073                                                         1 = always use mask tag algorithm
4074                                                         2 = if packet is IP, use tuple else use mask
4075                                                         3 = tuple XOR mask */
4076	uint64_t inc_vs                       : 2;  /**< determines the VLAN ID (VID) to be included in
4077                                                         tuple tag when VLAN stacking is detected
4078                                                         0 = do not include VID in tuple tag generation
4079                                                         1 = include VID (VLAN0) in hash
4080                                                         2 = include VID (VLAN1) in hash
4081                                                         3 = include VID ([VLAN0,VLAN1]) in hash */
4082	uint64_t inc_vlan                     : 1;  /**< when set, the VLAN ID is included in tuple tag
4083                                                         when VLAN stacking is not detected
4084                                                         0 = do not include VID in tuple tag generation
4085                                                         1 = include VID in hash */
4086	uint64_t inc_prt_flag                 : 1;  /**< sets whether the port is included in tuple tag */
4087	uint64_t ip6_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
4088                                                         included in tuple tag for IPv6 packets */
4089	uint64_t ip4_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
4090                                                         included in tuple tag for IPv4 */
4091	uint64_t ip6_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
4092                                                         included in tuple tag for IPv6 packets */
4093	uint64_t ip4_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
4094                                                         included in tuple tag for IPv4 */
4095	uint64_t ip6_nxth_flag                : 1;  /**< sets whether ipv6 includes next header in tuple
4096                                                         tag hash */
4097	uint64_t ip4_pctl_flag                : 1;  /**< sets whether ipv4 includes protocol in tuple
4098                                                         tag hash */
4099	uint64_t ip6_dst_flag                 : 1;  /**< sets whether ipv6 includes dst address in tuple
4100                                                         tag hash */
4101	uint64_t ip4_dst_flag                 : 1;  /**< sets whether ipv4 includes dst address in tuple
4102                                                         tag hash */
4103	uint64_t ip6_src_flag                 : 1;  /**< sets whether ipv6 includes src address in tuple
4104                                                         tag hash */
4105	uint64_t ip4_src_flag                 : 1;  /**< sets whether ipv4 includes src address in tuple
4106                                                         tag hash */
4107	cvmx_pow_tag_type_t tcp6_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv6)
4108                                                         0 = ordered tags
4109                                                         1 = atomic tags
4110                                                         2 = Null tags */
4111	cvmx_pow_tag_type_t tcp4_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv4)
4112                                                         0 = ordered tags
4113                                                         1 = atomic tags
4114                                                         2 = Null tags */
4115	cvmx_pow_tag_type_t ip6_tag_type      : 2;  /**< sets whether IPv6 packet tag type
4116                                                         0 = ordered tags
4117                                                         1 = atomic tags
4118                                                         2 = Null tags */
4119	cvmx_pow_tag_type_t ip4_tag_type      : 2;  /**< sets whether IPv4 packet tag type
4120                                                         0 = ordered tags
4121                                                         1 = atomic tags
4122                                                         2 = Null tags */
4123	cvmx_pow_tag_type_t non_tag_type      : 2;  /**< sets whether non-IP packet tag type
4124                                                         0 = ordered tags
4125                                                         1 = atomic tags
4126                                                         2 = Null tags */
4127	uint64_t grp                          : 4;  /**< 4-bit value indicating the group to schedule to */
4128#else
4129	uint64_t grp                          : 4;
4130	cvmx_pow_tag_type_t non_tag_type      : 2;
4131	cvmx_pow_tag_type_t ip4_tag_type      : 2;
4132	cvmx_pow_tag_type_t ip6_tag_type      : 2;
4133	cvmx_pow_tag_type_t tcp4_tag_type     : 2;
4134	cvmx_pow_tag_type_t tcp6_tag_type     : 2;
4135	uint64_t ip4_src_flag                 : 1;
4136	uint64_t ip6_src_flag                 : 1;
4137	uint64_t ip4_dst_flag                 : 1;
4138	uint64_t ip6_dst_flag                 : 1;
4139	uint64_t ip4_pctl_flag                : 1;
4140	uint64_t ip6_nxth_flag                : 1;
4141	uint64_t ip4_sprt_flag                : 1;
4142	uint64_t ip6_sprt_flag                : 1;
4143	uint64_t ip4_dprt_flag                : 1;
4144	uint64_t ip6_dprt_flag                : 1;
4145	uint64_t inc_prt_flag                 : 1;
4146	uint64_t inc_vlan                     : 1;
4147	uint64_t inc_vs                       : 2;
4148	uint64_t tag_mode                     : 2;
4149	uint64_t grptag_mskip                 : 1;
4150	uint64_t grptag                       : 1;
4151	uint64_t grptagmask                   : 4;
4152	uint64_t grptagbase                   : 4;
4153	uint64_t reserved_40_63               : 24;
4154#endif
4155	} cn50xx;
4156	struct cvmx_pip_prt_tagx_cn50xx       cn52xx;
4157	struct cvmx_pip_prt_tagx_cn50xx       cn52xxp1;
4158	struct cvmx_pip_prt_tagx_cn50xx       cn56xx;
4159	struct cvmx_pip_prt_tagx_cn50xx       cn56xxp1;
4160	struct cvmx_pip_prt_tagx_cn30xx       cn58xx;
4161	struct cvmx_pip_prt_tagx_cn30xx       cn58xxp1;
4162	struct cvmx_pip_prt_tagx_cn50xx       cn61xx;
4163	struct cvmx_pip_prt_tagx_cn50xx       cn63xx;
4164	struct cvmx_pip_prt_tagx_cn50xx       cn63xxp1;
4165	struct cvmx_pip_prt_tagx_cn50xx       cn66xx;
4166	struct cvmx_pip_prt_tagx_s            cn68xx;
4167	struct cvmx_pip_prt_tagx_s            cn68xxp1;
4168	struct cvmx_pip_prt_tagx_cn50xx       cnf71xx;
4169};
4170typedef union cvmx_pip_prt_tagx cvmx_pip_prt_tagx_t;
4171
4172/**
4173 * cvmx_pip_qos_diff#
4174 *
4175 * PIP_QOS_DIFFX = QOS Diffserv Tables
4176 *
4177 */
4178union cvmx_pip_qos_diffx {
4179	uint64_t u64;
4180	struct cvmx_pip_qos_diffx_s {
4181#ifdef __BIG_ENDIAN_BITFIELD
4182	uint64_t reserved_3_63                : 61;
4183	uint64_t qos                          : 3;  /**< Diffserv QOS level */
4184#else
4185	uint64_t qos                          : 3;
4186	uint64_t reserved_3_63                : 61;
4187#endif
4188	} s;
4189	struct cvmx_pip_qos_diffx_s           cn30xx;
4190	struct cvmx_pip_qos_diffx_s           cn31xx;
4191	struct cvmx_pip_qos_diffx_s           cn38xx;
4192	struct cvmx_pip_qos_diffx_s           cn38xxp2;
4193	struct cvmx_pip_qos_diffx_s           cn50xx;
4194	struct cvmx_pip_qos_diffx_s           cn52xx;
4195	struct cvmx_pip_qos_diffx_s           cn52xxp1;
4196	struct cvmx_pip_qos_diffx_s           cn56xx;
4197	struct cvmx_pip_qos_diffx_s           cn56xxp1;
4198	struct cvmx_pip_qos_diffx_s           cn58xx;
4199	struct cvmx_pip_qos_diffx_s           cn58xxp1;
4200	struct cvmx_pip_qos_diffx_s           cn61xx;
4201	struct cvmx_pip_qos_diffx_s           cn63xx;
4202	struct cvmx_pip_qos_diffx_s           cn63xxp1;
4203	struct cvmx_pip_qos_diffx_s           cn66xx;
4204	struct cvmx_pip_qos_diffx_s           cnf71xx;
4205};
4206typedef union cvmx_pip_qos_diffx cvmx_pip_qos_diffx_t;
4207
4208/**
4209 * cvmx_pip_qos_vlan#
4210 *
4211 * PIP_QOS_VLANX = QOS VLAN Tables
4212 *
4213 * If the PIP indentifies a packet is DSA/VLAN tagged, then the QOS
4214 * can be set based on the DSA/VLAN user priority.  These eight register
4215 * comprise the QOS values for all DSA/VLAN user priority values.
4216 */
4217union cvmx_pip_qos_vlanx {
4218	uint64_t u64;
4219	struct cvmx_pip_qos_vlanx_s {
4220#ifdef __BIG_ENDIAN_BITFIELD
4221	uint64_t reserved_7_63                : 57;
4222	uint64_t qos1                         : 3;  /**< DSA/VLAN QOS level
4223                                                         Selected when PIP_PRT_CFGx[QOS_VSEL] = 1 */
4224	uint64_t reserved_3_3                 : 1;
4225	uint64_t qos                          : 3;  /**< DSA/VLAN QOS level
4226                                                         Selected when PIP_PRT_CFGx[QOS_VSEL] = 0 */
4227#else
4228	uint64_t qos                          : 3;
4229	uint64_t reserved_3_3                 : 1;
4230	uint64_t qos1                         : 3;
4231	uint64_t reserved_7_63                : 57;
4232#endif
4233	} s;
4234	struct cvmx_pip_qos_vlanx_cn30xx {
4235#ifdef __BIG_ENDIAN_BITFIELD
4236	uint64_t reserved_3_63                : 61;
4237	uint64_t qos                          : 3;  /**< VLAN QOS level */
4238#else
4239	uint64_t qos                          : 3;
4240	uint64_t reserved_3_63                : 61;
4241#endif
4242	} cn30xx;
4243	struct cvmx_pip_qos_vlanx_cn30xx      cn31xx;
4244	struct cvmx_pip_qos_vlanx_cn30xx      cn38xx;
4245	struct cvmx_pip_qos_vlanx_cn30xx      cn38xxp2;
4246	struct cvmx_pip_qos_vlanx_cn30xx      cn50xx;
4247	struct cvmx_pip_qos_vlanx_s           cn52xx;
4248	struct cvmx_pip_qos_vlanx_s           cn52xxp1;
4249	struct cvmx_pip_qos_vlanx_s           cn56xx;
4250	struct cvmx_pip_qos_vlanx_cn30xx      cn56xxp1;
4251	struct cvmx_pip_qos_vlanx_cn30xx      cn58xx;
4252	struct cvmx_pip_qos_vlanx_cn30xx      cn58xxp1;
4253	struct cvmx_pip_qos_vlanx_s           cn61xx;
4254	struct cvmx_pip_qos_vlanx_s           cn63xx;
4255	struct cvmx_pip_qos_vlanx_s           cn63xxp1;
4256	struct cvmx_pip_qos_vlanx_s           cn66xx;
4257	struct cvmx_pip_qos_vlanx_s           cnf71xx;
4258};
4259typedef union cvmx_pip_qos_vlanx cvmx_pip_qos_vlanx_t;
4260
4261/**
4262 * cvmx_pip_qos_watch#
4263 *
4264 * PIP_QOS_WATCHX = QOS Watcher Tables
4265 *
4266 * Sets up the Configuration CSRs for the four QOS Watchers.
4267 * Each Watcher can be set to look for a specific protocol,
4268 * TCP/UDP destination port, or Ethertype to override the
4269 * default QOS value.
4270 */
4271union cvmx_pip_qos_watchx {
4272	uint64_t u64;
4273	struct cvmx_pip_qos_watchx_s {
4274#ifdef __BIG_ENDIAN_BITFIELD
4275	uint64_t reserved_48_63               : 16;
4276	uint64_t mask                         : 16; /**< Mask off a range of values */
4277	uint64_t reserved_30_31               : 2;
4278	uint64_t grp                          : 6;  /**< The GRP number of the watcher */
4279	uint64_t reserved_23_23               : 1;
4280	uint64_t qos                          : 3;  /**< The QOS level of the watcher */
4281	uint64_t reserved_19_19               : 1;
4282	cvmx_pip_qos_watch_types match_type   : 3;  /**< The field for the watcher match against
4283                                                         0   = disable across all ports
4284                                                         1   = protocol (ipv4)
4285                                                             = next_header (ipv6)
4286                                                         2   = TCP destination port
4287                                                         3   = UDP destination port
4288                                                         4   = Ether type
4289                                                         5-7 = Reserved */
4290	uint64_t match_value                  : 16; /**< The value to watch for */
4291#else
4292	uint64_t match_value                  : 16;
4293	cvmx_pip_qos_watch_types match_type   : 3;
4294	uint64_t reserved_19_19               : 1;
4295	uint64_t qos                          : 3;
4296	uint64_t reserved_23_23               : 1;
4297	uint64_t grp                          : 6;
4298	uint64_t reserved_30_31               : 2;
4299	uint64_t mask                         : 16;
4300	uint64_t reserved_48_63               : 16;
4301#endif
4302	} s;
4303	struct cvmx_pip_qos_watchx_cn30xx {
4304#ifdef __BIG_ENDIAN_BITFIELD
4305	uint64_t reserved_48_63               : 16;
4306	uint64_t mask                         : 16; /**< Mask off a range of values */
4307	uint64_t reserved_28_31               : 4;
4308	uint64_t grp                          : 4;  /**< The GRP number of the watcher */
4309	uint64_t reserved_23_23               : 1;
4310	uint64_t qos                          : 3;  /**< The QOS level of the watcher */
4311	uint64_t reserved_18_19               : 2;
4312	cvmx_pip_qos_watch_types match_type   : 2;  /**< The field for the watcher match against
4313                                                         0 = disable across all ports
4314                                                         1 = protocol (ipv4)
4315                                                           = next_header (ipv6)
4316                                                         2 = TCP destination port
4317                                                         3 = UDP destination port */
4318	uint64_t match_value                  : 16; /**< The value to watch for */
4319#else
4320	uint64_t match_value                  : 16;
4321	cvmx_pip_qos_watch_types match_type   : 2;
4322	uint64_t reserved_18_19               : 2;
4323	uint64_t qos                          : 3;
4324	uint64_t reserved_23_23               : 1;
4325	uint64_t grp                          : 4;
4326	uint64_t reserved_28_31               : 4;
4327	uint64_t mask                         : 16;
4328	uint64_t reserved_48_63               : 16;
4329#endif
4330	} cn30xx;
4331	struct cvmx_pip_qos_watchx_cn30xx     cn31xx;
4332	struct cvmx_pip_qos_watchx_cn30xx     cn38xx;
4333	struct cvmx_pip_qos_watchx_cn30xx     cn38xxp2;
4334	struct cvmx_pip_qos_watchx_cn50xx {
4335#ifdef __BIG_ENDIAN_BITFIELD
4336	uint64_t reserved_48_63               : 16;
4337	uint64_t mask                         : 16; /**< Mask off a range of values */
4338	uint64_t reserved_28_31               : 4;
4339	uint64_t grp                          : 4;  /**< The GRP number of the watcher */
4340	uint64_t reserved_23_23               : 1;
4341	uint64_t qos                          : 3;  /**< The QOS level of the watcher */
4342	uint64_t reserved_19_19               : 1;
4343	cvmx_pip_qos_watch_types match_type   : 3;  /**< The field for the watcher match against
4344                                                         0   = disable across all ports
4345                                                         1   = protocol (ipv4)
4346                                                             = next_header (ipv6)
4347                                                         2   = TCP destination port
4348                                                         3   = UDP destination port
4349                                                         4   = Ether type
4350                                                         5-7 = Reserved */
4351	uint64_t match_value                  : 16; /**< The value to watch for */
4352#else
4353	uint64_t match_value                  : 16;
4354	cvmx_pip_qos_watch_types match_type   : 3;
4355	uint64_t reserved_19_19               : 1;
4356	uint64_t qos                          : 3;
4357	uint64_t reserved_23_23               : 1;
4358	uint64_t grp                          : 4;
4359	uint64_t reserved_28_31               : 4;
4360	uint64_t mask                         : 16;
4361	uint64_t reserved_48_63               : 16;
4362#endif
4363	} cn50xx;
4364	struct cvmx_pip_qos_watchx_cn50xx     cn52xx;
4365	struct cvmx_pip_qos_watchx_cn50xx     cn52xxp1;
4366	struct cvmx_pip_qos_watchx_cn50xx     cn56xx;
4367	struct cvmx_pip_qos_watchx_cn50xx     cn56xxp1;
4368	struct cvmx_pip_qos_watchx_cn30xx     cn58xx;
4369	struct cvmx_pip_qos_watchx_cn30xx     cn58xxp1;
4370	struct cvmx_pip_qos_watchx_cn50xx     cn61xx;
4371	struct cvmx_pip_qos_watchx_cn50xx     cn63xx;
4372	struct cvmx_pip_qos_watchx_cn50xx     cn63xxp1;
4373	struct cvmx_pip_qos_watchx_cn50xx     cn66xx;
4374	struct cvmx_pip_qos_watchx_s          cn68xx;
4375	struct cvmx_pip_qos_watchx_s          cn68xxp1;
4376	struct cvmx_pip_qos_watchx_cn50xx     cnf71xx;
4377};
4378typedef union cvmx_pip_qos_watchx cvmx_pip_qos_watchx_t;
4379
4380/**
4381 * cvmx_pip_raw_word
4382 *
4383 * PIP_RAW_WORD = The RAW Word2 of the workQ entry.
4384 *
4385 * The RAW Word2 to be inserted into the workQ entry of RAWFULL packets.
4386 */
4387union cvmx_pip_raw_word {
4388	uint64_t u64;
4389	struct cvmx_pip_raw_word_s {
4390#ifdef __BIG_ENDIAN_BITFIELD
4391	uint64_t reserved_56_63               : 8;
4392	uint64_t word                         : 56; /**< Word2 of the workQ entry
4393                                                         The 8-bit bufs field is still set by HW (IPD) */
4394#else
4395	uint64_t word                         : 56;
4396	uint64_t reserved_56_63               : 8;
4397#endif
4398	} s;
4399	struct cvmx_pip_raw_word_s            cn30xx;
4400	struct cvmx_pip_raw_word_s            cn31xx;
4401	struct cvmx_pip_raw_word_s            cn38xx;
4402	struct cvmx_pip_raw_word_s            cn38xxp2;
4403	struct cvmx_pip_raw_word_s            cn50xx;
4404	struct cvmx_pip_raw_word_s            cn52xx;
4405	struct cvmx_pip_raw_word_s            cn52xxp1;
4406	struct cvmx_pip_raw_word_s            cn56xx;
4407	struct cvmx_pip_raw_word_s            cn56xxp1;
4408	struct cvmx_pip_raw_word_s            cn58xx;
4409	struct cvmx_pip_raw_word_s            cn58xxp1;
4410	struct cvmx_pip_raw_word_s            cn61xx;
4411	struct cvmx_pip_raw_word_s            cn63xx;
4412	struct cvmx_pip_raw_word_s            cn63xxp1;
4413	struct cvmx_pip_raw_word_s            cn66xx;
4414	struct cvmx_pip_raw_word_s            cn68xx;
4415	struct cvmx_pip_raw_word_s            cn68xxp1;
4416	struct cvmx_pip_raw_word_s            cnf71xx;
4417};
4418typedef union cvmx_pip_raw_word cvmx_pip_raw_word_t;
4419
4420/**
4421 * cvmx_pip_sft_rst
4422 *
4423 * PIP_SFT_RST = PIP Soft Reset
4424 *
4425 * When written to a '1', resets the pip block
4426 *
4427 * Notes:
4428 * When RST is set to a '1' by SW, PIP will get a short reset pulse (3 cycles
4429 * in duration).  Although this will reset much of PIP's internal state, some
4430 * CSRs will not reset.
4431 *
4432 * . PIP_BIST_STATUS
4433 * . PIP_STAT0_PRT*
4434 * . PIP_STAT1_PRT*
4435 * . PIP_STAT2_PRT*
4436 * . PIP_STAT3_PRT*
4437 * . PIP_STAT4_PRT*
4438 * . PIP_STAT5_PRT*
4439 * . PIP_STAT6_PRT*
4440 * . PIP_STAT7_PRT*
4441 * . PIP_STAT8_PRT*
4442 * . PIP_STAT9_PRT*
4443 * . PIP_XSTAT0_PRT*
4444 * . PIP_XSTAT1_PRT*
4445 * . PIP_XSTAT2_PRT*
4446 * . PIP_XSTAT3_PRT*
4447 * . PIP_XSTAT4_PRT*
4448 * . PIP_XSTAT5_PRT*
4449 * . PIP_XSTAT6_PRT*
4450 * . PIP_XSTAT7_PRT*
4451 * . PIP_XSTAT8_PRT*
4452 * . PIP_XSTAT9_PRT*
4453 * . PIP_STAT_INB_PKTS*
4454 * . PIP_STAT_INB_OCTS*
4455 * . PIP_STAT_INB_ERRS*
4456 * . PIP_TAG_INC*
4457 */
4458union cvmx_pip_sft_rst {
4459	uint64_t u64;
4460	struct cvmx_pip_sft_rst_s {
4461#ifdef __BIG_ENDIAN_BITFIELD
4462	uint64_t reserved_1_63                : 63;
4463	uint64_t rst                          : 1;  /**< Soft Reset */
4464#else
4465	uint64_t rst                          : 1;
4466	uint64_t reserved_1_63                : 63;
4467#endif
4468	} s;
4469	struct cvmx_pip_sft_rst_s             cn30xx;
4470	struct cvmx_pip_sft_rst_s             cn31xx;
4471	struct cvmx_pip_sft_rst_s             cn38xx;
4472	struct cvmx_pip_sft_rst_s             cn50xx;
4473	struct cvmx_pip_sft_rst_s             cn52xx;
4474	struct cvmx_pip_sft_rst_s             cn52xxp1;
4475	struct cvmx_pip_sft_rst_s             cn56xx;
4476	struct cvmx_pip_sft_rst_s             cn56xxp1;
4477	struct cvmx_pip_sft_rst_s             cn58xx;
4478	struct cvmx_pip_sft_rst_s             cn58xxp1;
4479	struct cvmx_pip_sft_rst_s             cn61xx;
4480	struct cvmx_pip_sft_rst_s             cn63xx;
4481	struct cvmx_pip_sft_rst_s             cn63xxp1;
4482	struct cvmx_pip_sft_rst_s             cn66xx;
4483	struct cvmx_pip_sft_rst_s             cn68xx;
4484	struct cvmx_pip_sft_rst_s             cn68xxp1;
4485	struct cvmx_pip_sft_rst_s             cnf71xx;
4486};
4487typedef union cvmx_pip_sft_rst cvmx_pip_sft_rst_t;
4488
4489/**
4490 * cvmx_pip_stat0_#
4491 *
4492 * PIP Statistics Counters
4493 *
4494 * Note: special stat counter behavior
4495 *
4496 * 1) Read and write operations must arbitrate for the statistics resources
4497 *     along with the packet engines which are incrementing the counters.
4498 *     In order to not drop packet information, the packet HW is always a
4499 *     higher priority and the CSR requests will only be satisified when
4500 *     there are idle cycles.  This can potentially cause long delays if the
4501 *     system becomes full.
4502 *
4503 * 2) stat counters can be cleared in two ways.  If PIP_STAT_CTL[RDCLR] is
4504 *     set, then all read accesses will clear the register.  In addition,
4505 *     any write to a stats register will also reset the register to zero.
4506 *     Please note that the clearing operations must obey rule \#1 above.
4507 *
4508 * 3) all counters are wrapping - software must ensure they are read periodically
4509 *
4510 * 4) The counters accumulate statistics for packets that are sent to PKI.  If
4511 *    PTP_MODE is enabled, the 8B timestamp is prepended to the packet.  This
4512 *    additional 8B of data is captured in the octet counts.
4513 *
4514 * 5) X represents either the packet's port-kind or backpressure ID as
4515 *    determined by PIP_STAT_CTL[MODE]
4516 * PIP_STAT0_X = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
4517 */
4518union cvmx_pip_stat0_x {
4519	uint64_t u64;
4520	struct cvmx_pip_stat0_x_s {
4521#ifdef __BIG_ENDIAN_BITFIELD
4522	uint64_t drp_pkts                     : 32; /**< Inbound packets marked to be dropped by the IPD
4523                                                         QOS widget per port */
4524	uint64_t drp_octs                     : 32; /**< Inbound octets marked to be dropped by the IPD
4525                                                         QOS widget per port */
4526#else
4527	uint64_t drp_octs                     : 32;
4528	uint64_t drp_pkts                     : 32;
4529#endif
4530	} s;
4531	struct cvmx_pip_stat0_x_s             cn68xx;
4532	struct cvmx_pip_stat0_x_s             cn68xxp1;
4533};
4534typedef union cvmx_pip_stat0_x cvmx_pip_stat0_x_t;
4535
4536/**
4537 * cvmx_pip_stat0_prt#
4538 *
4539 * PIP Statistics Counters
4540 *
4541 * Note: special stat counter behavior
4542 *
4543 * 1) Read and write operations must arbitrate for the statistics resources
4544 *     along with the packet engines which are incrementing the counters.
4545 *     In order to not drop packet information, the packet HW is always a
4546 *     higher priority and the CSR requests will only be satisified when
4547 *     there are idle cycles.  This can potentially cause long delays if the
4548 *     system becomes full.
4549 *
4550 * 2) stat counters can be cleared in two ways.  If PIP_STAT_CTL[RDCLR] is
4551 *     set, then all read accesses will clear the register.  In addition,
4552 *     any write to a stats register will also reset the register to zero.
4553 *     Please note that the clearing operations must obey rule \#1 above.
4554 *
4555 * 3) all counters are wrapping - software must ensure they are read periodically
4556 *
4557 * 4) The counters accumulate statistics for packets that are sent to PKI.  If
4558 *    PTP_MODE is enabled, the 8B timestamp is prepended to the packet.  This
4559 *    additional 8B of data is captured in the octet counts.
4560 * PIP_STAT0_PRT = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
4561 */
4562union cvmx_pip_stat0_prtx {
4563	uint64_t u64;
4564	struct cvmx_pip_stat0_prtx_s {
4565#ifdef __BIG_ENDIAN_BITFIELD
4566	uint64_t drp_pkts                     : 32; /**< Inbound packets marked to be dropped by the IPD
4567                                                         QOS widget per port */
4568	uint64_t drp_octs                     : 32; /**< Inbound octets marked to be dropped by the IPD
4569                                                         QOS widget per port */
4570#else
4571	uint64_t drp_octs                     : 32;
4572	uint64_t drp_pkts                     : 32;
4573#endif
4574	} s;
4575	struct cvmx_pip_stat0_prtx_s          cn30xx;
4576	struct cvmx_pip_stat0_prtx_s          cn31xx;
4577	struct cvmx_pip_stat0_prtx_s          cn38xx;
4578	struct cvmx_pip_stat0_prtx_s          cn38xxp2;
4579	struct cvmx_pip_stat0_prtx_s          cn50xx;
4580	struct cvmx_pip_stat0_prtx_s          cn52xx;
4581	struct cvmx_pip_stat0_prtx_s          cn52xxp1;
4582	struct cvmx_pip_stat0_prtx_s          cn56xx;
4583	struct cvmx_pip_stat0_prtx_s          cn56xxp1;
4584	struct cvmx_pip_stat0_prtx_s          cn58xx;
4585	struct cvmx_pip_stat0_prtx_s          cn58xxp1;
4586	struct cvmx_pip_stat0_prtx_s          cn61xx;
4587	struct cvmx_pip_stat0_prtx_s          cn63xx;
4588	struct cvmx_pip_stat0_prtx_s          cn63xxp1;
4589	struct cvmx_pip_stat0_prtx_s          cn66xx;
4590	struct cvmx_pip_stat0_prtx_s          cnf71xx;
4591};
4592typedef union cvmx_pip_stat0_prtx cvmx_pip_stat0_prtx_t;
4593
4594/**
4595 * cvmx_pip_stat10_#
4596 *
4597 * PIP_STAT10_X = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
4598 *
4599 */
4600union cvmx_pip_stat10_x {
4601	uint64_t u64;
4602	struct cvmx_pip_stat10_x_s {
4603#ifdef __BIG_ENDIAN_BITFIELD
4604	uint64_t bcast                        : 32; /**< Number of packets with L2 Broadcast DMAC
4605                                                         that were dropped due to RED.
4606                                                         The HW will consider a packet to be an L2
4607                                                         broadcast packet when the 48-bit DMAC is all 1's.
4608                                                         Only applies when the parse mode for the packet
4609                                                         is SKIP-TO-L2. */
4610	uint64_t mcast                        : 32; /**< Number of packets with L2 Mulitcast DMAC
4611                                                         that were dropped due to RED.
4612                                                         The HW will consider a packet to be an L2
4613                                                         multicast packet when the least-significant bit
4614                                                         of the first byte of the DMAC is set and the
4615                                                         packet is not an L2 broadcast packet.
4616                                                         Only applies when the parse mode for the packet
4617                                                         is SKIP-TO-L2. */
4618#else
4619	uint64_t mcast                        : 32;
4620	uint64_t bcast                        : 32;
4621#endif
4622	} s;
4623	struct cvmx_pip_stat10_x_s            cn68xx;
4624	struct cvmx_pip_stat10_x_s            cn68xxp1;
4625};
4626typedef union cvmx_pip_stat10_x cvmx_pip_stat10_x_t;
4627
4628/**
4629 * cvmx_pip_stat10_prt#
4630 *
4631 * PIP_STAT10_PRTX = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
4632 *
4633 */
4634union cvmx_pip_stat10_prtx {
4635	uint64_t u64;
4636	struct cvmx_pip_stat10_prtx_s {
4637#ifdef __BIG_ENDIAN_BITFIELD
4638	uint64_t bcast                        : 32; /**< Number of packets with L2 Broadcast DMAC
4639                                                         that were dropped due to RED.
4640                                                         The HW will consider a packet to be an L2
4641                                                         broadcast packet when the 48-bit DMAC is all 1's.
4642                                                         Only applies when the parse mode for the packet
4643                                                         is SKIP-TO-L2. */
4644	uint64_t mcast                        : 32; /**< Number of packets with L2 Mulitcast DMAC
4645                                                         that were dropped due to RED.
4646                                                         The HW will consider a packet to be an L2
4647                                                         multicast packet when the least-significant bit
4648                                                         of the first byte of the DMAC is set and the
4649                                                         packet is not an L2 broadcast packet.
4650                                                         Only applies when the parse mode for the packet
4651                                                         is SKIP-TO-L2. */
4652#else
4653	uint64_t mcast                        : 32;
4654	uint64_t bcast                        : 32;
4655#endif
4656	} s;
4657	struct cvmx_pip_stat10_prtx_s         cn52xx;
4658	struct cvmx_pip_stat10_prtx_s         cn52xxp1;
4659	struct cvmx_pip_stat10_prtx_s         cn56xx;
4660	struct cvmx_pip_stat10_prtx_s         cn56xxp1;
4661	struct cvmx_pip_stat10_prtx_s         cn61xx;
4662	struct cvmx_pip_stat10_prtx_s         cn63xx;
4663	struct cvmx_pip_stat10_prtx_s         cn63xxp1;
4664	struct cvmx_pip_stat10_prtx_s         cn66xx;
4665	struct cvmx_pip_stat10_prtx_s         cnf71xx;
4666};
4667typedef union cvmx_pip_stat10_prtx cvmx_pip_stat10_prtx_t;
4668
4669/**
4670 * cvmx_pip_stat11_#
4671 *
4672 * PIP_STAT11_X = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
4673 *
4674 */
4675union cvmx_pip_stat11_x {
4676	uint64_t u64;
4677	struct cvmx_pip_stat11_x_s {
4678#ifdef __BIG_ENDIAN_BITFIELD
4679	uint64_t bcast                        : 32; /**< Number of packets with L3 Broadcast Dest Address
4680                                                         that were dropped due to RED.
4681                                                         The HW considers an IPv4 packet to be broadcast
4682                                                         when all bits are set in the MSB of the
4683                                                         destination address. IPv6 does not have the
4684                                                         concept of a broadcast packets.
4685                                                         Only applies when the parse mode for the packet
4686                                                         is SKIP-TO-L2 and the packet is IP or the parse
4687                                                         mode for the packet is SKIP-TO-IP. */
4688	uint64_t mcast                        : 32; /**< Number of packets with L3 Multicast Dest Address
4689                                                         that were dropped due to RED.
4690                                                         The HW considers an IPv4 packet to be multicast
4691                                                         when the most-significant nibble of the 32-bit
4692                                                         destination address is 0xE (i.e. it is a class D
4693                                                         address). The HW considers an IPv6 packet to be
4694                                                         multicast when the most-significant byte of the
4695                                                         128-bit destination address is all 1's.
4696                                                         Only applies when the parse mode for the packet
4697                                                         is SKIP-TO-L2 and the packet is IP or the parse
4698                                                         mode for the packet is SKIP-TO-IP. */
4699#else
4700	uint64_t mcast                        : 32;
4701	uint64_t bcast                        : 32;
4702#endif
4703	} s;
4704	struct cvmx_pip_stat11_x_s            cn68xx;
4705	struct cvmx_pip_stat11_x_s            cn68xxp1;
4706};
4707typedef union cvmx_pip_stat11_x cvmx_pip_stat11_x_t;
4708
4709/**
4710 * cvmx_pip_stat11_prt#
4711 *
4712 * PIP_STAT11_PRTX = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
4713 *
4714 */
4715union cvmx_pip_stat11_prtx {
4716	uint64_t u64;
4717	struct cvmx_pip_stat11_prtx_s {
4718#ifdef __BIG_ENDIAN_BITFIELD
4719	uint64_t bcast                        : 32; /**< Number of packets with L3 Broadcast Dest Address
4720                                                         that were dropped due to RED.
4721                                                         The HW considers an IPv4 packet to be broadcast
4722                                                         when all bits are set in the MSB of the
4723                                                         destination address. IPv6 does not have the
4724                                                         concept of a broadcast packets.
4725                                                         Only applies when the parse mode for the packet
4726                                                         is SKIP-TO-L2 and the packet is IP or the parse
4727                                                         mode for the packet is SKIP-TO-IP. */
4728	uint64_t mcast                        : 32; /**< Number of packets with L3 Multicast Dest Address
4729                                                         that were dropped due to RED.
4730                                                         The HW considers an IPv4 packet to be multicast
4731                                                         when the most-significant nibble of the 32-bit
4732                                                         destination address is 0xE (i.e. it is a class D
4733                                                         address). The HW considers an IPv6 packet to be
4734                                                         multicast when the most-significant byte of the
4735                                                         128-bit destination address is all 1's.
4736                                                         Only applies when the parse mode for the packet
4737                                                         is SKIP-TO-L2 and the packet is IP or the parse
4738                                                         mode for the packet is SKIP-TO-IP. */
4739#else
4740	uint64_t mcast                        : 32;
4741	uint64_t bcast                        : 32;
4742#endif
4743	} s;
4744	struct cvmx_pip_stat11_prtx_s         cn52xx;
4745	struct cvmx_pip_stat11_prtx_s         cn52xxp1;
4746	struct cvmx_pip_stat11_prtx_s         cn56xx;
4747	struct cvmx_pip_stat11_prtx_s         cn56xxp1;
4748	struct cvmx_pip_stat11_prtx_s         cn61xx;
4749	struct cvmx_pip_stat11_prtx_s         cn63xx;
4750	struct cvmx_pip_stat11_prtx_s         cn63xxp1;
4751	struct cvmx_pip_stat11_prtx_s         cn66xx;
4752	struct cvmx_pip_stat11_prtx_s         cnf71xx;
4753};
4754typedef union cvmx_pip_stat11_prtx cvmx_pip_stat11_prtx_t;
4755
4756/**
4757 * cvmx_pip_stat1_#
4758 *
4759 * PIP_STAT1_X = PIP_STAT_OCTS
4760 *
4761 */
4762union cvmx_pip_stat1_x {
4763	uint64_t u64;
4764	struct cvmx_pip_stat1_x_s {
4765#ifdef __BIG_ENDIAN_BITFIELD
4766	uint64_t reserved_48_63               : 16;
4767	uint64_t octs                         : 48; /**< Number of octets received by PIP (good and bad) */
4768#else
4769	uint64_t octs                         : 48;
4770	uint64_t reserved_48_63               : 16;
4771#endif
4772	} s;
4773	struct cvmx_pip_stat1_x_s             cn68xx;
4774	struct cvmx_pip_stat1_x_s             cn68xxp1;
4775};
4776typedef union cvmx_pip_stat1_x cvmx_pip_stat1_x_t;
4777
4778/**
4779 * cvmx_pip_stat1_prt#
4780 *
4781 * PIP_STAT1_PRTX = PIP_STAT_OCTS
4782 *
4783 */
4784union cvmx_pip_stat1_prtx {
4785	uint64_t u64;
4786	struct cvmx_pip_stat1_prtx_s {
4787#ifdef __BIG_ENDIAN_BITFIELD
4788	uint64_t reserved_48_63               : 16;
4789	uint64_t octs                         : 48; /**< Number of octets received by PIP (good and bad) */
4790#else
4791	uint64_t octs                         : 48;
4792	uint64_t reserved_48_63               : 16;
4793#endif
4794	} s;
4795	struct cvmx_pip_stat1_prtx_s          cn30xx;
4796	struct cvmx_pip_stat1_prtx_s          cn31xx;
4797	struct cvmx_pip_stat1_prtx_s          cn38xx;
4798	struct cvmx_pip_stat1_prtx_s          cn38xxp2;
4799	struct cvmx_pip_stat1_prtx_s          cn50xx;
4800	struct cvmx_pip_stat1_prtx_s          cn52xx;
4801	struct cvmx_pip_stat1_prtx_s          cn52xxp1;
4802	struct cvmx_pip_stat1_prtx_s          cn56xx;
4803	struct cvmx_pip_stat1_prtx_s          cn56xxp1;
4804	struct cvmx_pip_stat1_prtx_s          cn58xx;
4805	struct cvmx_pip_stat1_prtx_s          cn58xxp1;
4806	struct cvmx_pip_stat1_prtx_s          cn61xx;
4807	struct cvmx_pip_stat1_prtx_s          cn63xx;
4808	struct cvmx_pip_stat1_prtx_s          cn63xxp1;
4809	struct cvmx_pip_stat1_prtx_s          cn66xx;
4810	struct cvmx_pip_stat1_prtx_s          cnf71xx;
4811};
4812typedef union cvmx_pip_stat1_prtx cvmx_pip_stat1_prtx_t;
4813
4814/**
4815 * cvmx_pip_stat2_#
4816 *
4817 * PIP_STAT2_X = PIP_STAT_PKTS     / PIP_STAT_RAW
4818 *
4819 */
4820union cvmx_pip_stat2_x {
4821	uint64_t u64;
4822	struct cvmx_pip_stat2_x_s {
4823#ifdef __BIG_ENDIAN_BITFIELD
4824	uint64_t pkts                         : 32; /**< Number of packets processed by PIP */
4825	uint64_t raw                          : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
4826                                                         received by PIP per port */
4827#else
4828	uint64_t raw                          : 32;
4829	uint64_t pkts                         : 32;
4830#endif
4831	} s;
4832	struct cvmx_pip_stat2_x_s             cn68xx;
4833	struct cvmx_pip_stat2_x_s             cn68xxp1;
4834};
4835typedef union cvmx_pip_stat2_x cvmx_pip_stat2_x_t;
4836
4837/**
4838 * cvmx_pip_stat2_prt#
4839 *
4840 * PIP_STAT2_PRTX = PIP_STAT_PKTS     / PIP_STAT_RAW
4841 *
4842 */
4843union cvmx_pip_stat2_prtx {
4844	uint64_t u64;
4845	struct cvmx_pip_stat2_prtx_s {
4846#ifdef __BIG_ENDIAN_BITFIELD
4847	uint64_t pkts                         : 32; /**< Number of packets processed by PIP */
4848	uint64_t raw                          : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
4849                                                         received by PIP per port */
4850#else
4851	uint64_t raw                          : 32;
4852	uint64_t pkts                         : 32;
4853#endif
4854	} s;
4855	struct cvmx_pip_stat2_prtx_s          cn30xx;
4856	struct cvmx_pip_stat2_prtx_s          cn31xx;
4857	struct cvmx_pip_stat2_prtx_s          cn38xx;
4858	struct cvmx_pip_stat2_prtx_s          cn38xxp2;
4859	struct cvmx_pip_stat2_prtx_s          cn50xx;
4860	struct cvmx_pip_stat2_prtx_s          cn52xx;
4861	struct cvmx_pip_stat2_prtx_s          cn52xxp1;
4862	struct cvmx_pip_stat2_prtx_s          cn56xx;
4863	struct cvmx_pip_stat2_prtx_s          cn56xxp1;
4864	struct cvmx_pip_stat2_prtx_s          cn58xx;
4865	struct cvmx_pip_stat2_prtx_s          cn58xxp1;
4866	struct cvmx_pip_stat2_prtx_s          cn61xx;
4867	struct cvmx_pip_stat2_prtx_s          cn63xx;
4868	struct cvmx_pip_stat2_prtx_s          cn63xxp1;
4869	struct cvmx_pip_stat2_prtx_s          cn66xx;
4870	struct cvmx_pip_stat2_prtx_s          cnf71xx;
4871};
4872typedef union cvmx_pip_stat2_prtx cvmx_pip_stat2_prtx_t;
4873
4874/**
4875 * cvmx_pip_stat3_#
4876 *
4877 * PIP_STAT3_X = PIP_STAT_BCST     / PIP_STAT_MCST
4878 *
4879 */
4880union cvmx_pip_stat3_x {
4881	uint64_t u64;
4882	struct cvmx_pip_stat3_x_s {
4883#ifdef __BIG_ENDIAN_BITFIELD
4884	uint64_t bcst                         : 32; /**< Number of indentified L2 broadcast packets
4885                                                         Does not include multicast packets
4886                                                         Only includes packets whose parse mode is
4887                                                         SKIP_TO_L2. */
4888	uint64_t mcst                         : 32; /**< Number of indentified L2 multicast packets
4889                                                         Does not include broadcast packets
4890                                                         Only includes packets whose parse mode is
4891                                                         SKIP_TO_L2. */
4892#else
4893	uint64_t mcst                         : 32;
4894	uint64_t bcst                         : 32;
4895#endif
4896	} s;
4897	struct cvmx_pip_stat3_x_s             cn68xx;
4898	struct cvmx_pip_stat3_x_s             cn68xxp1;
4899};
4900typedef union cvmx_pip_stat3_x cvmx_pip_stat3_x_t;
4901
4902/**
4903 * cvmx_pip_stat3_prt#
4904 *
4905 * PIP_STAT3_PRTX = PIP_STAT_BCST     / PIP_STAT_MCST
4906 *
4907 */
4908union cvmx_pip_stat3_prtx {
4909	uint64_t u64;
4910	struct cvmx_pip_stat3_prtx_s {
4911#ifdef __BIG_ENDIAN_BITFIELD
4912	uint64_t bcst                         : 32; /**< Number of indentified L2 broadcast packets
4913                                                         Does not include multicast packets
4914                                                         Only includes packets whose parse mode is
4915                                                         SKIP_TO_L2. */
4916	uint64_t mcst                         : 32; /**< Number of indentified L2 multicast packets
4917                                                         Does not include broadcast packets
4918                                                         Only includes packets whose parse mode is
4919                                                         SKIP_TO_L2. */
4920#else
4921	uint64_t mcst                         : 32;
4922	uint64_t bcst                         : 32;
4923#endif
4924	} s;
4925	struct cvmx_pip_stat3_prtx_s          cn30xx;
4926	struct cvmx_pip_stat3_prtx_s          cn31xx;
4927	struct cvmx_pip_stat3_prtx_s          cn38xx;
4928	struct cvmx_pip_stat3_prtx_s          cn38xxp2;
4929	struct cvmx_pip_stat3_prtx_s          cn50xx;
4930	struct cvmx_pip_stat3_prtx_s          cn52xx;
4931	struct cvmx_pip_stat3_prtx_s          cn52xxp1;
4932	struct cvmx_pip_stat3_prtx_s          cn56xx;
4933	struct cvmx_pip_stat3_prtx_s          cn56xxp1;
4934	struct cvmx_pip_stat3_prtx_s          cn58xx;
4935	struct cvmx_pip_stat3_prtx_s          cn58xxp1;
4936	struct cvmx_pip_stat3_prtx_s          cn61xx;
4937	struct cvmx_pip_stat3_prtx_s          cn63xx;
4938	struct cvmx_pip_stat3_prtx_s          cn63xxp1;
4939	struct cvmx_pip_stat3_prtx_s          cn66xx;
4940	struct cvmx_pip_stat3_prtx_s          cnf71xx;
4941};
4942typedef union cvmx_pip_stat3_prtx cvmx_pip_stat3_prtx_t;
4943
4944/**
4945 * cvmx_pip_stat4_#
4946 *
4947 * PIP_STAT4_X = PIP_STAT_HIST1    / PIP_STAT_HIST0
4948 *
4949 */
4950union cvmx_pip_stat4_x {
4951	uint64_t u64;
4952	struct cvmx_pip_stat4_x_s {
4953#ifdef __BIG_ENDIAN_BITFIELD
4954	uint64_t h65to127                     : 32; /**< Number of 65-127B packets */
4955	uint64_t h64                          : 32; /**< Number of 1-64B packets */
4956#else
4957	uint64_t h64                          : 32;
4958	uint64_t h65to127                     : 32;
4959#endif
4960	} s;
4961	struct cvmx_pip_stat4_x_s             cn68xx;
4962	struct cvmx_pip_stat4_x_s             cn68xxp1;
4963};
4964typedef union cvmx_pip_stat4_x cvmx_pip_stat4_x_t;
4965
4966/**
4967 * cvmx_pip_stat4_prt#
4968 *
4969 * PIP_STAT4_PRTX = PIP_STAT_HIST1    / PIP_STAT_HIST0
4970 *
4971 */
4972union cvmx_pip_stat4_prtx {
4973	uint64_t u64;
4974	struct cvmx_pip_stat4_prtx_s {
4975#ifdef __BIG_ENDIAN_BITFIELD
4976	uint64_t h65to127                     : 32; /**< Number of 65-127B packets */
4977	uint64_t h64                          : 32; /**< Number of 1-64B packets */
4978#else
4979	uint64_t h64                          : 32;
4980	uint64_t h65to127                     : 32;
4981#endif
4982	} s;
4983	struct cvmx_pip_stat4_prtx_s          cn30xx;
4984	struct cvmx_pip_stat4_prtx_s          cn31xx;
4985	struct cvmx_pip_stat4_prtx_s          cn38xx;
4986	struct cvmx_pip_stat4_prtx_s          cn38xxp2;
4987	struct cvmx_pip_stat4_prtx_s          cn50xx;
4988	struct cvmx_pip_stat4_prtx_s          cn52xx;
4989	struct cvmx_pip_stat4_prtx_s          cn52xxp1;
4990	struct cvmx_pip_stat4_prtx_s          cn56xx;
4991	struct cvmx_pip_stat4_prtx_s          cn56xxp1;
4992	struct cvmx_pip_stat4_prtx_s          cn58xx;
4993	struct cvmx_pip_stat4_prtx_s          cn58xxp1;
4994	struct cvmx_pip_stat4_prtx_s          cn61xx;
4995	struct cvmx_pip_stat4_prtx_s          cn63xx;
4996	struct cvmx_pip_stat4_prtx_s          cn63xxp1;
4997	struct cvmx_pip_stat4_prtx_s          cn66xx;
4998	struct cvmx_pip_stat4_prtx_s          cnf71xx;
4999};
5000typedef union cvmx_pip_stat4_prtx cvmx_pip_stat4_prtx_t;
5001
5002/**
5003 * cvmx_pip_stat5_#
5004 *
5005 * PIP_STAT5_X = PIP_STAT_HIST3    / PIP_STAT_HIST2
5006 *
5007 */
5008union cvmx_pip_stat5_x {
5009	uint64_t u64;
5010	struct cvmx_pip_stat5_x_s {
5011#ifdef __BIG_ENDIAN_BITFIELD
5012	uint64_t h256to511                    : 32; /**< Number of 256-511B packets */
5013	uint64_t h128to255                    : 32; /**< Number of 128-255B packets */
5014#else
5015	uint64_t h128to255                    : 32;
5016	uint64_t h256to511                    : 32;
5017#endif
5018	} s;
5019	struct cvmx_pip_stat5_x_s             cn68xx;
5020	struct cvmx_pip_stat5_x_s             cn68xxp1;
5021};
5022typedef union cvmx_pip_stat5_x cvmx_pip_stat5_x_t;
5023
5024/**
5025 * cvmx_pip_stat5_prt#
5026 *
5027 * PIP_STAT5_PRTX = PIP_STAT_HIST3    / PIP_STAT_HIST2
5028 *
5029 */
5030union cvmx_pip_stat5_prtx {
5031	uint64_t u64;
5032	struct cvmx_pip_stat5_prtx_s {
5033#ifdef __BIG_ENDIAN_BITFIELD
5034	uint64_t h256to511                    : 32; /**< Number of 256-511B packets */
5035	uint64_t h128to255                    : 32; /**< Number of 128-255B packets */
5036#else
5037	uint64_t h128to255                    : 32;
5038	uint64_t h256to511                    : 32;
5039#endif
5040	} s;
5041	struct cvmx_pip_stat5_prtx_s          cn30xx;
5042	struct cvmx_pip_stat5_prtx_s          cn31xx;
5043	struct cvmx_pip_stat5_prtx_s          cn38xx;
5044	struct cvmx_pip_stat5_prtx_s          cn38xxp2;
5045	struct cvmx_pip_stat5_prtx_s          cn50xx;
5046	struct cvmx_pip_stat5_prtx_s          cn52xx;
5047	struct cvmx_pip_stat5_prtx_s          cn52xxp1;
5048	struct cvmx_pip_stat5_prtx_s          cn56xx;
5049	struct cvmx_pip_stat5_prtx_s          cn56xxp1;
5050	struct cvmx_pip_stat5_prtx_s          cn58xx;
5051	struct cvmx_pip_stat5_prtx_s          cn58xxp1;
5052	struct cvmx_pip_stat5_prtx_s          cn61xx;
5053	struct cvmx_pip_stat5_prtx_s          cn63xx;
5054	struct cvmx_pip_stat5_prtx_s          cn63xxp1;
5055	struct cvmx_pip_stat5_prtx_s          cn66xx;
5056	struct cvmx_pip_stat5_prtx_s          cnf71xx;
5057};
5058typedef union cvmx_pip_stat5_prtx cvmx_pip_stat5_prtx_t;
5059
5060/**
5061 * cvmx_pip_stat6_#
5062 *
5063 * PIP_STAT6_X = PIP_STAT_HIST5    / PIP_STAT_HIST4
5064 *
5065 */
5066union cvmx_pip_stat6_x {
5067	uint64_t u64;
5068	struct cvmx_pip_stat6_x_s {
5069#ifdef __BIG_ENDIAN_BITFIELD
5070	uint64_t h1024to1518                  : 32; /**< Number of 1024-1518B packets */
5071	uint64_t h512to1023                   : 32; /**< Number of 512-1023B packets */
5072#else
5073	uint64_t h512to1023                   : 32;
5074	uint64_t h1024to1518                  : 32;
5075#endif
5076	} s;
5077	struct cvmx_pip_stat6_x_s             cn68xx;
5078	struct cvmx_pip_stat6_x_s             cn68xxp1;
5079};
5080typedef union cvmx_pip_stat6_x cvmx_pip_stat6_x_t;
5081
5082/**
5083 * cvmx_pip_stat6_prt#
5084 *
5085 * PIP_STAT6_PRTX = PIP_STAT_HIST5    / PIP_STAT_HIST4
5086 *
5087 */
5088union cvmx_pip_stat6_prtx {
5089	uint64_t u64;
5090	struct cvmx_pip_stat6_prtx_s {
5091#ifdef __BIG_ENDIAN_BITFIELD
5092	uint64_t h1024to1518                  : 32; /**< Number of 1024-1518B packets */
5093	uint64_t h512to1023                   : 32; /**< Number of 512-1023B packets */
5094#else
5095	uint64_t h512to1023                   : 32;
5096	uint64_t h1024to1518                  : 32;
5097#endif
5098	} s;
5099	struct cvmx_pip_stat6_prtx_s          cn30xx;
5100	struct cvmx_pip_stat6_prtx_s          cn31xx;
5101	struct cvmx_pip_stat6_prtx_s          cn38xx;
5102	struct cvmx_pip_stat6_prtx_s          cn38xxp2;
5103	struct cvmx_pip_stat6_prtx_s          cn50xx;
5104	struct cvmx_pip_stat6_prtx_s          cn52xx;
5105	struct cvmx_pip_stat6_prtx_s          cn52xxp1;
5106	struct cvmx_pip_stat6_prtx_s          cn56xx;
5107	struct cvmx_pip_stat6_prtx_s          cn56xxp1;
5108	struct cvmx_pip_stat6_prtx_s          cn58xx;
5109	struct cvmx_pip_stat6_prtx_s          cn58xxp1;
5110	struct cvmx_pip_stat6_prtx_s          cn61xx;
5111	struct cvmx_pip_stat6_prtx_s          cn63xx;
5112	struct cvmx_pip_stat6_prtx_s          cn63xxp1;
5113	struct cvmx_pip_stat6_prtx_s          cn66xx;
5114	struct cvmx_pip_stat6_prtx_s          cnf71xx;
5115};
5116typedef union cvmx_pip_stat6_prtx cvmx_pip_stat6_prtx_t;
5117
5118/**
5119 * cvmx_pip_stat7_#
5120 *
5121 * PIP_STAT7_X = PIP_STAT_FCS      / PIP_STAT_HIST6
5122 *
5123 */
5124union cvmx_pip_stat7_x {
5125	uint64_t u64;
5126	struct cvmx_pip_stat7_x_s {
5127#ifdef __BIG_ENDIAN_BITFIELD
5128	uint64_t fcs                          : 32; /**< Number of packets with FCS or Align opcode errors */
5129	uint64_t h1519                        : 32; /**< Number of 1519-max packets */
5130#else
5131	uint64_t h1519                        : 32;
5132	uint64_t fcs                          : 32;
5133#endif
5134	} s;
5135	struct cvmx_pip_stat7_x_s             cn68xx;
5136	struct cvmx_pip_stat7_x_s             cn68xxp1;
5137};
5138typedef union cvmx_pip_stat7_x cvmx_pip_stat7_x_t;
5139
5140/**
5141 * cvmx_pip_stat7_prt#
5142 *
5143 * PIP_STAT7_PRTX = PIP_STAT_FCS      / PIP_STAT_HIST6
5144 *
5145 *
5146 * Notes:
5147 * DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
5148 * sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
5149 */
5150union cvmx_pip_stat7_prtx {
5151	uint64_t u64;
5152	struct cvmx_pip_stat7_prtx_s {
5153#ifdef __BIG_ENDIAN_BITFIELD
5154	uint64_t fcs                          : 32; /**< Number of packets with FCS or Align opcode errors */
5155	uint64_t h1519                        : 32; /**< Number of 1519-max packets */
5156#else
5157	uint64_t h1519                        : 32;
5158	uint64_t fcs                          : 32;
5159#endif
5160	} s;
5161	struct cvmx_pip_stat7_prtx_s          cn30xx;
5162	struct cvmx_pip_stat7_prtx_s          cn31xx;
5163	struct cvmx_pip_stat7_prtx_s          cn38xx;
5164	struct cvmx_pip_stat7_prtx_s          cn38xxp2;
5165	struct cvmx_pip_stat7_prtx_s          cn50xx;
5166	struct cvmx_pip_stat7_prtx_s          cn52xx;
5167	struct cvmx_pip_stat7_prtx_s          cn52xxp1;
5168	struct cvmx_pip_stat7_prtx_s          cn56xx;
5169	struct cvmx_pip_stat7_prtx_s          cn56xxp1;
5170	struct cvmx_pip_stat7_prtx_s          cn58xx;
5171	struct cvmx_pip_stat7_prtx_s          cn58xxp1;
5172	struct cvmx_pip_stat7_prtx_s          cn61xx;
5173	struct cvmx_pip_stat7_prtx_s          cn63xx;
5174	struct cvmx_pip_stat7_prtx_s          cn63xxp1;
5175	struct cvmx_pip_stat7_prtx_s          cn66xx;
5176	struct cvmx_pip_stat7_prtx_s          cnf71xx;
5177};
5178typedef union cvmx_pip_stat7_prtx cvmx_pip_stat7_prtx_t;
5179
5180/**
5181 * cvmx_pip_stat8_#
5182 *
5183 * PIP_STAT8_X = PIP_STAT_FRAG     / PIP_STAT_UNDER
5184 *
5185 */
5186union cvmx_pip_stat8_x {
5187	uint64_t u64;
5188	struct cvmx_pip_stat8_x_s {
5189#ifdef __BIG_ENDIAN_BITFIELD
5190	uint64_t frag                         : 32; /**< Number of packets with length < min and FCS error */
5191	uint64_t undersz                      : 32; /**< Number of packets with length < min */
5192#else
5193	uint64_t undersz                      : 32;
5194	uint64_t frag                         : 32;
5195#endif
5196	} s;
5197	struct cvmx_pip_stat8_x_s             cn68xx;
5198	struct cvmx_pip_stat8_x_s             cn68xxp1;
5199};
5200typedef union cvmx_pip_stat8_x cvmx_pip_stat8_x_t;
5201
5202/**
5203 * cvmx_pip_stat8_prt#
5204 *
5205 * PIP_STAT8_PRTX = PIP_STAT_FRAG     / PIP_STAT_UNDER
5206 *
5207 *
5208 * Notes:
5209 * DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
5210 * sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
5211 */
5212union cvmx_pip_stat8_prtx {
5213	uint64_t u64;
5214	struct cvmx_pip_stat8_prtx_s {
5215#ifdef __BIG_ENDIAN_BITFIELD
5216	uint64_t frag                         : 32; /**< Number of packets with length < min and FCS error */
5217	uint64_t undersz                      : 32; /**< Number of packets with length < min */
5218#else
5219	uint64_t undersz                      : 32;
5220	uint64_t frag                         : 32;
5221#endif
5222	} s;
5223	struct cvmx_pip_stat8_prtx_s          cn30xx;
5224	struct cvmx_pip_stat8_prtx_s          cn31xx;
5225	struct cvmx_pip_stat8_prtx_s          cn38xx;
5226	struct cvmx_pip_stat8_prtx_s          cn38xxp2;
5227	struct cvmx_pip_stat8_prtx_s          cn50xx;
5228	struct cvmx_pip_stat8_prtx_s          cn52xx;
5229	struct cvmx_pip_stat8_prtx_s          cn52xxp1;
5230	struct cvmx_pip_stat8_prtx_s          cn56xx;
5231	struct cvmx_pip_stat8_prtx_s          cn56xxp1;
5232	struct cvmx_pip_stat8_prtx_s          cn58xx;
5233	struct cvmx_pip_stat8_prtx_s          cn58xxp1;
5234	struct cvmx_pip_stat8_prtx_s          cn61xx;
5235	struct cvmx_pip_stat8_prtx_s          cn63xx;
5236	struct cvmx_pip_stat8_prtx_s          cn63xxp1;
5237	struct cvmx_pip_stat8_prtx_s          cn66xx;
5238	struct cvmx_pip_stat8_prtx_s          cnf71xx;
5239};
5240typedef union cvmx_pip_stat8_prtx cvmx_pip_stat8_prtx_t;
5241
5242/**
5243 * cvmx_pip_stat9_#
5244 *
5245 * PIP_STAT9_X = PIP_STAT_JABBER   / PIP_STAT_OVER
5246 *
5247 */
5248union cvmx_pip_stat9_x {
5249	uint64_t u64;
5250	struct cvmx_pip_stat9_x_s {
5251#ifdef __BIG_ENDIAN_BITFIELD
5252	uint64_t jabber                       : 32; /**< Number of packets with length > max and FCS error */
5253	uint64_t oversz                       : 32; /**< Number of packets with length > max */
5254#else
5255	uint64_t oversz                       : 32;
5256	uint64_t jabber                       : 32;
5257#endif
5258	} s;
5259	struct cvmx_pip_stat9_x_s             cn68xx;
5260	struct cvmx_pip_stat9_x_s             cn68xxp1;
5261};
5262typedef union cvmx_pip_stat9_x cvmx_pip_stat9_x_t;
5263
5264/**
5265 * cvmx_pip_stat9_prt#
5266 *
5267 * PIP_STAT9_PRTX = PIP_STAT_JABBER   / PIP_STAT_OVER
5268 *
5269 *
5270 * Notes:
5271 * DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
5272 * sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
5273 * sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
5274 */
5275union cvmx_pip_stat9_prtx {
5276	uint64_t u64;
5277	struct cvmx_pip_stat9_prtx_s {
5278#ifdef __BIG_ENDIAN_BITFIELD
5279	uint64_t jabber                       : 32; /**< Number of packets with length > max and FCS error */
5280	uint64_t oversz                       : 32; /**< Number of packets with length > max */
5281#else
5282	uint64_t oversz                       : 32;
5283	uint64_t jabber                       : 32;
5284#endif
5285	} s;
5286	struct cvmx_pip_stat9_prtx_s          cn30xx;
5287	struct cvmx_pip_stat9_prtx_s          cn31xx;
5288	struct cvmx_pip_stat9_prtx_s          cn38xx;
5289	struct cvmx_pip_stat9_prtx_s          cn38xxp2;
5290	struct cvmx_pip_stat9_prtx_s          cn50xx;
5291	struct cvmx_pip_stat9_prtx_s          cn52xx;
5292	struct cvmx_pip_stat9_prtx_s          cn52xxp1;
5293	struct cvmx_pip_stat9_prtx_s          cn56xx;
5294	struct cvmx_pip_stat9_prtx_s          cn56xxp1;
5295	struct cvmx_pip_stat9_prtx_s          cn58xx;
5296	struct cvmx_pip_stat9_prtx_s          cn58xxp1;
5297	struct cvmx_pip_stat9_prtx_s          cn61xx;
5298	struct cvmx_pip_stat9_prtx_s          cn63xx;
5299	struct cvmx_pip_stat9_prtx_s          cn63xxp1;
5300	struct cvmx_pip_stat9_prtx_s          cn66xx;
5301	struct cvmx_pip_stat9_prtx_s          cnf71xx;
5302};
5303typedef union cvmx_pip_stat9_prtx cvmx_pip_stat9_prtx_t;
5304
5305/**
5306 * cvmx_pip_stat_ctl
5307 *
5308 * PIP_STAT_CTL = PIP's Stat Control Register
5309 *
5310 * Controls how the PIP statistics counters are handled.
5311 */
5312union cvmx_pip_stat_ctl {
5313	uint64_t u64;
5314	struct cvmx_pip_stat_ctl_s {
5315#ifdef __BIG_ENDIAN_BITFIELD
5316	uint64_t reserved_9_63                : 55;
5317	uint64_t mode                         : 1;  /**< The PIP_STAT*_X registers can be indexed either by
5318                                                         port-kind or backpressure ID.
5319                                                         Does not apply to the PIP_STAT_INB* registers.
5320                                                         0 = X represents the packet's port-kind
5321                                                         1 = X represents the packet's backpressure ID */
5322	uint64_t reserved_1_7                 : 7;
5323	uint64_t rdclr                        : 1;  /**< Stat registers are read and clear
5324                                                         0 = stat registers hold value when read
5325                                                         1 = stat registers are cleared when read */
5326#else
5327	uint64_t rdclr                        : 1;
5328	uint64_t reserved_1_7                 : 7;
5329	uint64_t mode                         : 1;
5330	uint64_t reserved_9_63                : 55;
5331#endif
5332	} s;
5333	struct cvmx_pip_stat_ctl_cn30xx {
5334#ifdef __BIG_ENDIAN_BITFIELD
5335	uint64_t reserved_1_63                : 63;
5336	uint64_t rdclr                        : 1;  /**< Stat registers are read and clear
5337                                                         0 = stat registers hold value when read
5338                                                         1 = stat registers are cleared when read */
5339#else
5340	uint64_t rdclr                        : 1;
5341	uint64_t reserved_1_63                : 63;
5342#endif
5343	} cn30xx;
5344	struct cvmx_pip_stat_ctl_cn30xx       cn31xx;
5345	struct cvmx_pip_stat_ctl_cn30xx       cn38xx;
5346	struct cvmx_pip_stat_ctl_cn30xx       cn38xxp2;
5347	struct cvmx_pip_stat_ctl_cn30xx       cn50xx;
5348	struct cvmx_pip_stat_ctl_cn30xx       cn52xx;
5349	struct cvmx_pip_stat_ctl_cn30xx       cn52xxp1;
5350	struct cvmx_pip_stat_ctl_cn30xx       cn56xx;
5351	struct cvmx_pip_stat_ctl_cn30xx       cn56xxp1;
5352	struct cvmx_pip_stat_ctl_cn30xx       cn58xx;
5353	struct cvmx_pip_stat_ctl_cn30xx       cn58xxp1;
5354	struct cvmx_pip_stat_ctl_cn30xx       cn61xx;
5355	struct cvmx_pip_stat_ctl_cn30xx       cn63xx;
5356	struct cvmx_pip_stat_ctl_cn30xx       cn63xxp1;
5357	struct cvmx_pip_stat_ctl_cn30xx       cn66xx;
5358	struct cvmx_pip_stat_ctl_s            cn68xx;
5359	struct cvmx_pip_stat_ctl_s            cn68xxp1;
5360	struct cvmx_pip_stat_ctl_cn30xx       cnf71xx;
5361};
5362typedef union cvmx_pip_stat_ctl cvmx_pip_stat_ctl_t;
5363
5364/**
5365 * cvmx_pip_stat_inb_errs#
5366 *
5367 * PIP_STAT_INB_ERRSX = Inbound error packets received by PIP per port
5368 *
5369 * Inbound stats collect all data sent to PIP from all packet interfaces.
5370 * Its the raw counts of everything that comes into the block.  The counts
5371 * will reflect all error packets and packets dropped by the PKI RED engine.
5372 * These counts are intended for system debug, but could convey useful
5373 * information in production systems.
5374 */
5375union cvmx_pip_stat_inb_errsx {
5376	uint64_t u64;
5377	struct cvmx_pip_stat_inb_errsx_s {
5378#ifdef __BIG_ENDIAN_BITFIELD
5379	uint64_t reserved_16_63               : 48;
5380	uint64_t errs                         : 16; /**< Number of packets with errors
5381                                                         received by PIP */
5382#else
5383	uint64_t errs                         : 16;
5384	uint64_t reserved_16_63               : 48;
5385#endif
5386	} s;
5387	struct cvmx_pip_stat_inb_errsx_s      cn30xx;
5388	struct cvmx_pip_stat_inb_errsx_s      cn31xx;
5389	struct cvmx_pip_stat_inb_errsx_s      cn38xx;
5390	struct cvmx_pip_stat_inb_errsx_s      cn38xxp2;
5391	struct cvmx_pip_stat_inb_errsx_s      cn50xx;
5392	struct cvmx_pip_stat_inb_errsx_s      cn52xx;
5393	struct cvmx_pip_stat_inb_errsx_s      cn52xxp1;
5394	struct cvmx_pip_stat_inb_errsx_s      cn56xx;
5395	struct cvmx_pip_stat_inb_errsx_s      cn56xxp1;
5396	struct cvmx_pip_stat_inb_errsx_s      cn58xx;
5397	struct cvmx_pip_stat_inb_errsx_s      cn58xxp1;
5398	struct cvmx_pip_stat_inb_errsx_s      cn61xx;
5399	struct cvmx_pip_stat_inb_errsx_s      cn63xx;
5400	struct cvmx_pip_stat_inb_errsx_s      cn63xxp1;
5401	struct cvmx_pip_stat_inb_errsx_s      cn66xx;
5402	struct cvmx_pip_stat_inb_errsx_s      cnf71xx;
5403};
5404typedef union cvmx_pip_stat_inb_errsx cvmx_pip_stat_inb_errsx_t;
5405
5406/**
5407 * cvmx_pip_stat_inb_errs_pknd#
5408 *
5409 * PIP_STAT_INB_ERRS_PKNDX = Inbound error packets received by PIP per pkind
5410 *
5411 * Inbound stats collect all data sent to PIP from all packet interfaces.
5412 * Its the raw counts of everything that comes into the block.  The counts
5413 * will reflect all error packets and packets dropped by the PKI RED engine.
5414 * These counts are intended for system debug, but could convey useful
5415 * information in production systems.
5416 */
5417union cvmx_pip_stat_inb_errs_pkndx {
5418	uint64_t u64;
5419	struct cvmx_pip_stat_inb_errs_pkndx_s {
5420#ifdef __BIG_ENDIAN_BITFIELD
5421	uint64_t reserved_16_63               : 48;
5422	uint64_t errs                         : 16; /**< Number of packets with errors
5423                                                         received by PIP */
5424#else
5425	uint64_t errs                         : 16;
5426	uint64_t reserved_16_63               : 48;
5427#endif
5428	} s;
5429	struct cvmx_pip_stat_inb_errs_pkndx_s cn68xx;
5430	struct cvmx_pip_stat_inb_errs_pkndx_s cn68xxp1;
5431};
5432typedef union cvmx_pip_stat_inb_errs_pkndx cvmx_pip_stat_inb_errs_pkndx_t;
5433
5434/**
5435 * cvmx_pip_stat_inb_octs#
5436 *
5437 * PIP_STAT_INB_OCTSX = Inbound octets received by PIP per port
5438 *
5439 * Inbound stats collect all data sent to PIP from all packet interfaces.
5440 * Its the raw counts of everything that comes into the block.  The counts
5441 * will reflect all error packets and packets dropped by the PKI RED engine.
5442 * These counts are intended for system debug, but could convey useful
5443 * information in production systems. The OCTS will include the bytes from
5444 * timestamp fields in PTP_MODE.
5445 */
5446union cvmx_pip_stat_inb_octsx {
5447	uint64_t u64;
5448	struct cvmx_pip_stat_inb_octsx_s {
5449#ifdef __BIG_ENDIAN_BITFIELD
5450	uint64_t reserved_48_63               : 16;
5451	uint64_t octs                         : 48; /**< Total number of octets from all packets received
5452                                                         by PIP */
5453#else
5454	uint64_t octs                         : 48;
5455	uint64_t reserved_48_63               : 16;
5456#endif
5457	} s;
5458	struct cvmx_pip_stat_inb_octsx_s      cn30xx;
5459	struct cvmx_pip_stat_inb_octsx_s      cn31xx;
5460	struct cvmx_pip_stat_inb_octsx_s      cn38xx;
5461	struct cvmx_pip_stat_inb_octsx_s      cn38xxp2;
5462	struct cvmx_pip_stat_inb_octsx_s      cn50xx;
5463	struct cvmx_pip_stat_inb_octsx_s      cn52xx;
5464	struct cvmx_pip_stat_inb_octsx_s      cn52xxp1;
5465	struct cvmx_pip_stat_inb_octsx_s      cn56xx;
5466	struct cvmx_pip_stat_inb_octsx_s      cn56xxp1;
5467	struct cvmx_pip_stat_inb_octsx_s      cn58xx;
5468	struct cvmx_pip_stat_inb_octsx_s      cn58xxp1;
5469	struct cvmx_pip_stat_inb_octsx_s      cn61xx;
5470	struct cvmx_pip_stat_inb_octsx_s      cn63xx;
5471	struct cvmx_pip_stat_inb_octsx_s      cn63xxp1;
5472	struct cvmx_pip_stat_inb_octsx_s      cn66xx;
5473	struct cvmx_pip_stat_inb_octsx_s      cnf71xx;
5474};
5475typedef union cvmx_pip_stat_inb_octsx cvmx_pip_stat_inb_octsx_t;
5476
5477/**
5478 * cvmx_pip_stat_inb_octs_pknd#
5479 *
5480 * PIP_STAT_INB_OCTS_PKNDX = Inbound octets received by PIP per pkind
5481 *
5482 * Inbound stats collect all data sent to PIP from all packet interfaces.
5483 * Its the raw counts of everything that comes into the block.  The counts
5484 * will reflect all error packets and packets dropped by the PKI RED engine.
5485 * These counts are intended for system debug, but could convey useful
5486 * information in production systems. The OCTS will include the bytes from
5487 * timestamp fields in PTP_MODE.
5488 */
5489union cvmx_pip_stat_inb_octs_pkndx {
5490	uint64_t u64;
5491	struct cvmx_pip_stat_inb_octs_pkndx_s {
5492#ifdef __BIG_ENDIAN_BITFIELD
5493	uint64_t reserved_48_63               : 16;
5494	uint64_t octs                         : 48; /**< Total number of octets from all packets received
5495                                                         by PIP */
5496#else
5497	uint64_t octs                         : 48;
5498	uint64_t reserved_48_63               : 16;
5499#endif
5500	} s;
5501	struct cvmx_pip_stat_inb_octs_pkndx_s cn68xx;
5502	struct cvmx_pip_stat_inb_octs_pkndx_s cn68xxp1;
5503};
5504typedef union cvmx_pip_stat_inb_octs_pkndx cvmx_pip_stat_inb_octs_pkndx_t;
5505
5506/**
5507 * cvmx_pip_stat_inb_pkts#
5508 *
5509 * PIP_STAT_INB_PKTSX = Inbound packets received by PIP per port
5510 *
5511 * Inbound stats collect all data sent to PIP from all packet interfaces.
5512 * Its the raw counts of everything that comes into the block.  The counts
5513 * will reflect all error packets and packets dropped by the PKI RED engine.
5514 * These counts are intended for system debug, but could convey useful
5515 * information in production systems.
5516 */
5517union cvmx_pip_stat_inb_pktsx {
5518	uint64_t u64;
5519	struct cvmx_pip_stat_inb_pktsx_s {
5520#ifdef __BIG_ENDIAN_BITFIELD
5521	uint64_t reserved_32_63               : 32;
5522	uint64_t pkts                         : 32; /**< Number of packets without errors
5523                                                         received by PIP */
5524#else
5525	uint64_t pkts                         : 32;
5526	uint64_t reserved_32_63               : 32;
5527#endif
5528	} s;
5529	struct cvmx_pip_stat_inb_pktsx_s      cn30xx;
5530	struct cvmx_pip_stat_inb_pktsx_s      cn31xx;
5531	struct cvmx_pip_stat_inb_pktsx_s      cn38xx;
5532	struct cvmx_pip_stat_inb_pktsx_s      cn38xxp2;
5533	struct cvmx_pip_stat_inb_pktsx_s      cn50xx;
5534	struct cvmx_pip_stat_inb_pktsx_s      cn52xx;
5535	struct cvmx_pip_stat_inb_pktsx_s      cn52xxp1;
5536	struct cvmx_pip_stat_inb_pktsx_s      cn56xx;
5537	struct cvmx_pip_stat_inb_pktsx_s      cn56xxp1;
5538	struct cvmx_pip_stat_inb_pktsx_s      cn58xx;
5539	struct cvmx_pip_stat_inb_pktsx_s      cn58xxp1;
5540	struct cvmx_pip_stat_inb_pktsx_s      cn61xx;
5541	struct cvmx_pip_stat_inb_pktsx_s      cn63xx;
5542	struct cvmx_pip_stat_inb_pktsx_s      cn63xxp1;
5543	struct cvmx_pip_stat_inb_pktsx_s      cn66xx;
5544	struct cvmx_pip_stat_inb_pktsx_s      cnf71xx;
5545};
5546typedef union cvmx_pip_stat_inb_pktsx cvmx_pip_stat_inb_pktsx_t;
5547
5548/**
5549 * cvmx_pip_stat_inb_pkts_pknd#
5550 *
5551 * PIP_STAT_INB_PKTS_PKNDX = Inbound packets received by PIP per pkind
5552 *
5553 * Inbound stats collect all data sent to PIP from all packet interfaces.
5554 * Its the raw counts of everything that comes into the block.  The counts
5555 * will reflect all error packets and packets dropped by the PKI RED engine.
5556 * These counts are intended for system debug, but could convey useful
5557 * information in production systems.
5558 */
5559union cvmx_pip_stat_inb_pkts_pkndx {
5560	uint64_t u64;
5561	struct cvmx_pip_stat_inb_pkts_pkndx_s {
5562#ifdef __BIG_ENDIAN_BITFIELD
5563	uint64_t reserved_32_63               : 32;
5564	uint64_t pkts                         : 32; /**< Number of packets without errors
5565                                                         received by PIP */
5566#else
5567	uint64_t pkts                         : 32;
5568	uint64_t reserved_32_63               : 32;
5569#endif
5570	} s;
5571	struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xx;
5572	struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xxp1;
5573};
5574typedef union cvmx_pip_stat_inb_pkts_pkndx cvmx_pip_stat_inb_pkts_pkndx_t;
5575
5576/**
5577 * cvmx_pip_sub_pkind_fcs#
5578 */
5579union cvmx_pip_sub_pkind_fcsx {
5580	uint64_t u64;
5581	struct cvmx_pip_sub_pkind_fcsx_s {
5582#ifdef __BIG_ENDIAN_BITFIELD
5583	uint64_t port_bit                     : 64; /**< When set '1', the pkind corresponding to the bit
5584                                                         position set, will subtract the FCS for packets
5585                                                         on that pkind. */
5586#else
5587	uint64_t port_bit                     : 64;
5588#endif
5589	} s;
5590	struct cvmx_pip_sub_pkind_fcsx_s      cn68xx;
5591	struct cvmx_pip_sub_pkind_fcsx_s      cn68xxp1;
5592};
5593typedef union cvmx_pip_sub_pkind_fcsx cvmx_pip_sub_pkind_fcsx_t;
5594
5595/**
5596 * cvmx_pip_tag_inc#
5597 *
5598 * PIP_TAG_INC = Which bytes to include in the new tag hash algorithm
5599 *
5600 * # $PIP_TAG_INCX = 0x300+X X=(0..63) RegType=(RSL) RtlReg=(pip_tag_inc_csr_direct_TestbuilderTask)
5601 */
5602union cvmx_pip_tag_incx {
5603	uint64_t u64;
5604	struct cvmx_pip_tag_incx_s {
5605#ifdef __BIG_ENDIAN_BITFIELD
5606	uint64_t reserved_8_63                : 56;
5607	uint64_t en                           : 8;  /**< Which bytes to include in mask tag algorithm
5608                                                         Broken into 4, 16-entry masks to cover 128B
5609                                                         PIP_PRT_CFG[TAG_INC] selects 1 of 4 to use
5610                                                         registers  0-15 map to PIP_PRT_CFG[TAG_INC] == 0
5611                                                         registers 16-31 map to PIP_PRT_CFG[TAG_INC] == 1
5612                                                         registers 32-47 map to PIP_PRT_CFG[TAG_INC] == 2
5613                                                         registers 48-63 map to PIP_PRT_CFG[TAG_INC] == 3
5614                                                         [7] coresponds to the MSB of the 8B word
5615                                                         [0] coresponds to the LSB of the 8B word
5616                                                         If PTP_MODE, the 8B timestamp is prepended to the
5617                                                          packet.  The EN byte masks should be adjusted to
5618                                                          compensate for the additional timestamp field. */
5619#else
5620	uint64_t en                           : 8;
5621	uint64_t reserved_8_63                : 56;
5622#endif
5623	} s;
5624	struct cvmx_pip_tag_incx_s            cn30xx;
5625	struct cvmx_pip_tag_incx_s            cn31xx;
5626	struct cvmx_pip_tag_incx_s            cn38xx;
5627	struct cvmx_pip_tag_incx_s            cn38xxp2;
5628	struct cvmx_pip_tag_incx_s            cn50xx;
5629	struct cvmx_pip_tag_incx_s            cn52xx;
5630	struct cvmx_pip_tag_incx_s            cn52xxp1;
5631	struct cvmx_pip_tag_incx_s            cn56xx;
5632	struct cvmx_pip_tag_incx_s            cn56xxp1;
5633	struct cvmx_pip_tag_incx_s            cn58xx;
5634	struct cvmx_pip_tag_incx_s            cn58xxp1;
5635	struct cvmx_pip_tag_incx_s            cn61xx;
5636	struct cvmx_pip_tag_incx_s            cn63xx;
5637	struct cvmx_pip_tag_incx_s            cn63xxp1;
5638	struct cvmx_pip_tag_incx_s            cn66xx;
5639	struct cvmx_pip_tag_incx_s            cn68xx;
5640	struct cvmx_pip_tag_incx_s            cn68xxp1;
5641	struct cvmx_pip_tag_incx_s            cnf71xx;
5642};
5643typedef union cvmx_pip_tag_incx cvmx_pip_tag_incx_t;
5644
5645/**
5646 * cvmx_pip_tag_mask
5647 *
5648 * PIP_TAG_MASK = Mask bit in the tag generation
5649 *
5650 */
5651union cvmx_pip_tag_mask {
5652	uint64_t u64;
5653	struct cvmx_pip_tag_mask_s {
5654#ifdef __BIG_ENDIAN_BITFIELD
5655	uint64_t reserved_16_63               : 48;
5656	uint64_t mask                         : 16; /**< When set, MASK clears individual bits of lower 16
5657                                                         bits of the computed tag.  Does not effect RAW
5658                                                         or INSTR HDR packets. */
5659#else
5660	uint64_t mask                         : 16;
5661	uint64_t reserved_16_63               : 48;
5662#endif
5663	} s;
5664	struct cvmx_pip_tag_mask_s            cn30xx;
5665	struct cvmx_pip_tag_mask_s            cn31xx;
5666	struct cvmx_pip_tag_mask_s            cn38xx;
5667	struct cvmx_pip_tag_mask_s            cn38xxp2;
5668	struct cvmx_pip_tag_mask_s            cn50xx;
5669	struct cvmx_pip_tag_mask_s            cn52xx;
5670	struct cvmx_pip_tag_mask_s            cn52xxp1;
5671	struct cvmx_pip_tag_mask_s            cn56xx;
5672	struct cvmx_pip_tag_mask_s            cn56xxp1;
5673	struct cvmx_pip_tag_mask_s            cn58xx;
5674	struct cvmx_pip_tag_mask_s            cn58xxp1;
5675	struct cvmx_pip_tag_mask_s            cn61xx;
5676	struct cvmx_pip_tag_mask_s            cn63xx;
5677	struct cvmx_pip_tag_mask_s            cn63xxp1;
5678	struct cvmx_pip_tag_mask_s            cn66xx;
5679	struct cvmx_pip_tag_mask_s            cn68xx;
5680	struct cvmx_pip_tag_mask_s            cn68xxp1;
5681	struct cvmx_pip_tag_mask_s            cnf71xx;
5682};
5683typedef union cvmx_pip_tag_mask cvmx_pip_tag_mask_t;
5684
5685/**
5686 * cvmx_pip_tag_secret
5687 *
5688 * PIP_TAG_SECRET = Initial value in tag generation
5689 *
5690 * The source and destination IV's provide a mechanism for each Octeon to be unique.
5691 */
5692union cvmx_pip_tag_secret {
5693	uint64_t u64;
5694	struct cvmx_pip_tag_secret_s {
5695#ifdef __BIG_ENDIAN_BITFIELD
5696	uint64_t reserved_32_63               : 32;
5697	uint64_t dst                          : 16; /**< Secret for the destination tuple tag CRC calc */
5698	uint64_t src                          : 16; /**< Secret for the source tuple tag CRC calc */
5699#else
5700	uint64_t src                          : 16;
5701	uint64_t dst                          : 16;
5702	uint64_t reserved_32_63               : 32;
5703#endif
5704	} s;
5705	struct cvmx_pip_tag_secret_s          cn30xx;
5706	struct cvmx_pip_tag_secret_s          cn31xx;
5707	struct cvmx_pip_tag_secret_s          cn38xx;
5708	struct cvmx_pip_tag_secret_s          cn38xxp2;
5709	struct cvmx_pip_tag_secret_s          cn50xx;
5710	struct cvmx_pip_tag_secret_s          cn52xx;
5711	struct cvmx_pip_tag_secret_s          cn52xxp1;
5712	struct cvmx_pip_tag_secret_s          cn56xx;
5713	struct cvmx_pip_tag_secret_s          cn56xxp1;
5714	struct cvmx_pip_tag_secret_s          cn58xx;
5715	struct cvmx_pip_tag_secret_s          cn58xxp1;
5716	struct cvmx_pip_tag_secret_s          cn61xx;
5717	struct cvmx_pip_tag_secret_s          cn63xx;
5718	struct cvmx_pip_tag_secret_s          cn63xxp1;
5719	struct cvmx_pip_tag_secret_s          cn66xx;
5720	struct cvmx_pip_tag_secret_s          cn68xx;
5721	struct cvmx_pip_tag_secret_s          cn68xxp1;
5722	struct cvmx_pip_tag_secret_s          cnf71xx;
5723};
5724typedef union cvmx_pip_tag_secret cvmx_pip_tag_secret_t;
5725
5726/**
5727 * cvmx_pip_todo_entry
5728 *
5729 * PIP_TODO_ENTRY = Head entry of the Todo list (debug only)
5730 *
5731 * Summary of the current packet that has completed and waiting to be processed
5732 */
5733union cvmx_pip_todo_entry {
5734	uint64_t u64;
5735	struct cvmx_pip_todo_entry_s {
5736#ifdef __BIG_ENDIAN_BITFIELD
5737	uint64_t val                          : 1;  /**< Entry is valid */
5738	uint64_t reserved_62_62               : 1;
5739	uint64_t entry                        : 62; /**< Todo list entry summary */
5740#else
5741	uint64_t entry                        : 62;
5742	uint64_t reserved_62_62               : 1;
5743	uint64_t val                          : 1;
5744#endif
5745	} s;
5746	struct cvmx_pip_todo_entry_s          cn30xx;
5747	struct cvmx_pip_todo_entry_s          cn31xx;
5748	struct cvmx_pip_todo_entry_s          cn38xx;
5749	struct cvmx_pip_todo_entry_s          cn38xxp2;
5750	struct cvmx_pip_todo_entry_s          cn50xx;
5751	struct cvmx_pip_todo_entry_s          cn52xx;
5752	struct cvmx_pip_todo_entry_s          cn52xxp1;
5753	struct cvmx_pip_todo_entry_s          cn56xx;
5754	struct cvmx_pip_todo_entry_s          cn56xxp1;
5755	struct cvmx_pip_todo_entry_s          cn58xx;
5756	struct cvmx_pip_todo_entry_s          cn58xxp1;
5757	struct cvmx_pip_todo_entry_s          cn61xx;
5758	struct cvmx_pip_todo_entry_s          cn63xx;
5759	struct cvmx_pip_todo_entry_s          cn63xxp1;
5760	struct cvmx_pip_todo_entry_s          cn66xx;
5761	struct cvmx_pip_todo_entry_s          cn68xx;
5762	struct cvmx_pip_todo_entry_s          cn68xxp1;
5763	struct cvmx_pip_todo_entry_s          cnf71xx;
5764};
5765typedef union cvmx_pip_todo_entry cvmx_pip_todo_entry_t;
5766
5767/**
5768 * cvmx_pip_vlan_etypes#
5769 */
5770union cvmx_pip_vlan_etypesx {
5771	uint64_t u64;
5772	struct cvmx_pip_vlan_etypesx_s {
5773#ifdef __BIG_ENDIAN_BITFIELD
5774	uint64_t type3                        : 16; /**< VLAN Ethertype */
5775	uint64_t type2                        : 16; /**< VLAN Ethertype */
5776	uint64_t type1                        : 16; /**< VLAN Ethertype */
5777	uint64_t type0                        : 16; /**< VLAN Ethertype
5778                                                         Specifies ethertypes that will be parsed as
5779                                                         containing VLAN information. Each TYPE is
5780                                                         orthagonal; if all eight are not required, set
5781                                                         multiple TYPEs to the same value (as in the
5782                                                         0x8100 default value). */
5783#else
5784	uint64_t type0                        : 16;
5785	uint64_t type1                        : 16;
5786	uint64_t type2                        : 16;
5787	uint64_t type3                        : 16;
5788#endif
5789	} s;
5790	struct cvmx_pip_vlan_etypesx_s        cn61xx;
5791	struct cvmx_pip_vlan_etypesx_s        cn66xx;
5792	struct cvmx_pip_vlan_etypesx_s        cn68xx;
5793	struct cvmx_pip_vlan_etypesx_s        cnf71xx;
5794};
5795typedef union cvmx_pip_vlan_etypesx cvmx_pip_vlan_etypesx_t;
5796
5797/**
5798 * cvmx_pip_xstat0_prt#
5799 *
5800 * PIP_XSTAT0_PRT = PIP_XSTAT_DRP_PKTS / PIP_XSTAT_DRP_OCTS
5801 *
5802 */
5803union cvmx_pip_xstat0_prtx {
5804	uint64_t u64;
5805	struct cvmx_pip_xstat0_prtx_s {
5806#ifdef __BIG_ENDIAN_BITFIELD
5807	uint64_t drp_pkts                     : 32; /**< Inbound packets marked to be dropped by the IPD
5808                                                         QOS widget per port */
5809	uint64_t drp_octs                     : 32; /**< Inbound octets marked to be dropped by the IPD
5810                                                         QOS widget per port */
5811#else
5812	uint64_t drp_octs                     : 32;
5813	uint64_t drp_pkts                     : 32;
5814#endif
5815	} s;
5816	struct cvmx_pip_xstat0_prtx_s         cn63xx;
5817	struct cvmx_pip_xstat0_prtx_s         cn63xxp1;
5818	struct cvmx_pip_xstat0_prtx_s         cn66xx;
5819};
5820typedef union cvmx_pip_xstat0_prtx cvmx_pip_xstat0_prtx_t;
5821
5822/**
5823 * cvmx_pip_xstat10_prt#
5824 *
5825 * PIP_XSTAT10_PRTX = PIP_XSTAT_L2_MCAST / PIP_XSTAT_L2_BCAST
5826 *
5827 */
5828union cvmx_pip_xstat10_prtx {
5829	uint64_t u64;
5830	struct cvmx_pip_xstat10_prtx_s {
5831#ifdef __BIG_ENDIAN_BITFIELD
5832	uint64_t bcast                        : 32; /**< Number of packets with L2 Broadcast DMAC
5833                                                         that were dropped due to RED.
5834                                                         The HW will consider a packet to be an L2
5835                                                         broadcast packet when the 48-bit DMAC is all 1's.
5836                                                         Only applies when the parse mode for the packet
5837                                                         is SKIP-TO-L2. */
5838	uint64_t mcast                        : 32; /**< Number of packets with L2 Mulitcast DMAC
5839                                                         that were dropped due to RED.
5840                                                         The HW will consider a packet to be an L2
5841                                                         multicast packet when the least-significant bit
5842                                                         of the first byte of the DMAC is set and the
5843                                                         packet is not an L2 broadcast packet.
5844                                                         Only applies when the parse mode for the packet
5845                                                         is SKIP-TO-L2. */
5846#else
5847	uint64_t mcast                        : 32;
5848	uint64_t bcast                        : 32;
5849#endif
5850	} s;
5851	struct cvmx_pip_xstat10_prtx_s        cn63xx;
5852	struct cvmx_pip_xstat10_prtx_s        cn63xxp1;
5853	struct cvmx_pip_xstat10_prtx_s        cn66xx;
5854};
5855typedef union cvmx_pip_xstat10_prtx cvmx_pip_xstat10_prtx_t;
5856
5857/**
5858 * cvmx_pip_xstat11_prt#
5859 *
5860 * PIP_XSTAT11_PRTX = PIP_XSTAT_L3_MCAST / PIP_XSTAT_L3_BCAST
5861 *
5862 */
5863union cvmx_pip_xstat11_prtx {
5864	uint64_t u64;
5865	struct cvmx_pip_xstat11_prtx_s {
5866#ifdef __BIG_ENDIAN_BITFIELD
5867	uint64_t bcast                        : 32; /**< Number of packets with L3 Broadcast Dest Address
5868                                                         that were dropped due to RED.
5869                                                         The HW considers an IPv4 packet to be broadcast
5870                                                         when all bits are set in the MSB of the
5871                                                         destination address. IPv6 does not have the
5872                                                         concept of a broadcast packets.
5873                                                         Only applies when the parse mode for the packet
5874                                                         is SKIP-TO-L2 and the packet is IP or the parse
5875                                                         mode for the packet is SKIP-TO-IP. */
5876	uint64_t mcast                        : 32; /**< Number of packets with L3 Multicast Dest Address
5877                                                         that were dropped due to RED.
5878                                                         The HW considers an IPv4 packet to be multicast
5879                                                         when the most-significant nibble of the 32-bit
5880                                                         destination address is 0xE (i.e. it is a class D
5881                                                         address). The HW considers an IPv6 packet to be
5882                                                         multicast when the most-significant byte of the
5883                                                         128-bit destination address is all 1's.
5884                                                         Only applies when the parse mode for the packet
5885                                                         is SKIP-TO-L2 and the packet is IP or the parse
5886                                                         mode for the packet is SKIP-TO-IP. */
5887#else
5888	uint64_t mcast                        : 32;
5889	uint64_t bcast                        : 32;
5890#endif
5891	} s;
5892	struct cvmx_pip_xstat11_prtx_s        cn63xx;
5893	struct cvmx_pip_xstat11_prtx_s        cn63xxp1;
5894	struct cvmx_pip_xstat11_prtx_s        cn66xx;
5895};
5896typedef union cvmx_pip_xstat11_prtx cvmx_pip_xstat11_prtx_t;
5897
5898/**
5899 * cvmx_pip_xstat1_prt#
5900 *
5901 * PIP_XSTAT1_PRTX = PIP_XSTAT_OCTS
5902 *
5903 */
5904union cvmx_pip_xstat1_prtx {
5905	uint64_t u64;
5906	struct cvmx_pip_xstat1_prtx_s {
5907#ifdef __BIG_ENDIAN_BITFIELD
5908	uint64_t reserved_48_63               : 16;
5909	uint64_t octs                         : 48; /**< Number of octets received by PIP (good and bad) */
5910#else
5911	uint64_t octs                         : 48;
5912	uint64_t reserved_48_63               : 16;
5913#endif
5914	} s;
5915	struct cvmx_pip_xstat1_prtx_s         cn63xx;
5916	struct cvmx_pip_xstat1_prtx_s         cn63xxp1;
5917	struct cvmx_pip_xstat1_prtx_s         cn66xx;
5918};
5919typedef union cvmx_pip_xstat1_prtx cvmx_pip_xstat1_prtx_t;
5920
5921/**
5922 * cvmx_pip_xstat2_prt#
5923 *
5924 * PIP_XSTAT2_PRTX = PIP_XSTAT_PKTS     / PIP_XSTAT_RAW
5925 *
5926 */
5927union cvmx_pip_xstat2_prtx {
5928	uint64_t u64;
5929	struct cvmx_pip_xstat2_prtx_s {
5930#ifdef __BIG_ENDIAN_BITFIELD
5931	uint64_t pkts                         : 32; /**< Number of packets processed by PIP */
5932	uint64_t raw                          : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
5933                                                         received by PIP per port */
5934#else
5935	uint64_t raw                          : 32;
5936	uint64_t pkts                         : 32;
5937#endif
5938	} s;
5939	struct cvmx_pip_xstat2_prtx_s         cn63xx;
5940	struct cvmx_pip_xstat2_prtx_s         cn63xxp1;
5941	struct cvmx_pip_xstat2_prtx_s         cn66xx;
5942};
5943typedef union cvmx_pip_xstat2_prtx cvmx_pip_xstat2_prtx_t;
5944
5945/**
5946 * cvmx_pip_xstat3_prt#
5947 *
5948 * PIP_XSTAT3_PRTX = PIP_XSTAT_BCST     / PIP_XSTAT_MCST
5949 *
5950 */
5951union cvmx_pip_xstat3_prtx {
5952	uint64_t u64;
5953	struct cvmx_pip_xstat3_prtx_s {
5954#ifdef __BIG_ENDIAN_BITFIELD
5955	uint64_t bcst                         : 32; /**< Number of indentified L2 broadcast packets
5956                                                         Does not include multicast packets
5957                                                         Only includes packets whose parse mode is
5958                                                         SKIP_TO_L2. */
5959	uint64_t mcst                         : 32; /**< Number of indentified L2 multicast packets
5960                                                         Does not include broadcast packets
5961                                                         Only includes packets whose parse mode is
5962                                                         SKIP_TO_L2. */
5963#else
5964	uint64_t mcst                         : 32;
5965	uint64_t bcst                         : 32;
5966#endif
5967	} s;
5968	struct cvmx_pip_xstat3_prtx_s         cn63xx;
5969	struct cvmx_pip_xstat3_prtx_s         cn63xxp1;
5970	struct cvmx_pip_xstat3_prtx_s         cn66xx;
5971};
5972typedef union cvmx_pip_xstat3_prtx cvmx_pip_xstat3_prtx_t;
5973
5974/**
5975 * cvmx_pip_xstat4_prt#
5976 *
5977 * PIP_XSTAT4_PRTX = PIP_XSTAT_HIST1    / PIP_XSTAT_HIST0
5978 *
5979 */
5980union cvmx_pip_xstat4_prtx {
5981	uint64_t u64;
5982	struct cvmx_pip_xstat4_prtx_s {
5983#ifdef __BIG_ENDIAN_BITFIELD
5984	uint64_t h65to127                     : 32; /**< Number of 65-127B packets */
5985	uint64_t h64                          : 32; /**< Number of 1-64B packets */
5986#else
5987	uint64_t h64                          : 32;
5988	uint64_t h65to127                     : 32;
5989#endif
5990	} s;
5991	struct cvmx_pip_xstat4_prtx_s         cn63xx;
5992	struct cvmx_pip_xstat4_prtx_s         cn63xxp1;
5993	struct cvmx_pip_xstat4_prtx_s         cn66xx;
5994};
5995typedef union cvmx_pip_xstat4_prtx cvmx_pip_xstat4_prtx_t;
5996
5997/**
5998 * cvmx_pip_xstat5_prt#
5999 *
6000 * PIP_XSTAT5_PRTX = PIP_XSTAT_HIST3    / PIP_XSTAT_HIST2
6001 *
6002 */
6003union cvmx_pip_xstat5_prtx {
6004	uint64_t u64;
6005	struct cvmx_pip_xstat5_prtx_s {
6006#ifdef __BIG_ENDIAN_BITFIELD
6007	uint64_t h256to511                    : 32; /**< Number of 256-511B packets */
6008	uint64_t h128to255                    : 32; /**< Number of 128-255B packets */
6009#else
6010	uint64_t h128to255                    : 32;
6011	uint64_t h256to511                    : 32;
6012#endif
6013	} s;
6014	struct cvmx_pip_xstat5_prtx_s         cn63xx;
6015	struct cvmx_pip_xstat5_prtx_s         cn63xxp1;
6016	struct cvmx_pip_xstat5_prtx_s         cn66xx;
6017};
6018typedef union cvmx_pip_xstat5_prtx cvmx_pip_xstat5_prtx_t;
6019
6020/**
6021 * cvmx_pip_xstat6_prt#
6022 *
6023 * PIP_XSTAT6_PRTX = PIP_XSTAT_HIST5    / PIP_XSTAT_HIST4
6024 *
6025 */
6026union cvmx_pip_xstat6_prtx {
6027	uint64_t u64;
6028	struct cvmx_pip_xstat6_prtx_s {
6029#ifdef __BIG_ENDIAN_BITFIELD
6030	uint64_t h1024to1518                  : 32; /**< Number of 1024-1518B packets */
6031	uint64_t h512to1023                   : 32; /**< Number of 512-1023B packets */
6032#else
6033	uint64_t h512to1023                   : 32;
6034	uint64_t h1024to1518                  : 32;
6035#endif
6036	} s;
6037	struct cvmx_pip_xstat6_prtx_s         cn63xx;
6038	struct cvmx_pip_xstat6_prtx_s         cn63xxp1;
6039	struct cvmx_pip_xstat6_prtx_s         cn66xx;
6040};
6041typedef union cvmx_pip_xstat6_prtx cvmx_pip_xstat6_prtx_t;
6042
6043/**
6044 * cvmx_pip_xstat7_prt#
6045 *
6046 * PIP_XSTAT7_PRTX = PIP_XSTAT_FCS      / PIP_XSTAT_HIST6
6047 *
6048 *
6049 * Notes:
6050 * DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
6051 * sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
6052 */
6053union cvmx_pip_xstat7_prtx {
6054	uint64_t u64;
6055	struct cvmx_pip_xstat7_prtx_s {
6056#ifdef __BIG_ENDIAN_BITFIELD
6057	uint64_t fcs                          : 32; /**< Number of packets with FCS or Align opcode errors */
6058	uint64_t h1519                        : 32; /**< Number of 1519-max packets */
6059#else
6060	uint64_t h1519                        : 32;
6061	uint64_t fcs                          : 32;
6062#endif
6063	} s;
6064	struct cvmx_pip_xstat7_prtx_s         cn63xx;
6065	struct cvmx_pip_xstat7_prtx_s         cn63xxp1;
6066	struct cvmx_pip_xstat7_prtx_s         cn66xx;
6067};
6068typedef union cvmx_pip_xstat7_prtx cvmx_pip_xstat7_prtx_t;
6069
6070/**
6071 * cvmx_pip_xstat8_prt#
6072 *
6073 * PIP_XSTAT8_PRTX = PIP_XSTAT_FRAG     / PIP_XSTAT_UNDER
6074 *
6075 *
6076 * Notes:
6077 * DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
6078 * sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
6079 */
6080union cvmx_pip_xstat8_prtx {
6081	uint64_t u64;
6082	struct cvmx_pip_xstat8_prtx_s {
6083#ifdef __BIG_ENDIAN_BITFIELD
6084	uint64_t frag                         : 32; /**< Number of packets with length < min and FCS error */
6085	uint64_t undersz                      : 32; /**< Number of packets with length < min */
6086#else
6087	uint64_t undersz                      : 32;
6088	uint64_t frag                         : 32;
6089#endif
6090	} s;
6091	struct cvmx_pip_xstat8_prtx_s         cn63xx;
6092	struct cvmx_pip_xstat8_prtx_s         cn63xxp1;
6093	struct cvmx_pip_xstat8_prtx_s         cn66xx;
6094};
6095typedef union cvmx_pip_xstat8_prtx cvmx_pip_xstat8_prtx_t;
6096
6097/**
6098 * cvmx_pip_xstat9_prt#
6099 *
6100 * PIP_XSTAT9_PRTX = PIP_XSTAT_JABBER   / PIP_XSTAT_OVER
6101 *
6102 *
6103 * Notes:
6104 * DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
6105 * sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
6106 * sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
6107 */
6108union cvmx_pip_xstat9_prtx {
6109	uint64_t u64;
6110	struct cvmx_pip_xstat9_prtx_s {
6111#ifdef __BIG_ENDIAN_BITFIELD
6112	uint64_t jabber                       : 32; /**< Number of packets with length > max and FCS error */
6113	uint64_t oversz                       : 32; /**< Number of packets with length > max */
6114#else
6115	uint64_t oversz                       : 32;
6116	uint64_t jabber                       : 32;
6117#endif
6118	} s;
6119	struct cvmx_pip_xstat9_prtx_s         cn63xx;
6120	struct cvmx_pip_xstat9_prtx_s         cn63xxp1;
6121	struct cvmx_pip_xstat9_prtx_s         cn66xx;
6122};
6123typedef union cvmx_pip_xstat9_prtx cvmx_pip_xstat9_prtx_t;
6124
6125#endif
6126