]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/contrib/octeon-sdk/cvmx-pip-defs.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / contrib / octeon-sdk / cvmx-pip-defs.h
1 /***********************license start***************
2  * Copyright (c) 2003-2010  Cavium Networks (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 Networks 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  NETWORKS 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_TYPEDEFS_H__
53 #define __CVMX_PIP_TYPEDEFS_H__
54
55 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
56 #define CVMX_PIP_BCK_PRS CVMX_PIP_BCK_PRS_FUNC()
57 static inline uint64_t CVMX_PIP_BCK_PRS_FUNC(void)
58 {
59         if (!(OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN58XX) || OCTEON_IS_MODEL(OCTEON_CN63XX)))
60                 cvmx_warn("CVMX_PIP_BCK_PRS not supported on this chip\n");
61         return CVMX_ADD_IO_SEG(0x00011800A0000038ull);
62 }
63 #else
64 #define CVMX_PIP_BCK_PRS (CVMX_ADD_IO_SEG(0x00011800A0000038ull))
65 #endif
66 #define CVMX_PIP_BIST_STATUS (CVMX_ADD_IO_SEG(0x00011800A0000000ull))
67 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
68 #define CVMX_PIP_CLKEN CVMX_PIP_CLKEN_FUNC()
69 static inline uint64_t CVMX_PIP_CLKEN_FUNC(void)
70 {
71         if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
72                 cvmx_warn("CVMX_PIP_CLKEN not supported on this chip\n");
73         return CVMX_ADD_IO_SEG(0x00011800A0000040ull);
74 }
75 #else
76 #define CVMX_PIP_CLKEN (CVMX_ADD_IO_SEG(0x00011800A0000040ull))
77 #endif
78 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
79 static inline uint64_t CVMX_PIP_CRC_CTLX(unsigned long offset)
80 {
81         if (!(
82               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
83               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
84                 cvmx_warn("CVMX_PIP_CRC_CTLX(%lu) is invalid on this chip\n", offset);
85         return CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8;
86 }
87 #else
88 #define CVMX_PIP_CRC_CTLX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8)
89 #endif
90 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
91 static inline uint64_t CVMX_PIP_CRC_IVX(unsigned long offset)
92 {
93         if (!(
94               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
95               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
96                 cvmx_warn("CVMX_PIP_CRC_IVX(%lu) is invalid on this chip\n", offset);
97         return CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8;
98 }
99 #else
100 #define CVMX_PIP_CRC_IVX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8)
101 #endif
102 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
103 static inline uint64_t CVMX_PIP_DEC_IPSECX(unsigned long offset)
104 {
105         if (!(
106               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
107               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
108               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
109               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 3))) ||
110               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3))) ||
111               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3))) ||
112               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
113               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3)))))
114                 cvmx_warn("CVMX_PIP_DEC_IPSECX(%lu) is invalid on this chip\n", offset);
115         return CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8;
116 }
117 #else
118 #define CVMX_PIP_DEC_IPSECX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8)
119 #endif
120 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
121 #define CVMX_PIP_DSA_SRC_GRP CVMX_PIP_DSA_SRC_GRP_FUNC()
122 static inline uint64_t CVMX_PIP_DSA_SRC_GRP_FUNC(void)
123 {
124         if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN63XX)))
125                 cvmx_warn("CVMX_PIP_DSA_SRC_GRP not supported on this chip\n");
126         return CVMX_ADD_IO_SEG(0x00011800A0000190ull);
127 }
128 #else
129 #define CVMX_PIP_DSA_SRC_GRP (CVMX_ADD_IO_SEG(0x00011800A0000190ull))
130 #endif
131 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
132 #define CVMX_PIP_DSA_VID_GRP CVMX_PIP_DSA_VID_GRP_FUNC()
133 static inline uint64_t CVMX_PIP_DSA_VID_GRP_FUNC(void)
134 {
135         if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN63XX)))
136                 cvmx_warn("CVMX_PIP_DSA_VID_GRP not supported on this chip\n");
137         return CVMX_ADD_IO_SEG(0x00011800A0000198ull);
138 }
139 #else
140 #define CVMX_PIP_DSA_VID_GRP (CVMX_ADD_IO_SEG(0x00011800A0000198ull))
141 #endif
142 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
143 static inline uint64_t CVMX_PIP_FRM_LEN_CHKX(unsigned long offset)
144 {
145         if (!(
146               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) ||
147               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
148               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 1))) ||
149               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0)))))
150                 cvmx_warn("CVMX_PIP_FRM_LEN_CHKX(%lu) is invalid on this chip\n", offset);
151         return CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8;
152 }
153 #else
154 #define CVMX_PIP_FRM_LEN_CHKX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8)
155 #endif
156 #define CVMX_PIP_GBL_CFG (CVMX_ADD_IO_SEG(0x00011800A0000028ull))
157 #define CVMX_PIP_GBL_CTL (CVMX_ADD_IO_SEG(0x00011800A0000020ull))
158 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
159 #define CVMX_PIP_HG_PRI_QOS CVMX_PIP_HG_PRI_QOS_FUNC()
160 static inline uint64_t CVMX_PIP_HG_PRI_QOS_FUNC(void)
161 {
162         if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN63XX)))
163                 cvmx_warn("CVMX_PIP_HG_PRI_QOS not supported on this chip\n");
164         return CVMX_ADD_IO_SEG(0x00011800A00001A0ull);
165 }
166 #else
167 #define CVMX_PIP_HG_PRI_QOS (CVMX_ADD_IO_SEG(0x00011800A00001A0ull))
168 #endif
169 #define CVMX_PIP_INT_EN (CVMX_ADD_IO_SEG(0x00011800A0000010ull))
170 #define CVMX_PIP_INT_REG (CVMX_ADD_IO_SEG(0x00011800A0000008ull))
171 #define CVMX_PIP_IP_OFFSET (CVMX_ADD_IO_SEG(0x00011800A0000060ull))
172 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
173 static inline uint64_t CVMX_PIP_PRT_CFGX(unsigned long offset)
174 {
175         if (!(
176               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
177               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
178               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
179               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
180               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
181               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
182               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
183               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43))))))
184                 cvmx_warn("CVMX_PIP_PRT_CFGX(%lu) is invalid on this chip\n", offset);
185         return CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8;
186 }
187 #else
188 #define CVMX_PIP_PRT_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8)
189 #endif
190 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
191 static inline uint64_t CVMX_PIP_PRT_TAGX(unsigned long offset)
192 {
193         if (!(
194               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
195               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
196               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
197               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
198               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
199               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
200               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
201               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43))))))
202                 cvmx_warn("CVMX_PIP_PRT_TAGX(%lu) is invalid on this chip\n", offset);
203         return CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8;
204 }
205 #else
206 #define CVMX_PIP_PRT_TAGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8)
207 #endif
208 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
209 static inline uint64_t CVMX_PIP_QOS_DIFFX(unsigned long offset)
210 {
211         if (!(
212               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
213               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
214               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
215               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
216               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
217               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
218               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
219               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63)))))
220                 cvmx_warn("CVMX_PIP_QOS_DIFFX(%lu) is invalid on this chip\n", offset);
221         return CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8;
222 }
223 #else
224 #define CVMX_PIP_QOS_DIFFX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8)
225 #endif
226 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
227 static inline uint64_t CVMX_PIP_QOS_VLANX(unsigned long offset)
228 {
229         if (!(
230               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
231               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
232               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
233               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
234               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
235               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
236               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
237               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
238                 cvmx_warn("CVMX_PIP_QOS_VLANX(%lu) is invalid on this chip\n", offset);
239         return CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8;
240 }
241 #else
242 #define CVMX_PIP_QOS_VLANX(offset) (CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8)
243 #endif
244 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
245 static inline uint64_t CVMX_PIP_QOS_WATCHX(unsigned long offset)
246 {
247         if (!(
248               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
249               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
250               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
251               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
252               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
253               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
254               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
255               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
256                 cvmx_warn("CVMX_PIP_QOS_WATCHX(%lu) is invalid on this chip\n", offset);
257         return CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8;
258 }
259 #else
260 #define CVMX_PIP_QOS_WATCHX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8)
261 #endif
262 #define CVMX_PIP_RAW_WORD (CVMX_ADD_IO_SEG(0x00011800A00000B0ull))
263 #define CVMX_PIP_SFT_RST (CVMX_ADD_IO_SEG(0x00011800A0000030ull))
264 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
265 static inline uint64_t CVMX_PIP_STAT0_PRTX(unsigned long offset)
266 {
267         if (!(
268               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
269               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
270               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
271               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
272               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
273               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
274               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
275               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
276                 cvmx_warn("CVMX_PIP_STAT0_PRTX(%lu) is invalid on this chip\n", offset);
277         return CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80;
278 }
279 #else
280 #define CVMX_PIP_STAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80)
281 #endif
282 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
283 static inline uint64_t CVMX_PIP_STAT1_PRTX(unsigned long offset)
284 {
285         if (!(
286               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
287               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
288               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
289               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
290               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
291               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
292               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
293               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
294                 cvmx_warn("CVMX_PIP_STAT1_PRTX(%lu) is invalid on this chip\n", offset);
295         return CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80;
296 }
297 #else
298 #define CVMX_PIP_STAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80)
299 #endif
300 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
301 static inline uint64_t CVMX_PIP_STAT2_PRTX(unsigned long offset)
302 {
303         if (!(
304               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
305               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
306               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
307               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
308               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
309               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
310               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
311               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
312                 cvmx_warn("CVMX_PIP_STAT2_PRTX(%lu) is invalid on this chip\n", offset);
313         return CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80;
314 }
315 #else
316 #define CVMX_PIP_STAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80)
317 #endif
318 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
319 static inline uint64_t CVMX_PIP_STAT3_PRTX(unsigned long offset)
320 {
321         if (!(
322               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
323               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
324               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
325               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
326               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
327               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
328               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
329               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
330                 cvmx_warn("CVMX_PIP_STAT3_PRTX(%lu) is invalid on this chip\n", offset);
331         return CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80;
332 }
333 #else
334 #define CVMX_PIP_STAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80)
335 #endif
336 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
337 static inline uint64_t CVMX_PIP_STAT4_PRTX(unsigned long offset)
338 {
339         if (!(
340               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
341               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
342               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
343               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
344               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
345               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
346               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
347               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
348                 cvmx_warn("CVMX_PIP_STAT4_PRTX(%lu) is invalid on this chip\n", offset);
349         return CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80;
350 }
351 #else
352 #define CVMX_PIP_STAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80)
353 #endif
354 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
355 static inline uint64_t CVMX_PIP_STAT5_PRTX(unsigned long offset)
356 {
357         if (!(
358               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
359               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
360               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
361               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
362               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
363               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
364               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
365               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
366                 cvmx_warn("CVMX_PIP_STAT5_PRTX(%lu) is invalid on this chip\n", offset);
367         return CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80;
368 }
369 #else
370 #define CVMX_PIP_STAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80)
371 #endif
372 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
373 static inline uint64_t CVMX_PIP_STAT6_PRTX(unsigned long offset)
374 {
375         if (!(
376               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
377               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
378               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
379               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
380               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
381               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
382               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
383               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
384                 cvmx_warn("CVMX_PIP_STAT6_PRTX(%lu) is invalid on this chip\n", offset);
385         return CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80;
386 }
387 #else
388 #define CVMX_PIP_STAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80)
389 #endif
390 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
391 static inline uint64_t CVMX_PIP_STAT7_PRTX(unsigned long offset)
392 {
393         if (!(
394               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
395               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
396               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
397               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
398               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
399               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
400               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
401               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
402                 cvmx_warn("CVMX_PIP_STAT7_PRTX(%lu) is invalid on this chip\n", offset);
403         return CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80;
404 }
405 #else
406 #define CVMX_PIP_STAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80)
407 #endif
408 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
409 static inline uint64_t CVMX_PIP_STAT8_PRTX(unsigned long offset)
410 {
411         if (!(
412               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
413               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
414               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
415               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
416               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
417               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
418               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
419               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
420                 cvmx_warn("CVMX_PIP_STAT8_PRTX(%lu) is invalid on this chip\n", offset);
421         return CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80;
422 }
423 #else
424 #define CVMX_PIP_STAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80)
425 #endif
426 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
427 static inline uint64_t CVMX_PIP_STAT9_PRTX(unsigned long offset)
428 {
429         if (!(
430               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
431               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
432               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
433               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
434               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
435               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
436               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
437               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
438                 cvmx_warn("CVMX_PIP_STAT9_PRTX(%lu) is invalid on this chip\n", offset);
439         return CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80;
440 }
441 #else
442 #define CVMX_PIP_STAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80)
443 #endif
444 #define CVMX_PIP_STAT_CTL (CVMX_ADD_IO_SEG(0x00011800A0000018ull))
445 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
446 static inline uint64_t CVMX_PIP_STAT_INB_ERRSX(unsigned long offset)
447 {
448         if (!(
449               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
450               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
451               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
452               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
453               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
454               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
455               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
456               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43))))))
457                 cvmx_warn("CVMX_PIP_STAT_INB_ERRSX(%lu) is invalid on this chip\n", offset);
458         return CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32;
459 }
460 #else
461 #define CVMX_PIP_STAT_INB_ERRSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32)
462 #endif
463 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
464 static inline uint64_t CVMX_PIP_STAT_INB_OCTSX(unsigned long offset)
465 {
466         if (!(
467               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
468               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
469               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
470               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
471               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
472               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
473               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
474               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43))))))
475                 cvmx_warn("CVMX_PIP_STAT_INB_OCTSX(%lu) is invalid on this chip\n", offset);
476         return CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32;
477 }
478 #else
479 #define CVMX_PIP_STAT_INB_OCTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32)
480 #endif
481 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
482 static inline uint64_t CVMX_PIP_STAT_INB_PKTSX(unsigned long offset)
483 {
484         if (!(
485               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
486               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
487               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
488               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
489               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
490               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
491               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
492               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43))))))
493                 cvmx_warn("CVMX_PIP_STAT_INB_PKTSX(%lu) is invalid on this chip\n", offset);
494         return CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32;
495 }
496 #else
497 #define CVMX_PIP_STAT_INB_PKTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32)
498 #endif
499 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
500 static inline uint64_t CVMX_PIP_TAG_INCX(unsigned long offset)
501 {
502         if (!(
503               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
504               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
505               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
506               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
507               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
508               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
509               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
510               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63)))))
511                 cvmx_warn("CVMX_PIP_TAG_INCX(%lu) is invalid on this chip\n", offset);
512         return CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8;
513 }
514 #else
515 #define CVMX_PIP_TAG_INCX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8)
516 #endif
517 #define CVMX_PIP_TAG_MASK (CVMX_ADD_IO_SEG(0x00011800A0000070ull))
518 #define CVMX_PIP_TAG_SECRET (CVMX_ADD_IO_SEG(0x00011800A0000068ull))
519 #define CVMX_PIP_TODO_ENTRY (CVMX_ADD_IO_SEG(0x00011800A0000078ull))
520 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
521 static inline uint64_t CVMX_PIP_XSTAT0_PRTX(unsigned long offset)
522 {
523         if (!(
524               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
525                 cvmx_warn("CVMX_PIP_XSTAT0_PRTX(%lu) is invalid on this chip\n", offset);
526         return CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40;
527 }
528 #else
529 #define CVMX_PIP_XSTAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40)
530 #endif
531 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
532 static inline uint64_t CVMX_PIP_XSTAT1_PRTX(unsigned long offset)
533 {
534         if (!(
535               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
536                 cvmx_warn("CVMX_PIP_XSTAT1_PRTX(%lu) is invalid on this chip\n", offset);
537         return CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40;
538 }
539 #else
540 #define CVMX_PIP_XSTAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40)
541 #endif
542 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
543 static inline uint64_t CVMX_PIP_XSTAT2_PRTX(unsigned long offset)
544 {
545         if (!(
546               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
547                 cvmx_warn("CVMX_PIP_XSTAT2_PRTX(%lu) is invalid on this chip\n", offset);
548         return CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40;
549 }
550 #else
551 #define CVMX_PIP_XSTAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40)
552 #endif
553 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
554 static inline uint64_t CVMX_PIP_XSTAT3_PRTX(unsigned long offset)
555 {
556         if (!(
557               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
558                 cvmx_warn("CVMX_PIP_XSTAT3_PRTX(%lu) is invalid on this chip\n", offset);
559         return CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40;
560 }
561 #else
562 #define CVMX_PIP_XSTAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40)
563 #endif
564 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
565 static inline uint64_t CVMX_PIP_XSTAT4_PRTX(unsigned long offset)
566 {
567         if (!(
568               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
569                 cvmx_warn("CVMX_PIP_XSTAT4_PRTX(%lu) is invalid on this chip\n", offset);
570         return CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40;
571 }
572 #else
573 #define CVMX_PIP_XSTAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40)
574 #endif
575 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
576 static inline uint64_t CVMX_PIP_XSTAT5_PRTX(unsigned long offset)
577 {
578         if (!(
579               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
580                 cvmx_warn("CVMX_PIP_XSTAT5_PRTX(%lu) is invalid on this chip\n", offset);
581         return CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40;
582 }
583 #else
584 #define CVMX_PIP_XSTAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40)
585 #endif
586 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
587 static inline uint64_t CVMX_PIP_XSTAT6_PRTX(unsigned long offset)
588 {
589         if (!(
590               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
591                 cvmx_warn("CVMX_PIP_XSTAT6_PRTX(%lu) is invalid on this chip\n", offset);
592         return CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40;
593 }
594 #else
595 #define CVMX_PIP_XSTAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40)
596 #endif
597 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
598 static inline uint64_t CVMX_PIP_XSTAT7_PRTX(unsigned long offset)
599 {
600         if (!(
601               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
602                 cvmx_warn("CVMX_PIP_XSTAT7_PRTX(%lu) is invalid on this chip\n", offset);
603         return CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40;
604 }
605 #else
606 #define CVMX_PIP_XSTAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40)
607 #endif
608 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
609 static inline uint64_t CVMX_PIP_XSTAT8_PRTX(unsigned long offset)
610 {
611         if (!(
612               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
613                 cvmx_warn("CVMX_PIP_XSTAT8_PRTX(%lu) is invalid on this chip\n", offset);
614         return CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40;
615 }
616 #else
617 #define CVMX_PIP_XSTAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40)
618 #endif
619 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
620 static inline uint64_t CVMX_PIP_XSTAT9_PRTX(unsigned long offset)
621 {
622         if (!(
623               (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43))))))
624                 cvmx_warn("CVMX_PIP_XSTAT9_PRTX(%lu) is invalid on this chip\n", offset);
625         return CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40;
626 }
627 #else
628 #define CVMX_PIP_XSTAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40)
629 #endif
630
631 /**
632  * cvmx_pip_bck_prs
633  *
634  * PIP_BCK_PRS = PIP's Back Pressure Register
635  *
636  * When to assert backpressure based on the todo list filling up
637  */
638 union cvmx_pip_bck_prs
639 {
640         uint64_t u64;
641         struct cvmx_pip_bck_prs_s
642         {
643 #if __BYTE_ORDER == __BIG_ENDIAN
644         uint64_t bckprs                       : 1;  /**< PIP is currently asserting backpressure to IOB
645                                                          Backpressure from PIP will assert when the
646                                                          entries to the todo list exceed HIWATER.
647                                                          Backpressure will be held until the todo entries
648                                                          is less than or equal to LOWATER. */
649         uint64_t reserved_13_62               : 50;
650         uint64_t hiwater                      : 5;  /**< Water mark in the todo list to assert backpressure
651                                                          Legal values are 1-26.  A 0 value will deadlock
652                                                          the machine.  A value > 26, will trash memory */
653         uint64_t reserved_5_7                 : 3;
654         uint64_t lowater                      : 5;  /**< Water mark in the todo list to release backpressure
655                                                          The LOWATER value should be < HIWATER. */
656 #else
657         uint64_t lowater                      : 5;
658         uint64_t reserved_5_7                 : 3;
659         uint64_t hiwater                      : 5;
660         uint64_t reserved_13_62               : 50;
661         uint64_t bckprs                       : 1;
662 #endif
663         } s;
664         struct cvmx_pip_bck_prs_s             cn38xx;
665         struct cvmx_pip_bck_prs_s             cn38xxp2;
666         struct cvmx_pip_bck_prs_s             cn56xx;
667         struct cvmx_pip_bck_prs_s             cn56xxp1;
668         struct cvmx_pip_bck_prs_s             cn58xx;
669         struct cvmx_pip_bck_prs_s             cn58xxp1;
670         struct cvmx_pip_bck_prs_s             cn63xx;
671         struct cvmx_pip_bck_prs_s             cn63xxp1;
672 };
673 typedef union cvmx_pip_bck_prs cvmx_pip_bck_prs_t;
674
675 /**
676  * cvmx_pip_bist_status
677  *
678  * PIP_BIST_STATUS = PIP's BIST Results
679  *
680  */
681 union cvmx_pip_bist_status
682 {
683         uint64_t u64;
684         struct cvmx_pip_bist_status_s
685         {
686 #if __BYTE_ORDER == __BIG_ENDIAN
687         uint64_t reserved_18_63               : 46;
688         uint64_t bist                         : 18; /**< BIST Results.
689                                                          HW sets a bit in BIST for for memory that fails
690                                                          BIST. */
691 #else
692         uint64_t bist                         : 18;
693         uint64_t reserved_18_63               : 46;
694 #endif
695         } s;
696         struct cvmx_pip_bist_status_s         cn30xx;
697         struct cvmx_pip_bist_status_s         cn31xx;
698         struct cvmx_pip_bist_status_s         cn38xx;
699         struct cvmx_pip_bist_status_s         cn38xxp2;
700         struct cvmx_pip_bist_status_cn50xx
701         {
702 #if __BYTE_ORDER == __BIG_ENDIAN
703         uint64_t reserved_17_63               : 47;
704         uint64_t bist                         : 17; /**< BIST Results.
705                                                          HW sets a bit in BIST for for memory that fails
706                                                          BIST. */
707 #else
708         uint64_t bist                         : 17;
709         uint64_t reserved_17_63               : 47;
710 #endif
711         } cn50xx;
712         struct cvmx_pip_bist_status_s         cn52xx;
713         struct cvmx_pip_bist_status_s         cn52xxp1;
714         struct cvmx_pip_bist_status_s         cn56xx;
715         struct cvmx_pip_bist_status_s         cn56xxp1;
716         struct cvmx_pip_bist_status_s         cn58xx;
717         struct cvmx_pip_bist_status_s         cn58xxp1;
718         struct cvmx_pip_bist_status_s         cn63xx;
719         struct cvmx_pip_bist_status_s         cn63xxp1;
720 };
721 typedef union cvmx_pip_bist_status cvmx_pip_bist_status_t;
722
723 /**
724  * cvmx_pip_clken
725  */
726 union cvmx_pip_clken
727 {
728         uint64_t u64;
729         struct cvmx_pip_clken_s
730         {
731 #if __BYTE_ORDER == __BIG_ENDIAN
732         uint64_t reserved_1_63                : 63;
733         uint64_t clken                        : 1;  /**< Controls the conditional clocking within PIP
734                                                          0=Allow HW to control the clocks
735                                                          1=Force the clocks to be always on */
736 #else
737         uint64_t clken                        : 1;
738         uint64_t reserved_1_63                : 63;
739 #endif
740         } s;
741         struct cvmx_pip_clken_s               cn63xx;
742         struct cvmx_pip_clken_s               cn63xxp1;
743 };
744 typedef union cvmx_pip_clken cvmx_pip_clken_t;
745
746 /**
747  * cvmx_pip_crc_ctl#
748  *
749  * PIP_CRC_CTL = PIP CRC Control Register
750  *
751  * Controls datapath reflection when calculating CRC
752  */
753 union cvmx_pip_crc_ctlx
754 {
755         uint64_t u64;
756         struct cvmx_pip_crc_ctlx_s
757         {
758 #if __BYTE_ORDER == __BIG_ENDIAN
759         uint64_t reserved_2_63                : 62;
760         uint64_t invres                       : 1;  /**< Invert the result */
761         uint64_t reflect                      : 1;  /**< Reflect the bits in each byte.
762                                                           Byte order does not change.
763                                                          - 0: CRC is calculated MSB to LSB
764                                                          - 1: CRC is calculated LSB to MSB */
765 #else
766         uint64_t reflect                      : 1;
767         uint64_t invres                       : 1;
768         uint64_t reserved_2_63                : 62;
769 #endif
770         } s;
771         struct cvmx_pip_crc_ctlx_s            cn38xx;
772         struct cvmx_pip_crc_ctlx_s            cn38xxp2;
773         struct cvmx_pip_crc_ctlx_s            cn58xx;
774         struct cvmx_pip_crc_ctlx_s            cn58xxp1;
775 };
776 typedef union cvmx_pip_crc_ctlx cvmx_pip_crc_ctlx_t;
777
778 /**
779  * cvmx_pip_crc_iv#
780  *
781  * PIP_CRC_IV = PIP CRC IV Register
782  *
783  * Determines the IV used by the CRC algorithm
784  *
785  * Notes:
786  * * PIP_CRC_IV
787  * PIP_CRC_IV controls the initial state of the CRC algorithm.  Octane can
788  * support a wide range of CRC algorithms and as such, the IV must be
789  * carefully constructed to meet the specific algorithm.  The code below
790  * determines the value to program into Octane based on the algorthim's IV
791  * and width.  In the case of Octane, the width should always be 32.
792  *
793  * PIP_CRC_IV0 sets the IV for ports 0-15 while PIP_CRC_IV1 sets the IV for
794  * ports 16-31.
795  *
796  *  unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
797  *  [
798  *    int i;
799  *    int doit;
800  *    unsigned int current_val = algorithm_iv;
801  *
802  *    for(i = 0; i < w; i++) [
803  *      doit = current_val & 0x1;
804  *
805  *      if(doit) current_val ^= poly;
806  *      assert(!(current_val & 0x1));
807  *
808  *      current_val = (current_val >> 1) | (doit << (w-1));
809  *    ]
810  *
811  *    return current_val;
812  *  ]
813  */
814 union cvmx_pip_crc_ivx
815 {
816         uint64_t u64;
817         struct cvmx_pip_crc_ivx_s
818         {
819 #if __BYTE_ORDER == __BIG_ENDIAN
820         uint64_t reserved_32_63               : 32;
821         uint64_t iv                           : 32; /**< IV used by the CRC algorithm.  Default is FCS32. */
822 #else
823         uint64_t iv                           : 32;
824         uint64_t reserved_32_63               : 32;
825 #endif
826         } s;
827         struct cvmx_pip_crc_ivx_s             cn38xx;
828         struct cvmx_pip_crc_ivx_s             cn38xxp2;
829         struct cvmx_pip_crc_ivx_s             cn58xx;
830         struct cvmx_pip_crc_ivx_s             cn58xxp1;
831 };
832 typedef union cvmx_pip_crc_ivx cvmx_pip_crc_ivx_t;
833
834 /**
835  * cvmx_pip_dec_ipsec#
836  *
837  * PIP_DEC_IPSEC = UDP or TCP ports to watch for DEC IPSEC
838  *
839  * PIP sets the dec_ipsec based on TCP or UDP destination port.
840  */
841 union cvmx_pip_dec_ipsecx
842 {
843         uint64_t u64;
844         struct cvmx_pip_dec_ipsecx_s
845         {
846 #if __BYTE_ORDER == __BIG_ENDIAN
847         uint64_t reserved_18_63               : 46;
848         uint64_t tcp                          : 1;  /**< This DPRT should be used for TCP packets */
849         uint64_t udp                          : 1;  /**< This DPRT should be used for UDP packets */
850         uint64_t dprt                         : 16; /**< UDP or TCP destination port to match on */
851 #else
852         uint64_t dprt                         : 16;
853         uint64_t udp                          : 1;
854         uint64_t tcp                          : 1;
855         uint64_t reserved_18_63               : 46;
856 #endif
857         } s;
858         struct cvmx_pip_dec_ipsecx_s          cn30xx;
859         struct cvmx_pip_dec_ipsecx_s          cn31xx;
860         struct cvmx_pip_dec_ipsecx_s          cn38xx;
861         struct cvmx_pip_dec_ipsecx_s          cn38xxp2;
862         struct cvmx_pip_dec_ipsecx_s          cn50xx;
863         struct cvmx_pip_dec_ipsecx_s          cn52xx;
864         struct cvmx_pip_dec_ipsecx_s          cn52xxp1;
865         struct cvmx_pip_dec_ipsecx_s          cn56xx;
866         struct cvmx_pip_dec_ipsecx_s          cn56xxp1;
867         struct cvmx_pip_dec_ipsecx_s          cn58xx;
868         struct cvmx_pip_dec_ipsecx_s          cn58xxp1;
869         struct cvmx_pip_dec_ipsecx_s          cn63xx;
870         struct cvmx_pip_dec_ipsecx_s          cn63xxp1;
871 };
872 typedef union cvmx_pip_dec_ipsecx cvmx_pip_dec_ipsecx_t;
873
874 /**
875  * cvmx_pip_dsa_src_grp
876  */
877 union cvmx_pip_dsa_src_grp
878 {
879         uint64_t u64;
880         struct cvmx_pip_dsa_src_grp_s
881         {
882 #if __BYTE_ORDER == __BIG_ENDIAN
883         uint64_t map15                        : 4;  /**< DSA Group Algorithm */
884         uint64_t map14                        : 4;  /**< DSA Group Algorithm */
885         uint64_t map13                        : 4;  /**< DSA Group Algorithm */
886         uint64_t map12                        : 4;  /**< DSA Group Algorithm */
887         uint64_t map11                        : 4;  /**< DSA Group Algorithm */
888         uint64_t map10                        : 4;  /**< DSA Group Algorithm */
889         uint64_t map9                         : 4;  /**< DSA Group Algorithm */
890         uint64_t map8                         : 4;  /**< DSA Group Algorithm */
891         uint64_t map7                         : 4;  /**< DSA Group Algorithm */
892         uint64_t map6                         : 4;  /**< DSA Group Algorithm */
893         uint64_t map5                         : 4;  /**< DSA Group Algorithm */
894         uint64_t map4                         : 4;  /**< DSA Group Algorithm */
895         uint64_t map3                         : 4;  /**< DSA Group Algorithm */
896         uint64_t map2                         : 4;  /**< DSA Group Algorithm */
897         uint64_t map1                         : 4;  /**< DSA Group Algorithm */
898         uint64_t map0                         : 4;  /**< DSA Group Algorithm
899                                                          Use the DSA source id to compute GRP */
900 #else
901         uint64_t map0                         : 4;
902         uint64_t map1                         : 4;
903         uint64_t map2                         : 4;
904         uint64_t map3                         : 4;
905         uint64_t map4                         : 4;
906         uint64_t map5                         : 4;
907         uint64_t map6                         : 4;
908         uint64_t map7                         : 4;
909         uint64_t map8                         : 4;
910         uint64_t map9                         : 4;
911         uint64_t map10                        : 4;
912         uint64_t map11                        : 4;
913         uint64_t map12                        : 4;
914         uint64_t map13                        : 4;
915         uint64_t map14                        : 4;
916         uint64_t map15                        : 4;
917 #endif
918         } s;
919         struct cvmx_pip_dsa_src_grp_s         cn52xx;
920         struct cvmx_pip_dsa_src_grp_s         cn52xxp1;
921         struct cvmx_pip_dsa_src_grp_s         cn56xx;
922         struct cvmx_pip_dsa_src_grp_s         cn63xx;
923         struct cvmx_pip_dsa_src_grp_s         cn63xxp1;
924 };
925 typedef union cvmx_pip_dsa_src_grp cvmx_pip_dsa_src_grp_t;
926
927 /**
928  * cvmx_pip_dsa_vid_grp
929  */
930 union cvmx_pip_dsa_vid_grp
931 {
932         uint64_t u64;
933         struct cvmx_pip_dsa_vid_grp_s
934         {
935 #if __BYTE_ORDER == __BIG_ENDIAN
936         uint64_t map15                        : 4;  /**< DSA Group Algorithm */
937         uint64_t map14                        : 4;  /**< DSA Group Algorithm */
938         uint64_t map13                        : 4;  /**< DSA Group Algorithm */
939         uint64_t map12                        : 4;  /**< DSA Group Algorithm */
940         uint64_t map11                        : 4;  /**< DSA Group Algorithm */
941         uint64_t map10                        : 4;  /**< DSA Group Algorithm */
942         uint64_t map9                         : 4;  /**< DSA Group Algorithm */
943         uint64_t map8                         : 4;  /**< DSA Group Algorithm */
944         uint64_t map7                         : 4;  /**< DSA Group Algorithm */
945         uint64_t map6                         : 4;  /**< DSA Group Algorithm */
946         uint64_t map5                         : 4;  /**< DSA Group Algorithm */
947         uint64_t map4                         : 4;  /**< DSA Group Algorithm */
948         uint64_t map3                         : 4;  /**< DSA Group Algorithm */
949         uint64_t map2                         : 4;  /**< DSA Group Algorithm */
950         uint64_t map1                         : 4;  /**< DSA Group Algorithm */
951         uint64_t map0                         : 4;  /**< DSA Group Algorithm
952                                                          Use the DSA source id to compute GRP */
953 #else
954         uint64_t map0                         : 4;
955         uint64_t map1                         : 4;
956         uint64_t map2                         : 4;
957         uint64_t map3                         : 4;
958         uint64_t map4                         : 4;
959         uint64_t map5                         : 4;
960         uint64_t map6                         : 4;
961         uint64_t map7                         : 4;
962         uint64_t map8                         : 4;
963         uint64_t map9                         : 4;
964         uint64_t map10                        : 4;
965         uint64_t map11                        : 4;
966         uint64_t map12                        : 4;
967         uint64_t map13                        : 4;
968         uint64_t map14                        : 4;
969         uint64_t map15                        : 4;
970 #endif
971         } s;
972         struct cvmx_pip_dsa_vid_grp_s         cn52xx;
973         struct cvmx_pip_dsa_vid_grp_s         cn52xxp1;
974         struct cvmx_pip_dsa_vid_grp_s         cn56xx;
975         struct cvmx_pip_dsa_vid_grp_s         cn63xx;
976         struct cvmx_pip_dsa_vid_grp_s         cn63xxp1;
977 };
978 typedef union cvmx_pip_dsa_vid_grp cvmx_pip_dsa_vid_grp_t;
979
980 /**
981  * cvmx_pip_frm_len_chk#
982  *
983  * Notes:
984  * PIP_FRM_LEN_CHK0 is used for packets on packet interface0, PCI, PCI RAW, and PKO loopback ports.
985  * PIP_FRM_LEN_CHK1 is unused.
986  */
987 union cvmx_pip_frm_len_chkx
988 {
989         uint64_t u64;
990         struct cvmx_pip_frm_len_chkx_s
991         {
992 #if __BYTE_ORDER == __BIG_ENDIAN
993         uint64_t reserved_32_63               : 32;
994         uint64_t maxlen                       : 16; /**< Byte count for Max-sized frame check
995                                                          PIP_PRT_CFGn[MAXERR_EN] enables the check for
996                                                          port n.
997                                                          If enabled, failing packets set the MAXERR
998                                                          interrupt and work-queue entry WORD2[opcode] is
999                                                          set to OVER_FCS (0x3, if packet has bad FCS) or
1000                                                          OVER_ERR (0x4, if packet has good FCS).
1001                                                          The effective MAXLEN used by HW is
1002                                                          PIP_PRT_CFG[DSA_EN] == 0,
1003                                                           PIP_FRM_LEN_CHK[MAXLEN] + 4*VV + 4*VS
1004                                                          PIP_PRT_CFG[DSA_EN] == 1,
1005                                                           PIP_FRM_LEN_CHK[MAXLEN] + PIP_PRT_CFG[SKIP]+4*VS
1006                                                          If PTP_MODE, the 8B timestamp is prepended to the
1007                                                           packet.  MAXLEN should be increased by 8 to
1008                                                           compensate for the additional timestamp field. */
1009         uint64_t minlen                       : 16; /**< Byte count for Min-sized frame check
1010                                                          PIP_PRT_CFGn[MINERR_EN] enables the check for
1011                                                          port n.
1012                                                          If enabled, failing packets set the MINERR
1013                                                          interrupt and work-queue entry WORD2[opcode] is
1014                                                          set to UNDER_FCS (0x6, if packet has bad FCS) or
1015                                                          UNDER_ERR (0x8, if packet has good FCS).
1016                                                          If PTP_MODE, the 8B timestamp is prepended to the
1017                                                           packet.  MINLEN should be increased by 8 to
1018                                                           compensate for the additional timestamp field. */
1019 #else
1020         uint64_t minlen                       : 16;
1021         uint64_t maxlen                       : 16;
1022         uint64_t reserved_32_63               : 32;
1023 #endif
1024         } s;
1025         struct cvmx_pip_frm_len_chkx_s        cn50xx;
1026         struct cvmx_pip_frm_len_chkx_s        cn52xx;
1027         struct cvmx_pip_frm_len_chkx_s        cn52xxp1;
1028         struct cvmx_pip_frm_len_chkx_s        cn56xx;
1029         struct cvmx_pip_frm_len_chkx_s        cn56xxp1;
1030         struct cvmx_pip_frm_len_chkx_s        cn63xx;
1031         struct cvmx_pip_frm_len_chkx_s        cn63xxp1;
1032 };
1033 typedef union cvmx_pip_frm_len_chkx cvmx_pip_frm_len_chkx_t;
1034
1035 /**
1036  * cvmx_pip_gbl_cfg
1037  *
1038  * PIP_GBL_CFG = PIP's Global Config Register
1039  *
1040  * Global config information that applies to all ports.
1041  *
1042  * Notes:
1043  * * IP6_UDP
1044  * IPv4 allows optional UDP checksum by sending the all 0's patterns.  IPv6
1045  * outlaws this and the spec says to always check UDP checksum.  This mode
1046  * bit allows the user to treat IPv6 as IPv4, meaning that the all 0's
1047  * pattern will cause a UDP checksum pass.
1048  */
1049 union cvmx_pip_gbl_cfg
1050 {
1051         uint64_t u64;
1052         struct cvmx_pip_gbl_cfg_s
1053         {
1054 #if __BYTE_ORDER == __BIG_ENDIAN
1055         uint64_t reserved_19_63               : 45;
1056         uint64_t tag_syn                      : 1;  /**< Do not include src_crc for TCP/SYN&!ACK packets
1057                                                          0 = include src_crc
1058                                                          1 = tag hash is dst_crc for TCP/SYN&!ACK packets */
1059         uint64_t ip6_udp                      : 1;  /**< IPv6/UDP checksum is not optional
1060                                                          0 = Allow optional checksum code
1061                                                          1 = Do not allow optional checksum code */
1062         uint64_t max_l2                       : 1;  /**< Config bit to choose the largest L2 frame size
1063                                                          Chooses the value of the L2 Type/Length field
1064                                                          to classify the frame as length.
1065                                                          0 = 1500 / 0x5dc
1066                                                          1 = 1535 / 0x5ff */
1067         uint64_t reserved_11_15               : 5;
1068         uint64_t raw_shf                      : 3;  /**< RAW Packet shift amount
1069                                                          Number of bytes to pad a RAW packet. */
1070         uint64_t reserved_3_7                 : 5;
1071         uint64_t nip_shf                      : 3;  /**< Non-IP shift amount
1072                                                          Number of bytes to pad a packet that has been
1073                                                          classified as not IP. */
1074 #else
1075         uint64_t nip_shf                      : 3;
1076         uint64_t reserved_3_7                 : 5;
1077         uint64_t raw_shf                      : 3;
1078         uint64_t reserved_11_15               : 5;
1079         uint64_t max_l2                       : 1;
1080         uint64_t ip6_udp                      : 1;
1081         uint64_t tag_syn                      : 1;
1082         uint64_t reserved_19_63               : 45;
1083 #endif
1084         } s;
1085         struct cvmx_pip_gbl_cfg_s             cn30xx;
1086         struct cvmx_pip_gbl_cfg_s             cn31xx;
1087         struct cvmx_pip_gbl_cfg_s             cn38xx;
1088         struct cvmx_pip_gbl_cfg_s             cn38xxp2;
1089         struct cvmx_pip_gbl_cfg_s             cn50xx;
1090         struct cvmx_pip_gbl_cfg_s             cn52xx;
1091         struct cvmx_pip_gbl_cfg_s             cn52xxp1;
1092         struct cvmx_pip_gbl_cfg_s             cn56xx;
1093         struct cvmx_pip_gbl_cfg_s             cn56xxp1;
1094         struct cvmx_pip_gbl_cfg_s             cn58xx;
1095         struct cvmx_pip_gbl_cfg_s             cn58xxp1;
1096         struct cvmx_pip_gbl_cfg_s             cn63xx;
1097         struct cvmx_pip_gbl_cfg_s             cn63xxp1;
1098 };
1099 typedef union cvmx_pip_gbl_cfg cvmx_pip_gbl_cfg_t;
1100
1101 /**
1102  * cvmx_pip_gbl_ctl
1103  *
1104  * PIP_GBL_CTL = PIP's Global Control Register
1105  *
1106  * Global control information.  These are the global checker enables for
1107  * IPv4/IPv6 and TCP/UDP parsing.  The enables effect all ports.
1108  *
1109  * Notes:
1110  * The following text describes the conditions in which each checker will
1111  * assert and flag an exception.  By disabling the checker, the exception will
1112  * not be flagged and the packet will be parsed as best it can.  Note, by
1113  * disabling conditions, packets can be parsed incorrectly (.i.e. IP_MAL and
1114  * L4_MAL could cause bits to be seen in the wrong place.  IP_CHK and L4_CHK
1115  * means that the packet was corrupted).
1116  *
1117  * * IP_CHK
1118  *   Indicates that an IPv4 packet contained an IPv4 header checksum
1119  *   violations.  Only applies to packets classified as IPv4.
1120  *
1121  * * IP_MAL
1122  *   Indicates that the packet was malformed.  Malformed packets are defined as
1123  *   packets that are not long enough to cover the IP header or not long enough
1124  *   to cover the length in the IP header.
1125  *
1126  * * IP_HOP
1127  *   Indicates that the IPv4 TTL field or IPv6 HOP field is zero.
1128  *
1129  * * IP4_OPTS
1130  *   Indicates the presence of IPv4 options.  It is set when the length != 5.
1131  *   This only applies to packets classified as IPv4.
1132  *
1133  * * IP6_EEXT
1134  *   Indicate the presence of IPv6 early extension headers.  These bits only
1135  *   apply to packets classified as IPv6.  Bit 0 will flag early extensions
1136  *   when next_header is any one of the following...
1137  *
1138  *         - hop-by-hop (0)
1139  *         - destination (60)
1140  *         - routing (43)
1141  *
1142  *   Bit 1 will flag early extentions when next_header is NOT any of the
1143  *   following...
1144  *
1145  *         - TCP (6)
1146  *         - UDP (17)
1147  *         - fragmentation (44)
1148  *         - ICMP (58)
1149  *         - IPSEC ESP (50)
1150  *         - IPSEC AH (51)
1151  *         - IPCOMP
1152  *
1153  * * L4_MAL
1154  *   Indicates that a TCP or UDP packet is not long enough to cover the TCP or
1155  *   UDP header.
1156  *
1157  * * L4_PRT
1158  *   Indicates that a TCP or UDP packet has an illegal port number - either the
1159  *   source or destination port is zero.
1160  *
1161  * * L4_CHK
1162  *   Indicates that a packet classified as either TCP or UDP contains an L4
1163  *   checksum failure
1164  *
1165  * * L4_LEN
1166  *   Indicates that the TCP or UDP length does not match the the IP length.
1167  *
1168  * * TCP_FLAG
1169  *   Indicates any of the following conditions...
1170  *
1171  *         [URG, ACK, PSH, RST, SYN, FIN] : tcp_flag
1172  *         6'b000001: (FIN only)
1173  *         6'b000000: (0)
1174  *         6'bxxx1x1: (RST+FIN+*)
1175  *         6'b1xxx1x: (URG+SYN+*)
1176  *         6'bxxx11x: (RST+SYN+*)
1177  *         6'bxxxx11: (SYN+FIN+*)
1178  */
1179 union cvmx_pip_gbl_ctl
1180 {
1181         uint64_t u64;
1182         struct cvmx_pip_gbl_ctl_s
1183         {
1184 #if __BYTE_ORDER == __BIG_ENDIAN
1185         uint64_t reserved_28_63               : 36;
1186         uint64_t ihmsk_dis                    : 1;  /**< Instruction Header Mask Disable
1187                                                          0=Allow NTAG,NTT,NGRP,NQOS bits in the
1188                                                            instruction header to control which fields from
1189                                                            the instruction header are used for WQE WORD2.
1190                                                          1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
1191                                                            instruction header and act as if these fields
1192                                                            were zero.  Thus always use the TAG,TT,GRP,QOS
1193                                                            (depending on the instruction header length)
1194                                                            from the instruction header for the WQE WORD2. */
1195         uint64_t dsa_grp_tvid                 : 1;  /**< DSA Group Algorithm
1196                                                          Use the DSA source id to compute GRP */
1197         uint64_t dsa_grp_scmd                 : 1;  /**< DSA Group Algorithm
1198                                                          Use the DSA source id to compute GRP when the
1199                                                          DSA tag command to TO_CPU */
1200         uint64_t dsa_grp_sid                  : 1;  /**< DSA Group Algorithm
1201                                                          Use the DSA VLAN id to compute GRP */
1202         uint64_t reserved_21_23               : 3;
1203         uint64_t ring_en                      : 1;  /**< Enable PCIe ring information in WQE */
1204         uint64_t reserved_17_19               : 3;
1205         uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
1206                                                          Does not apply to PCI ports (32-35)
1207                                                          When using 2-byte instruction header words,
1208                                                          either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1209         uint64_t vs_wqe                       : 1;  /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
1210                                                          0=use the 1st (network order) VLAN
1211                                                          1=use the 2nd (network order) VLAN */
1212         uint64_t vs_qos                       : 1;  /**< Which DSA/VLAN priority to use when VLAN Stacking
1213                                                          0=use the 1st (network order) VLAN
1214                                                          1=use the 2nd (network order) VLAN */
1215         uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
1216         uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
1217         uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
1218         uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
1219         uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
1220         uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
1221         uint64_t reserved_6_7                 : 2;
1222         uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
1223         uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
1224         uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
1225         uint64_t ip_mal                       : 1;  /**< Enable malformed check */
1226         uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
1227 #else
1228         uint64_t ip_chk                       : 1;
1229         uint64_t ip_mal                       : 1;
1230         uint64_t ip_hop                       : 1;
1231         uint64_t ip4_opts                     : 1;
1232         uint64_t ip6_eext                     : 2;
1233         uint64_t reserved_6_7                 : 2;
1234         uint64_t l4_mal                       : 1;
1235         uint64_t l4_prt                       : 1;
1236         uint64_t l4_chk                       : 1;
1237         uint64_t l4_len                       : 1;
1238         uint64_t tcp_flag                     : 1;
1239         uint64_t l2_mal                       : 1;
1240         uint64_t vs_qos                       : 1;
1241         uint64_t vs_wqe                       : 1;
1242         uint64_t ignrs                        : 1;
1243         uint64_t reserved_17_19               : 3;
1244         uint64_t ring_en                      : 1;
1245         uint64_t reserved_21_23               : 3;
1246         uint64_t dsa_grp_sid                  : 1;
1247         uint64_t dsa_grp_scmd                 : 1;
1248         uint64_t dsa_grp_tvid                 : 1;
1249         uint64_t ihmsk_dis                    : 1;
1250         uint64_t reserved_28_63               : 36;
1251 #endif
1252         } s;
1253         struct cvmx_pip_gbl_ctl_cn30xx
1254         {
1255 #if __BYTE_ORDER == __BIG_ENDIAN
1256         uint64_t reserved_17_63               : 47;
1257         uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
1258                                                          Only applies to the packet interface prts (0-31)
1259                                                          When using 2-byte instruction header words,
1260                                                          either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1261         uint64_t vs_wqe                       : 1;  /**< Which VLAN CFI and ID to use when VLAN Stacking
1262                                                          0=use the 1st (network order) VLAN
1263                                                          1=use the 2nd (network order) VLAN */
1264         uint64_t vs_qos                       : 1;  /**< Which VLAN priority to use when VLAN Stacking
1265                                                          0=use the 1st (network order) VLAN
1266                                                          1=use the 2nd (network order) VLAN */
1267         uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
1268         uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
1269         uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
1270         uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
1271         uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
1272         uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
1273         uint64_t reserved_6_7                 : 2;
1274         uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
1275         uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
1276         uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
1277         uint64_t ip_mal                       : 1;  /**< Enable malformed check */
1278         uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
1279 #else
1280         uint64_t ip_chk                       : 1;
1281         uint64_t ip_mal                       : 1;
1282         uint64_t ip_hop                       : 1;
1283         uint64_t ip4_opts                     : 1;
1284         uint64_t ip6_eext                     : 2;
1285         uint64_t reserved_6_7                 : 2;
1286         uint64_t l4_mal                       : 1;
1287         uint64_t l4_prt                       : 1;
1288         uint64_t l4_chk                       : 1;
1289         uint64_t l4_len                       : 1;
1290         uint64_t tcp_flag                     : 1;
1291         uint64_t l2_mal                       : 1;
1292         uint64_t vs_qos                       : 1;
1293         uint64_t vs_wqe                       : 1;
1294         uint64_t ignrs                        : 1;
1295         uint64_t reserved_17_63               : 47;
1296 #endif
1297         } cn30xx;
1298         struct cvmx_pip_gbl_ctl_cn30xx        cn31xx;
1299         struct cvmx_pip_gbl_ctl_cn30xx        cn38xx;
1300         struct cvmx_pip_gbl_ctl_cn30xx        cn38xxp2;
1301         struct cvmx_pip_gbl_ctl_cn30xx        cn50xx;
1302         struct cvmx_pip_gbl_ctl_cn52xx
1303         {
1304 #if __BYTE_ORDER == __BIG_ENDIAN
1305         uint64_t reserved_27_63               : 37;
1306         uint64_t dsa_grp_tvid                 : 1;  /**< DSA Group Algorithm
1307                                                          Use the DSA source id to compute GRP */
1308         uint64_t dsa_grp_scmd                 : 1;  /**< DSA Group Algorithm
1309                                                          Use the DSA source id to compute GRP when the
1310                                                          DSA tag command to TO_CPU */
1311         uint64_t dsa_grp_sid                  : 1;  /**< DSA Group Algorithm
1312                                                          Use the DSA VLAN id to compute GRP */
1313         uint64_t reserved_21_23               : 3;
1314         uint64_t ring_en                      : 1;  /**< Enable PCIe ring information in WQE */
1315         uint64_t reserved_17_19               : 3;
1316         uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
1317                                                          Does not apply to PCI ports (32-35)
1318                                                          When using 2-byte instruction header words,
1319                                                          either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1320         uint64_t vs_wqe                       : 1;  /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
1321                                                          0=use the 1st (network order) VLAN
1322                                                          1=use the 2nd (network order) VLAN */
1323         uint64_t vs_qos                       : 1;  /**< Which DSA/VLAN priority to use when VLAN Stacking
1324                                                          0=use the 1st (network order) VLAN
1325                                                          1=use the 2nd (network order) VLAN */
1326         uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
1327         uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
1328         uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
1329         uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
1330         uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
1331         uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
1332         uint64_t reserved_6_7                 : 2;
1333         uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
1334         uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
1335         uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
1336         uint64_t ip_mal                       : 1;  /**< Enable malformed check */
1337         uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
1338 #else
1339         uint64_t ip_chk                       : 1;
1340         uint64_t ip_mal                       : 1;
1341         uint64_t ip_hop                       : 1;
1342         uint64_t ip4_opts                     : 1;
1343         uint64_t ip6_eext                     : 2;
1344         uint64_t reserved_6_7                 : 2;
1345         uint64_t l4_mal                       : 1;
1346         uint64_t l4_prt                       : 1;
1347         uint64_t l4_chk                       : 1;
1348         uint64_t l4_len                       : 1;
1349         uint64_t tcp_flag                     : 1;
1350         uint64_t l2_mal                       : 1;
1351         uint64_t vs_qos                       : 1;
1352         uint64_t vs_wqe                       : 1;
1353         uint64_t ignrs                        : 1;
1354         uint64_t reserved_17_19               : 3;
1355         uint64_t ring_en                      : 1;
1356         uint64_t reserved_21_23               : 3;
1357         uint64_t dsa_grp_sid                  : 1;
1358         uint64_t dsa_grp_scmd                 : 1;
1359         uint64_t dsa_grp_tvid                 : 1;
1360         uint64_t reserved_27_63               : 37;
1361 #endif
1362         } cn52xx;
1363         struct cvmx_pip_gbl_ctl_cn52xx        cn52xxp1;
1364         struct cvmx_pip_gbl_ctl_cn52xx        cn56xx;
1365         struct cvmx_pip_gbl_ctl_cn56xxp1
1366         {
1367 #if __BYTE_ORDER == __BIG_ENDIAN
1368         uint64_t reserved_21_63               : 43;
1369         uint64_t ring_en                      : 1;  /**< Enable PCIe ring information in WQE */
1370         uint64_t reserved_17_19               : 3;
1371         uint64_t ignrs                        : 1;  /**< Ignore the PKT_INST_HDR[RS] bit when set
1372                                                          Does not apply to PCI ports (32-35)
1373                                                          When using 2-byte instruction header words,
1374                                                          either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1375         uint64_t vs_wqe                       : 1;  /**< Which VLAN CFI and ID to use when VLAN Stacking
1376                                                          0=use the 1st (network order) VLAN
1377                                                          1=use the 2nd (network order) VLAN */
1378         uint64_t vs_qos                       : 1;  /**< Which VLAN priority to use when VLAN Stacking
1379                                                          0=use the 1st (network order) VLAN
1380                                                          1=use the 2nd (network order) VLAN */
1381         uint64_t l2_mal                       : 1;  /**< Enable L2 malformed packet check */
1382         uint64_t tcp_flag                     : 1;  /**< Enable TCP flags checks */
1383         uint64_t l4_len                       : 1;  /**< Enable TCP/UDP length check */
1384         uint64_t l4_chk                       : 1;  /**< Enable TCP/UDP checksum check */
1385         uint64_t l4_prt                       : 1;  /**< Enable TCP/UDP illegal port check */
1386         uint64_t l4_mal                       : 1;  /**< Enable TCP/UDP malformed packet check */
1387         uint64_t reserved_6_7                 : 2;
1388         uint64_t ip6_eext                     : 2;  /**< Enable IPv6 early extension headers */
1389         uint64_t ip4_opts                     : 1;  /**< Enable IPv4 options check */
1390         uint64_t ip_hop                       : 1;  /**< Enable TTL (IPv4) / hop (IPv6) check */
1391         uint64_t ip_mal                       : 1;  /**< Enable malformed check */
1392         uint64_t ip_chk                       : 1;  /**< Enable IPv4 header checksum check */
1393 #else
1394         uint64_t ip_chk                       : 1;
1395         uint64_t ip_mal                       : 1;
1396         uint64_t ip_hop                       : 1;
1397         uint64_t ip4_opts                     : 1;
1398         uint64_t ip6_eext                     : 2;
1399         uint64_t reserved_6_7                 : 2;
1400         uint64_t l4_mal                       : 1;
1401         uint64_t l4_prt                       : 1;
1402         uint64_t l4_chk                       : 1;
1403         uint64_t l4_len                       : 1;
1404         uint64_t tcp_flag                     : 1;
1405         uint64_t l2_mal                       : 1;
1406         uint64_t vs_qos                       : 1;
1407         uint64_t vs_wqe                       : 1;
1408         uint64_t ignrs                        : 1;
1409         uint64_t reserved_17_19               : 3;
1410         uint64_t ring_en                      : 1;
1411         uint64_t reserved_21_63               : 43;
1412 #endif
1413         } cn56xxp1;
1414         struct cvmx_pip_gbl_ctl_cn30xx        cn58xx;
1415         struct cvmx_pip_gbl_ctl_cn30xx        cn58xxp1;
1416         struct cvmx_pip_gbl_ctl_s             cn63xx;
1417         struct cvmx_pip_gbl_ctl_s             cn63xxp1;
1418 };
1419 typedef union cvmx_pip_gbl_ctl cvmx_pip_gbl_ctl_t;
1420
1421 /**
1422  * cvmx_pip_hg_pri_qos
1423  *
1424  * Notes:
1425  * This register controls accesses to the HG_QOS_TABLE.  To write an entry of
1426  * the table, write PIP_HG_PRI_QOS with PRI=table address, QOS=priority level,
1427  * UP_QOS=1.  To read an entry of the table, write PIP_HG_PRI_QOS with
1428  * PRI=table address, QOS=dont_carepriority level, UP_QOS=0 and then read
1429  * PIP_HG_PRI_QOS.  The table data will be in PIP_HG_PRI_QOS[QOS].
1430  */
1431 union cvmx_pip_hg_pri_qos
1432 {
1433         uint64_t u64;
1434         struct cvmx_pip_hg_pri_qos_s
1435         {
1436 #if __BYTE_ORDER == __BIG_ENDIAN
1437         uint64_t reserved_13_63               : 51;
1438         uint64_t up_qos                       : 1;  /**< When written to '1', updates the entry in the
1439                                                          HG_QOS_TABLE as specified by PRI to a value of
1440                                                          QOS as follows
1441                                                          HG_QOS_TABLE[PRI] = QOS */
1442         uint64_t reserved_11_11               : 1;
1443         uint64_t qos                          : 3;  /**< QOS Map level to priority */
1444         uint64_t reserved_6_7                 : 2;
1445         uint64_t pri                          : 6;  /**< The priority level from HiGig header
1446                                                          HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
1447                                                          HiGig2       PRI = [DP[1:0], TC[3:0]] */
1448 #else
1449         uint64_t pri                          : 6;
1450         uint64_t reserved_6_7                 : 2;
1451         uint64_t qos                          : 3;
1452         uint64_t reserved_11_11               : 1;
1453         uint64_t up_qos                       : 1;
1454         uint64_t reserved_13_63               : 51;
1455 #endif
1456         } s;
1457         struct cvmx_pip_hg_pri_qos_s          cn52xx;
1458         struct cvmx_pip_hg_pri_qos_s          cn52xxp1;
1459         struct cvmx_pip_hg_pri_qos_s          cn56xx;
1460         struct cvmx_pip_hg_pri_qos_s          cn63xx;
1461         struct cvmx_pip_hg_pri_qos_s          cn63xxp1;
1462 };
1463 typedef union cvmx_pip_hg_pri_qos cvmx_pip_hg_pri_qos_t;
1464
1465 /**
1466  * cvmx_pip_int_en
1467  *
1468  * PIP_INT_EN = PIP's Interrupt Enable Register
1469  *
1470  * Determines if hardward should raise an interrupt to software
1471  * when an exception event occurs.
1472  */
1473 union cvmx_pip_int_en
1474 {
1475         uint64_t u64;
1476         struct cvmx_pip_int_en_s
1477         {
1478 #if __BYTE_ORDER == __BIG_ENDIAN
1479         uint64_t reserved_13_63               : 51;
1480         uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
1481                                                          stripping in IPD is enable */
1482         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1483         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1484         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1485         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1486         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1487         uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
1488         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
1489         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1490         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1491         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1492         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
1493         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1494 #else
1495         uint64_t pktdrp                       : 1;
1496         uint64_t crcerr                       : 1;
1497         uint64_t bckprs                       : 1;
1498         uint64_t prtnxa                       : 1;
1499         uint64_t badtag                       : 1;
1500         uint64_t skprunt                      : 1;
1501         uint64_t todoovr                      : 1;
1502         uint64_t feperr                       : 1;
1503         uint64_t beperr                       : 1;
1504         uint64_t minerr                       : 1;
1505         uint64_t maxerr                       : 1;
1506         uint64_t lenerr                       : 1;
1507         uint64_t punyerr                      : 1;
1508         uint64_t reserved_13_63               : 51;
1509 #endif
1510         } s;
1511         struct cvmx_pip_int_en_cn30xx
1512         {
1513 #if __BYTE_ORDER == __BIG_ENDIAN
1514         uint64_t reserved_9_63                : 55;
1515         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1516         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1517         uint64_t todoovr                      : 1;  /**< Todo list overflow
1518                                                          (not used in O2P) */
1519         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
1520         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1521         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1522         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure
1523                                                          (not used in O2P) */
1524         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
1525                                                          (not used in O2P) */
1526         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1527 #else
1528         uint64_t pktdrp                       : 1;
1529         uint64_t crcerr                       : 1;
1530         uint64_t bckprs                       : 1;
1531         uint64_t prtnxa                       : 1;
1532         uint64_t badtag                       : 1;
1533         uint64_t skprunt                      : 1;
1534         uint64_t todoovr                      : 1;
1535         uint64_t feperr                       : 1;
1536         uint64_t beperr                       : 1;
1537         uint64_t reserved_9_63                : 55;
1538 #endif
1539         } cn30xx;
1540         struct cvmx_pip_int_en_cn30xx         cn31xx;
1541         struct cvmx_pip_int_en_cn30xx         cn38xx;
1542         struct cvmx_pip_int_en_cn30xx         cn38xxp2;
1543         struct cvmx_pip_int_en_cn50xx
1544         {
1545 #if __BYTE_ORDER == __BIG_ENDIAN
1546         uint64_t reserved_12_63               : 52;
1547         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1548         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1549         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1550         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1551         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1552         uint64_t todoovr                      : 1;  /**< Todo list overflow */
1553         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
1554         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1555         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1556         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1557         uint64_t reserved_1_1                 : 1;
1558         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1559 #else
1560         uint64_t pktdrp                       : 1;
1561         uint64_t reserved_1_1                 : 1;
1562         uint64_t bckprs                       : 1;
1563         uint64_t prtnxa                       : 1;
1564         uint64_t badtag                       : 1;
1565         uint64_t skprunt                      : 1;
1566         uint64_t todoovr                      : 1;
1567         uint64_t feperr                       : 1;
1568         uint64_t beperr                       : 1;
1569         uint64_t minerr                       : 1;
1570         uint64_t maxerr                       : 1;
1571         uint64_t lenerr                       : 1;
1572         uint64_t reserved_12_63               : 52;
1573 #endif
1574         } cn50xx;
1575         struct cvmx_pip_int_en_cn52xx
1576         {
1577 #if __BYTE_ORDER == __BIG_ENDIAN
1578         uint64_t reserved_13_63               : 51;
1579         uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
1580                                                          stripping in IPD is enable */
1581         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1582         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1583         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1584         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1585         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1586         uint64_t todoovr                      : 1;  /**< Todo list overflow */
1587         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
1588         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1589         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1590         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1591         uint64_t reserved_1_1                 : 1;
1592         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1593 #else
1594         uint64_t pktdrp                       : 1;
1595         uint64_t reserved_1_1                 : 1;
1596         uint64_t bckprs                       : 1;
1597         uint64_t prtnxa                       : 1;
1598         uint64_t badtag                       : 1;
1599         uint64_t skprunt                      : 1;
1600         uint64_t todoovr                      : 1;
1601         uint64_t feperr                       : 1;
1602         uint64_t beperr                       : 1;
1603         uint64_t minerr                       : 1;
1604         uint64_t maxerr                       : 1;
1605         uint64_t lenerr                       : 1;
1606         uint64_t punyerr                      : 1;
1607         uint64_t reserved_13_63               : 51;
1608 #endif
1609         } cn52xx;
1610         struct cvmx_pip_int_en_cn52xx         cn52xxp1;
1611         struct cvmx_pip_int_en_s              cn56xx;
1612         struct cvmx_pip_int_en_cn56xxp1
1613         {
1614 #if __BYTE_ORDER == __BIG_ENDIAN
1615         uint64_t reserved_12_63               : 52;
1616         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1617         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1618         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1619         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1620         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1621         uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
1622         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
1623         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1624         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1625         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1626         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
1627                                                          (Disabled in 56xx) */
1628         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1629 #else
1630         uint64_t pktdrp                       : 1;
1631         uint64_t crcerr                       : 1;
1632         uint64_t bckprs                       : 1;
1633         uint64_t prtnxa                       : 1;
1634         uint64_t badtag                       : 1;
1635         uint64_t skprunt                      : 1;
1636         uint64_t todoovr                      : 1;
1637         uint64_t feperr                       : 1;
1638         uint64_t beperr                       : 1;
1639         uint64_t minerr                       : 1;
1640         uint64_t maxerr                       : 1;
1641         uint64_t lenerr                       : 1;
1642         uint64_t reserved_12_63               : 52;
1643 #endif
1644         } cn56xxp1;
1645         struct cvmx_pip_int_en_cn58xx
1646         {
1647 #if __BYTE_ORDER == __BIG_ENDIAN
1648         uint64_t reserved_13_63               : 51;
1649         uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
1650                                                          stripping in IPD is enable */
1651         uint64_t reserved_9_11                : 3;
1652         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1653         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1654         uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
1655         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper */
1656         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1657         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1658         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1659         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
1660         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1661 #else
1662         uint64_t pktdrp                       : 1;
1663         uint64_t crcerr                       : 1;
1664         uint64_t bckprs                       : 1;
1665         uint64_t prtnxa                       : 1;
1666         uint64_t badtag                       : 1;
1667         uint64_t skprunt                      : 1;
1668         uint64_t todoovr                      : 1;
1669         uint64_t feperr                       : 1;
1670         uint64_t beperr                       : 1;
1671         uint64_t reserved_9_11                : 3;
1672         uint64_t punyerr                      : 1;
1673         uint64_t reserved_13_63               : 51;
1674 #endif
1675         } cn58xx;
1676         struct cvmx_pip_int_en_cn30xx         cn58xxp1;
1677         struct cvmx_pip_int_en_s              cn63xx;
1678         struct cvmx_pip_int_en_s              cn63xxp1;
1679 };
1680 typedef union cvmx_pip_int_en cvmx_pip_int_en_t;
1681
1682 /**
1683  * cvmx_pip_int_reg
1684  *
1685  * PIP_INT_REG = PIP's Interrupt Register
1686  *
1687  * Any exception event that occurs is captured in the PIP_INT_REG.
1688  * PIP_INT_REG will set the exception bit regardless of the value
1689  * of PIP_INT_EN.  PIP_INT_EN only controls if an interrupt is
1690  * raised to software.
1691  *
1692  * Notes:
1693  * * TODOOVR
1694  *   The PIP Todo list stores packets that have been received and require work
1695  *   queue entry generation.  PIP will normally assert backpressure when the
1696  *   list fills up such that any error is normally is result of a programming
1697  *   the PIP_BCK_PRS[HIWATER] incorrectly.  PIP itself can handle 29M
1698  *   packets/sec X500MHz or 15Gbs X 64B packets.
1699  *
1700  * * SKPRUNT
1701  *   If a packet size is less then the amount programmed in the per port
1702  *   skippers, then there will be nothing to parse and the entire packet will
1703  *   basically be skipped over.  This is probably not what the user desired, so
1704  *   there is an indication to software.
1705  *
1706  * * BADTAG
1707  *   A tag is considered bad when it is resued by a new packet before it was
1708  *   released by PIP.  PIP considers a tag released by one of two methods.
1709  *   . QOS dropped so that it is released over the pip__ipd_release bus.
1710  *   . WorkQ entry is validated by the pip__ipd_done signal
1711  *
1712  * * PRTNXA
1713  *   If PIP receives a packet that is not in the valid port range, the port
1714  *   processed will be mapped into the valid port space (the mapping is
1715  *   currently unpredictable) and the PRTNXA bit will be set.  PRTNXA will be
1716  *   set for packets received under the following conditions:
1717  *
1718  *   * packet ports (ports 0-31)
1719  *     - GMX_INF_MODE[TYPE]==0 (SGMII), received port is 4-15 or 20-31
1720  *     - GMX_INF_MODE[TYPE]==1 (XAUI),  received port is 1-15 or 17-31
1721  *   * upper ports (pci and loopback ports 32-63)
1722  *     - received port is 40-47 or 52-63
1723  *
1724  * * BCKPRS
1725  *   PIP can assert backpressure to the receive logic when the todo list
1726  *   exceeds a high-water mark (see PIP_BCK_PRS for more details).  When this
1727  *   occurs, PIP can raise an interrupt to software.
1728  *
1729  * * CRCERR
1730  *   Octane can compute CRC in two places.  Each RGMII port will compute its
1731  *   own CRC, but PIP can provide an additional check or check loopback or
1732  *   PCI ports. If PIP computes a bad CRC, then PIP will raise an interrupt.
1733  *
1734  * * PKTDRP
1735  *   PIP can drop packets based on QOS results received from IPD.  If the QOS
1736  *   algorithm decides to drop a packet, PIP will assert an interrupt.
1737  */
1738 union cvmx_pip_int_reg
1739 {
1740         uint64_t u64;
1741         struct cvmx_pip_int_reg_s
1742         {
1743 #if __BYTE_ORDER == __BIG_ENDIAN
1744         uint64_t reserved_13_63               : 51;
1745         uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
1746                                                          stripping in IPD is enable */
1747         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1748         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1749         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1750         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1751         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1752         uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
1753         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
1754                                                          This interrupt can occur with received PARTIAL
1755                                                          packets that are truncated to SKIP bytes or
1756                                                          smaller. */
1757         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1758         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1759         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1760         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
1761         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1762 #else
1763         uint64_t pktdrp                       : 1;
1764         uint64_t crcerr                       : 1;
1765         uint64_t bckprs                       : 1;
1766         uint64_t prtnxa                       : 1;
1767         uint64_t badtag                       : 1;
1768         uint64_t skprunt                      : 1;
1769         uint64_t todoovr                      : 1;
1770         uint64_t feperr                       : 1;
1771         uint64_t beperr                       : 1;
1772         uint64_t minerr                       : 1;
1773         uint64_t maxerr                       : 1;
1774         uint64_t lenerr                       : 1;
1775         uint64_t punyerr                      : 1;
1776         uint64_t reserved_13_63               : 51;
1777 #endif
1778         } s;
1779         struct cvmx_pip_int_reg_cn30xx
1780         {
1781 #if __BYTE_ORDER == __BIG_ENDIAN
1782         uint64_t reserved_9_63                : 55;
1783         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1784         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1785         uint64_t todoovr                      : 1;  /**< Todo list overflow
1786                                                          (not used in O2P) */
1787         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
1788                                                          This interrupt can occur with received PARTIAL
1789                                                          packets that are truncated to SKIP bytes or
1790                                                          smaller. */
1791         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1792         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1793         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure
1794                                                          (not used in O2P) */
1795         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
1796                                                          (not used in O2P) */
1797         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1798 #else
1799         uint64_t pktdrp                       : 1;
1800         uint64_t crcerr                       : 1;
1801         uint64_t bckprs                       : 1;
1802         uint64_t prtnxa                       : 1;
1803         uint64_t badtag                       : 1;
1804         uint64_t skprunt                      : 1;
1805         uint64_t todoovr                      : 1;
1806         uint64_t feperr                       : 1;
1807         uint64_t beperr                       : 1;
1808         uint64_t reserved_9_63                : 55;
1809 #endif
1810         } cn30xx;
1811         struct cvmx_pip_int_reg_cn30xx        cn31xx;
1812         struct cvmx_pip_int_reg_cn30xx        cn38xx;
1813         struct cvmx_pip_int_reg_cn30xx        cn38xxp2;
1814         struct cvmx_pip_int_reg_cn50xx
1815         {
1816 #if __BYTE_ORDER == __BIG_ENDIAN
1817         uint64_t reserved_12_63               : 52;
1818         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1819         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1820         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1821         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1822         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1823         uint64_t todoovr                      : 1;  /**< Todo list overflow */
1824         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
1825                                                          This interrupt can occur with received PARTIAL
1826                                                          packets that are truncated to SKIP bytes or
1827                                                          smaller. */
1828         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1829         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1830         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1831         uint64_t reserved_1_1                 : 1;
1832         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1833 #else
1834         uint64_t pktdrp                       : 1;
1835         uint64_t reserved_1_1                 : 1;
1836         uint64_t bckprs                       : 1;
1837         uint64_t prtnxa                       : 1;
1838         uint64_t badtag                       : 1;
1839         uint64_t skprunt                      : 1;
1840         uint64_t todoovr                      : 1;
1841         uint64_t feperr                       : 1;
1842         uint64_t beperr                       : 1;
1843         uint64_t minerr                       : 1;
1844         uint64_t maxerr                       : 1;
1845         uint64_t lenerr                       : 1;
1846         uint64_t reserved_12_63               : 52;
1847 #endif
1848         } cn50xx;
1849         struct cvmx_pip_int_reg_cn52xx
1850         {
1851 #if __BYTE_ORDER == __BIG_ENDIAN
1852         uint64_t reserved_13_63               : 51;
1853         uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
1854                                                          stripping in IPD is enable */
1855         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1856         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1857         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1858         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1859         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1860         uint64_t todoovr                      : 1;  /**< Todo list overflow */
1861         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
1862                                                          This interrupt can occur with received PARTIAL
1863                                                          packets that are truncated to SKIP bytes or
1864                                                          smaller. */
1865         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1866         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1867         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1868         uint64_t reserved_1_1                 : 1;
1869         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1870 #else
1871         uint64_t pktdrp                       : 1;
1872         uint64_t reserved_1_1                 : 1;
1873         uint64_t bckprs                       : 1;
1874         uint64_t prtnxa                       : 1;
1875         uint64_t badtag                       : 1;
1876         uint64_t skprunt                      : 1;
1877         uint64_t todoovr                      : 1;
1878         uint64_t feperr                       : 1;
1879         uint64_t beperr                       : 1;
1880         uint64_t minerr                       : 1;
1881         uint64_t maxerr                       : 1;
1882         uint64_t lenerr                       : 1;
1883         uint64_t punyerr                      : 1;
1884         uint64_t reserved_13_63               : 51;
1885 #endif
1886         } cn52xx;
1887         struct cvmx_pip_int_reg_cn52xx        cn52xxp1;
1888         struct cvmx_pip_int_reg_s             cn56xx;
1889         struct cvmx_pip_int_reg_cn56xxp1
1890         {
1891 #if __BYTE_ORDER == __BIG_ENDIAN
1892         uint64_t reserved_12_63               : 52;
1893         uint64_t lenerr                       : 1;  /**< Frame was received with length error */
1894         uint64_t maxerr                       : 1;  /**< Frame was received with length > max_length */
1895         uint64_t minerr                       : 1;  /**< Frame was received with length < min_length */
1896         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1897         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1898         uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
1899         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
1900                                                          This interrupt can occur with received PARTIAL
1901                                                          packets that are truncated to SKIP bytes or
1902                                                          smaller. */
1903         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1904         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1905         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1906         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC
1907                                                          (Disabled in 56xx) */
1908         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1909 #else
1910         uint64_t pktdrp                       : 1;
1911         uint64_t crcerr                       : 1;
1912         uint64_t bckprs                       : 1;
1913         uint64_t prtnxa                       : 1;
1914         uint64_t badtag                       : 1;
1915         uint64_t skprunt                      : 1;
1916         uint64_t todoovr                      : 1;
1917         uint64_t feperr                       : 1;
1918         uint64_t beperr                       : 1;
1919         uint64_t minerr                       : 1;
1920         uint64_t maxerr                       : 1;
1921         uint64_t lenerr                       : 1;
1922         uint64_t reserved_12_63               : 52;
1923 #endif
1924         } cn56xxp1;
1925         struct cvmx_pip_int_reg_cn58xx
1926         {
1927 #if __BYTE_ORDER == __BIG_ENDIAN
1928         uint64_t reserved_13_63               : 51;
1929         uint64_t punyerr                      : 1;  /**< Frame was received with length <=4B when CRC
1930                                                          stripping in IPD is enable */
1931         uint64_t reserved_9_11                : 3;
1932         uint64_t beperr                       : 1;  /**< Parity Error in back end memory */
1933         uint64_t feperr                       : 1;  /**< Parity Error in front end memory */
1934         uint64_t todoovr                      : 1;  /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
1935         uint64_t skprunt                      : 1;  /**< Packet was engulfed by skipper
1936                                                          This interrupt can occur with received PARTIAL
1937                                                          packets that are truncated to SKIP bytes or
1938                                                          smaller. */
1939         uint64_t badtag                       : 1;  /**< A bad tag was sent from IPD */
1940         uint64_t prtnxa                       : 1;  /**< Non-existent port */
1941         uint64_t bckprs                       : 1;  /**< PIP asserted backpressure */
1942         uint64_t crcerr                       : 1;  /**< PIP calculated bad CRC */
1943         uint64_t pktdrp                       : 1;  /**< Packet Dropped due to QOS */
1944 #else
1945         uint64_t pktdrp                       : 1;
1946         uint64_t crcerr                       : 1;
1947         uint64_t bckprs                       : 1;
1948         uint64_t prtnxa                       : 1;
1949         uint64_t badtag                       : 1;
1950         uint64_t skprunt                      : 1;
1951         uint64_t todoovr                      : 1;
1952         uint64_t feperr                       : 1;
1953         uint64_t beperr                       : 1;
1954         uint64_t reserved_9_11                : 3;
1955         uint64_t punyerr                      : 1;
1956         uint64_t reserved_13_63               : 51;
1957 #endif
1958         } cn58xx;
1959         struct cvmx_pip_int_reg_cn30xx        cn58xxp1;
1960         struct cvmx_pip_int_reg_s             cn63xx;
1961         struct cvmx_pip_int_reg_s             cn63xxp1;
1962 };
1963 typedef union cvmx_pip_int_reg cvmx_pip_int_reg_t;
1964
1965 /**
1966  * cvmx_pip_ip_offset
1967  *
1968  * PIP_IP_OFFSET = Location of the IP in the workQ entry
1969  *
1970  * An 8-byte offset to find the start of the IP header in the data portion of IP workQ entires
1971  *
1972  * Notes:
1973  * In normal configurations, OFFSET must be set in the 0..4 range to allow the
1974  * entire IP and TCP/UDP headers to be buffered in HW and calculate the L4
1975  * checksum for TCP/UDP packets.
1976  *
1977  * The MAX value of OFFSET is determined by the the types of packets that can
1978  * be sent to PIP as follows...
1979  *
1980  * Packet Type              MAX OFFSET
1981  * IPv4/TCP/UDP             7
1982  * IPv6/TCP/UDP             5
1983  * IPv6/without L4 parsing  6
1984  *
1985  * If the L4 can be ignored, then the MAX OFFSET for IPv6 packets can increase
1986  * to 6.  Here are the following programming restrictions for IPv6 packets and
1987  * OFFSET==6:
1988  *
1989  *  . PIP_GBL_CTL[TCP_FLAG] == 0
1990  *  . PIP_GBL_CTL[L4_LEN]   == 0
1991  *  . PIP_GBL_CTL[L4_CHK]   == 0
1992  *  . PIP_GBL_CTL[L4_PRT]   == 0
1993  *  . PIP_GBL_CTL[L4_MAL]   == 0
1994  *  . PIP_DEC_IPSEC[TCP]    == 0
1995  *  . PIP_DEC_IPSEC[UDP]    == 0
1996  *  . PIP_PRT_TAG[IP6_DPRT] == 0
1997  *  . PIP_PRT_TAG[IP6_SPRT] == 0
1998  *  . PIP_PRT_TAG[TCP6_TAG] == 0
1999  *  . PIP_GBL_CFG[TAG_SYN]  == 0
2000  */
2001 union cvmx_pip_ip_offset
2002 {
2003         uint64_t u64;
2004         struct cvmx_pip_ip_offset_s
2005         {
2006 #if __BYTE_ORDER == __BIG_ENDIAN
2007         uint64_t reserved_3_63                : 61;
2008         uint64_t offset                       : 3;  /**< Number of 8B ticks to include in workQ entry
2009                                                           prior to IP data
2010                                                          - 0:  0 Bytes / IP start at WORD4 of workQ entry
2011                                                          - 1:  8 Bytes / IP start at WORD5 of workQ entry
2012                                                          - 2: 16 Bytes / IP start at WORD6 of workQ entry
2013                                                          - 3: 24 Bytes / IP start at WORD7 of workQ entry
2014                                                          - 4: 32 Bytes / IP start at WORD8 of workQ entry
2015                                                          - 5: 40 Bytes / IP start at WORD9 of workQ entry
2016                                                          - 6: 48 Bytes / IP start at WORD10 of workQ entry
2017                                                          - 7: 56 Bytes / IP start at WORD11 of workQ entry */
2018 #else
2019         uint64_t offset                       : 3;
2020         uint64_t reserved_3_63                : 61;
2021 #endif
2022         } s;
2023         struct cvmx_pip_ip_offset_s           cn30xx;
2024         struct cvmx_pip_ip_offset_s           cn31xx;
2025         struct cvmx_pip_ip_offset_s           cn38xx;
2026         struct cvmx_pip_ip_offset_s           cn38xxp2;
2027         struct cvmx_pip_ip_offset_s           cn50xx;
2028         struct cvmx_pip_ip_offset_s           cn52xx;
2029         struct cvmx_pip_ip_offset_s           cn52xxp1;
2030         struct cvmx_pip_ip_offset_s           cn56xx;
2031         struct cvmx_pip_ip_offset_s           cn56xxp1;
2032         struct cvmx_pip_ip_offset_s           cn58xx;
2033         struct cvmx_pip_ip_offset_s           cn58xxp1;
2034         struct cvmx_pip_ip_offset_s           cn63xx;
2035         struct cvmx_pip_ip_offset_s           cn63xxp1;
2036 };
2037 typedef union cvmx_pip_ip_offset cvmx_pip_ip_offset_t;
2038
2039 /**
2040  * cvmx_pip_prt_cfg#
2041  *
2042  * PIP_PRT_CFGX = Per port config information
2043  *
2044  */
2045 union cvmx_pip_prt_cfgx
2046 {
2047         uint64_t u64;
2048         struct cvmx_pip_prt_cfgx_s
2049         {
2050 #if __BYTE_ORDER == __BIG_ENDIAN
2051         uint64_t reserved_53_63               : 11;
2052         uint64_t pad_len                      : 1;  /**< When set, disables the length check for pkts with
2053                                                          padding in the client data */
2054         uint64_t vlan_len                     : 1;  /**< When set, disables the length check for DSA/VLAN
2055                                                          pkts */
2056         uint64_t lenerr_en                    : 1;  /**< L2 length error check enable
2057                                                          Frame was received with length error
2058                                                           Typically, this check will not be enabled for
2059                                                           incoming packets on the PCIe ports. */
2060         uint64_t maxerr_en                    : 1;  /**< Max frame error check enable
2061                                                          Frame was received with length > max_length */
2062         uint64_t minerr_en                    : 1;  /**< Min frame error check enable
2063                                                          Frame was received with length < min_length
2064                                                           Typically, this check will not be enabled for
2065                                                           incoming packets on the PCIe ports. */
2066         uint64_t grp_wat_47                   : 4;  /**< GRP Watcher enable
2067                                                          (Watchers 4-7) */
2068         uint64_t qos_wat_47                   : 4;  /**< QOS Watcher enable
2069                                                          (Watchers 4-7) */
2070         uint64_t reserved_37_39               : 3;
2071         uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
2072                                                          Normally, IPD will never drop a packet that PIP
2073                                                          indicates is RAW.
2074                                                          0=never drop RAW packets based on RED algorithm
2075                                                          1=allow RAW packet drops based on RED algorithm */
2076         uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
2077                                                          calculating mask tag hash */
2078         uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
2079                                                          configuration.  If DYN_RS is set then
2080                                                          PKT_INST_HDR[RS] is not used.  When using 2-byte
2081                                                          instruction header words, either DYN_RS or
2082                                                          PIP_GBL_CTL[IGNRS] should be set. */
2083         uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
2084                                                          (not for PCI prts, 32-35)
2085                                                          Must be zero in DSA mode */
2086         uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
2087         uint64_t hg_qos                       : 1;  /**< When set, uses the HiGig priority bits as a
2088                                                          lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
2089                                                          to determine the QOS value
2090                                                          HG_QOS must not be set when HIGIG_EN=0 */
2091         uint64_t qos                          : 3;  /**< Default QOS level of the port */
2092         uint64_t qos_wat                      : 4;  /**< QOS Watcher enable
2093                                                          (Watchers 0-3) */
2094         uint64_t qos_vsel                     : 1;  /**< Which QOS in PIP_QOS_VLAN to use
2095                                                          0 = PIP_QOS_VLAN[QOS]
2096                                                          1 = PIP_QOS_VLAN[QOS1] */
2097         uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
2098                                                          if DSA/VLAN exists, it is used
2099                                                          else if IP exists, Diffserv is used
2100                                                          else the per port default is used
2101                                                          Watchers are still highest priority */
2102         uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
2103         uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
2104         uint64_t reserved_13_15               : 3;
2105         uint64_t crc_en                       : 1;  /**< CRC Checking enabled */
2106         uint64_t higig_en                     : 1;  /**< Enable HiGig parsing
2107                                                          Should not be set for PCIe ports (ports 32-35)
2108                                                          Should not be set for ports in which PTP_MODE=1
2109                                                          When HIGIG_EN=1:
2110                                                           DSA_EN field below must be zero
2111                                                           SKIP field below is both Skip I size and the
2112                                                             size of the HiGig* header (12 or 16 bytes) */
2113         uint64_t dsa_en                       : 1;  /**< Enable DSA tag parsing
2114                                                          When DSA_EN=1:
2115                                                           HIGIG_EN field above must be zero
2116                                                           SKIP field below is size of DSA tag (4, 8, or
2117                                                             12 bytes) rather than the size of Skip I
2118                                                           total SKIP (Skip I + header + Skip II
2119                                                             must be zero
2120                                                           INST_HDR field above must be zero (non-PCIe
2121                                                             ports)
2122                                                           For PCIe ports, NPEI_PKT*_INSTR_HDR[USE_IHDR]
2123                                                             and PCIE_INST_HDR[R] should be clear
2124                                                           MODE field below must be "skip to L2" */
2125         cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
2126                                                          0 = no packet inspection (Uninterpreted)
2127                                                          1 = L2 parsing / skip to L2
2128                                                          2 = IP parsing / skip to L3
2129                                                          3 = (illegal)
2130                                                          Must be 2 ("skip to L2") when in DSA mode. */
2131         uint64_t reserved_7_7                 : 1;
2132         uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
2133                                                          apply to packets on PCI ports when a PKT_INST_HDR
2134                                                          is present.  See section 7.2.7 - Legal Skip
2135                                                          Values for further details.
2136                                                          In DSA mode, indicates the DSA header length, not
2137                                                            Skip I size. (Must be 4,8,or 12)
2138                                                          In HIGIG mode, indicates both the Skip I size and
2139                                                            the HiGig header size (Must be 12 or 16).
2140                                                          If PTP_MODE, the 8B timestamp is prepended to the
2141                                                           packet.  SKIP should be increased by 8 to
2142                                                           compensate for the additional timestamp field. */
2143 #else
2144         uint64_t skip                         : 7;
2145         uint64_t reserved_7_7                 : 1;
2146         cvmx_pip_port_parse_mode_t mode       : 2;
2147         uint64_t dsa_en                       : 1;
2148         uint64_t higig_en                     : 1;
2149         uint64_t crc_en                       : 1;
2150         uint64_t reserved_13_15               : 3;
2151         uint64_t qos_vlan                     : 1;
2152         uint64_t qos_diff                     : 1;
2153         uint64_t qos_vod                      : 1;
2154         uint64_t qos_vsel                     : 1;
2155         uint64_t qos_wat                      : 4;
2156         uint64_t qos                          : 3;
2157         uint64_t hg_qos                       : 1;
2158         uint64_t grp_wat                      : 4;
2159         uint64_t inst_hdr                     : 1;
2160         uint64_t dyn_rs                       : 1;
2161         uint64_t tag_inc                      : 2;
2162         uint64_t rawdrp                       : 1;
2163         uint64_t reserved_37_39               : 3;
2164         uint64_t qos_wat_47                   : 4;
2165         uint64_t grp_wat_47                   : 4;
2166         uint64_t minerr_en                    : 1;
2167         uint64_t maxerr_en                    : 1;
2168         uint64_t lenerr_en                    : 1;
2169         uint64_t vlan_len                     : 1;
2170         uint64_t pad_len                      : 1;
2171         uint64_t reserved_53_63               : 11;
2172 #endif
2173         } s;
2174         struct cvmx_pip_prt_cfgx_cn30xx
2175         {
2176 #if __BYTE_ORDER == __BIG_ENDIAN
2177         uint64_t reserved_37_63               : 27;
2178         uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
2179                                                          Normally, IPD will never drop a packet that PIP
2180                                                          indicates is RAW.
2181                                                          0=never drop RAW packets based on RED algorithm
2182                                                          1=allow RAW packet drops based on RED algorithm */
2183         uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
2184                                                          calculating mask tag hash */
2185         uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
2186                                                          configuration.  If DYN_RS is set then
2187                                                          PKT_INST_HDR[RS] is not used.  When using 2-byte
2188                                                          instruction header words, either DYN_RS or
2189                                                          PIP_GBL_CTL[IGNRS] should be set. */
2190         uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
2191                                                          (not for PCI prts, 32-35) */
2192         uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
2193         uint64_t reserved_27_27               : 1;
2194         uint64_t qos                          : 3;  /**< Default QOS level of the port */
2195         uint64_t qos_wat                      : 4;  /**< QOS Watcher enable */
2196         uint64_t reserved_18_19               : 2;
2197         uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
2198         uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
2199         uint64_t reserved_10_15               : 6;
2200         cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
2201                                                          0 = no packet inspection (Uninterpreted)
2202                                                          1 = L2 parsing / skip to L2
2203                                                          2 = IP parsing / skip to L3
2204                                                          3 = PCI Raw (illegal for software to set) */
2205         uint64_t reserved_7_7                 : 1;
2206         uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
2207                                                          apply to packets on PCI ports when a PKT_INST_HDR
2208                                                          is present.  See section 7.2.7 - Legal Skip
2209                                                          Values for further details. */
2210 #else
2211         uint64_t skip                         : 7;
2212         uint64_t reserved_7_7                 : 1;
2213         cvmx_pip_port_parse_mode_t mode       : 2;
2214         uint64_t reserved_10_15               : 6;
2215         uint64_t qos_vlan                     : 1;
2216         uint64_t qos_diff                     : 1;
2217         uint64_t reserved_18_19               : 2;
2218         uint64_t qos_wat                      : 4;
2219         uint64_t qos                          : 3;
2220         uint64_t reserved_27_27               : 1;
2221         uint64_t grp_wat                      : 4;
2222         uint64_t inst_hdr                     : 1;
2223         uint64_t dyn_rs                       : 1;
2224         uint64_t tag_inc                      : 2;
2225         uint64_t rawdrp                       : 1;
2226         uint64_t reserved_37_63               : 27;
2227 #endif
2228         } cn30xx;
2229         struct cvmx_pip_prt_cfgx_cn30xx       cn31xx;
2230         struct cvmx_pip_prt_cfgx_cn38xx
2231         {
2232 #if __BYTE_ORDER == __BIG_ENDIAN
2233         uint64_t reserved_37_63               : 27;
2234         uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
2235                                                          Normally, IPD will never drop a packet that PIP
2236                                                          indicates is RAW.
2237                                                          0=never drop RAW packets based on RED algorithm
2238                                                          1=allow RAW packet drops based on RED algorithm */
2239         uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
2240                                                          calculating mask tag hash */
2241         uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
2242                                                          configuration.  If DYN_RS is set then
2243                                                          PKT_INST_HDR[RS] is not used.  When using 2-byte
2244                                                          instruction header words, either DYN_RS or
2245                                                          PIP_GBL_CTL[IGNRS] should be set. */
2246         uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
2247                                                          (not for PCI prts, 32-35) */
2248         uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
2249         uint64_t reserved_27_27               : 1;
2250         uint64_t qos                          : 3;  /**< Default QOS level of the port */
2251         uint64_t qos_wat                      : 4;  /**< QOS Watcher enable */
2252         uint64_t reserved_18_19               : 2;
2253         uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
2254         uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
2255         uint64_t reserved_13_15               : 3;
2256         uint64_t crc_en                       : 1;  /**< CRC Checking enabled (for ports 0-31 only) */
2257         uint64_t reserved_10_11               : 2;
2258         cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
2259                                                          0 = no packet inspection (Uninterpreted)
2260                                                          1 = L2 parsing / skip to L2
2261                                                          2 = IP parsing / skip to L3
2262                                                          3 = PCI Raw (illegal for software to set) */
2263         uint64_t reserved_7_7                 : 1;
2264         uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
2265                                                          apply to packets on PCI ports when a PKT_INST_HDR
2266                                                          is present.  See section 7.2.7 - Legal Skip
2267                                                          Values for further details. */
2268 #else
2269         uint64_t skip                         : 7;
2270         uint64_t reserved_7_7                 : 1;
2271         cvmx_pip_port_parse_mode_t mode       : 2;
2272         uint64_t reserved_10_11               : 2;
2273         uint64_t crc_en                       : 1;
2274         uint64_t reserved_13_15               : 3;
2275         uint64_t qos_vlan                     : 1;
2276         uint64_t qos_diff                     : 1;
2277         uint64_t reserved_18_19               : 2;
2278         uint64_t qos_wat                      : 4;
2279         uint64_t qos                          : 3;
2280         uint64_t reserved_27_27               : 1;
2281         uint64_t grp_wat                      : 4;
2282         uint64_t inst_hdr                     : 1;
2283         uint64_t dyn_rs                       : 1;
2284         uint64_t tag_inc                      : 2;
2285         uint64_t rawdrp                       : 1;
2286         uint64_t reserved_37_63               : 27;
2287 #endif
2288         } cn38xx;
2289         struct cvmx_pip_prt_cfgx_cn38xx       cn38xxp2;
2290         struct cvmx_pip_prt_cfgx_cn50xx
2291         {
2292 #if __BYTE_ORDER == __BIG_ENDIAN
2293         uint64_t reserved_53_63               : 11;
2294         uint64_t pad_len                      : 1;  /**< When set, disables the length check for pkts with
2295                                                          padding in the client data */
2296         uint64_t vlan_len                     : 1;  /**< When set, disables the length check for VLAN pkts */
2297         uint64_t lenerr_en                    : 1;  /**< L2 length error check enable
2298                                                          Frame was received with length error */
2299         uint64_t maxerr_en                    : 1;  /**< Max frame error check enable
2300                                                          Frame was received with length > max_length */
2301         uint64_t minerr_en                    : 1;  /**< Min frame error check enable
2302                                                          Frame was received with length < min_length */
2303         uint64_t grp_wat_47                   : 4;  /**< GRP Watcher enable
2304                                                          (Watchers 4-7) */
2305         uint64_t qos_wat_47                   : 4;  /**< QOS Watcher enable
2306                                                          (Watchers 4-7) */
2307         uint64_t reserved_37_39               : 3;
2308         uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
2309                                                          Normally, IPD will never drop a packet that PIP
2310                                                          indicates is RAW.
2311                                                          0=never drop RAW packets based on RED algorithm
2312                                                          1=allow RAW packet drops based on RED algorithm */
2313         uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
2314                                                          calculating mask tag hash */
2315         uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
2316                                                          configuration.  If DYN_RS is set then
2317                                                          PKT_INST_HDR[RS] is not used.  When using 2-byte
2318                                                          instruction header words, either DYN_RS or
2319                                                          PIP_GBL_CTL[IGNRS] should be set. */
2320         uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
2321                                                          (not for PCI prts, 32-35) */
2322         uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
2323         uint64_t reserved_27_27               : 1;
2324         uint64_t qos                          : 3;  /**< Default QOS level of the port */
2325         uint64_t qos_wat                      : 4;  /**< QOS Watcher enable
2326                                                          (Watchers 0-3) */
2327         uint64_t reserved_19_19               : 1;
2328         uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
2329                                                          if VLAN exists, it is used
2330                                                          else if IP exists, Diffserv is used
2331                                                          else the per port default is used
2332                                                          Watchers are still highest priority */
2333         uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
2334         uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
2335         uint64_t reserved_13_15               : 3;
2336         uint64_t crc_en                       : 1;  /**< CRC Checking enabled
2337                                                          (Disabled in 5020) */
2338         uint64_t reserved_10_11               : 2;
2339         cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
2340                                                          0 = no packet inspection (Uninterpreted)
2341                                                          1 = L2 parsing / skip to L2
2342                                                          2 = IP parsing / skip to L3
2343                                                          3 = PCI Raw (illegal for software to set) */
2344         uint64_t reserved_7_7                 : 1;
2345         uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
2346                                                          apply to packets on PCI ports when a PKT_INST_HDR
2347                                                          is present.  See section 7.2.7 - Legal Skip
2348                                                          Values for further details. */
2349 #else
2350         uint64_t skip                         : 7;
2351         uint64_t reserved_7_7                 : 1;
2352         cvmx_pip_port_parse_mode_t mode       : 2;
2353         uint64_t reserved_10_11               : 2;
2354         uint64_t crc_en                       : 1;
2355         uint64_t reserved_13_15               : 3;
2356         uint64_t qos_vlan                     : 1;
2357         uint64_t qos_diff                     : 1;
2358         uint64_t qos_vod                      : 1;
2359         uint64_t reserved_19_19               : 1;
2360         uint64_t qos_wat                      : 4;
2361         uint64_t qos                          : 3;
2362         uint64_t reserved_27_27               : 1;
2363         uint64_t grp_wat                      : 4;
2364         uint64_t inst_hdr                     : 1;
2365         uint64_t dyn_rs                       : 1;
2366         uint64_t tag_inc                      : 2;
2367         uint64_t rawdrp                       : 1;
2368         uint64_t reserved_37_39               : 3;
2369         uint64_t qos_wat_47                   : 4;
2370         uint64_t grp_wat_47                   : 4;
2371         uint64_t minerr_en                    : 1;
2372         uint64_t maxerr_en                    : 1;
2373         uint64_t lenerr_en                    : 1;
2374         uint64_t vlan_len                     : 1;
2375         uint64_t pad_len                      : 1;
2376         uint64_t reserved_53_63               : 11;
2377 #endif
2378         } cn50xx;
2379         struct cvmx_pip_prt_cfgx_s            cn52xx;
2380         struct cvmx_pip_prt_cfgx_s            cn52xxp1;
2381         struct cvmx_pip_prt_cfgx_s            cn56xx;
2382         struct cvmx_pip_prt_cfgx_cn50xx       cn56xxp1;
2383         struct cvmx_pip_prt_cfgx_cn58xx
2384         {
2385 #if __BYTE_ORDER == __BIG_ENDIAN
2386         uint64_t reserved_37_63               : 27;
2387         uint64_t rawdrp                       : 1;  /**< Allow the IPD to RED drop a packet.
2388                                                          Normally, IPD will never drop a packet that PIP
2389                                                          indicates is RAW.
2390                                                          0=never drop RAW packets based on RED algorithm
2391                                                          1=allow RAW packet drops based on RED algorithm */
2392         uint64_t tag_inc                      : 2;  /**< Which of the 4 PIP_TAG_INC to use when
2393                                                          calculating mask tag hash */
2394         uint64_t dyn_rs                       : 1;  /**< Dynamically calculate RS based on pkt size and
2395                                                          configuration.  If DYN_RS is set then
2396                                                          PKT_INST_HDR[RS] is not used.  When using 2-byte
2397                                                          instruction header words, either DYN_RS or
2398                                                          PIP_GBL_CTL[IGNRS] should be set. */
2399         uint64_t inst_hdr                     : 1;  /**< 8-byte INST_HDR is present on all packets
2400                                                          (not for PCI prts, 32-35) */
2401         uint64_t grp_wat                      : 4;  /**< GRP Watcher enable */
2402         uint64_t reserved_27_27               : 1;
2403         uint64_t qos                          : 3;  /**< Default QOS level of the port */
2404         uint64_t qos_wat                      : 4;  /**< QOS Watcher enable */
2405         uint64_t reserved_19_19               : 1;
2406         uint64_t qos_vod                      : 1;  /**< QOS VLAN over Diffserv
2407                                                          if VLAN exists, it is used
2408                                                          else if IP exists, Diffserv is used
2409                                                          else the per port default is used
2410                                                          Watchers are still highest priority */
2411         uint64_t qos_diff                     : 1;  /**< QOS Diffserv */
2412         uint64_t qos_vlan                     : 1;  /**< QOS VLAN */
2413         uint64_t reserved_13_15               : 3;
2414         uint64_t crc_en                       : 1;  /**< CRC Checking enabled (for ports 0-31 only) */
2415         uint64_t reserved_10_11               : 2;
2416         cvmx_pip_port_parse_mode_t mode       : 2;  /**< Parse Mode
2417                                                          0 = no packet inspection (Uninterpreted)
2418                                                          1 = L2 parsing / skip to L2
2419                                                          2 = IP parsing / skip to L3
2420                                                          3 = PCI Raw (illegal for software to set) */
2421         uint64_t reserved_7_7                 : 1;
2422         uint64_t skip                         : 7;  /**< Optional Skip I amount for packets.  Does not
2423                                                          apply to packets on PCI ports when a PKT_INST_HDR
2424                                                          is present.  See section 7.2.7 - Legal Skip
2425                                                          Values for further details. */
2426 #else
2427         uint64_t skip                         : 7;
2428         uint64_t reserved_7_7                 : 1;
2429         cvmx_pip_port_parse_mode_t mode       : 2;
2430         uint64_t reserved_10_11               : 2;
2431         uint64_t crc_en                       : 1;
2432         uint64_t reserved_13_15               : 3;
2433         uint64_t qos_vlan                     : 1;
2434         uint64_t qos_diff                     : 1;
2435         uint64_t qos_vod                      : 1;
2436         uint64_t reserved_19_19               : 1;
2437         uint64_t qos_wat                      : 4;
2438         uint64_t qos                          : 3;
2439         uint64_t reserved_27_27               : 1;
2440         uint64_t grp_wat                      : 4;
2441         uint64_t inst_hdr                     : 1;
2442         uint64_t dyn_rs                       : 1;
2443         uint64_t tag_inc                      : 2;
2444         uint64_t rawdrp                       : 1;
2445         uint64_t reserved_37_63               : 27;
2446 #endif
2447         } cn58xx;
2448         struct cvmx_pip_prt_cfgx_cn58xx       cn58xxp1;
2449         struct cvmx_pip_prt_cfgx_s            cn63xx;
2450         struct cvmx_pip_prt_cfgx_s            cn63xxp1;
2451 };
2452 typedef union cvmx_pip_prt_cfgx cvmx_pip_prt_cfgx_t;
2453
2454 /**
2455  * cvmx_pip_prt_tag#
2456  *
2457  * PIP_PRT_TAGX = Per port config information
2458  *
2459  */
2460 union cvmx_pip_prt_tagx
2461 {
2462         uint64_t u64;
2463         struct cvmx_pip_prt_tagx_s
2464         {
2465 #if __BYTE_ORDER == __BIG_ENDIAN
2466         uint64_t reserved_40_63               : 24;
2467         uint64_t grptagbase                   : 4;  /**< Offset to use when computing group from tag bits
2468                                                          when GRPTAG is set. */
2469         uint64_t grptagmask                   : 4;  /**< Which bits of the tag to exclude when computing
2470                                                          group when GRPTAG is set. */
2471         uint64_t grptag                       : 1;  /**< When set, use the lower bit of the tag to compute
2472                                                          the group in the work queue entry
2473                                                          GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
2474         uint64_t grptag_mskip                 : 1;  /**< When set, GRPTAG will be used regardless if the
2475                                                          packet IS_IP. */
2476         uint64_t tag_mode                     : 2;  /**< Which tag algorithm to use
2477                                                          0 = always use tuple tag algorithm
2478                                                          1 = always use mask tag algorithm
2479                                                          2 = if packet is IP, use tuple else use mask
2480                                                          3 = tuple XOR mask */
2481         uint64_t inc_vs                       : 2;  /**< determines the DSA/VLAN ID (VID) to be included in
2482                                                          tuple tag when VLAN stacking is detected
2483                                                          0 = do not include VID in tuple tag generation
2484                                                          1 = include VID (VLAN0) in hash
2485                                                          2 = include VID (VLAN1) in hash
2486                                                          3 = include VID ([VLAN0,VLAN1]) in hash */
2487         uint64_t inc_vlan                     : 1;  /**< when set, the DSA/VLAN ID is included in tuple tag
2488                                                          when VLAN stacking is not detected
2489                                                          0 = do not include VID in tuple tag generation
2490                                                          1 = include VID in hash */
2491         uint64_t inc_prt_flag                 : 1;  /**< sets whether the port is included in tuple tag */
2492         uint64_t ip6_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
2493                                                          included in tuple tag for IPv6 packets */
2494         uint64_t ip4_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
2495                                                          included in tuple tag for IPv4 */
2496         uint64_t ip6_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
2497                                                          included in tuple tag for IPv6 packets */
2498         uint64_t ip4_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
2499                                                          included in tuple tag for IPv4 */
2500         uint64_t ip6_nxth_flag                : 1;  /**< sets whether ipv6 includes next header in tuple
2501                                                          tag hash */
2502         uint64_t ip4_pctl_flag                : 1;  /**< sets whether ipv4 includes protocol in tuple
2503                                                          tag hash */
2504         uint64_t ip6_dst_flag                 : 1;  /**< sets whether ipv6 includes dst address in tuple
2505                                                          tag hash */
2506         uint64_t ip4_dst_flag                 : 1;  /**< sets whether ipv4 includes dst address in tuple
2507                                                          tag hash */
2508         uint64_t ip6_src_flag                 : 1;  /**< sets whether ipv6 includes src address in tuple
2509                                                          tag hash */
2510         uint64_t ip4_src_flag                 : 1;  /**< sets whether ipv4 includes src address in tuple
2511                                                          tag hash */
2512         cvmx_pow_tag_type_t tcp6_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv6)
2513                                                          0 = ordered tags
2514                                                          1 = atomic tags
2515                                                          2 = Null tags */
2516         cvmx_pow_tag_type_t tcp4_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv4)
2517                                                          0 = ordered tags
2518                                                          1 = atomic tags
2519                                                          2 = Null tags */
2520         cvmx_pow_tag_type_t ip6_tag_type      : 2;  /**< sets whether IPv6 packet tag type
2521                                                          0 = ordered tags
2522                                                          1 = atomic tags
2523                                                          2 = Null tags */
2524         cvmx_pow_tag_type_t ip4_tag_type      : 2;  /**< sets whether IPv4 packet tag type
2525                                                          0 = ordered tags
2526                                                          1 = atomic tags
2527                                                          2 = Null tags */
2528         cvmx_pow_tag_type_t non_tag_type      : 2;  /**< sets whether non-IP packet tag type
2529                                                          0 = ordered tags
2530                                                          1 = atomic tags
2531                                                          2 = Null tags */
2532         uint64_t grp                          : 4;  /**< 4-bit value indicating the group to schedule to */
2533 #else
2534         uint64_t grp                          : 4;
2535         cvmx_pow_tag_type_t non_tag_type      : 2;
2536         cvmx_pow_tag_type_t ip4_tag_type      : 2;
2537         cvmx_pow_tag_type_t ip6_tag_type      : 2;
2538         cvmx_pow_tag_type_t tcp4_tag_type     : 2;
2539         cvmx_pow_tag_type_t tcp6_tag_type     : 2;
2540         uint64_t ip4_src_flag                 : 1;
2541         uint64_t ip6_src_flag                 : 1;
2542         uint64_t ip4_dst_flag                 : 1;
2543         uint64_t ip6_dst_flag                 : 1;
2544         uint64_t ip4_pctl_flag                : 1;
2545         uint64_t ip6_nxth_flag                : 1;
2546         uint64_t ip4_sprt_flag                : 1;
2547         uint64_t ip6_sprt_flag                : 1;
2548         uint64_t ip4_dprt_flag                : 1;
2549         uint64_t ip6_dprt_flag                : 1;
2550         uint64_t inc_prt_flag                 : 1;
2551         uint64_t inc_vlan                     : 1;
2552         uint64_t inc_vs                       : 2;
2553         uint64_t tag_mode                     : 2;
2554         uint64_t grptag_mskip                 : 1;
2555         uint64_t grptag                       : 1;
2556         uint64_t grptagmask                   : 4;
2557         uint64_t grptagbase                   : 4;
2558         uint64_t reserved_40_63               : 24;
2559 #endif
2560         } s;
2561         struct cvmx_pip_prt_tagx_cn30xx
2562         {
2563 #if __BYTE_ORDER == __BIG_ENDIAN
2564         uint64_t reserved_40_63               : 24;
2565         uint64_t grptagbase                   : 4;  /**< Offset to use when computing group from tag bits
2566                                                          when GRPTAG is set. */
2567         uint64_t grptagmask                   : 4;  /**< Which bits of the tag to exclude when computing
2568                                                          group when GRPTAG is set. */
2569         uint64_t grptag                       : 1;  /**< When set, use the lower bit of the tag to compute
2570                                                          the group in the work queue entry
2571                                                          GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
2572         uint64_t reserved_30_30               : 1;
2573         uint64_t tag_mode                     : 2;  /**< Which tag algorithm to use
2574                                                          0 = always use tuple tag algorithm
2575                                                          1 = always use mask tag algorithm
2576                                                          2 = if packet is IP, use tuple else use mask
2577                                                          3 = tuple XOR mask */
2578         uint64_t inc_vs                       : 2;  /**< determines the VLAN ID (VID) to be included in
2579                                                          tuple tag when VLAN stacking is detected
2580                                                          0 = do not include VID in tuple tag generation
2581                                                          1 = include VID (VLAN0) in hash
2582                                                          2 = include VID (VLAN1) in hash
2583                                                          3 = include VID ([VLAN0,VLAN1]) in hash */
2584         uint64_t inc_vlan                     : 1;  /**< when set, the VLAN ID is included in tuple tag
2585                                                          when VLAN stacking is not detected
2586                                                          0 = do not include VID in tuple tag generation
2587                                                          1 = include VID in hash */
2588         uint64_t inc_prt_flag                 : 1;  /**< sets whether the port is included in tuple tag */
2589         uint64_t ip6_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
2590                                                          included in tuple tag for IPv6 packets */
2591         uint64_t ip4_dprt_flag                : 1;  /**< sets whether the TCP/UDP dst port is
2592                                                          included in tuple tag for IPv4 */
2593         uint64_t ip6_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
2594                                                          included in tuple tag for IPv6 packets */
2595         uint64_t ip4_sprt_flag                : 1;  /**< sets whether the TCP/UDP src port is
2596                                                          included in tuple tag for IPv4 */
2597         uint64_t ip6_nxth_flag                : 1;  /**< sets whether ipv6 includes next header in tuple
2598                                                          tag hash */
2599         uint64_t ip4_pctl_flag                : 1;  /**< sets whether ipv4 includes protocol in tuple
2600                                                          tag hash */
2601         uint64_t ip6_dst_flag                 : 1;  /**< sets whether ipv6 includes dst address in tuple
2602                                                          tag hash */
2603         uint64_t ip4_dst_flag                 : 1;  /**< sets whether ipv4 includes dst address in tuple
2604                                                          tag hash */
2605         uint64_t ip6_src_flag                 : 1;  /**< sets whether ipv6 includes src address in tuple
2606                                                          tag hash */
2607         uint64_t ip4_src_flag                 : 1;  /**< sets whether ipv4 includes src address in tuple
2608                                                          tag hash */
2609         cvmx_pow_tag_type_t tcp6_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv6)
2610                                                          0 = ordered tags
2611                                                          1 = atomic tags
2612                                                          2 = Null tags */
2613         cvmx_pow_tag_type_t tcp4_tag_type     : 2;  /**< sets the tag_type of a TCP packet (IPv4)
2614                                                          0 = ordered tags
2615                                                          1 = atomic tags
2616                                                          2 = Null tags */
2617         cvmx_pow_tag_type_t ip6_tag_type      : 2;  /**< sets whether IPv6 packet tag type
2618                                                          0 = ordered tags
2619                                                          1 = atomic tags
2620                                                          2 = Null tags */
2621         cvmx_pow_tag_type_t ip4_tag_type      : 2;  /**< sets whether IPv4 packet tag type
2622                                                          0 = ordered tags
2623                                                          1 = atomic tags
2624                                                          2 = Null tags */
2625         cvmx_pow_tag_type_t non_tag_type      : 2;  /**< sets whether non-IP packet tag type
2626                                                          0 = ordered tags
2627                                                          1 = atomic tags
2628                                                          2 = Null tags */
2629         uint64_t grp                          : 4;  /**< 4-bit value indicating the group to schedule to */
2630 #else
2631         uint64_t grp                          : 4;
2632         cvmx_pow_tag_type_t non_tag_type      : 2;
2633         cvmx_pow_tag_type_t ip4_tag_type      : 2;
2634         cvmx_pow_tag_type_t ip6_tag_type      : 2;
2635         cvmx_pow_tag_type_t tcp4_tag_type     : 2;
2636         cvmx_pow_tag_type_t tcp6_tag_type     : 2;
2637         uint64_t ip4_src_flag                 : 1;
2638         uint64_t ip6_src_flag                 : 1;
2639         uint64_t ip4_dst_flag                 : 1;
2640         uint64_t ip6_dst_flag                 : 1;
2641         uint64_t ip4_pctl_flag                : 1;
2642         uint64_t ip6_nxth_flag                : 1;
2643         uint64_t ip4_sprt_flag                : 1;
2644         uint64_t ip6_sprt_flag                : 1;
2645         uint64_t ip4_dprt_flag                : 1;
2646         uint64_t ip6_dprt_flag                : 1;
2647         uint64_t inc_prt_flag                 : 1;
2648         uint64_t inc_vlan                     : 1;
2649         uint64_t inc_vs                       : 2;
2650         uint64_t tag_mode                     : 2;
2651         uint64_t reserved_30_30               : 1;
2652         uint64_t grptag                       : 1;
2653         uint64_t grptagmask                   : 4;
2654         uint64_t grptagbase                   : 4;
2655         uint64_t reserved_40_63               : 24;
2656 #endif
2657         } cn30xx;
2658         struct cvmx_pip_prt_tagx_cn30xx       cn31xx;
2659         struct cvmx_pip_prt_tagx_cn30xx       cn38xx;
2660         struct cvmx_pip_prt_tagx_cn30xx       cn38xxp2;
2661         struct cvmx_pip_prt_tagx_s            cn50xx;
2662         struct cvmx_pip_prt_tagx_s            cn52xx;
2663         struct cvmx_pip_prt_tagx_s            cn52xxp1;
2664         struct cvmx_pip_prt_tagx_s            cn56xx;
2665         struct cvmx_pip_prt_tagx_s            cn56xxp1;
2666         struct cvmx_pip_prt_tagx_cn30xx       cn58xx;
2667         struct cvmx_pip_prt_tagx_cn30xx       cn58xxp1;
2668         struct cvmx_pip_prt_tagx_s            cn63xx;
2669         struct cvmx_pip_prt_tagx_s            cn63xxp1;
2670 };
2671 typedef union cvmx_pip_prt_tagx cvmx_pip_prt_tagx_t;
2672
2673 /**
2674  * cvmx_pip_qos_diff#
2675  *
2676  * PIP_QOS_DIFFX = QOS Diffserv Tables
2677  *
2678  */
2679 union cvmx_pip_qos_diffx
2680 {
2681         uint64_t u64;
2682         struct cvmx_pip_qos_diffx_s
2683         {
2684 #if __BYTE_ORDER == __BIG_ENDIAN
2685         uint64_t reserved_3_63                : 61;
2686         uint64_t qos                          : 3;  /**< Diffserv QOS level */
2687 #else
2688         uint64_t qos                          : 3;
2689         uint64_t reserved_3_63                : 61;
2690 #endif
2691         } s;
2692         struct cvmx_pip_qos_diffx_s           cn30xx;
2693         struct cvmx_pip_qos_diffx_s           cn31xx;
2694         struct cvmx_pip_qos_diffx_s           cn38xx;
2695         struct cvmx_pip_qos_diffx_s           cn38xxp2;
2696         struct cvmx_pip_qos_diffx_s           cn50xx;
2697         struct cvmx_pip_qos_diffx_s           cn52xx;
2698         struct cvmx_pip_qos_diffx_s           cn52xxp1;
2699         struct cvmx_pip_qos_diffx_s           cn56xx;
2700         struct cvmx_pip_qos_diffx_s           cn56xxp1;
2701         struct cvmx_pip_qos_diffx_s           cn58xx;
2702         struct cvmx_pip_qos_diffx_s           cn58xxp1;
2703         struct cvmx_pip_qos_diffx_s           cn63xx;
2704         struct cvmx_pip_qos_diffx_s           cn63xxp1;
2705 };
2706 typedef union cvmx_pip_qos_diffx cvmx_pip_qos_diffx_t;
2707
2708 /**
2709  * cvmx_pip_qos_vlan#
2710  *
2711  * PIP_QOS_VLANX = QOS VLAN Tables
2712  *
2713  * If the PIP indentifies a packet is DSA/VLAN tagged, then the QOS
2714  * can be set based on the DSA/VLAN user priority.  These eight register
2715  * comprise the QOS values for all DSA/VLAN user priority values.
2716  */
2717 union cvmx_pip_qos_vlanx
2718 {
2719         uint64_t u64;
2720         struct cvmx_pip_qos_vlanx_s
2721         {
2722 #if __BYTE_ORDER == __BIG_ENDIAN
2723         uint64_t reserved_7_63                : 57;
2724         uint64_t qos1                         : 3;  /**< DSA/VLAN QOS level
2725                                                          Selected when PIP_PRT_CFGx[QOS_VSEL] = 1 */
2726         uint64_t reserved_3_3                 : 1;
2727         uint64_t qos                          : 3;  /**< DSA/VLAN QOS level
2728                                                          Selected when PIP_PRT_CFGx[QOS_VSEL] = 0 */
2729 #else
2730         uint64_t qos                          : 3;
2731         uint64_t reserved_3_3                 : 1;
2732         uint64_t qos1                         : 3;
2733         uint64_t reserved_7_63                : 57;
2734 #endif
2735         } s;
2736         struct cvmx_pip_qos_vlanx_cn30xx
2737         {
2738 #if __BYTE_ORDER == __BIG_ENDIAN
2739         uint64_t reserved_3_63                : 61;
2740         uint64_t qos                          : 3;  /**< VLAN QOS level */
2741 #else
2742         uint64_t qos                          : 3;
2743         uint64_t reserved_3_63                : 61;
2744 #endif
2745         } cn30xx;
2746         struct cvmx_pip_qos_vlanx_cn30xx      cn31xx;
2747         struct cvmx_pip_qos_vlanx_cn30xx      cn38xx;
2748         struct cvmx_pip_qos_vlanx_cn30xx      cn38xxp2;
2749         struct cvmx_pip_qos_vlanx_cn30xx      cn50xx;
2750         struct cvmx_pip_qos_vlanx_s           cn52xx;
2751         struct cvmx_pip_qos_vlanx_s           cn52xxp1;
2752         struct cvmx_pip_qos_vlanx_s           cn56xx;
2753         struct cvmx_pip_qos_vlanx_cn30xx      cn56xxp1;
2754         struct cvmx_pip_qos_vlanx_cn30xx      cn58xx;
2755         struct cvmx_pip_qos_vlanx_cn30xx      cn58xxp1;
2756         struct cvmx_pip_qos_vlanx_s           cn63xx;
2757         struct cvmx_pip_qos_vlanx_s           cn63xxp1;
2758 };
2759 typedef union cvmx_pip_qos_vlanx cvmx_pip_qos_vlanx_t;
2760
2761 /**
2762  * cvmx_pip_qos_watch#
2763  *
2764  * PIP_QOS_WATCHX = QOS Watcher Tables
2765  *
2766  * Sets up the Configuration CSRs for the four QOS Watchers.
2767  * Each Watcher can be set to look for a specific protocol,
2768  * TCP/UDP destination port, or Ethertype to override the
2769  * default QOS value.
2770  */
2771 union cvmx_pip_qos_watchx
2772 {
2773         uint64_t u64;
2774         struct cvmx_pip_qos_watchx_s
2775         {
2776 #if __BYTE_ORDER == __BIG_ENDIAN
2777         uint64_t reserved_48_63               : 16;
2778         uint64_t mask                         : 16; /**< Mask off a range of values */
2779         uint64_t reserved_28_31               : 4;
2780         uint64_t grp                          : 4;  /**< The GRP number of the watcher */
2781         uint64_t reserved_23_23               : 1;
2782         uint64_t qos                          : 3;  /**< The QOS level of the watcher */
2783         uint64_t reserved_19_19               : 1;
2784         cvmx_pip_qos_watch_types match_type   : 3;  /**< The field for the watcher match against
2785                                                          0   = disable across all ports
2786                                                          1   = protocol (ipv4)
2787                                                              = next_header (ipv6)
2788                                                          2   = TCP destination port
2789                                                          3   = UDP destination port
2790                                                          4   = Ether type
2791                                                          5-7 = Reserved */
2792         uint64_t match_value                  : 16; /**< The value to watch for */
2793 #else
2794         uint64_t match_value                  : 16;
2795         cvmx_pip_qos_watch_types match_type   : 3;
2796         uint64_t reserved_19_19               : 1;
2797         uint64_t qos                          : 3;
2798         uint64_t reserved_23_23               : 1;
2799         uint64_t grp                          : 4;
2800         uint64_t reserved_28_31               : 4;
2801         uint64_t mask                         : 16;
2802         uint64_t reserved_48_63               : 16;
2803 #endif
2804         } s;
2805         struct cvmx_pip_qos_watchx_cn30xx
2806         {
2807 #if __BYTE_ORDER == __BIG_ENDIAN
2808         uint64_t reserved_48_63               : 16;
2809         uint64_t mask                         : 16; /**< Mask off a range of values */
2810         uint64_t reserved_28_31               : 4;
2811         uint64_t grp                          : 4;  /**< The GRP number of the watcher */
2812         uint64_t reserved_23_23               : 1;
2813         uint64_t qos                          : 3;  /**< The QOS level of the watcher */
2814         uint64_t reserved_18_19               : 2;
2815         cvmx_pip_qos_watch_types match_type   : 2;  /**< The field for the watcher match against
2816                                                          0 = disable across all ports
2817                                                          1 = protocol (ipv4)
2818                                                            = next_header (ipv6)
2819                                                          2 = TCP destination port
2820                                                          3 = UDP destination port */
2821         uint64_t match_value                  : 16; /**< The value to watch for */
2822 #else
2823         uint64_t match_value                  : 16;
2824         cvmx_pip_qos_watch_types match_type   : 2;
2825         uint64_t reserved_18_19               : 2;
2826         uint64_t qos                          : 3;
2827         uint64_t reserved_23_23               : 1;
2828         uint64_t grp                          : 4;
2829         uint64_t reserved_28_31               : 4;
2830         uint64_t mask                         : 16;
2831         uint64_t reserved_48_63               : 16;
2832 #endif
2833         } cn30xx;
2834         struct cvmx_pip_qos_watchx_cn30xx     cn31xx;
2835         struct cvmx_pip_qos_watchx_cn30xx     cn38xx;
2836         struct cvmx_pip_qos_watchx_cn30xx     cn38xxp2;
2837         struct cvmx_pip_qos_watchx_s          cn50xx;
2838         struct cvmx_pip_qos_watchx_s          cn52xx;
2839         struct cvmx_pip_qos_watchx_s          cn52xxp1;
2840         struct cvmx_pip_qos_watchx_s          cn56xx;
2841         struct cvmx_pip_qos_watchx_s          cn56xxp1;
2842         struct cvmx_pip_qos_watchx_cn30xx     cn58xx;
2843         struct cvmx_pip_qos_watchx_cn30xx     cn58xxp1;
2844         struct cvmx_pip_qos_watchx_s          cn63xx;
2845         struct cvmx_pip_qos_watchx_s          cn63xxp1;
2846 };
2847 typedef union cvmx_pip_qos_watchx cvmx_pip_qos_watchx_t;
2848
2849 /**
2850  * cvmx_pip_raw_word
2851  *
2852  * PIP_RAW_WORD = The RAW Word2 of the workQ entry.
2853  *
2854  * The RAW Word2 to be inserted into the workQ entry of RAWFULL packets.
2855  */
2856 union cvmx_pip_raw_word
2857 {
2858         uint64_t u64;
2859         struct cvmx_pip_raw_word_s
2860         {
2861 #if __BYTE_ORDER == __BIG_ENDIAN
2862         uint64_t reserved_56_63               : 8;
2863         uint64_t word                         : 56; /**< Word2 of the workQ entry
2864                                                          The 8-bit bufs field is still set by HW (IPD) */
2865 #else
2866         uint64_t word                         : 56;
2867         uint64_t reserved_56_63               : 8;
2868 #endif
2869         } s;
2870         struct cvmx_pip_raw_word_s            cn30xx;
2871         struct cvmx_pip_raw_word_s            cn31xx;
2872         struct cvmx_pip_raw_word_s            cn38xx;
2873         struct cvmx_pip_raw_word_s            cn38xxp2;
2874         struct cvmx_pip_raw_word_s            cn50xx;
2875         struct cvmx_pip_raw_word_s            cn52xx;
2876         struct cvmx_pip_raw_word_s            cn52xxp1;
2877         struct cvmx_pip_raw_word_s            cn56xx;
2878         struct cvmx_pip_raw_word_s            cn56xxp1;
2879         struct cvmx_pip_raw_word_s            cn58xx;
2880         struct cvmx_pip_raw_word_s            cn58xxp1;
2881         struct cvmx_pip_raw_word_s            cn63xx;
2882         struct cvmx_pip_raw_word_s            cn63xxp1;
2883 };
2884 typedef union cvmx_pip_raw_word cvmx_pip_raw_word_t;
2885
2886 /**
2887  * cvmx_pip_sft_rst
2888  *
2889  * PIP_SFT_RST = PIP Soft Reset
2890  *
2891  * When written to a '1', resets the pip block
2892  *
2893  * Notes:
2894  * When RST is set to a '1' by SW, PIP will get a short reset pulse (3 cycles
2895  * in duration).  Although this will reset much of PIP's internal state, some
2896  * CSRs will not reset.
2897  *
2898  * . PIP_BIST_STATUS
2899  * . PIP_STAT0_PRT*
2900  * . PIP_STAT1_PRT*
2901  * . PIP_STAT2_PRT*
2902  * . PIP_STAT3_PRT*
2903  * . PIP_STAT4_PRT*
2904  * . PIP_STAT5_PRT*
2905  * . PIP_STAT6_PRT*
2906  * . PIP_STAT7_PRT*
2907  * . PIP_STAT8_PRT*
2908  * . PIP_STAT9_PRT*
2909  * . PIP_XSTAT0_PRT*
2910  * . PIP_XSTAT1_PRT*
2911  * . PIP_XSTAT2_PRT*
2912  * . PIP_XSTAT3_PRT*
2913  * . PIP_XSTAT4_PRT*
2914  * . PIP_XSTAT5_PRT*
2915  * . PIP_XSTAT6_PRT*
2916  * . PIP_XSTAT7_PRT*
2917  * . PIP_XSTAT8_PRT*
2918  * . PIP_XSTAT9_PRT*
2919  * . PIP_STAT_INB_PKTS*
2920  * . PIP_STAT_INB_OCTS*
2921  * . PIP_STAT_INB_ERRS*
2922  * . PIP_TAG_INC*
2923  */
2924 union cvmx_pip_sft_rst
2925 {
2926         uint64_t u64;
2927         struct cvmx_pip_sft_rst_s
2928         {
2929 #if __BYTE_ORDER == __BIG_ENDIAN
2930         uint64_t reserved_1_63                : 63;
2931         uint64_t rst                          : 1;  /**< Soft Reset */
2932 #else
2933         uint64_t rst                          : 1;
2934         uint64_t reserved_1_63                : 63;
2935 #endif
2936         } s;
2937         struct cvmx_pip_sft_rst_s             cn30xx;
2938         struct cvmx_pip_sft_rst_s             cn31xx;
2939         struct cvmx_pip_sft_rst_s             cn38xx;
2940         struct cvmx_pip_sft_rst_s             cn50xx;
2941         struct cvmx_pip_sft_rst_s             cn52xx;
2942         struct cvmx_pip_sft_rst_s             cn52xxp1;
2943         struct cvmx_pip_sft_rst_s             cn56xx;
2944         struct cvmx_pip_sft_rst_s             cn56xxp1;
2945         struct cvmx_pip_sft_rst_s             cn58xx;
2946         struct cvmx_pip_sft_rst_s             cn58xxp1;
2947         struct cvmx_pip_sft_rst_s             cn63xx;
2948         struct cvmx_pip_sft_rst_s             cn63xxp1;
2949 };
2950 typedef union cvmx_pip_sft_rst cvmx_pip_sft_rst_t;
2951
2952 /**
2953  * cvmx_pip_stat0_prt#
2954  *
2955  * PIP Statistics Counters
2956  *
2957  * Note: special stat counter behavior
2958  *
2959  * 1) Read and write operations must arbitrate for the statistics resources
2960  *     along with the packet engines which are incrementing the counters.
2961  *     In order to not drop packet information, the packet HW is always a
2962  *     higher priority and the CSR requests will only be satisified when
2963  *     there are idle cycles.  This can potentially cause long delays if the
2964  *     system becomes full.
2965  *
2966  * 2) stat counters can be cleared in two ways.  If PIP_STAT_CTL[RDCLR] is
2967  *     set, then all read accesses will clear the register.  In addition,
2968  *     any write to a stats register will also reset the register to zero.
2969  *     Please note that the clearing operations must obey rule \#1 above.
2970  *
2971  * 3) all counters are wrapping - software must ensure they are read periodically
2972  *
2973  * 4) The counters accumulate statistics for packets that are sent to PKI.  If
2974  *    PTP_MODE is enabled, the 8B timestamp is prepended to the packet.  This
2975  *    additional 8B of data is captured in the octet counts.
2976  * PIP_STAT0_PRT = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
2977  */
2978 union cvmx_pip_stat0_prtx
2979 {
2980         uint64_t u64;
2981         struct cvmx_pip_stat0_prtx_s
2982         {
2983 #if __BYTE_ORDER == __BIG_ENDIAN
2984         uint64_t drp_pkts                     : 32; /**< Inbound packets marked to be dropped by the IPD
2985                                                          QOS widget per port */
2986         uint64_t drp_octs                     : 32; /**< Inbound octets marked to be dropped by the IPD
2987                                                          QOS widget per port */
2988 #else
2989         uint64_t drp_octs                     : 32;
2990         uint64_t drp_pkts                     : 32;
2991 #endif
2992         } s;
2993         struct cvmx_pip_stat0_prtx_s          cn30xx;
2994         struct cvmx_pip_stat0_prtx_s          cn31xx;
2995         struct cvmx_pip_stat0_prtx_s          cn38xx;
2996         struct cvmx_pip_stat0_prtx_s          cn38xxp2;
2997         struct cvmx_pip_stat0_prtx_s          cn50xx;
2998         struct cvmx_pip_stat0_prtx_s          cn52xx;
2999         struct cvmx_pip_stat0_prtx_s          cn52xxp1;
3000         struct cvmx_pip_stat0_prtx_s          cn56xx;
3001         struct cvmx_pip_stat0_prtx_s          cn56xxp1;
3002         struct cvmx_pip_stat0_prtx_s          cn58xx;
3003         struct cvmx_pip_stat0_prtx_s          cn58xxp1;
3004         struct cvmx_pip_stat0_prtx_s          cn63xx;
3005         struct cvmx_pip_stat0_prtx_s          cn63xxp1;
3006 };
3007 typedef union cvmx_pip_stat0_prtx cvmx_pip_stat0_prtx_t;
3008
3009 /**
3010  * cvmx_pip_stat1_prt#
3011  *
3012  * PIP_STAT1_PRTX = PIP_STAT_OCTS
3013  *
3014  */
3015 union cvmx_pip_stat1_prtx
3016 {
3017         uint64_t u64;
3018         struct cvmx_pip_stat1_prtx_s
3019         {
3020 #if __BYTE_ORDER == __BIG_ENDIAN
3021         uint64_t reserved_48_63               : 16;
3022         uint64_t octs                         : 48; /**< Number of octets received by PIP (good and bad) */
3023 #else
3024         uint64_t octs                         : 48;
3025         uint64_t reserved_48_63               : 16;
3026 #endif
3027         } s;
3028         struct cvmx_pip_stat1_prtx_s          cn30xx;
3029         struct cvmx_pip_stat1_prtx_s          cn31xx;
3030         struct cvmx_pip_stat1_prtx_s          cn38xx;
3031         struct cvmx_pip_stat1_prtx_s          cn38xxp2;
3032         struct cvmx_pip_stat1_prtx_s          cn50xx;
3033         struct cvmx_pip_stat1_prtx_s          cn52xx;
3034         struct cvmx_pip_stat1_prtx_s          cn52xxp1;
3035         struct cvmx_pip_stat1_prtx_s          cn56xx;
3036         struct cvmx_pip_stat1_prtx_s          cn56xxp1;
3037         struct cvmx_pip_stat1_prtx_s          cn58xx;
3038         struct cvmx_pip_stat1_prtx_s          cn58xxp1;
3039         struct cvmx_pip_stat1_prtx_s          cn63xx;
3040         struct cvmx_pip_stat1_prtx_s          cn63xxp1;
3041 };
3042 typedef union cvmx_pip_stat1_prtx cvmx_pip_stat1_prtx_t;
3043
3044 /**
3045  * cvmx_pip_stat2_prt#
3046  *
3047  * PIP_STAT2_PRTX = PIP_STAT_PKTS     / PIP_STAT_RAW
3048  *
3049  */
3050 union cvmx_pip_stat2_prtx
3051 {
3052         uint64_t u64;
3053         struct cvmx_pip_stat2_prtx_s
3054         {
3055 #if __BYTE_ORDER == __BIG_ENDIAN
3056         uint64_t pkts                         : 32; /**< Number of packets processed by PIP */
3057         uint64_t raw                          : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
3058                                                          received by PIP per port */
3059 #else
3060         uint64_t raw                          : 32;
3061         uint64_t pkts                         : 32;
3062 #endif
3063         } s;
3064         struct cvmx_pip_stat2_prtx_s          cn30xx;
3065         struct cvmx_pip_stat2_prtx_s          cn31xx;
3066         struct cvmx_pip_stat2_prtx_s          cn38xx;
3067         struct cvmx_pip_stat2_prtx_s          cn38xxp2;
3068         struct cvmx_pip_stat2_prtx_s          cn50xx;
3069         struct cvmx_pip_stat2_prtx_s          cn52xx;
3070         struct cvmx_pip_stat2_prtx_s          cn52xxp1;
3071         struct cvmx_pip_stat2_prtx_s          cn56xx;
3072         struct cvmx_pip_stat2_prtx_s          cn56xxp1;
3073         struct cvmx_pip_stat2_prtx_s          cn58xx;
3074         struct cvmx_pip_stat2_prtx_s          cn58xxp1;
3075         struct cvmx_pip_stat2_prtx_s          cn63xx;
3076         struct cvmx_pip_stat2_prtx_s          cn63xxp1;
3077 };
3078 typedef union cvmx_pip_stat2_prtx cvmx_pip_stat2_prtx_t;
3079
3080 /**
3081  * cvmx_pip_stat3_prt#
3082  *
3083  * PIP_STAT3_PRTX = PIP_STAT_BCST     / PIP_STAT_MCST
3084  *
3085  */
3086 union cvmx_pip_stat3_prtx
3087 {
3088         uint64_t u64;
3089         struct cvmx_pip_stat3_prtx_s
3090         {
3091 #if __BYTE_ORDER == __BIG_ENDIAN
3092         uint64_t bcst                         : 32; /**< Number of indentified L2 broadcast packets
3093                                                          Does not include multicast packets
3094                                                          Only includes packets whose parse mode is
3095                                                          SKIP_TO_L2. */
3096         uint64_t mcst                         : 32; /**< Number of indentified L2 multicast packets
3097                                                          Does not include broadcast packets
3098                                                          Only includes packets whose parse mode is
3099                                                          SKIP_TO_L2. */
3100 #else
3101         uint64_t mcst                         : 32;
3102         uint64_t bcst                         : 32;
3103 #endif
3104         } s;
3105         struct cvmx_pip_stat3_prtx_s          cn30xx;
3106         struct cvmx_pip_stat3_prtx_s          cn31xx;
3107         struct cvmx_pip_stat3_prtx_s          cn38xx;
3108         struct cvmx_pip_stat3_prtx_s          cn38xxp2;
3109         struct cvmx_pip_stat3_prtx_s          cn50xx;
3110         struct cvmx_pip_stat3_prtx_s          cn52xx;
3111         struct cvmx_pip_stat3_prtx_s          cn52xxp1;
3112         struct cvmx_pip_stat3_prtx_s          cn56xx;
3113         struct cvmx_pip_stat3_prtx_s          cn56xxp1;
3114         struct cvmx_pip_stat3_prtx_s          cn58xx;
3115         struct cvmx_pip_stat3_prtx_s          cn58xxp1;
3116         struct cvmx_pip_stat3_prtx_s          cn63xx;
3117         struct cvmx_pip_stat3_prtx_s          cn63xxp1;
3118 };
3119 typedef union cvmx_pip_stat3_prtx cvmx_pip_stat3_prtx_t;
3120
3121 /**
3122  * cvmx_pip_stat4_prt#
3123  *
3124  * PIP_STAT4_PRTX = PIP_STAT_HIST1    / PIP_STAT_HIST0
3125  *
3126  */
3127 union cvmx_pip_stat4_prtx
3128 {
3129         uint64_t u64;
3130         struct cvmx_pip_stat4_prtx_s
3131         {
3132 #if __BYTE_ORDER == __BIG_ENDIAN
3133         uint64_t h65to127                     : 32; /**< Number of 65-127B packets */
3134         uint64_t h64                          : 32; /**< Number of 1-64B packets */
3135 #else
3136         uint64_t h64                          : 32;
3137         uint64_t h65to127                     : 32;
3138 #endif
3139         } s;
3140         struct cvmx_pip_stat4_prtx_s          cn30xx;
3141         struct cvmx_pip_stat4_prtx_s          cn31xx;
3142         struct cvmx_pip_stat4_prtx_s          cn38xx;
3143         struct cvmx_pip_stat4_prtx_s          cn38xxp2;
3144         struct cvmx_pip_stat4_prtx_s          cn50xx;
3145         struct cvmx_pip_stat4_prtx_s          cn52xx;
3146         struct cvmx_pip_stat4_prtx_s          cn52xxp1;
3147         struct cvmx_pip_stat4_prtx_s          cn56xx;
3148         struct cvmx_pip_stat4_prtx_s          cn56xxp1;
3149         struct cvmx_pip_stat4_prtx_s          cn58xx;
3150         struct cvmx_pip_stat4_prtx_s          cn58xxp1;
3151         struct cvmx_pip_stat4_prtx_s          cn63xx;
3152         struct cvmx_pip_stat4_prtx_s          cn63xxp1;
3153 };
3154 typedef union cvmx_pip_stat4_prtx cvmx_pip_stat4_prtx_t;
3155
3156 /**
3157  * cvmx_pip_stat5_prt#
3158  *
3159  * PIP_STAT5_PRTX = PIP_STAT_HIST3    / PIP_STAT_HIST2
3160  *
3161  */
3162 union cvmx_pip_stat5_prtx
3163 {
3164         uint64_t u64;
3165         struct cvmx_pip_stat5_prtx_s
3166         {
3167 #if __BYTE_ORDER == __BIG_ENDIAN
3168         uint64_t h256to511                    : 32; /**< Number of 256-511B packets */
3169         uint64_t h128to255                    : 32; /**< Number of 128-255B packets */
3170 #else
3171         uint64_t h128to255                    : 32;
3172         uint64_t h256to511                    : 32;
3173 #endif
3174         } s;
3175         struct cvmx_pip_stat5_prtx_s          cn30xx;
3176         struct cvmx_pip_stat5_prtx_s          cn31xx;
3177         struct cvmx_pip_stat5_prtx_s          cn38xx;
3178         struct cvmx_pip_stat5_prtx_s          cn38xxp2;
3179         struct cvmx_pip_stat5_prtx_s          cn50xx;
3180         struct cvmx_pip_stat5_prtx_s          cn52xx;
3181         struct cvmx_pip_stat5_prtx_s          cn52xxp1;
3182         struct cvmx_pip_stat5_prtx_s          cn56xx;
3183         struct cvmx_pip_stat5_prtx_s          cn56xxp1;
3184         struct cvmx_pip_stat5_prtx_s          cn58xx;
3185         struct cvmx_pip_stat5_prtx_s          cn58xxp1;
3186         struct cvmx_pip_stat5_prtx_s          cn63xx;
3187         struct cvmx_pip_stat5_prtx_s          cn63xxp1;
3188 };
3189 typedef union cvmx_pip_stat5_prtx cvmx_pip_stat5_prtx_t;
3190
3191 /**
3192  * cvmx_pip_stat6_prt#
3193  *
3194  * PIP_STAT6_PRTX = PIP_STAT_HIST5    / PIP_STAT_HIST4
3195  *
3196  */
3197 union cvmx_pip_stat6_prtx
3198 {
3199         uint64_t u64;
3200         struct cvmx_pip_stat6_prtx_s
3201         {
3202 #if __BYTE_ORDER == __BIG_ENDIAN
3203         uint64_t h1024to1518                  : 32; /**< Number of 1024-1518B packets */
3204         uint64_t h512to1023                   : 32; /**< Number of 512-1023B packets */
3205 #else
3206         uint64_t h512to1023                   : 32;
3207         uint64_t h1024to1518                  : 32;
3208 #endif
3209         } s;
3210         struct cvmx_pip_stat6_prtx_s          cn30xx;
3211         struct cvmx_pip_stat6_prtx_s          cn31xx;
3212         struct cvmx_pip_stat6_prtx_s          cn38xx;
3213         struct cvmx_pip_stat6_prtx_s          cn38xxp2;
3214         struct cvmx_pip_stat6_prtx_s          cn50xx;
3215         struct cvmx_pip_stat6_prtx_s          cn52xx;
3216         struct cvmx_pip_stat6_prtx_s          cn52xxp1;
3217         struct cvmx_pip_stat6_prtx_s          cn56xx;
3218         struct cvmx_pip_stat6_prtx_s          cn56xxp1;
3219         struct cvmx_pip_stat6_prtx_s          cn58xx;
3220         struct cvmx_pip_stat6_prtx_s          cn58xxp1;
3221         struct cvmx_pip_stat6_prtx_s          cn63xx;
3222         struct cvmx_pip_stat6_prtx_s          cn63xxp1;
3223 };
3224 typedef union cvmx_pip_stat6_prtx cvmx_pip_stat6_prtx_t;
3225
3226 /**
3227  * cvmx_pip_stat7_prt#
3228  *
3229  * PIP_STAT7_PRTX = PIP_STAT_FCS      / PIP_STAT_HIST6
3230  *
3231  *
3232  * Notes:
3233  * Note: FCS is not checked on the PCI ports 32..35.
3234  *
3235  */
3236 union cvmx_pip_stat7_prtx
3237 {
3238         uint64_t u64;
3239         struct cvmx_pip_stat7_prtx_s
3240         {
3241 #if __BYTE_ORDER == __BIG_ENDIAN
3242         uint64_t fcs                          : 32; /**< Number of packets with FCS or Align opcode errors */
3243         uint64_t h1519                        : 32; /**< Number of 1519-max packets */
3244 #else
3245         uint64_t h1519                        : 32;
3246         uint64_t fcs                          : 32;
3247 #endif
3248         } s;
3249         struct cvmx_pip_stat7_prtx_s          cn30xx;
3250         struct cvmx_pip_stat7_prtx_s          cn31xx;
3251         struct cvmx_pip_stat7_prtx_s          cn38xx;
3252         struct cvmx_pip_stat7_prtx_s          cn38xxp2;
3253         struct cvmx_pip_stat7_prtx_s          cn50xx;
3254         struct cvmx_pip_stat7_prtx_s          cn52xx;
3255         struct cvmx_pip_stat7_prtx_s          cn52xxp1;
3256         struct cvmx_pip_stat7_prtx_s          cn56xx;
3257         struct cvmx_pip_stat7_prtx_s          cn56xxp1;
3258         struct cvmx_pip_stat7_prtx_s          cn58xx;
3259         struct cvmx_pip_stat7_prtx_s          cn58xxp1;
3260         struct cvmx_pip_stat7_prtx_s          cn63xx;
3261         struct cvmx_pip_stat7_prtx_s          cn63xxp1;
3262 };
3263 typedef union cvmx_pip_stat7_prtx cvmx_pip_stat7_prtx_t;
3264
3265 /**
3266  * cvmx_pip_stat8_prt#
3267  *
3268  * PIP_STAT8_PRTX = PIP_STAT_FRAG     / PIP_STAT_UNDER
3269  *
3270  *
3271  * Notes:
3272  * Note: FCS is not checked on the PCI ports 32..35.
3273  *
3274  */
3275 union cvmx_pip_stat8_prtx
3276 {
3277         uint64_t u64;
3278         struct cvmx_pip_stat8_prtx_s
3279         {
3280 #if __BYTE_ORDER == __BIG_ENDIAN
3281         uint64_t frag                         : 32; /**< Number of packets with length < min and FCS error */
3282         uint64_t undersz                      : 32; /**< Number of packets with length < min */
3283 #else
3284         uint64_t undersz                      : 32;
3285         uint64_t frag                         : 32;
3286 #endif
3287         } s;
3288         struct cvmx_pip_stat8_prtx_s          cn30xx;
3289         struct cvmx_pip_stat8_prtx_s          cn31xx;
3290         struct cvmx_pip_stat8_prtx_s          cn38xx;
3291         struct cvmx_pip_stat8_prtx_s          cn38xxp2;
3292         struct cvmx_pip_stat8_prtx_s          cn50xx;
3293         struct cvmx_pip_stat8_prtx_s          cn52xx;
3294         struct cvmx_pip_stat8_prtx_s          cn52xxp1;
3295         struct cvmx_pip_stat8_prtx_s          cn56xx;
3296         struct cvmx_pip_stat8_prtx_s          cn56xxp1;
3297         struct cvmx_pip_stat8_prtx_s          cn58xx;
3298         struct cvmx_pip_stat8_prtx_s          cn58xxp1;
3299         struct cvmx_pip_stat8_prtx_s          cn63xx;
3300         struct cvmx_pip_stat8_prtx_s          cn63xxp1;
3301 };
3302 typedef union cvmx_pip_stat8_prtx cvmx_pip_stat8_prtx_t;
3303
3304 /**
3305  * cvmx_pip_stat9_prt#
3306  *
3307  * PIP_STAT9_PRTX = PIP_STAT_JABBER   / PIP_STAT_OVER
3308  *
3309  *
3310  * Notes:
3311  * Note: FCS is not checked on the PCI ports 32..35.
3312  *
3313  */
3314 union cvmx_pip_stat9_prtx
3315 {
3316         uint64_t u64;
3317         struct cvmx_pip_stat9_prtx_s
3318         {
3319 #if __BYTE_ORDER == __BIG_ENDIAN
3320         uint64_t jabber                       : 32; /**< Number of packets with length > max and FCS error */
3321         uint64_t oversz                       : 32; /**< Number of packets with length > max */
3322 #else
3323         uint64_t oversz                       : 32;
3324         uint64_t jabber                       : 32;
3325 #endif
3326         } s;
3327         struct cvmx_pip_stat9_prtx_s          cn30xx;
3328         struct cvmx_pip_stat9_prtx_s          cn31xx;
3329         struct cvmx_pip_stat9_prtx_s          cn38xx;
3330         struct cvmx_pip_stat9_prtx_s          cn38xxp2;
3331         struct cvmx_pip_stat9_prtx_s          cn50xx;
3332         struct cvmx_pip_stat9_prtx_s          cn52xx;
3333         struct cvmx_pip_stat9_prtx_s          cn52xxp1;
3334         struct cvmx_pip_stat9_prtx_s          cn56xx;
3335         struct cvmx_pip_stat9_prtx_s          cn56xxp1;
3336         struct cvmx_pip_stat9_prtx_s          cn58xx;
3337         struct cvmx_pip_stat9_prtx_s          cn58xxp1;
3338         struct cvmx_pip_stat9_prtx_s          cn63xx;
3339         struct cvmx_pip_stat9_prtx_s          cn63xxp1;
3340 };
3341 typedef union cvmx_pip_stat9_prtx cvmx_pip_stat9_prtx_t;
3342
3343 /**
3344  * cvmx_pip_stat_ctl
3345  *
3346  * PIP_STAT_CTL = PIP's Stat Control Register
3347  *
3348  * Controls how the PIP statistics counters are handled.
3349  */
3350 union cvmx_pip_stat_ctl
3351 {
3352         uint64_t u64;
3353         struct cvmx_pip_stat_ctl_s
3354         {
3355 #if __BYTE_ORDER == __BIG_ENDIAN
3356         uint64_t reserved_1_63                : 63;
3357         uint64_t rdclr                        : 1;  /**< Stat registers are read and clear
3358                                                          0 = stat registers hold value when read
3359                                                          1 = stat registers are cleared when read */
3360 #else
3361         uint64_t rdclr                        : 1;
3362         uint64_t reserved_1_63                : 63;
3363 #endif
3364         } s;
3365         struct cvmx_pip_stat_ctl_s            cn30xx;
3366         struct cvmx_pip_stat_ctl_s            cn31xx;
3367         struct cvmx_pip_stat_ctl_s            cn38xx;
3368         struct cvmx_pip_stat_ctl_s            cn38xxp2;
3369         struct cvmx_pip_stat_ctl_s            cn50xx;
3370         struct cvmx_pip_stat_ctl_s            cn52xx;
3371         struct cvmx_pip_stat_ctl_s            cn52xxp1;
3372         struct cvmx_pip_stat_ctl_s            cn56xx;
3373         struct cvmx_pip_stat_ctl_s            cn56xxp1;
3374         struct cvmx_pip_stat_ctl_s            cn58xx;
3375         struct cvmx_pip_stat_ctl_s            cn58xxp1;
3376         struct cvmx_pip_stat_ctl_s            cn63xx;
3377         struct cvmx_pip_stat_ctl_s            cn63xxp1;
3378 };
3379 typedef union cvmx_pip_stat_ctl cvmx_pip_stat_ctl_t;
3380
3381 /**
3382  * cvmx_pip_stat_inb_errs#
3383  *
3384  * PIP_STAT_INB_ERRSX = Inbound error packets received by PIP per port
3385  *
3386  * Inbound stats collect all data sent to PIP from all packet interfaces.
3387  * Its the raw counts of everything that comes into the block.  The counts
3388  * will reflect all error packets and packets dropped by the PKI RED engine.
3389  * These counts are intended for system debug, but could convey useful
3390  * information in production systems.
3391  */
3392 union cvmx_pip_stat_inb_errsx
3393 {
3394         uint64_t u64;
3395         struct cvmx_pip_stat_inb_errsx_s
3396         {
3397 #if __BYTE_ORDER == __BIG_ENDIAN
3398         uint64_t reserved_16_63               : 48;
3399         uint64_t errs                         : 16; /**< Number of packets with errors
3400                                                          received by PIP */
3401 #else
3402         uint64_t errs                         : 16;
3403         uint64_t reserved_16_63               : 48;
3404 #endif
3405         } s;
3406         struct cvmx_pip_stat_inb_errsx_s      cn30xx;
3407         struct cvmx_pip_stat_inb_errsx_s      cn31xx;
3408         struct cvmx_pip_stat_inb_errsx_s      cn38xx;
3409         struct cvmx_pip_stat_inb_errsx_s      cn38xxp2;
3410         struct cvmx_pip_stat_inb_errsx_s      cn50xx;
3411         struct cvmx_pip_stat_inb_errsx_s      cn52xx;
3412         struct cvmx_pip_stat_inb_errsx_s      cn52xxp1;
3413         struct cvmx_pip_stat_inb_errsx_s      cn56xx;
3414         struct cvmx_pip_stat_inb_errsx_s      cn56xxp1;
3415         struct cvmx_pip_stat_inb_errsx_s      cn58xx;
3416         struct cvmx_pip_stat_inb_errsx_s      cn58xxp1;
3417         struct cvmx_pip_stat_inb_errsx_s      cn63xx;
3418         struct cvmx_pip_stat_inb_errsx_s      cn63xxp1;
3419 };
3420 typedef union cvmx_pip_stat_inb_errsx cvmx_pip_stat_inb_errsx_t;
3421
3422 /**
3423  * cvmx_pip_stat_inb_octs#
3424  *
3425  * PIP_STAT_INB_OCTSX = Inbound octets received by PIP per port
3426  *
3427  * Inbound stats collect all data sent to PIP from all packet interfaces.
3428  * Its the raw counts of everything that comes into the block.  The counts
3429  * will reflect all error packets and packets dropped by the PKI RED engine.
3430  * These counts are intended for system debug, but could convey useful
3431  * information in production systems. The OCTS will include the bytes from
3432  * timestamp fields in PTP_MODE.
3433  */
3434 union cvmx_pip_stat_inb_octsx
3435 {
3436         uint64_t u64;
3437         struct cvmx_pip_stat_inb_octsx_s
3438         {
3439 #if __BYTE_ORDER == __BIG_ENDIAN
3440         uint64_t reserved_48_63               : 16;
3441         uint64_t octs                         : 48; /**< Total number of octets from all packets received
3442                                                          by PIP */
3443 #else
3444         uint64_t octs                         : 48;
3445         uint64_t reserved_48_63               : 16;
3446 #endif
3447         } s;
3448         struct cvmx_pip_stat_inb_octsx_s      cn30xx;
3449         struct cvmx_pip_stat_inb_octsx_s      cn31xx;
3450         struct cvmx_pip_stat_inb_octsx_s      cn38xx;
3451         struct cvmx_pip_stat_inb_octsx_s      cn38xxp2;
3452         struct cvmx_pip_stat_inb_octsx_s      cn50xx;
3453         struct cvmx_pip_stat_inb_octsx_s      cn52xx;
3454         struct cvmx_pip_stat_inb_octsx_s      cn52xxp1;
3455         struct cvmx_pip_stat_inb_octsx_s      cn56xx;
3456         struct cvmx_pip_stat_inb_octsx_s      cn56xxp1;
3457         struct cvmx_pip_stat_inb_octsx_s      cn58xx;
3458         struct cvmx_pip_stat_inb_octsx_s      cn58xxp1;
3459         struct cvmx_pip_stat_inb_octsx_s      cn63xx;
3460         struct cvmx_pip_stat_inb_octsx_s      cn63xxp1;
3461 };
3462 typedef union cvmx_pip_stat_inb_octsx cvmx_pip_stat_inb_octsx_t;
3463
3464 /**
3465  * cvmx_pip_stat_inb_pkts#
3466  *
3467  * PIP_STAT_INB_PKTSX = Inbound packets received by PIP per port
3468  *
3469  * Inbound stats collect all data sent to PIP from all packet interfaces.
3470  * Its the raw counts of everything that comes into the block.  The counts
3471  * will reflect all error packets and packets dropped by the PKI RED engine.
3472  * These counts are intended for system debug, but could convey useful
3473  * information in production systems.
3474  */
3475 union cvmx_pip_stat_inb_pktsx
3476 {
3477         uint64_t u64;
3478         struct cvmx_pip_stat_inb_pktsx_s
3479         {
3480 #if __BYTE_ORDER == __BIG_ENDIAN
3481         uint64_t reserved_32_63               : 32;
3482         uint64_t pkts                         : 32; /**< Number of packets without errors
3483                                                          received by PIP */
3484 #else
3485         uint64_t pkts                         : 32;
3486         uint64_t reserved_32_63               : 32;
3487 #endif
3488         } s;
3489         struct cvmx_pip_stat_inb_pktsx_s      cn30xx;
3490         struct cvmx_pip_stat_inb_pktsx_s      cn31xx;
3491         struct cvmx_pip_stat_inb_pktsx_s      cn38xx;
3492         struct cvmx_pip_stat_inb_pktsx_s      cn38xxp2;
3493         struct cvmx_pip_stat_inb_pktsx_s      cn50xx;
3494         struct cvmx_pip_stat_inb_pktsx_s      cn52xx;
3495         struct cvmx_pip_stat_inb_pktsx_s      cn52xxp1;
3496         struct cvmx_pip_stat_inb_pktsx_s      cn56xx;
3497         struct cvmx_pip_stat_inb_pktsx_s      cn56xxp1;
3498         struct cvmx_pip_stat_inb_pktsx_s      cn58xx;
3499         struct cvmx_pip_stat_inb_pktsx_s      cn58xxp1;
3500         struct cvmx_pip_stat_inb_pktsx_s      cn63xx;
3501         struct cvmx_pip_stat_inb_pktsx_s      cn63xxp1;
3502 };
3503 typedef union cvmx_pip_stat_inb_pktsx cvmx_pip_stat_inb_pktsx_t;
3504
3505 /**
3506  * cvmx_pip_tag_inc#
3507  *
3508  * PIP_TAG_INC = Which bytes to include in the new tag hash algorithm
3509  *
3510  * # $PIP_TAG_INCX = 0x300+X X=(0..63) RegType=(RSL) RtlReg=(pip_tag_inc_csr_direct_TestbuilderTask)
3511  */
3512 union cvmx_pip_tag_incx
3513 {
3514         uint64_t u64;
3515         struct cvmx_pip_tag_incx_s
3516         {
3517 #if __BYTE_ORDER == __BIG_ENDIAN
3518         uint64_t reserved_8_63                : 56;
3519         uint64_t en                           : 8;  /**< Which bytes to include in mask tag algorithm
3520                                                          Broken into 4, 16-entry masks to cover 128B
3521                                                          PIP_PRT_CFG[TAG_INC] selects 1 of 4 to use
3522                                                          registers  0-15 map to PIP_PRT_CFG[TAG_INC] == 0
3523                                                          registers 16-31 map to PIP_PRT_CFG[TAG_INC] == 1
3524                                                          registers 32-47 map to PIP_PRT_CFG[TAG_INC] == 2
3525                                                          registers 48-63 map to PIP_PRT_CFG[TAG_INC] == 3
3526                                                          [7] coresponds to the MSB of the 8B word
3527                                                          [0] coresponds to the LSB of the 8B word
3528                                                          If PTP_MODE, the 8B timestamp is prepended to the
3529                                                           packet.  The EN byte masks should be adjusted to
3530                                                           compensate for the additional timestamp field. */
3531 #else
3532         uint64_t en                           : 8;
3533         uint64_t reserved_8_63                : 56;
3534 #endif
3535         } s;
3536         struct cvmx_pip_tag_incx_s            cn30xx;
3537         struct cvmx_pip_tag_incx_s            cn31xx;
3538         struct cvmx_pip_tag_incx_s            cn38xx;
3539         struct cvmx_pip_tag_incx_s            cn38xxp2;
3540         struct cvmx_pip_tag_incx_s            cn50xx;
3541         struct cvmx_pip_tag_incx_s            cn52xx;
3542         struct cvmx_pip_tag_incx_s            cn52xxp1;
3543         struct cvmx_pip_tag_incx_s            cn56xx;
3544         struct cvmx_pip_tag_incx_s            cn56xxp1;
3545         struct cvmx_pip_tag_incx_s            cn58xx;
3546         struct cvmx_pip_tag_incx_s            cn58xxp1;
3547         struct cvmx_pip_tag_incx_s            cn63xx;
3548         struct cvmx_pip_tag_incx_s            cn63xxp1;
3549 };
3550 typedef union cvmx_pip_tag_incx cvmx_pip_tag_incx_t;
3551
3552 /**
3553  * cvmx_pip_tag_mask
3554  *
3555  * PIP_TAG_MASK = Mask bit in the tag generation
3556  *
3557  */
3558 union cvmx_pip_tag_mask
3559 {
3560         uint64_t u64;
3561         struct cvmx_pip_tag_mask_s
3562         {
3563 #if __BYTE_ORDER == __BIG_ENDIAN
3564         uint64_t reserved_16_63               : 48;
3565         uint64_t mask                         : 16; /**< When set, MASK clears individual bits of lower 16
3566                                                          bits of the computed tag.  Does not effect RAW
3567                                                          or INSTR HDR packets. */
3568 #else
3569         uint64_t mask                         : 16;
3570         uint64_t reserved_16_63               : 48;
3571 #endif
3572         } s;
3573         struct cvmx_pip_tag_mask_s            cn30xx;
3574         struct cvmx_pip_tag_mask_s            cn31xx;
3575         struct cvmx_pip_tag_mask_s            cn38xx;
3576         struct cvmx_pip_tag_mask_s            cn38xxp2;
3577         struct cvmx_pip_tag_mask_s            cn50xx;
3578         struct cvmx_pip_tag_mask_s            cn52xx;
3579         struct cvmx_pip_tag_mask_s            cn52xxp1;
3580         struct cvmx_pip_tag_mask_s            cn56xx;
3581         struct cvmx_pip_tag_mask_s            cn56xxp1;
3582         struct cvmx_pip_tag_mask_s            cn58xx;
3583         struct cvmx_pip_tag_mask_s            cn58xxp1;
3584         struct cvmx_pip_tag_mask_s            cn63xx;
3585         struct cvmx_pip_tag_mask_s            cn63xxp1;
3586 };
3587 typedef union cvmx_pip_tag_mask cvmx_pip_tag_mask_t;
3588
3589 /**
3590  * cvmx_pip_tag_secret
3591  *
3592  * PIP_TAG_SECRET = Initial value in tag generation
3593  *
3594  * The source and destination IV's provide a mechanism for each Octeon to be unique.
3595  */
3596 union cvmx_pip_tag_secret
3597 {
3598         uint64_t u64;
3599         struct cvmx_pip_tag_secret_s
3600         {
3601 #if __BYTE_ORDER == __BIG_ENDIAN
3602         uint64_t reserved_32_63               : 32;
3603         uint64_t dst                          : 16; /**< Secret for the destination tuple tag CRC calc */
3604         uint64_t src                          : 16; /**< Secret for the source tuple tag CRC calc */
3605 #else
3606         uint64_t src                          : 16;
3607         uint64_t dst                          : 16;
3608         uint64_t reserved_32_63               : 32;
3609 #endif
3610         } s;
3611         struct cvmx_pip_tag_secret_s          cn30xx;
3612         struct cvmx_pip_tag_secret_s          cn31xx;
3613         struct cvmx_pip_tag_secret_s          cn38xx;
3614         struct cvmx_pip_tag_secret_s          cn38xxp2;
3615         struct cvmx_pip_tag_secret_s          cn50xx;
3616         struct cvmx_pip_tag_secret_s          cn52xx;
3617         struct cvmx_pip_tag_secret_s          cn52xxp1;
3618         struct cvmx_pip_tag_secret_s          cn56xx;
3619         struct cvmx_pip_tag_secret_s          cn56xxp1;
3620         struct cvmx_pip_tag_secret_s          cn58xx;
3621         struct cvmx_pip_tag_secret_s          cn58xxp1;
3622         struct cvmx_pip_tag_secret_s          cn63xx;
3623         struct cvmx_pip_tag_secret_s          cn63xxp1;
3624 };
3625 typedef union cvmx_pip_tag_secret cvmx_pip_tag_secret_t;
3626
3627 /**
3628  * cvmx_pip_todo_entry
3629  *
3630  * PIP_TODO_ENTRY = Head entry of the Todo list (debug only)
3631  *
3632  * Summary of the current packet that has completed and waiting to be processed
3633  */
3634 union cvmx_pip_todo_entry
3635 {
3636         uint64_t u64;
3637         struct cvmx_pip_todo_entry_s
3638         {
3639 #if __BYTE_ORDER == __BIG_ENDIAN
3640         uint64_t val                          : 1;  /**< Entry is valid */
3641         uint64_t reserved_62_62               : 1;
3642         uint64_t entry                        : 62; /**< Todo list entry summary */
3643 #else
3644         uint64_t entry                        : 62;
3645         uint64_t reserved_62_62               : 1;
3646         uint64_t val                          : 1;
3647 #endif
3648         } s;
3649         struct cvmx_pip_todo_entry_s          cn30xx;
3650         struct cvmx_pip_todo_entry_s          cn31xx;
3651         struct cvmx_pip_todo_entry_s          cn38xx;
3652         struct cvmx_pip_todo_entry_s          cn38xxp2;
3653         struct cvmx_pip_todo_entry_s          cn50xx;
3654         struct cvmx_pip_todo_entry_s          cn52xx;
3655         struct cvmx_pip_todo_entry_s          cn52xxp1;
3656         struct cvmx_pip_todo_entry_s          cn56xx;
3657         struct cvmx_pip_todo_entry_s          cn56xxp1;
3658         struct cvmx_pip_todo_entry_s          cn58xx;
3659         struct cvmx_pip_todo_entry_s          cn58xxp1;
3660         struct cvmx_pip_todo_entry_s          cn63xx;
3661         struct cvmx_pip_todo_entry_s          cn63xxp1;
3662 };
3663 typedef union cvmx_pip_todo_entry cvmx_pip_todo_entry_t;
3664
3665 /**
3666  * cvmx_pip_xstat0_prt#
3667  *
3668  * PIP_XSTAT0_PRT = PIP_XSTAT_DRP_PKTS / PIP_XSTAT_DRP_OCTS
3669  *
3670  */
3671 union cvmx_pip_xstat0_prtx
3672 {
3673         uint64_t u64;
3674         struct cvmx_pip_xstat0_prtx_s
3675         {
3676 #if __BYTE_ORDER == __BIG_ENDIAN
3677         uint64_t drp_pkts                     : 32; /**< Inbound packets marked to be dropped by the IPD
3678                                                          QOS widget per port */
3679         uint64_t drp_octs                     : 32; /**< Inbound octets marked to be dropped by the IPD
3680                                                          QOS widget per port */
3681 #else
3682         uint64_t drp_octs                     : 32;
3683         uint64_t drp_pkts                     : 32;
3684 #endif
3685         } s;
3686         struct cvmx_pip_xstat0_prtx_s         cn63xx;
3687         struct cvmx_pip_xstat0_prtx_s         cn63xxp1;
3688 };
3689 typedef union cvmx_pip_xstat0_prtx cvmx_pip_xstat0_prtx_t;
3690
3691 /**
3692  * cvmx_pip_xstat1_prt#
3693  *
3694  * PIP_XSTAT1_PRTX = PIP_XSTAT_OCTS
3695  *
3696  */
3697 union cvmx_pip_xstat1_prtx
3698 {
3699         uint64_t u64;
3700         struct cvmx_pip_xstat1_prtx_s
3701         {
3702 #if __BYTE_ORDER == __BIG_ENDIAN
3703         uint64_t reserved_48_63               : 16;
3704         uint64_t octs                         : 48; /**< Number of octets received by PIP (good and bad) */
3705 #else
3706         uint64_t octs                         : 48;
3707         uint64_t reserved_48_63               : 16;
3708 #endif
3709         } s;
3710         struct cvmx_pip_xstat1_prtx_s         cn63xx;
3711         struct cvmx_pip_xstat1_prtx_s         cn63xxp1;
3712 };
3713 typedef union cvmx_pip_xstat1_prtx cvmx_pip_xstat1_prtx_t;
3714
3715 /**
3716  * cvmx_pip_xstat2_prt#
3717  *
3718  * PIP_XSTAT2_PRTX = PIP_XSTAT_PKTS     / PIP_XSTAT_RAW
3719  *
3720  */
3721 union cvmx_pip_xstat2_prtx
3722 {
3723         uint64_t u64;
3724         struct cvmx_pip_xstat2_prtx_s
3725         {
3726 #if __BYTE_ORDER == __BIG_ENDIAN
3727         uint64_t pkts                         : 32; /**< Number of packets processed by PIP */
3728         uint64_t raw                          : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
3729                                                          received by PIP per port */
3730 #else
3731         uint64_t raw                          : 32;
3732         uint64_t pkts                         : 32;
3733 #endif
3734         } s;
3735         struct cvmx_pip_xstat2_prtx_s         cn63xx;
3736         struct cvmx_pip_xstat2_prtx_s         cn63xxp1;
3737 };
3738 typedef union cvmx_pip_xstat2_prtx cvmx_pip_xstat2_prtx_t;
3739
3740 /**
3741  * cvmx_pip_xstat3_prt#
3742  *
3743  * PIP_XSTAT3_PRTX = PIP_XSTAT_BCST     / PIP_XSTAT_MCST
3744  *
3745  */
3746 union cvmx_pip_xstat3_prtx
3747 {
3748         uint64_t u64;
3749         struct cvmx_pip_xstat3_prtx_s
3750         {
3751 #if __BYTE_ORDER == __BIG_ENDIAN
3752         uint64_t bcst                         : 32; /**< Number of indentified L2 broadcast packets
3753                                                          Does not include multicast packets
3754                                                          Only includes packets whose parse mode is
3755                                                          SKIP_TO_L2. */
3756         uint64_t mcst                         : 32; /**< Number of indentified L2 multicast packets
3757                                                          Does not include broadcast packets
3758                                                          Only includes packets whose parse mode is
3759                                                          SKIP_TO_L2. */
3760 #else
3761         uint64_t mcst                         : 32;
3762         uint64_t bcst                         : 32;
3763 #endif
3764         } s;
3765         struct cvmx_pip_xstat3_prtx_s         cn63xx;
3766         struct cvmx_pip_xstat3_prtx_s         cn63xxp1;
3767 };
3768 typedef union cvmx_pip_xstat3_prtx cvmx_pip_xstat3_prtx_t;
3769
3770 /**
3771  * cvmx_pip_xstat4_prt#
3772  *
3773  * PIP_XSTAT4_PRTX = PIP_XSTAT_HIST1    / PIP_XSTAT_HIST0
3774  *
3775  */
3776 union cvmx_pip_xstat4_prtx
3777 {
3778         uint64_t u64;
3779         struct cvmx_pip_xstat4_prtx_s
3780         {
3781 #if __BYTE_ORDER == __BIG_ENDIAN
3782         uint64_t h65to127                     : 32; /**< Number of 65-127B packets */
3783         uint64_t h64                          : 32; /**< Number of 1-64B packets */
3784 #else
3785         uint64_t h64                          : 32;
3786         uint64_t h65to127                     : 32;
3787 #endif
3788         } s;
3789         struct cvmx_pip_xstat4_prtx_s         cn63xx;
3790         struct cvmx_pip_xstat4_prtx_s         cn63xxp1;
3791 };
3792 typedef union cvmx_pip_xstat4_prtx cvmx_pip_xstat4_prtx_t;
3793
3794 /**
3795  * cvmx_pip_xstat5_prt#
3796  *
3797  * PIP_XSTAT5_PRTX = PIP_XSTAT_HIST3    / PIP_XSTAT_HIST2
3798  *
3799  */
3800 union cvmx_pip_xstat5_prtx
3801 {
3802         uint64_t u64;
3803         struct cvmx_pip_xstat5_prtx_s
3804         {
3805 #if __BYTE_ORDER == __BIG_ENDIAN
3806         uint64_t h256to511                    : 32; /**< Number of 256-511B packets */
3807         uint64_t h128to255                    : 32; /**< Number of 128-255B packets */
3808 #else
3809         uint64_t h128to255                    : 32;
3810         uint64_t h256to511                    : 32;
3811 #endif
3812         } s;
3813         struct cvmx_pip_xstat5_prtx_s         cn63xx;
3814         struct cvmx_pip_xstat5_prtx_s         cn63xxp1;
3815 };
3816 typedef union cvmx_pip_xstat5_prtx cvmx_pip_xstat5_prtx_t;
3817
3818 /**
3819  * cvmx_pip_xstat6_prt#
3820  *
3821  * PIP_XSTAT6_PRTX = PIP_XSTAT_HIST5    / PIP_XSTAT_HIST4
3822  *
3823  */
3824 union cvmx_pip_xstat6_prtx
3825 {
3826         uint64_t u64;
3827         struct cvmx_pip_xstat6_prtx_s
3828         {
3829 #if __BYTE_ORDER == __BIG_ENDIAN
3830         uint64_t h1024to1518                  : 32; /**< Number of 1024-1518B packets */
3831         uint64_t h512to1023                   : 32; /**< Number of 512-1023B packets */
3832 #else
3833         uint64_t h512to1023                   : 32;
3834         uint64_t h1024to1518                  : 32;
3835 #endif
3836         } s;
3837         struct cvmx_pip_xstat6_prtx_s         cn63xx;
3838         struct cvmx_pip_xstat6_prtx_s         cn63xxp1;
3839 };
3840 typedef union cvmx_pip_xstat6_prtx cvmx_pip_xstat6_prtx_t;
3841
3842 /**
3843  * cvmx_pip_xstat7_prt#
3844  *
3845  * PIP_XSTAT7_PRTX = PIP_XSTAT_FCS      / PIP_XSTAT_HIST6
3846  *
3847  *
3848  * Notes:
3849  * Note: FCS is not checked on the PCI ports 32..35.
3850  *
3851  */
3852 union cvmx_pip_xstat7_prtx
3853 {
3854         uint64_t u64;
3855         struct cvmx_pip_xstat7_prtx_s
3856         {
3857 #if __BYTE_ORDER == __BIG_ENDIAN
3858         uint64_t fcs                          : 32; /**< Number of packets with FCS or Align opcode errors */
3859         uint64_t h1519                        : 32; /**< Number of 1519-max packets */
3860 #else
3861         uint64_t h1519                        : 32;
3862         uint64_t fcs                          : 32;
3863 #endif
3864         } s;
3865         struct cvmx_pip_xstat7_prtx_s         cn63xx;
3866         struct cvmx_pip_xstat7_prtx_s         cn63xxp1;
3867 };
3868 typedef union cvmx_pip_xstat7_prtx cvmx_pip_xstat7_prtx_t;
3869
3870 /**
3871  * cvmx_pip_xstat8_prt#
3872  *
3873  * PIP_XSTAT8_PRTX = PIP_XSTAT_FRAG     / PIP_XSTAT_UNDER
3874  *
3875  *
3876  * Notes:
3877  * Note: FCS is not checked on the PCI ports 32..35.
3878  *
3879  */
3880 union cvmx_pip_xstat8_prtx
3881 {
3882         uint64_t u64;
3883         struct cvmx_pip_xstat8_prtx_s
3884         {
3885 #if __BYTE_ORDER == __BIG_ENDIAN
3886         uint64_t frag                         : 32; /**< Number of packets with length < min and FCS error */
3887         uint64_t undersz                      : 32; /**< Number of packets with length < min */
3888 #else
3889         uint64_t undersz                      : 32;
3890         uint64_t frag                         : 32;
3891 #endif
3892         } s;
3893         struct cvmx_pip_xstat8_prtx_s         cn63xx;
3894         struct cvmx_pip_xstat8_prtx_s         cn63xxp1;
3895 };
3896 typedef union cvmx_pip_xstat8_prtx cvmx_pip_xstat8_prtx_t;
3897
3898 /**
3899  * cvmx_pip_xstat9_prt#
3900  *
3901  * PIP_XSTAT9_PRTX = PIP_XSTAT_JABBER   / PIP_XSTAT_OVER
3902  *
3903  *
3904  * Notes:
3905  * Note: FCS is not checked on the PCI ports 32..35.
3906  *
3907  */
3908 union cvmx_pip_xstat9_prtx
3909 {
3910         uint64_t u64;
3911         struct cvmx_pip_xstat9_prtx_s
3912         {
3913 #if __BYTE_ORDER == __BIG_ENDIAN
3914         uint64_t jabber                       : 32; /**< Number of packets with length > max and FCS error */
3915         uint64_t oversz                       : 32; /**< Number of packets with length > max */
3916 #else
3917         uint64_t oversz                       : 32;
3918         uint64_t jabber                       : 32;
3919 #endif
3920         } s;
3921         struct cvmx_pip_xstat9_prtx_s         cn63xx;
3922         struct cvmx_pip_xstat9_prtx_s         cn63xxp1;
3923 };
3924 typedef union cvmx_pip_xstat9_prtx cvmx_pip_xstat9_prtx_t;
3925
3926 #endif