1 /***********************license start***************
2 * Copyright (c) 2003-2012 Cavium Inc. (support@cavium.com). All rights
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
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.
18 * * Neither the name of Cavium Inc. nor the names of
19 * its contributors may be used to endorse or promote products
20 * derived from this software without specific prior written
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
28 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29 * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
30 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32 * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
37 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38 ***********************license end**************************************/
44 * Configuration and status register (CSR) type definitions for
47 * This file is auto generated. Do not edit.
52 #ifndef __CVMX_PIP_DEFS_H__
53 #define __CVMX_PIP_DEFS_H__
55 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
56 static inline uint64_t CVMX_PIP_ALT_SKIP_CFGX(unsigned long offset)
59 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
60 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
61 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
62 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
63 cvmx_warn("CVMX_PIP_ALT_SKIP_CFGX(%lu) is invalid on this chip\n", offset);
64 return CVMX_ADD_IO_SEG(0x00011800A0002A00ull) + ((offset) & 3) * 8;
67 #define CVMX_PIP_ALT_SKIP_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002A00ull) + ((offset) & 3) * 8)
69 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
70 #define CVMX_PIP_BCK_PRS CVMX_PIP_BCK_PRS_FUNC()
71 static inline uint64_t CVMX_PIP_BCK_PRS_FUNC(void)
73 if (!(OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN58XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
74 cvmx_warn("CVMX_PIP_BCK_PRS not supported on this chip\n");
75 return CVMX_ADD_IO_SEG(0x00011800A0000038ull);
78 #define CVMX_PIP_BCK_PRS (CVMX_ADD_IO_SEG(0x00011800A0000038ull))
80 #define CVMX_PIP_BIST_STATUS (CVMX_ADD_IO_SEG(0x00011800A0000000ull))
81 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
82 static inline uint64_t CVMX_PIP_BSEL_EXT_CFGX(unsigned long offset)
85 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
86 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
87 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
88 cvmx_warn("CVMX_PIP_BSEL_EXT_CFGX(%lu) is invalid on this chip\n", offset);
89 return CVMX_ADD_IO_SEG(0x00011800A0002800ull) + ((offset) & 3) * 16;
92 #define CVMX_PIP_BSEL_EXT_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002800ull) + ((offset) & 3) * 16)
94 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
95 static inline uint64_t CVMX_PIP_BSEL_EXT_POSX(unsigned long offset)
98 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
99 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
100 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
101 cvmx_warn("CVMX_PIP_BSEL_EXT_POSX(%lu) is invalid on this chip\n", offset);
102 return CVMX_ADD_IO_SEG(0x00011800A0002808ull) + ((offset) & 3) * 16;
105 #define CVMX_PIP_BSEL_EXT_POSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002808ull) + ((offset) & 3) * 16)
107 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
108 static inline uint64_t CVMX_PIP_BSEL_TBL_ENTX(unsigned long offset)
111 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 511))) ||
112 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 511))) ||
113 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 511)))))
114 cvmx_warn("CVMX_PIP_BSEL_TBL_ENTX(%lu) is invalid on this chip\n", offset);
115 return CVMX_ADD_IO_SEG(0x00011800A0003000ull) + ((offset) & 511) * 8;
118 #define CVMX_PIP_BSEL_TBL_ENTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0003000ull) + ((offset) & 511) * 8)
120 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
121 #define CVMX_PIP_CLKEN CVMX_PIP_CLKEN_FUNC()
122 static inline uint64_t CVMX_PIP_CLKEN_FUNC(void)
124 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
125 cvmx_warn("CVMX_PIP_CLKEN not supported on this chip\n");
126 return CVMX_ADD_IO_SEG(0x00011800A0000040ull);
129 #define CVMX_PIP_CLKEN (CVMX_ADD_IO_SEG(0x00011800A0000040ull))
131 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
132 static inline uint64_t CVMX_PIP_CRC_CTLX(unsigned long offset)
135 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
136 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
137 cvmx_warn("CVMX_PIP_CRC_CTLX(%lu) is invalid on this chip\n", offset);
138 return CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8;
141 #define CVMX_PIP_CRC_CTLX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8)
143 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
144 static inline uint64_t CVMX_PIP_CRC_IVX(unsigned long offset)
147 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
148 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
149 cvmx_warn("CVMX_PIP_CRC_IVX(%lu) is invalid on this chip\n", offset);
150 return CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8;
153 #define CVMX_PIP_CRC_IVX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8)
155 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
156 static inline uint64_t CVMX_PIP_DEC_IPSECX(unsigned long offset)
159 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
160 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
161 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
162 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 3))) ||
163 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3))) ||
164 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3))) ||
165 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
166 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
167 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3))) ||
168 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
169 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
170 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
171 cvmx_warn("CVMX_PIP_DEC_IPSECX(%lu) is invalid on this chip\n", offset);
172 return CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8;
175 #define CVMX_PIP_DEC_IPSECX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8)
177 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
178 #define CVMX_PIP_DSA_SRC_GRP CVMX_PIP_DSA_SRC_GRP_FUNC()
179 static inline uint64_t CVMX_PIP_DSA_SRC_GRP_FUNC(void)
181 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
182 cvmx_warn("CVMX_PIP_DSA_SRC_GRP not supported on this chip\n");
183 return CVMX_ADD_IO_SEG(0x00011800A0000190ull);
186 #define CVMX_PIP_DSA_SRC_GRP (CVMX_ADD_IO_SEG(0x00011800A0000190ull))
188 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
189 #define CVMX_PIP_DSA_VID_GRP CVMX_PIP_DSA_VID_GRP_FUNC()
190 static inline uint64_t CVMX_PIP_DSA_VID_GRP_FUNC(void)
192 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
193 cvmx_warn("CVMX_PIP_DSA_VID_GRP not supported on this chip\n");
194 return CVMX_ADD_IO_SEG(0x00011800A0000198ull);
197 #define CVMX_PIP_DSA_VID_GRP (CVMX_ADD_IO_SEG(0x00011800A0000198ull))
199 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
200 static inline uint64_t CVMX_PIP_FRM_LEN_CHKX(unsigned long offset)
203 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) ||
204 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
205 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 1))) ||
206 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
207 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
208 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
209 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
210 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
211 cvmx_warn("CVMX_PIP_FRM_LEN_CHKX(%lu) is invalid on this chip\n", offset);
212 return CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8;
215 #define CVMX_PIP_FRM_LEN_CHKX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8)
217 #define CVMX_PIP_GBL_CFG (CVMX_ADD_IO_SEG(0x00011800A0000028ull))
218 #define CVMX_PIP_GBL_CTL (CVMX_ADD_IO_SEG(0x00011800A0000020ull))
219 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
220 #define CVMX_PIP_HG_PRI_QOS CVMX_PIP_HG_PRI_QOS_FUNC()
221 static inline uint64_t CVMX_PIP_HG_PRI_QOS_FUNC(void)
223 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
224 cvmx_warn("CVMX_PIP_HG_PRI_QOS not supported on this chip\n");
225 return CVMX_ADD_IO_SEG(0x00011800A00001A0ull);
228 #define CVMX_PIP_HG_PRI_QOS (CVMX_ADD_IO_SEG(0x00011800A00001A0ull))
230 #define CVMX_PIP_INT_EN (CVMX_ADD_IO_SEG(0x00011800A0000010ull))
231 #define CVMX_PIP_INT_REG (CVMX_ADD_IO_SEG(0x00011800A0000008ull))
232 #define CVMX_PIP_IP_OFFSET (CVMX_ADD_IO_SEG(0x00011800A0000060ull))
233 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
234 static inline uint64_t CVMX_PIP_PRI_TBLX(unsigned long offset)
237 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 255)))))
238 cvmx_warn("CVMX_PIP_PRI_TBLX(%lu) is invalid on this chip\n", offset);
239 return CVMX_ADD_IO_SEG(0x00011800A0004000ull) + ((offset) & 255) * 8;
242 #define CVMX_PIP_PRI_TBLX(offset) (CVMX_ADD_IO_SEG(0x00011800A0004000ull) + ((offset) & 255) * 8)
244 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
245 static inline uint64_t CVMX_PIP_PRT_CFGBX(unsigned long offset)
248 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
249 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)) || ((offset >= 44) && (offset <= 47)))) ||
250 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
251 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
252 cvmx_warn("CVMX_PIP_PRT_CFGBX(%lu) is invalid on this chip\n", offset);
253 return CVMX_ADD_IO_SEG(0x00011800A0008000ull) + ((offset) & 63) * 8;
256 #define CVMX_PIP_PRT_CFGBX(offset) (CVMX_ADD_IO_SEG(0x00011800A0008000ull) + ((offset) & 63) * 8)
258 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
259 static inline uint64_t CVMX_PIP_PRT_CFGX(unsigned long offset)
262 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
263 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
264 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
265 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
266 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
267 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
268 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
269 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
270 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
271 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
272 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
273 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
274 cvmx_warn("CVMX_PIP_PRT_CFGX(%lu) is invalid on this chip\n", offset);
275 return CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8;
278 #define CVMX_PIP_PRT_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8)
280 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
281 static inline uint64_t CVMX_PIP_PRT_TAGX(unsigned long offset)
284 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
285 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
286 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
287 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
288 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
289 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
290 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
291 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
292 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
293 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
294 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
295 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
296 cvmx_warn("CVMX_PIP_PRT_TAGX(%lu) is invalid on this chip\n", offset);
297 return CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8;
300 #define CVMX_PIP_PRT_TAGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8)
302 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
303 static inline uint64_t CVMX_PIP_QOS_DIFFX(unsigned long offset)
306 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
307 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
308 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
309 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
310 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
311 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
312 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
313 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 63))) ||
314 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63))) ||
315 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 63))) ||
316 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 63)))))
317 cvmx_warn("CVMX_PIP_QOS_DIFFX(%lu) is invalid on this chip\n", offset);
318 return CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8;
321 #define CVMX_PIP_QOS_DIFFX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8)
323 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
324 static inline uint64_t CVMX_PIP_QOS_VLANX(unsigned long offset)
327 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
328 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
329 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
330 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
331 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
332 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
333 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
334 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
335 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
336 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
337 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
338 cvmx_warn("CVMX_PIP_QOS_VLANX(%lu) is invalid on this chip\n", offset);
339 return CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8;
342 #define CVMX_PIP_QOS_VLANX(offset) (CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8)
344 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
345 static inline uint64_t CVMX_PIP_QOS_WATCHX(unsigned long offset)
348 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
349 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
350 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
351 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
352 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
353 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
354 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
355 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
356 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
357 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
358 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
359 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
360 cvmx_warn("CVMX_PIP_QOS_WATCHX(%lu) is invalid on this chip\n", offset);
361 return CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8;
364 #define CVMX_PIP_QOS_WATCHX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8)
366 #define CVMX_PIP_RAW_WORD (CVMX_ADD_IO_SEG(0x00011800A00000B0ull))
367 #define CVMX_PIP_SFT_RST (CVMX_ADD_IO_SEG(0x00011800A0000030ull))
368 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
369 static inline uint64_t CVMX_PIP_STAT0_PRTX(unsigned long offset)
372 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
373 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
374 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
375 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
376 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
377 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
378 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
379 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
380 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
381 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
382 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
383 cvmx_warn("CVMX_PIP_STAT0_PRTX(%lu) is invalid on this chip\n", offset);
384 return CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80;
387 #define CVMX_PIP_STAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80)
389 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
390 static inline uint64_t CVMX_PIP_STAT0_X(unsigned long offset)
393 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
394 cvmx_warn("CVMX_PIP_STAT0_X(%lu) is invalid on this chip\n", offset);
395 return CVMX_ADD_IO_SEG(0x00011800A0040000ull) + ((offset) & 63) * 128;
398 #define CVMX_PIP_STAT0_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040000ull) + ((offset) & 63) * 128)
400 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
401 static inline uint64_t CVMX_PIP_STAT10_PRTX(unsigned long offset)
404 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
405 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
406 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
407 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
408 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
409 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
410 cvmx_warn("CVMX_PIP_STAT10_PRTX(%lu) is invalid on this chip\n", offset);
411 return CVMX_ADD_IO_SEG(0x00011800A0001480ull) + ((offset) & 63) * 16;
414 #define CVMX_PIP_STAT10_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001480ull) + ((offset) & 63) * 16)
416 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
417 static inline uint64_t CVMX_PIP_STAT10_X(unsigned long offset)
420 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
421 cvmx_warn("CVMX_PIP_STAT10_X(%lu) is invalid on this chip\n", offset);
422 return CVMX_ADD_IO_SEG(0x00011800A0040050ull) + ((offset) & 63) * 128;
425 #define CVMX_PIP_STAT10_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040050ull) + ((offset) & 63) * 128)
427 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
428 static inline uint64_t CVMX_PIP_STAT11_PRTX(unsigned long offset)
431 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
432 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
433 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
434 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
435 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
436 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
437 cvmx_warn("CVMX_PIP_STAT11_PRTX(%lu) is invalid on this chip\n", offset);
438 return CVMX_ADD_IO_SEG(0x00011800A0001488ull) + ((offset) & 63) * 16;
441 #define CVMX_PIP_STAT11_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001488ull) + ((offset) & 63) * 16)
443 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
444 static inline uint64_t CVMX_PIP_STAT11_X(unsigned long offset)
447 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
448 cvmx_warn("CVMX_PIP_STAT11_X(%lu) is invalid on this chip\n", offset);
449 return CVMX_ADD_IO_SEG(0x00011800A0040058ull) + ((offset) & 63) * 128;
452 #define CVMX_PIP_STAT11_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040058ull) + ((offset) & 63) * 128)
454 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
455 static inline uint64_t CVMX_PIP_STAT1_PRTX(unsigned long offset)
458 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
459 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
460 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
461 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
462 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
463 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
464 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
465 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
466 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
467 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
468 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
469 cvmx_warn("CVMX_PIP_STAT1_PRTX(%lu) is invalid on this chip\n", offset);
470 return CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80;
473 #define CVMX_PIP_STAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80)
475 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
476 static inline uint64_t CVMX_PIP_STAT1_X(unsigned long offset)
479 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
480 cvmx_warn("CVMX_PIP_STAT1_X(%lu) is invalid on this chip\n", offset);
481 return CVMX_ADD_IO_SEG(0x00011800A0040008ull) + ((offset) & 63) * 128;
484 #define CVMX_PIP_STAT1_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040008ull) + ((offset) & 63) * 128)
486 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
487 static inline uint64_t CVMX_PIP_STAT2_PRTX(unsigned long offset)
490 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
491 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
492 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
493 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
494 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
495 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
496 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
497 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
498 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
499 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
500 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
501 cvmx_warn("CVMX_PIP_STAT2_PRTX(%lu) is invalid on this chip\n", offset);
502 return CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80;
505 #define CVMX_PIP_STAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80)
507 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
508 static inline uint64_t CVMX_PIP_STAT2_X(unsigned long offset)
511 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
512 cvmx_warn("CVMX_PIP_STAT2_X(%lu) is invalid on this chip\n", offset);
513 return CVMX_ADD_IO_SEG(0x00011800A0040010ull) + ((offset) & 63) * 128;
516 #define CVMX_PIP_STAT2_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040010ull) + ((offset) & 63) * 128)
518 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
519 static inline uint64_t CVMX_PIP_STAT3_PRTX(unsigned long offset)
522 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
523 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
524 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
525 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
526 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
527 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
528 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
529 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
530 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
531 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
532 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
533 cvmx_warn("CVMX_PIP_STAT3_PRTX(%lu) is invalid on this chip\n", offset);
534 return CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80;
537 #define CVMX_PIP_STAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80)
539 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
540 static inline uint64_t CVMX_PIP_STAT3_X(unsigned long offset)
543 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
544 cvmx_warn("CVMX_PIP_STAT3_X(%lu) is invalid on this chip\n", offset);
545 return CVMX_ADD_IO_SEG(0x00011800A0040018ull) + ((offset) & 63) * 128;
548 #define CVMX_PIP_STAT3_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040018ull) + ((offset) & 63) * 128)
550 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
551 static inline uint64_t CVMX_PIP_STAT4_PRTX(unsigned long offset)
554 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
555 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
556 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
557 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
558 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
559 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
560 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
561 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
562 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
563 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
564 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
565 cvmx_warn("CVMX_PIP_STAT4_PRTX(%lu) is invalid on this chip\n", offset);
566 return CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80;
569 #define CVMX_PIP_STAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80)
571 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
572 static inline uint64_t CVMX_PIP_STAT4_X(unsigned long offset)
575 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
576 cvmx_warn("CVMX_PIP_STAT4_X(%lu) is invalid on this chip\n", offset);
577 return CVMX_ADD_IO_SEG(0x00011800A0040020ull) + ((offset) & 63) * 128;
580 #define CVMX_PIP_STAT4_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040020ull) + ((offset) & 63) * 128)
582 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
583 static inline uint64_t CVMX_PIP_STAT5_PRTX(unsigned long offset)
586 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
587 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
588 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
589 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
590 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
591 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
592 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
593 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
594 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
595 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
596 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
597 cvmx_warn("CVMX_PIP_STAT5_PRTX(%lu) is invalid on this chip\n", offset);
598 return CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80;
601 #define CVMX_PIP_STAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80)
603 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
604 static inline uint64_t CVMX_PIP_STAT5_X(unsigned long offset)
607 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
608 cvmx_warn("CVMX_PIP_STAT5_X(%lu) is invalid on this chip\n", offset);
609 return CVMX_ADD_IO_SEG(0x00011800A0040028ull) + ((offset) & 63) * 128;
612 #define CVMX_PIP_STAT5_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040028ull) + ((offset) & 63) * 128)
614 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
615 static inline uint64_t CVMX_PIP_STAT6_PRTX(unsigned long offset)
618 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
619 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
620 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
621 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
622 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
623 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
624 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
625 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
626 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
627 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
628 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
629 cvmx_warn("CVMX_PIP_STAT6_PRTX(%lu) is invalid on this chip\n", offset);
630 return CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80;
633 #define CVMX_PIP_STAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80)
635 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
636 static inline uint64_t CVMX_PIP_STAT6_X(unsigned long offset)
639 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
640 cvmx_warn("CVMX_PIP_STAT6_X(%lu) is invalid on this chip\n", offset);
641 return CVMX_ADD_IO_SEG(0x00011800A0040030ull) + ((offset) & 63) * 128;
644 #define CVMX_PIP_STAT6_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040030ull) + ((offset) & 63) * 128)
646 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
647 static inline uint64_t CVMX_PIP_STAT7_PRTX(unsigned long offset)
650 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
651 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
652 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
653 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
654 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
655 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
656 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
657 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
658 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
659 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
660 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
661 cvmx_warn("CVMX_PIP_STAT7_PRTX(%lu) is invalid on this chip\n", offset);
662 return CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80;
665 #define CVMX_PIP_STAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80)
667 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
668 static inline uint64_t CVMX_PIP_STAT7_X(unsigned long offset)
671 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
672 cvmx_warn("CVMX_PIP_STAT7_X(%lu) is invalid on this chip\n", offset);
673 return CVMX_ADD_IO_SEG(0x00011800A0040038ull) + ((offset) & 63) * 128;
676 #define CVMX_PIP_STAT7_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040038ull) + ((offset) & 63) * 128)
678 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
679 static inline uint64_t CVMX_PIP_STAT8_PRTX(unsigned long offset)
682 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
683 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
684 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
685 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
686 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
687 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
688 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
689 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
690 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
691 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
692 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
693 cvmx_warn("CVMX_PIP_STAT8_PRTX(%lu) is invalid on this chip\n", offset);
694 return CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80;
697 #define CVMX_PIP_STAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80)
699 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
700 static inline uint64_t CVMX_PIP_STAT8_X(unsigned long offset)
703 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
704 cvmx_warn("CVMX_PIP_STAT8_X(%lu) is invalid on this chip\n", offset);
705 return CVMX_ADD_IO_SEG(0x00011800A0040040ull) + ((offset) & 63) * 128;
708 #define CVMX_PIP_STAT8_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040040ull) + ((offset) & 63) * 128)
710 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
711 static inline uint64_t CVMX_PIP_STAT9_PRTX(unsigned long offset)
714 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
715 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
716 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
717 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
718 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
719 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
720 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
721 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
722 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
723 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
724 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
725 cvmx_warn("CVMX_PIP_STAT9_PRTX(%lu) is invalid on this chip\n", offset);
726 return CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80;
729 #define CVMX_PIP_STAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80)
731 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
732 static inline uint64_t CVMX_PIP_STAT9_X(unsigned long offset)
735 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
736 cvmx_warn("CVMX_PIP_STAT9_X(%lu) is invalid on this chip\n", offset);
737 return CVMX_ADD_IO_SEG(0x00011800A0040048ull) + ((offset) & 63) * 128;
740 #define CVMX_PIP_STAT9_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040048ull) + ((offset) & 63) * 128)
742 #define CVMX_PIP_STAT_CTL (CVMX_ADD_IO_SEG(0x00011800A0000018ull))
743 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
744 static inline uint64_t CVMX_PIP_STAT_INB_ERRSX(unsigned long offset)
747 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
748 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
749 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
750 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
751 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
752 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
753 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
754 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
755 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
756 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
757 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
758 cvmx_warn("CVMX_PIP_STAT_INB_ERRSX(%lu) is invalid on this chip\n", offset);
759 return CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32;
762 #define CVMX_PIP_STAT_INB_ERRSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32)
764 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
765 static inline uint64_t CVMX_PIP_STAT_INB_ERRS_PKNDX(unsigned long offset)
768 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
769 cvmx_warn("CVMX_PIP_STAT_INB_ERRS_PKNDX(%lu) is invalid on this chip\n", offset);
770 return CVMX_ADD_IO_SEG(0x00011800A0020010ull) + ((offset) & 63) * 32;
773 #define CVMX_PIP_STAT_INB_ERRS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020010ull) + ((offset) & 63) * 32)
775 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
776 static inline uint64_t CVMX_PIP_STAT_INB_OCTSX(unsigned long offset)
779 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
780 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
781 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
782 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
783 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
784 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
785 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
786 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
787 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
788 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
789 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
790 cvmx_warn("CVMX_PIP_STAT_INB_OCTSX(%lu) is invalid on this chip\n", offset);
791 return CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32;
794 #define CVMX_PIP_STAT_INB_OCTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32)
796 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
797 static inline uint64_t CVMX_PIP_STAT_INB_OCTS_PKNDX(unsigned long offset)
800 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
801 cvmx_warn("CVMX_PIP_STAT_INB_OCTS_PKNDX(%lu) is invalid on this chip\n", offset);
802 return CVMX_ADD_IO_SEG(0x00011800A0020008ull) + ((offset) & 63) * 32;
805 #define CVMX_PIP_STAT_INB_OCTS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020008ull) + ((offset) & 63) * 32)
807 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
808 static inline uint64_t CVMX_PIP_STAT_INB_PKTSX(unsigned long offset)
811 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
812 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
813 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
814 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
815 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
816 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
817 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
818 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
819 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
820 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47)))) ||
821 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
822 cvmx_warn("CVMX_PIP_STAT_INB_PKTSX(%lu) is invalid on this chip\n", offset);
823 return CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32;
826 #define CVMX_PIP_STAT_INB_PKTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32)
828 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
829 static inline uint64_t CVMX_PIP_STAT_INB_PKTS_PKNDX(unsigned long offset)
832 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
833 cvmx_warn("CVMX_PIP_STAT_INB_PKTS_PKNDX(%lu) is invalid on this chip\n", offset);
834 return CVMX_ADD_IO_SEG(0x00011800A0020000ull) + ((offset) & 63) * 32;
837 #define CVMX_PIP_STAT_INB_PKTS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020000ull) + ((offset) & 63) * 32)
839 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
840 static inline uint64_t CVMX_PIP_SUB_PKIND_FCSX(unsigned long block_id)
843 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id == 0)))))
844 cvmx_warn("CVMX_PIP_SUB_PKIND_FCSX(%lu) is invalid on this chip\n", block_id);
845 return CVMX_ADD_IO_SEG(0x00011800A0080000ull);
848 #define CVMX_PIP_SUB_PKIND_FCSX(block_id) (CVMX_ADD_IO_SEG(0x00011800A0080000ull))
850 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
851 static inline uint64_t CVMX_PIP_TAG_INCX(unsigned long offset)
854 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
855 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
856 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
857 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
858 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
859 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
860 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
861 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 63))) ||
862 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63))) ||
863 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 63))) ||
864 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
865 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 63)))))
866 cvmx_warn("CVMX_PIP_TAG_INCX(%lu) is invalid on this chip\n", offset);
867 return CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8;
870 #define CVMX_PIP_TAG_INCX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8)
872 #define CVMX_PIP_TAG_MASK (CVMX_ADD_IO_SEG(0x00011800A0000070ull))
873 #define CVMX_PIP_TAG_SECRET (CVMX_ADD_IO_SEG(0x00011800A0000068ull))
874 #define CVMX_PIP_TODO_ENTRY (CVMX_ADD_IO_SEG(0x00011800A0000078ull))
875 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
876 static inline uint64_t CVMX_PIP_VLAN_ETYPESX(unsigned long offset)
879 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
880 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
881 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
882 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1)))))
883 cvmx_warn("CVMX_PIP_VLAN_ETYPESX(%lu) is invalid on this chip\n", offset);
884 return CVMX_ADD_IO_SEG(0x00011800A00001C0ull) + ((offset) & 1) * 8;
887 #define CVMX_PIP_VLAN_ETYPESX(offset) (CVMX_ADD_IO_SEG(0x00011800A00001C0ull) + ((offset) & 1) * 8)
889 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
890 static inline uint64_t CVMX_PIP_XSTAT0_PRTX(unsigned long offset)
893 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
894 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
895 cvmx_warn("CVMX_PIP_XSTAT0_PRTX(%lu) is invalid on this chip\n", offset);
896 return CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40;
899 #define CVMX_PIP_XSTAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40)
901 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
902 static inline uint64_t CVMX_PIP_XSTAT10_PRTX(unsigned long offset)
905 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
906 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
907 cvmx_warn("CVMX_PIP_XSTAT10_PRTX(%lu) is invalid on this chip\n", offset);
908 return CVMX_ADD_IO_SEG(0x00011800A0001700ull) + ((offset) & 63) * 16 - 16*40;
911 #define CVMX_PIP_XSTAT10_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001700ull) + ((offset) & 63) * 16 - 16*40)
913 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
914 static inline uint64_t CVMX_PIP_XSTAT11_PRTX(unsigned long offset)
917 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
918 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
919 cvmx_warn("CVMX_PIP_XSTAT11_PRTX(%lu) is invalid on this chip\n", offset);
920 return CVMX_ADD_IO_SEG(0x00011800A0001708ull) + ((offset) & 63) * 16 - 16*40;
923 #define CVMX_PIP_XSTAT11_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001708ull) + ((offset) & 63) * 16 - 16*40)
925 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
926 static inline uint64_t CVMX_PIP_XSTAT1_PRTX(unsigned long offset)
929 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
930 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
931 cvmx_warn("CVMX_PIP_XSTAT1_PRTX(%lu) is invalid on this chip\n", offset);
932 return CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40;
935 #define CVMX_PIP_XSTAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40)
937 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
938 static inline uint64_t CVMX_PIP_XSTAT2_PRTX(unsigned long offset)
941 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
942 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
943 cvmx_warn("CVMX_PIP_XSTAT2_PRTX(%lu) is invalid on this chip\n", offset);
944 return CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40;
947 #define CVMX_PIP_XSTAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40)
949 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
950 static inline uint64_t CVMX_PIP_XSTAT3_PRTX(unsigned long offset)
953 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
954 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
955 cvmx_warn("CVMX_PIP_XSTAT3_PRTX(%lu) is invalid on this chip\n", offset);
956 return CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40;
959 #define CVMX_PIP_XSTAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40)
961 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
962 static inline uint64_t CVMX_PIP_XSTAT4_PRTX(unsigned long offset)
965 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
966 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
967 cvmx_warn("CVMX_PIP_XSTAT4_PRTX(%lu) is invalid on this chip\n", offset);
968 return CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40;
971 #define CVMX_PIP_XSTAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40)
973 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
974 static inline uint64_t CVMX_PIP_XSTAT5_PRTX(unsigned long offset)
977 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
978 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
979 cvmx_warn("CVMX_PIP_XSTAT5_PRTX(%lu) is invalid on this chip\n", offset);
980 return CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40;
983 #define CVMX_PIP_XSTAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40)
985 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
986 static inline uint64_t CVMX_PIP_XSTAT6_PRTX(unsigned long offset)
989 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
990 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
991 cvmx_warn("CVMX_PIP_XSTAT6_PRTX(%lu) is invalid on this chip\n", offset);
992 return CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40;
995 #define CVMX_PIP_XSTAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40)
997 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
998 static inline uint64_t CVMX_PIP_XSTAT7_PRTX(unsigned long offset)
1001 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
1002 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
1003 cvmx_warn("CVMX_PIP_XSTAT7_PRTX(%lu) is invalid on this chip\n", offset);
1004 return CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40;
1007 #define CVMX_PIP_XSTAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40)
1009 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
1010 static inline uint64_t CVMX_PIP_XSTAT8_PRTX(unsigned long offset)
1013 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
1014 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
1015 cvmx_warn("CVMX_PIP_XSTAT8_PRTX(%lu) is invalid on this chip\n", offset);
1016 return CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40;
1019 #define CVMX_PIP_XSTAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40)
1021 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
1022 static inline uint64_t CVMX_PIP_XSTAT9_PRTX(unsigned long offset)
1025 (OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
1026 (OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
1027 cvmx_warn("CVMX_PIP_XSTAT9_PRTX(%lu) is invalid on this chip\n", offset);
1028 return CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40;
1031 #define CVMX_PIP_XSTAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40)
1035 * cvmx_pip_alt_skip_cfg#
1038 * The actual SKIP I determined by HW is based on the packet contents. BIT0 and
1039 * BIT1 make up a two value value that the selects the skip value as follows.
1041 * lookup_value = LEN ? ( packet_in_bits[BIT1], packet_in_bits[BIT0] ) : ( 0, packet_in_bits[BIT0] );
1042 * SKIP I = lookup_value == 3 ? SKIP3 :
1043 * lookup_value == 2 ? SKIP2 :
1044 * lookup_value == 1 ? SKIP1 :
1045 * PIP_PRT_CFG<pknd>[SKIP];
1047 union cvmx_pip_alt_skip_cfgx {
1049 struct cvmx_pip_alt_skip_cfgx_s {
1050 #ifdef __BIG_ENDIAN_BITFIELD
1051 uint64_t reserved_57_63 : 7;
1052 uint64_t len : 1; /**< Indicates the length of the selection field
1055 uint64_t reserved_46_55 : 10;
1056 uint64_t bit1 : 6; /**< Indicates the bit location in the first word of
1057 the packet to use to select the skip amount.
1058 BIT1 must be present in the packet. */
1059 uint64_t reserved_38_39 : 2;
1060 uint64_t bit0 : 6; /**< Indicates the bit location in the first word of
1061 the packet to use to select the skip amount.
1062 BIT0 must be present in the packet. */
1063 uint64_t reserved_23_31 : 9;
1064 uint64_t skip3 : 7; /**< Indicates number of bytes to skip from start of
1066 uint64_t reserved_15_15 : 1;
1067 uint64_t skip2 : 7; /**< Indicates number of bytes to skip from start of
1069 uint64_t reserved_7_7 : 1;
1070 uint64_t skip1 : 7; /**< Indicates number of bytes to skip from start of
1074 uint64_t reserved_7_7 : 1;
1076 uint64_t reserved_15_15 : 1;
1078 uint64_t reserved_23_31 : 9;
1080 uint64_t reserved_38_39 : 2;
1082 uint64_t reserved_46_55 : 10;
1084 uint64_t reserved_57_63 : 7;
1087 struct cvmx_pip_alt_skip_cfgx_s cn61xx;
1088 struct cvmx_pip_alt_skip_cfgx_s cn66xx;
1089 struct cvmx_pip_alt_skip_cfgx_s cn68xx;
1090 struct cvmx_pip_alt_skip_cfgx_s cnf71xx;
1092 typedef union cvmx_pip_alt_skip_cfgx cvmx_pip_alt_skip_cfgx_t;
1097 * PIP_BCK_PRS = PIP's Back Pressure Register
1099 * When to assert backpressure based on the todo list filling up
1101 union cvmx_pip_bck_prs {
1103 struct cvmx_pip_bck_prs_s {
1104 #ifdef __BIG_ENDIAN_BITFIELD
1105 uint64_t bckprs : 1; /**< PIP is currently asserting backpressure to IOB
1106 Backpressure from PIP will assert when the
1107 entries to the todo list exceed HIWATER.
1108 Backpressure will be held until the todo entries
1109 is less than or equal to LOWATER. */
1110 uint64_t reserved_13_62 : 50;
1111 uint64_t hiwater : 5; /**< Water mark in the todo list to assert backpressure
1112 Legal values are 1-26. A 0 value will deadlock
1113 the machine. A value > 26, will trash memory */
1114 uint64_t reserved_5_7 : 3;
1115 uint64_t lowater : 5; /**< Water mark in the todo list to release backpressure
1116 The LOWATER value should be < HIWATER. */
1118 uint64_t lowater : 5;
1119 uint64_t reserved_5_7 : 3;
1120 uint64_t hiwater : 5;
1121 uint64_t reserved_13_62 : 50;
1122 uint64_t bckprs : 1;
1125 struct cvmx_pip_bck_prs_s cn38xx;
1126 struct cvmx_pip_bck_prs_s cn38xxp2;
1127 struct cvmx_pip_bck_prs_s cn56xx;
1128 struct cvmx_pip_bck_prs_s cn56xxp1;
1129 struct cvmx_pip_bck_prs_s cn58xx;
1130 struct cvmx_pip_bck_prs_s cn58xxp1;
1131 struct cvmx_pip_bck_prs_s cn61xx;
1132 struct cvmx_pip_bck_prs_s cn63xx;
1133 struct cvmx_pip_bck_prs_s cn63xxp1;
1134 struct cvmx_pip_bck_prs_s cn66xx;
1135 struct cvmx_pip_bck_prs_s cn68xx;
1136 struct cvmx_pip_bck_prs_s cn68xxp1;
1137 struct cvmx_pip_bck_prs_s cnf71xx;
1139 typedef union cvmx_pip_bck_prs cvmx_pip_bck_prs_t;
1142 * cvmx_pip_bist_status
1144 * PIP_BIST_STATUS = PIP's BIST Results
1147 union cvmx_pip_bist_status {
1149 struct cvmx_pip_bist_status_s {
1150 #ifdef __BIG_ENDIAN_BITFIELD
1151 uint64_t reserved_22_63 : 42;
1152 uint64_t bist : 22; /**< BIST Results.
1153 HW sets a bit in BIST for for memory that fails
1157 uint64_t reserved_22_63 : 42;
1160 struct cvmx_pip_bist_status_cn30xx {
1161 #ifdef __BIG_ENDIAN_BITFIELD
1162 uint64_t reserved_18_63 : 46;
1163 uint64_t bist : 18; /**< BIST Results.
1164 HW sets a bit in BIST for for memory that fails
1168 uint64_t reserved_18_63 : 46;
1171 struct cvmx_pip_bist_status_cn30xx cn31xx;
1172 struct cvmx_pip_bist_status_cn30xx cn38xx;
1173 struct cvmx_pip_bist_status_cn30xx cn38xxp2;
1174 struct cvmx_pip_bist_status_cn50xx {
1175 #ifdef __BIG_ENDIAN_BITFIELD
1176 uint64_t reserved_17_63 : 47;
1177 uint64_t bist : 17; /**< BIST Results.
1178 HW sets a bit in BIST for for memory that fails
1182 uint64_t reserved_17_63 : 47;
1185 struct cvmx_pip_bist_status_cn30xx cn52xx;
1186 struct cvmx_pip_bist_status_cn30xx cn52xxp1;
1187 struct cvmx_pip_bist_status_cn30xx cn56xx;
1188 struct cvmx_pip_bist_status_cn30xx cn56xxp1;
1189 struct cvmx_pip_bist_status_cn30xx cn58xx;
1190 struct cvmx_pip_bist_status_cn30xx cn58xxp1;
1191 struct cvmx_pip_bist_status_cn61xx {
1192 #ifdef __BIG_ENDIAN_BITFIELD
1193 uint64_t reserved_20_63 : 44;
1194 uint64_t bist : 20; /**< BIST Results.
1195 HW sets a bit in BIST for for memory that fails
1199 uint64_t reserved_20_63 : 44;
1202 struct cvmx_pip_bist_status_cn30xx cn63xx;
1203 struct cvmx_pip_bist_status_cn30xx cn63xxp1;
1204 struct cvmx_pip_bist_status_cn61xx cn66xx;
1205 struct cvmx_pip_bist_status_s cn68xx;
1206 struct cvmx_pip_bist_status_cn61xx cn68xxp1;
1207 struct cvmx_pip_bist_status_cn61xx cnf71xx;
1209 typedef union cvmx_pip_bist_status cvmx_pip_bist_status_t;
1212 * cvmx_pip_bsel_ext_cfg#
1214 * PIP_BSEL_EXT_CFGX = Bit Select Extractor config register containing the
1215 * tag, offset, and skip values to be used when using the corresponding extractor.
1217 union cvmx_pip_bsel_ext_cfgx {
1219 struct cvmx_pip_bsel_ext_cfgx_s {
1220 #ifdef __BIG_ENDIAN_BITFIELD
1221 uint64_t reserved_56_63 : 8;
1222 uint64_t upper_tag : 16; /**< Extra Tag bits to be added to tag field from table
1223 Only included when PIP_PRT_TAG[INC_PRT]=0
1224 WORD2[TAG<31:16>] */
1225 uint64_t tag : 8; /**< Extra Tag bits to be added to tag field from table
1227 uint64_t reserved_25_31 : 7;
1228 uint64_t offset : 9; /**< Indicates offset to add to extractor mem adr
1229 to get final address to the lookup table */
1230 uint64_t reserved_7_15 : 9;
1231 uint64_t skip : 7; /**< Indicates number of bytes to skip from start of
1235 uint64_t reserved_7_15 : 9;
1236 uint64_t offset : 9;
1237 uint64_t reserved_25_31 : 7;
1239 uint64_t upper_tag : 16;
1240 uint64_t reserved_56_63 : 8;
1243 struct cvmx_pip_bsel_ext_cfgx_s cn61xx;
1244 struct cvmx_pip_bsel_ext_cfgx_s cn68xx;
1245 struct cvmx_pip_bsel_ext_cfgx_s cnf71xx;
1247 typedef union cvmx_pip_bsel_ext_cfgx cvmx_pip_bsel_ext_cfgx_t;
1250 * cvmx_pip_bsel_ext_pos#
1252 * PIP_BSEL_EXT_POSX = Bit Select Extractor config register containing the 8
1253 * bit positions and valids to be used when using the corresponding extractor.
1256 * Examples on bit positioning:
1257 * the most-significant-bit of the 3rd byte ... PIP_BSEL_EXT_CFG*[SKIP]=1 POSn=15 (decimal) or
1258 * PIP_BSEL_EXT_CFG*[SKIP]=0 POSn=23 (decimal)
1259 * the least-significant-bit of the 5th byte ... PIP_BSEL_EXT_CFG*[SKIP]=4 POSn=0
1260 * the second-least-significant bit of the 1st byte ... PIP_BSEL_EXT_CFG*[SKIP]=0 POSn=1
1262 * POSn_VAL and POSn correspond to <n> in the resultant index into
1263 * PIP_BSEL_TBL_ENT. When only x bits (0 < x < 7) are to be extracted,
1264 * POS[7:x] should normally be clear.
1266 union cvmx_pip_bsel_ext_posx {
1268 struct cvmx_pip_bsel_ext_posx_s {
1269 #ifdef __BIG_ENDIAN_BITFIELD
1270 uint64_t pos7_val : 1; /**< Valid bit for bit position 7 */
1271 uint64_t pos7 : 7; /**< Bit position for the 8th bit from 128 bit segment
1272 of pkt that is defined by the SKIP field of
1273 PIP_BSEL_EXT_CFG register. */
1274 uint64_t pos6_val : 1; /**< Valid bit for bit position 6 */
1275 uint64_t pos6 : 7; /**< Bit position for the 7th bit from 128 bit segment
1276 of pkt that is defined by the SKIP field of
1277 PIP_BSEL_EXT_CFG register. */
1278 uint64_t pos5_val : 1; /**< Valid bit for bit position 5 */
1279 uint64_t pos5 : 7; /**< Bit position for the 6th bit from 128 bit segment
1280 of pkt that is defined by the SKIP field of
1281 PIP_BSEL_EXT_CFG register. */
1282 uint64_t pos4_val : 1; /**< Valid bit for bit position 4 */
1283 uint64_t pos4 : 7; /**< Bit position for the 5th bit from 128 bit segment
1284 of pkt that is defined by the SKIP field of
1285 PIP_BSEL_EXT_CFG register. */
1286 uint64_t pos3_val : 1; /**< Valid bit for bit position 3 */
1287 uint64_t pos3 : 7; /**< Bit position for the 4th bit from 128 bit segment
1288 of pkt that is defined by the SKIP field of
1289 PIP_BSEL_EXT_CFG register. */
1290 uint64_t pos2_val : 1; /**< Valid bit for bit position 2 */
1291 uint64_t pos2 : 7; /**< Bit position for the 3rd bit from 128 bit segment
1292 of pkt that is defined by the SKIP field of
1293 PIP_BSEL_EXT_CFG register. */
1294 uint64_t pos1_val : 1; /**< Valid bit for bit position 1 */
1295 uint64_t pos1 : 7; /**< Bit position for the 2nd bit from 128 bit segment
1296 of pkt that is defined by the SKIP field of
1297 PIP_BSEL_EXT_CFG register. */
1298 uint64_t pos0_val : 1; /**< Valid bit for bit position 0 */
1299 uint64_t pos0 : 7; /**< Bit position for the 1st bit from 128 bit segment
1300 of pkt that is defined by the SKIP field of
1301 PIP_BSEL_EXT_CFG register. */
1304 uint64_t pos0_val : 1;
1306 uint64_t pos1_val : 1;
1308 uint64_t pos2_val : 1;
1310 uint64_t pos3_val : 1;
1312 uint64_t pos4_val : 1;
1314 uint64_t pos5_val : 1;
1316 uint64_t pos6_val : 1;
1318 uint64_t pos7_val : 1;
1321 struct cvmx_pip_bsel_ext_posx_s cn61xx;
1322 struct cvmx_pip_bsel_ext_posx_s cn68xx;
1323 struct cvmx_pip_bsel_ext_posx_s cnf71xx;
1325 typedef union cvmx_pip_bsel_ext_posx cvmx_pip_bsel_ext_posx_t;
1328 * cvmx_pip_bsel_tbl_ent#
1330 * PIP_BSEL_TBL_ENTX = Entry for the extractor table
1333 union cvmx_pip_bsel_tbl_entx {
1335 struct cvmx_pip_bsel_tbl_entx_s {
1336 #ifdef __BIG_ENDIAN_BITFIELD
1337 uint64_t tag_en : 1; /**< Enables the use of the TAG field */
1338 uint64_t grp_en : 1; /**< Enables the use of the GRP field */
1339 uint64_t tt_en : 1; /**< Enables the use of the TT field */
1340 uint64_t qos_en : 1; /**< Enables the use of the QOS field */
1341 uint64_t reserved_40_59 : 20;
1342 uint64_t tag : 8; /**< TAG bits to be used if TAG_EN is set */
1343 uint64_t reserved_22_31 : 10;
1344 uint64_t grp : 6; /**< GRP field to be used if GRP_EN is set */
1345 uint64_t reserved_10_15 : 6;
1346 uint64_t tt : 2; /**< TT field to be used if TT_EN is set */
1347 uint64_t reserved_3_7 : 5;
1348 uint64_t qos : 3; /**< QOS field to be used if QOS_EN is set */
1351 uint64_t reserved_3_7 : 5;
1353 uint64_t reserved_10_15 : 6;
1355 uint64_t reserved_22_31 : 10;
1357 uint64_t reserved_40_59 : 20;
1358 uint64_t qos_en : 1;
1360 uint64_t grp_en : 1;
1361 uint64_t tag_en : 1;
1364 struct cvmx_pip_bsel_tbl_entx_cn61xx {
1365 #ifdef __BIG_ENDIAN_BITFIELD
1366 uint64_t tag_en : 1; /**< Enables the use of the TAG field */
1367 uint64_t grp_en : 1; /**< Enables the use of the GRP field */
1368 uint64_t tt_en : 1; /**< Enables the use of the TT field */
1369 uint64_t qos_en : 1; /**< Enables the use of the QOS field */
1370 uint64_t reserved_40_59 : 20;
1371 uint64_t tag : 8; /**< TAG bits to be used if TAG_EN is set */
1372 uint64_t reserved_20_31 : 12;
1373 uint64_t grp : 4; /**< GRP field to be used if GRP_EN is set */
1374 uint64_t reserved_10_15 : 6;
1375 uint64_t tt : 2; /**< TT field to be used if TT_EN is set */
1376 uint64_t reserved_3_7 : 5;
1377 uint64_t qos : 3; /**< QOS field to be used if QOS_EN is set */
1380 uint64_t reserved_3_7 : 5;
1382 uint64_t reserved_10_15 : 6;
1384 uint64_t reserved_20_31 : 12;
1386 uint64_t reserved_40_59 : 20;
1387 uint64_t qos_en : 1;
1389 uint64_t grp_en : 1;
1390 uint64_t tag_en : 1;
1393 struct cvmx_pip_bsel_tbl_entx_s cn68xx;
1394 struct cvmx_pip_bsel_tbl_entx_cn61xx cnf71xx;
1396 typedef union cvmx_pip_bsel_tbl_entx cvmx_pip_bsel_tbl_entx_t;
1401 union cvmx_pip_clken {
1403 struct cvmx_pip_clken_s {
1404 #ifdef __BIG_ENDIAN_BITFIELD
1405 uint64_t reserved_1_63 : 63;
1406 uint64_t clken : 1; /**< Controls the conditional clocking within PIP
1407 0=Allow HW to control the clocks
1408 1=Force the clocks to be always on */
1411 uint64_t reserved_1_63 : 63;
1414 struct cvmx_pip_clken_s cn61xx;
1415 struct cvmx_pip_clken_s cn63xx;
1416 struct cvmx_pip_clken_s cn63xxp1;
1417 struct cvmx_pip_clken_s cn66xx;
1418 struct cvmx_pip_clken_s cn68xx;
1419 struct cvmx_pip_clken_s cn68xxp1;
1420 struct cvmx_pip_clken_s cnf71xx;
1422 typedef union cvmx_pip_clken cvmx_pip_clken_t;
1427 * PIP_CRC_CTL = PIP CRC Control Register
1429 * Controls datapath reflection when calculating CRC
1431 union cvmx_pip_crc_ctlx {
1433 struct cvmx_pip_crc_ctlx_s {
1434 #ifdef __BIG_ENDIAN_BITFIELD
1435 uint64_t reserved_2_63 : 62;
1436 uint64_t invres : 1; /**< Invert the result */
1437 uint64_t reflect : 1; /**< Reflect the bits in each byte.
1438 Byte order does not change.
1439 - 0: CRC is calculated MSB to LSB
1440 - 1: CRC is calculated LSB to MSB */
1442 uint64_t reflect : 1;
1443 uint64_t invres : 1;
1444 uint64_t reserved_2_63 : 62;
1447 struct cvmx_pip_crc_ctlx_s cn38xx;
1448 struct cvmx_pip_crc_ctlx_s cn38xxp2;
1449 struct cvmx_pip_crc_ctlx_s cn58xx;
1450 struct cvmx_pip_crc_ctlx_s cn58xxp1;
1452 typedef union cvmx_pip_crc_ctlx cvmx_pip_crc_ctlx_t;
1457 * PIP_CRC_IV = PIP CRC IV Register
1459 * Determines the IV used by the CRC algorithm
1463 * PIP_CRC_IV controls the initial state of the CRC algorithm. Octane can
1464 * support a wide range of CRC algorithms and as such, the IV must be
1465 * carefully constructed to meet the specific algorithm. The code below
1466 * determines the value to program into Octane based on the algorthim's IV
1467 * and width. In the case of Octane, the width should always be 32.
1469 * PIP_CRC_IV0 sets the IV for ports 0-15 while PIP_CRC_IV1 sets the IV for
1472 * unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
1476 * unsigned int current_val = algorithm_iv;
1478 * for(i = 0; i < w; i++) [
1479 * doit = current_val & 0x1;
1481 * if(doit) current_val ^= poly;
1482 * assert(!(current_val & 0x1));
1484 * current_val = (current_val >> 1) | (doit << (w-1));
1487 * return current_val;
1490 union cvmx_pip_crc_ivx {
1492 struct cvmx_pip_crc_ivx_s {
1493 #ifdef __BIG_ENDIAN_BITFIELD
1494 uint64_t reserved_32_63 : 32;
1495 uint64_t iv : 32; /**< IV used by the CRC algorithm. Default is FCS32. */
1498 uint64_t reserved_32_63 : 32;
1501 struct cvmx_pip_crc_ivx_s cn38xx;
1502 struct cvmx_pip_crc_ivx_s cn38xxp2;
1503 struct cvmx_pip_crc_ivx_s cn58xx;
1504 struct cvmx_pip_crc_ivx_s cn58xxp1;
1506 typedef union cvmx_pip_crc_ivx cvmx_pip_crc_ivx_t;
1509 * cvmx_pip_dec_ipsec#
1511 * PIP_DEC_IPSEC = UDP or TCP ports to watch for DEC IPSEC
1513 * PIP sets the dec_ipsec based on TCP or UDP destination port.
1515 union cvmx_pip_dec_ipsecx {
1517 struct cvmx_pip_dec_ipsecx_s {
1518 #ifdef __BIG_ENDIAN_BITFIELD
1519 uint64_t reserved_18_63 : 46;
1520 uint64_t tcp : 1; /**< This DPRT should be used for TCP packets */
1521 uint64_t udp : 1; /**< This DPRT should be used for UDP packets */
1522 uint64_t dprt : 16; /**< UDP or TCP destination port to match on */
1527 uint64_t reserved_18_63 : 46;
1530 struct cvmx_pip_dec_ipsecx_s cn30xx;
1531 struct cvmx_pip_dec_ipsecx_s cn31xx;
1532 struct cvmx_pip_dec_ipsecx_s cn38xx;
1533 struct cvmx_pip_dec_ipsecx_s cn38xxp2;
1534 struct cvmx_pip_dec_ipsecx_s cn50xx;
1535 struct cvmx_pip_dec_ipsecx_s cn52xx;
1536 struct cvmx_pip_dec_ipsecx_s cn52xxp1;
1537 struct cvmx_pip_dec_ipsecx_s cn56xx;
1538 struct cvmx_pip_dec_ipsecx_s cn56xxp1;
1539 struct cvmx_pip_dec_ipsecx_s cn58xx;
1540 struct cvmx_pip_dec_ipsecx_s cn58xxp1;
1541 struct cvmx_pip_dec_ipsecx_s cn61xx;
1542 struct cvmx_pip_dec_ipsecx_s cn63xx;
1543 struct cvmx_pip_dec_ipsecx_s cn63xxp1;
1544 struct cvmx_pip_dec_ipsecx_s cn66xx;
1545 struct cvmx_pip_dec_ipsecx_s cn68xx;
1546 struct cvmx_pip_dec_ipsecx_s cn68xxp1;
1547 struct cvmx_pip_dec_ipsecx_s cnf71xx;
1549 typedef union cvmx_pip_dec_ipsecx cvmx_pip_dec_ipsecx_t;
1552 * cvmx_pip_dsa_src_grp
1554 union cvmx_pip_dsa_src_grp {
1556 struct cvmx_pip_dsa_src_grp_s {
1557 #ifdef __BIG_ENDIAN_BITFIELD
1558 uint64_t map15 : 4; /**< DSA Group Algorithm */
1559 uint64_t map14 : 4; /**< DSA Group Algorithm */
1560 uint64_t map13 : 4; /**< DSA Group Algorithm */
1561 uint64_t map12 : 4; /**< DSA Group Algorithm */
1562 uint64_t map11 : 4; /**< DSA Group Algorithm */
1563 uint64_t map10 : 4; /**< DSA Group Algorithm */
1564 uint64_t map9 : 4; /**< DSA Group Algorithm */
1565 uint64_t map8 : 4; /**< DSA Group Algorithm */
1566 uint64_t map7 : 4; /**< DSA Group Algorithm */
1567 uint64_t map6 : 4; /**< DSA Group Algorithm */
1568 uint64_t map5 : 4; /**< DSA Group Algorithm */
1569 uint64_t map4 : 4; /**< DSA Group Algorithm */
1570 uint64_t map3 : 4; /**< DSA Group Algorithm */
1571 uint64_t map2 : 4; /**< DSA Group Algorithm */
1572 uint64_t map1 : 4; /**< DSA Group Algorithm */
1573 uint64_t map0 : 4; /**< DSA Group Algorithm
1574 Use the DSA source id to compute GRP */
1594 struct cvmx_pip_dsa_src_grp_s cn52xx;
1595 struct cvmx_pip_dsa_src_grp_s cn52xxp1;
1596 struct cvmx_pip_dsa_src_grp_s cn56xx;
1597 struct cvmx_pip_dsa_src_grp_s cn61xx;
1598 struct cvmx_pip_dsa_src_grp_s cn63xx;
1599 struct cvmx_pip_dsa_src_grp_s cn63xxp1;
1600 struct cvmx_pip_dsa_src_grp_s cn66xx;
1601 struct cvmx_pip_dsa_src_grp_s cn68xx;
1602 struct cvmx_pip_dsa_src_grp_s cn68xxp1;
1603 struct cvmx_pip_dsa_src_grp_s cnf71xx;
1605 typedef union cvmx_pip_dsa_src_grp cvmx_pip_dsa_src_grp_t;
1608 * cvmx_pip_dsa_vid_grp
1610 union cvmx_pip_dsa_vid_grp {
1612 struct cvmx_pip_dsa_vid_grp_s {
1613 #ifdef __BIG_ENDIAN_BITFIELD
1614 uint64_t map15 : 4; /**< DSA Group Algorithm */
1615 uint64_t map14 : 4; /**< DSA Group Algorithm */
1616 uint64_t map13 : 4; /**< DSA Group Algorithm */
1617 uint64_t map12 : 4; /**< DSA Group Algorithm */
1618 uint64_t map11 : 4; /**< DSA Group Algorithm */
1619 uint64_t map10 : 4; /**< DSA Group Algorithm */
1620 uint64_t map9 : 4; /**< DSA Group Algorithm */
1621 uint64_t map8 : 4; /**< DSA Group Algorithm */
1622 uint64_t map7 : 4; /**< DSA Group Algorithm */
1623 uint64_t map6 : 4; /**< DSA Group Algorithm */
1624 uint64_t map5 : 4; /**< DSA Group Algorithm */
1625 uint64_t map4 : 4; /**< DSA Group Algorithm */
1626 uint64_t map3 : 4; /**< DSA Group Algorithm */
1627 uint64_t map2 : 4; /**< DSA Group Algorithm */
1628 uint64_t map1 : 4; /**< DSA Group Algorithm */
1629 uint64_t map0 : 4; /**< DSA Group Algorithm
1630 Use the DSA source id to compute GRP */
1650 struct cvmx_pip_dsa_vid_grp_s cn52xx;
1651 struct cvmx_pip_dsa_vid_grp_s cn52xxp1;
1652 struct cvmx_pip_dsa_vid_grp_s cn56xx;
1653 struct cvmx_pip_dsa_vid_grp_s cn61xx;
1654 struct cvmx_pip_dsa_vid_grp_s cn63xx;
1655 struct cvmx_pip_dsa_vid_grp_s cn63xxp1;
1656 struct cvmx_pip_dsa_vid_grp_s cn66xx;
1657 struct cvmx_pip_dsa_vid_grp_s cn68xx;
1658 struct cvmx_pip_dsa_vid_grp_s cn68xxp1;
1659 struct cvmx_pip_dsa_vid_grp_s cnf71xx;
1661 typedef union cvmx_pip_dsa_vid_grp cvmx_pip_dsa_vid_grp_t;
1664 * cvmx_pip_frm_len_chk#
1667 * PIP_FRM_LEN_CHK0 is used for packets on packet interface0, PCI, PCI RAW, and PKO loopback ports.
1668 * PIP_FRM_LEN_CHK1 is unused.
1670 union cvmx_pip_frm_len_chkx {
1672 struct cvmx_pip_frm_len_chkx_s {
1673 #ifdef __BIG_ENDIAN_BITFIELD
1674 uint64_t reserved_32_63 : 32;
1675 uint64_t maxlen : 16; /**< Byte count for Max-sized frame check
1676 PIP_PRT_CFGn[MAXERR_EN] enables the check for
1678 If enabled, failing packets set the MAXERR
1679 interrupt and work-queue entry WORD2[opcode] is
1680 set to OVER_FCS (0x3, if packet has bad FCS) or
1681 OVER_ERR (0x4, if packet has good FCS).
1682 The effective MAXLEN used by HW is
1683 PIP_PRT_CFG[DSA_EN] == 0,
1684 PIP_FRM_LEN_CHK[MAXLEN] + 4*VV + 4*VS
1685 PIP_PRT_CFG[DSA_EN] == 1,
1686 PIP_FRM_LEN_CHK[MAXLEN] + PIP_PRT_CFG[SKIP]+4*VS
1687 If PTP_MODE, the 8B timestamp is prepended to the
1688 packet. MAXLEN should be increased by 8 to
1689 compensate for the additional timestamp field. */
1690 uint64_t minlen : 16; /**< Byte count for Min-sized frame check
1691 PIP_PRT_CFGn[MINERR_EN] enables the check for
1693 If enabled, failing packets set the MINERR
1694 interrupt and work-queue entry WORD2[opcode] is
1695 set to UNDER_FCS (0x6, if packet has bad FCS) or
1696 UNDER_ERR (0x8, if packet has good FCS).
1697 If PTP_MODE, the 8B timestamp is prepended to the
1698 packet. MINLEN should be increased by 8 to
1699 compensate for the additional timestamp field. */
1701 uint64_t minlen : 16;
1702 uint64_t maxlen : 16;
1703 uint64_t reserved_32_63 : 32;
1706 struct cvmx_pip_frm_len_chkx_s cn50xx;
1707 struct cvmx_pip_frm_len_chkx_s cn52xx;
1708 struct cvmx_pip_frm_len_chkx_s cn52xxp1;
1709 struct cvmx_pip_frm_len_chkx_s cn56xx;
1710 struct cvmx_pip_frm_len_chkx_s cn56xxp1;
1711 struct cvmx_pip_frm_len_chkx_s cn61xx;
1712 struct cvmx_pip_frm_len_chkx_s cn63xx;
1713 struct cvmx_pip_frm_len_chkx_s cn63xxp1;
1714 struct cvmx_pip_frm_len_chkx_s cn66xx;
1715 struct cvmx_pip_frm_len_chkx_s cn68xx;
1716 struct cvmx_pip_frm_len_chkx_s cn68xxp1;
1717 struct cvmx_pip_frm_len_chkx_s cnf71xx;
1719 typedef union cvmx_pip_frm_len_chkx cvmx_pip_frm_len_chkx_t;
1724 * PIP_GBL_CFG = PIP's Global Config Register
1726 * Global config information that applies to all ports.
1730 * IPv4 allows optional UDP checksum by sending the all 0's patterns. IPv6
1731 * outlaws this and the spec says to always check UDP checksum. This mode
1732 * bit allows the user to treat IPv6 as IPv4, meaning that the all 0's
1733 * pattern will cause a UDP checksum pass.
1735 union cvmx_pip_gbl_cfg {
1737 struct cvmx_pip_gbl_cfg_s {
1738 #ifdef __BIG_ENDIAN_BITFIELD
1739 uint64_t reserved_19_63 : 45;
1740 uint64_t tag_syn : 1; /**< Do not include src_crc for TCP/SYN&!ACK packets
1742 1 = tag hash is dst_crc for TCP/SYN&!ACK packets */
1743 uint64_t ip6_udp : 1; /**< IPv6/UDP checksum is not optional
1744 0 = Allow optional checksum code
1745 1 = Do not allow optional checksum code */
1746 uint64_t max_l2 : 1; /**< Config bit to choose the largest L2 frame size
1747 Chooses the value of the L2 Type/Length field
1748 to classify the frame as length.
1751 uint64_t reserved_11_15 : 5;
1752 uint64_t raw_shf : 3; /**< RAW Packet shift amount
1753 Number of bytes to pad a RAW packet. */
1754 uint64_t reserved_3_7 : 5;
1755 uint64_t nip_shf : 3; /**< Non-IP shift amount
1756 Number of bytes to pad a packet that has been
1757 classified as not IP. */
1759 uint64_t nip_shf : 3;
1760 uint64_t reserved_3_7 : 5;
1761 uint64_t raw_shf : 3;
1762 uint64_t reserved_11_15 : 5;
1763 uint64_t max_l2 : 1;
1764 uint64_t ip6_udp : 1;
1765 uint64_t tag_syn : 1;
1766 uint64_t reserved_19_63 : 45;
1769 struct cvmx_pip_gbl_cfg_s cn30xx;
1770 struct cvmx_pip_gbl_cfg_s cn31xx;
1771 struct cvmx_pip_gbl_cfg_s cn38xx;
1772 struct cvmx_pip_gbl_cfg_s cn38xxp2;
1773 struct cvmx_pip_gbl_cfg_s cn50xx;
1774 struct cvmx_pip_gbl_cfg_s cn52xx;
1775 struct cvmx_pip_gbl_cfg_s cn52xxp1;
1776 struct cvmx_pip_gbl_cfg_s cn56xx;
1777 struct cvmx_pip_gbl_cfg_s cn56xxp1;
1778 struct cvmx_pip_gbl_cfg_s cn58xx;
1779 struct cvmx_pip_gbl_cfg_s cn58xxp1;
1780 struct cvmx_pip_gbl_cfg_s cn61xx;
1781 struct cvmx_pip_gbl_cfg_s cn63xx;
1782 struct cvmx_pip_gbl_cfg_s cn63xxp1;
1783 struct cvmx_pip_gbl_cfg_s cn66xx;
1784 struct cvmx_pip_gbl_cfg_s cn68xx;
1785 struct cvmx_pip_gbl_cfg_s cn68xxp1;
1786 struct cvmx_pip_gbl_cfg_s cnf71xx;
1788 typedef union cvmx_pip_gbl_cfg cvmx_pip_gbl_cfg_t;
1793 * PIP_GBL_CTL = PIP's Global Control Register
1795 * Global control information. These are the global checker enables for
1796 * IPv4/IPv6 and TCP/UDP parsing. The enables effect all ports.
1799 * The following text describes the conditions in which each checker will
1800 * assert and flag an exception. By disabling the checker, the exception will
1801 * not be flagged and the packet will be parsed as best it can. Note, by
1802 * disabling conditions, packets can be parsed incorrectly (.i.e. IP_MAL and
1803 * L4_MAL could cause bits to be seen in the wrong place. IP_CHK and L4_CHK
1804 * means that the packet was corrupted).
1807 * Indicates that an IPv4 packet contained an IPv4 header checksum
1808 * violations. Only applies to packets classified as IPv4.
1811 * Indicates that the packet was malformed. Malformed packets are defined as
1812 * packets that are not long enough to cover the IP header or not long enough
1813 * to cover the length in the IP header.
1816 * Indicates that the IPv4 TTL field or IPv6 HOP field is zero.
1819 * Indicates the presence of IPv4 options. It is set when the length != 5.
1820 * This only applies to packets classified as IPv4.
1823 * Indicate the presence of IPv6 early extension headers. These bits only
1824 * apply to packets classified as IPv6. Bit 0 will flag early extensions
1825 * when next_header is any one of the following...
1828 * - destination (60)
1831 * Bit 1 will flag early extentions when next_header is NOT any of the
1836 * - fragmentation (44)
1843 * Indicates that a TCP or UDP packet is not long enough to cover the TCP or
1847 * Indicates that a TCP or UDP packet has an illegal port number - either the
1848 * source or destination port is zero.
1851 * Indicates that a packet classified as either TCP or UDP contains an L4
1855 * Indicates that the TCP or UDP length does not match the the IP length.
1858 * Indicates any of the following conditions...
1860 * [URG, ACK, PSH, RST, SYN, FIN] : tcp_flag
1861 * 6'b000001: (FIN only)
1863 * 6'bxxx1x1: (RST+FIN+*)
1864 * 6'b1xxx1x: (URG+SYN+*)
1865 * 6'bxxx11x: (RST+SYN+*)
1866 * 6'bxxxx11: (SYN+FIN+*)
1868 union cvmx_pip_gbl_ctl {
1870 struct cvmx_pip_gbl_ctl_s {
1871 #ifdef __BIG_ENDIAN_BITFIELD
1872 uint64_t reserved_29_63 : 35;
1873 uint64_t egrp_dis : 1; /**< PKT_INST_HDR extended group field disable
1874 When set, HW will ignore the EGRP field of the
1875 PKT_INST_HDR - bits 47:46. */
1876 uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
1877 0=Allow NTAG,NTT,NGRP,NQOS bits in the
1878 instruction header to control which fields from
1879 the instruction header are used for WQE WORD2.
1880 1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
1881 instruction header and act as if these fields
1882 were zero. Thus always use the TAG,TT,GRP,QOS
1883 (depending on the instruction header length)
1884 from the instruction header for the WQE WORD2. */
1885 uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
1886 Use the DSA source id to compute GRP */
1887 uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
1888 Use the DSA source id to compute GRP when the
1889 DSA tag command to TO_CPU */
1890 uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
1891 Use the DSA VLAN id to compute GRP */
1892 uint64_t reserved_21_23 : 3;
1893 uint64_t ring_en : 1; /**< Enable DPI ring information in WQE */
1894 uint64_t reserved_17_19 : 3;
1895 uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
1896 Does not apply to DPI ports (32-35)
1897 When using 2-byte instruction header words,
1898 either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1899 uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
1900 0=use the 1st (network order) VLAN
1901 1=use the 2nd (network order) VLAN */
1902 uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
1903 0=use the 1st (network order) VLAN
1904 1=use the 2nd (network order) VLAN */
1905 uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
1906 uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
1907 uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
1908 uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
1909 uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
1910 uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
1911 uint64_t reserved_6_7 : 2;
1912 uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
1913 uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
1914 uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
1915 uint64_t ip_mal : 1; /**< Enable malformed check */
1916 uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
1918 uint64_t ip_chk : 1;
1919 uint64_t ip_mal : 1;
1920 uint64_t ip_hop : 1;
1921 uint64_t ip4_opts : 1;
1922 uint64_t ip6_eext : 2;
1923 uint64_t reserved_6_7 : 2;
1924 uint64_t l4_mal : 1;
1925 uint64_t l4_prt : 1;
1926 uint64_t l4_chk : 1;
1927 uint64_t l4_len : 1;
1928 uint64_t tcp_flag : 1;
1929 uint64_t l2_mal : 1;
1930 uint64_t vs_qos : 1;
1931 uint64_t vs_wqe : 1;
1933 uint64_t reserved_17_19 : 3;
1934 uint64_t ring_en : 1;
1935 uint64_t reserved_21_23 : 3;
1936 uint64_t dsa_grp_sid : 1;
1937 uint64_t dsa_grp_scmd : 1;
1938 uint64_t dsa_grp_tvid : 1;
1939 uint64_t ihmsk_dis : 1;
1940 uint64_t egrp_dis : 1;
1941 uint64_t reserved_29_63 : 35;
1944 struct cvmx_pip_gbl_ctl_cn30xx {
1945 #ifdef __BIG_ENDIAN_BITFIELD
1946 uint64_t reserved_17_63 : 47;
1947 uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
1948 Only applies to the packet interface prts (0-31)
1949 When using 2-byte instruction header words,
1950 either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
1951 uint64_t vs_wqe : 1; /**< Which VLAN CFI and ID to use when VLAN Stacking
1952 0=use the 1st (network order) VLAN
1953 1=use the 2nd (network order) VLAN */
1954 uint64_t vs_qos : 1; /**< Which VLAN priority to use when VLAN Stacking
1955 0=use the 1st (network order) VLAN
1956 1=use the 2nd (network order) VLAN */
1957 uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
1958 uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
1959 uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
1960 uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
1961 uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
1962 uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
1963 uint64_t reserved_6_7 : 2;
1964 uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
1965 uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
1966 uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
1967 uint64_t ip_mal : 1; /**< Enable malformed check */
1968 uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
1970 uint64_t ip_chk : 1;
1971 uint64_t ip_mal : 1;
1972 uint64_t ip_hop : 1;
1973 uint64_t ip4_opts : 1;
1974 uint64_t ip6_eext : 2;
1975 uint64_t reserved_6_7 : 2;
1976 uint64_t l4_mal : 1;
1977 uint64_t l4_prt : 1;
1978 uint64_t l4_chk : 1;
1979 uint64_t l4_len : 1;
1980 uint64_t tcp_flag : 1;
1981 uint64_t l2_mal : 1;
1982 uint64_t vs_qos : 1;
1983 uint64_t vs_wqe : 1;
1985 uint64_t reserved_17_63 : 47;
1988 struct cvmx_pip_gbl_ctl_cn30xx cn31xx;
1989 struct cvmx_pip_gbl_ctl_cn30xx cn38xx;
1990 struct cvmx_pip_gbl_ctl_cn30xx cn38xxp2;
1991 struct cvmx_pip_gbl_ctl_cn30xx cn50xx;
1992 struct cvmx_pip_gbl_ctl_cn52xx {
1993 #ifdef __BIG_ENDIAN_BITFIELD
1994 uint64_t reserved_27_63 : 37;
1995 uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
1996 Use the DSA source id to compute GRP */
1997 uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
1998 Use the DSA source id to compute GRP when the
1999 DSA tag command to TO_CPU */
2000 uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
2001 Use the DSA VLAN id to compute GRP */
2002 uint64_t reserved_21_23 : 3;
2003 uint64_t ring_en : 1; /**< Enable PCIe ring information in WQE */
2004 uint64_t reserved_17_19 : 3;
2005 uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
2006 Does not apply to PCI ports (32-35)
2007 When using 2-byte instruction header words,
2008 either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2009 uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2010 0=use the 1st (network order) VLAN
2011 1=use the 2nd (network order) VLAN */
2012 uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
2013 0=use the 1st (network order) VLAN
2014 1=use the 2nd (network order) VLAN */
2015 uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
2016 uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
2017 uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
2018 uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
2019 uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
2020 uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
2021 uint64_t reserved_6_7 : 2;
2022 uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
2023 uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
2024 uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
2025 uint64_t ip_mal : 1; /**< Enable malformed check */
2026 uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
2028 uint64_t ip_chk : 1;
2029 uint64_t ip_mal : 1;
2030 uint64_t ip_hop : 1;
2031 uint64_t ip4_opts : 1;
2032 uint64_t ip6_eext : 2;
2033 uint64_t reserved_6_7 : 2;
2034 uint64_t l4_mal : 1;
2035 uint64_t l4_prt : 1;
2036 uint64_t l4_chk : 1;
2037 uint64_t l4_len : 1;
2038 uint64_t tcp_flag : 1;
2039 uint64_t l2_mal : 1;
2040 uint64_t vs_qos : 1;
2041 uint64_t vs_wqe : 1;
2043 uint64_t reserved_17_19 : 3;
2044 uint64_t ring_en : 1;
2045 uint64_t reserved_21_23 : 3;
2046 uint64_t dsa_grp_sid : 1;
2047 uint64_t dsa_grp_scmd : 1;
2048 uint64_t dsa_grp_tvid : 1;
2049 uint64_t reserved_27_63 : 37;
2052 struct cvmx_pip_gbl_ctl_cn52xx cn52xxp1;
2053 struct cvmx_pip_gbl_ctl_cn52xx cn56xx;
2054 struct cvmx_pip_gbl_ctl_cn56xxp1 {
2055 #ifdef __BIG_ENDIAN_BITFIELD
2056 uint64_t reserved_21_63 : 43;
2057 uint64_t ring_en : 1; /**< Enable PCIe ring information in WQE */
2058 uint64_t reserved_17_19 : 3;
2059 uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
2060 Does not apply to PCI ports (32-35)
2061 When using 2-byte instruction header words,
2062 either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2063 uint64_t vs_wqe : 1; /**< Which VLAN CFI and ID to use when VLAN Stacking
2064 0=use the 1st (network order) VLAN
2065 1=use the 2nd (network order) VLAN */
2066 uint64_t vs_qos : 1; /**< Which VLAN priority to use when VLAN Stacking
2067 0=use the 1st (network order) VLAN
2068 1=use the 2nd (network order) VLAN */
2069 uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
2070 uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
2071 uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
2072 uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
2073 uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
2074 uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
2075 uint64_t reserved_6_7 : 2;
2076 uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
2077 uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
2078 uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
2079 uint64_t ip_mal : 1; /**< Enable malformed check */
2080 uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
2082 uint64_t ip_chk : 1;
2083 uint64_t ip_mal : 1;
2084 uint64_t ip_hop : 1;
2085 uint64_t ip4_opts : 1;
2086 uint64_t ip6_eext : 2;
2087 uint64_t reserved_6_7 : 2;
2088 uint64_t l4_mal : 1;
2089 uint64_t l4_prt : 1;
2090 uint64_t l4_chk : 1;
2091 uint64_t l4_len : 1;
2092 uint64_t tcp_flag : 1;
2093 uint64_t l2_mal : 1;
2094 uint64_t vs_qos : 1;
2095 uint64_t vs_wqe : 1;
2097 uint64_t reserved_17_19 : 3;
2098 uint64_t ring_en : 1;
2099 uint64_t reserved_21_63 : 43;
2102 struct cvmx_pip_gbl_ctl_cn30xx cn58xx;
2103 struct cvmx_pip_gbl_ctl_cn30xx cn58xxp1;
2104 struct cvmx_pip_gbl_ctl_cn61xx {
2105 #ifdef __BIG_ENDIAN_BITFIELD
2106 uint64_t reserved_28_63 : 36;
2107 uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
2108 0=Allow NTAG,NTT,NGRP,NQOS bits in the
2109 instruction header to control which fields from
2110 the instruction header are used for WQE WORD2.
2111 1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
2112 instruction header and act as if these fields
2113 were zero. Thus always use the TAG,TT,GRP,QOS
2114 (depending on the instruction header length)
2115 from the instruction header for the WQE WORD2. */
2116 uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
2117 Use the DSA source id to compute GRP */
2118 uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
2119 Use the DSA source id to compute GRP when the
2120 DSA tag command to TO_CPU */
2121 uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
2122 Use the DSA VLAN id to compute GRP */
2123 uint64_t reserved_21_23 : 3;
2124 uint64_t ring_en : 1; /**< Enable DPI ring information in WQE */
2125 uint64_t reserved_17_19 : 3;
2126 uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
2127 Does not apply to DPI ports (32-35)
2128 When using 2-byte instruction header words,
2129 either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2130 uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2131 0=use the 1st (network order) VLAN
2132 1=use the 2nd (network order) VLAN */
2133 uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
2134 0=use the 1st (network order) VLAN
2135 1=use the 2nd (network order) VLAN */
2136 uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
2137 uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
2138 uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
2139 uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
2140 uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
2141 uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
2142 uint64_t reserved_6_7 : 2;
2143 uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
2144 uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
2145 uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
2146 uint64_t ip_mal : 1; /**< Enable malformed check */
2147 uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
2149 uint64_t ip_chk : 1;
2150 uint64_t ip_mal : 1;
2151 uint64_t ip_hop : 1;
2152 uint64_t ip4_opts : 1;
2153 uint64_t ip6_eext : 2;
2154 uint64_t reserved_6_7 : 2;
2155 uint64_t l4_mal : 1;
2156 uint64_t l4_prt : 1;
2157 uint64_t l4_chk : 1;
2158 uint64_t l4_len : 1;
2159 uint64_t tcp_flag : 1;
2160 uint64_t l2_mal : 1;
2161 uint64_t vs_qos : 1;
2162 uint64_t vs_wqe : 1;
2164 uint64_t reserved_17_19 : 3;
2165 uint64_t ring_en : 1;
2166 uint64_t reserved_21_23 : 3;
2167 uint64_t dsa_grp_sid : 1;
2168 uint64_t dsa_grp_scmd : 1;
2169 uint64_t dsa_grp_tvid : 1;
2170 uint64_t ihmsk_dis : 1;
2171 uint64_t reserved_28_63 : 36;
2174 struct cvmx_pip_gbl_ctl_cn61xx cn63xx;
2175 struct cvmx_pip_gbl_ctl_cn61xx cn63xxp1;
2176 struct cvmx_pip_gbl_ctl_cn61xx cn66xx;
2177 struct cvmx_pip_gbl_ctl_cn68xx {
2178 #ifdef __BIG_ENDIAN_BITFIELD
2179 uint64_t reserved_29_63 : 35;
2180 uint64_t egrp_dis : 1; /**< PKT_INST_HDR extended group field disable
2181 When set, HW will ignore the EGRP field of the
2182 PKT_INST_HDR - bits 47:46. */
2183 uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
2184 0=Allow NTAG,NTT,NGRP,NQOS bits in the
2185 instruction header to control which fields from
2186 the instruction header are used for WQE WORD2.
2187 1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
2188 instruction header and act as if these fields
2189 were zero. Thus always use the TAG,TT,GRP,QOS
2190 (depending on the instruction header length)
2191 from the instruction header for the WQE WORD2. */
2192 uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
2193 Use the DSA source id to compute GRP */
2194 uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
2195 Use the DSA source id to compute GRP when the
2196 DSA tag command to TO_CPU */
2197 uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
2198 Use the DSA VLAN id to compute GRP */
2199 uint64_t reserved_17_23 : 7;
2200 uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
2201 When using 2-byte instruction header words,
2202 either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2203 uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2204 0=use the 1st (network order) VLAN
2205 1=use the 2nd (network order) VLAN */
2206 uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
2207 0=use the 1st (network order) VLAN
2208 1=use the 2nd (network order) VLAN */
2209 uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
2210 uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
2211 uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
2212 uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
2213 uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
2214 uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
2215 uint64_t reserved_6_7 : 2;
2216 uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
2217 uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
2218 uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
2219 uint64_t ip_mal : 1; /**< Enable malformed check */
2220 uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
2222 uint64_t ip_chk : 1;
2223 uint64_t ip_mal : 1;
2224 uint64_t ip_hop : 1;
2225 uint64_t ip4_opts : 1;
2226 uint64_t ip6_eext : 2;
2227 uint64_t reserved_6_7 : 2;
2228 uint64_t l4_mal : 1;
2229 uint64_t l4_prt : 1;
2230 uint64_t l4_chk : 1;
2231 uint64_t l4_len : 1;
2232 uint64_t tcp_flag : 1;
2233 uint64_t l2_mal : 1;
2234 uint64_t vs_qos : 1;
2235 uint64_t vs_wqe : 1;
2237 uint64_t reserved_17_23 : 7;
2238 uint64_t dsa_grp_sid : 1;
2239 uint64_t dsa_grp_scmd : 1;
2240 uint64_t dsa_grp_tvid : 1;
2241 uint64_t ihmsk_dis : 1;
2242 uint64_t egrp_dis : 1;
2243 uint64_t reserved_29_63 : 35;
2246 struct cvmx_pip_gbl_ctl_cn68xxp1 {
2247 #ifdef __BIG_ENDIAN_BITFIELD
2248 uint64_t reserved_28_63 : 36;
2249 uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
2250 0=Allow NTAG,NTT,NGRP,NQOS bits in the
2251 instruction header to control which fields from
2252 the instruction header are used for WQE WORD2.
2253 1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
2254 instruction header and act as if these fields
2255 were zero. Thus always use the TAG,TT,GRP,QOS
2256 (depending on the instruction header length)
2257 from the instruction header for the WQE WORD2. */
2258 uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
2259 Use the DSA source id to compute GRP */
2260 uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
2261 Use the DSA source id to compute GRP when the
2262 DSA tag command to TO_CPU */
2263 uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
2264 Use the DSA VLAN id to compute GRP */
2265 uint64_t reserved_17_23 : 7;
2266 uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
2267 When using 2-byte instruction header words,
2268 either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
2269 uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
2270 0=use the 1st (network order) VLAN
2271 1=use the 2nd (network order) VLAN */
2272 uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
2273 0=use the 1st (network order) VLAN
2274 1=use the 2nd (network order) VLAN */
2275 uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
2276 uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
2277 uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
2278 uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
2279 uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
2280 uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
2281 uint64_t reserved_6_7 : 2;
2282 uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
2283 uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
2284 uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
2285 uint64_t ip_mal : 1; /**< Enable malformed check */
2286 uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
2288 uint64_t ip_chk : 1;
2289 uint64_t ip_mal : 1;
2290 uint64_t ip_hop : 1;
2291 uint64_t ip4_opts : 1;
2292 uint64_t ip6_eext : 2;
2293 uint64_t reserved_6_7 : 2;
2294 uint64_t l4_mal : 1;
2295 uint64_t l4_prt : 1;
2296 uint64_t l4_chk : 1;
2297 uint64_t l4_len : 1;
2298 uint64_t tcp_flag : 1;
2299 uint64_t l2_mal : 1;
2300 uint64_t vs_qos : 1;
2301 uint64_t vs_wqe : 1;
2303 uint64_t reserved_17_23 : 7;
2304 uint64_t dsa_grp_sid : 1;
2305 uint64_t dsa_grp_scmd : 1;
2306 uint64_t dsa_grp_tvid : 1;
2307 uint64_t ihmsk_dis : 1;
2308 uint64_t reserved_28_63 : 36;
2311 struct cvmx_pip_gbl_ctl_cn61xx cnf71xx;
2313 typedef union cvmx_pip_gbl_ctl cvmx_pip_gbl_ctl_t;
2316 * cvmx_pip_hg_pri_qos
2319 * This register controls accesses to the HG_QOS_TABLE. To write an entry of
2320 * the table, write PIP_HG_PRI_QOS with PRI=table address, QOS=priority level,
2321 * UP_QOS=1. To read an entry of the table, write PIP_HG_PRI_QOS with
2322 * PRI=table address, QOS=dont_carepriority level, UP_QOS=0 and then read
2323 * PIP_HG_PRI_QOS. The table data will be in PIP_HG_PRI_QOS[QOS].
2325 union cvmx_pip_hg_pri_qos {
2327 struct cvmx_pip_hg_pri_qos_s {
2328 #ifdef __BIG_ENDIAN_BITFIELD
2329 uint64_t reserved_13_63 : 51;
2330 uint64_t up_qos : 1; /**< When written to '1', updates the entry in the
2331 HG_QOS_TABLE as specified by PRI to a value of
2333 HG_QOS_TABLE[PRI] = QOS */
2334 uint64_t reserved_11_11 : 1;
2335 uint64_t qos : 3; /**< QOS Map level to priority */
2336 uint64_t reserved_6_7 : 2;
2337 uint64_t pri : 6; /**< The priority level from HiGig header
2338 HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
2339 HiGig2 PRI = [DP[1:0], TC[3:0]] */
2342 uint64_t reserved_6_7 : 2;
2344 uint64_t reserved_11_11 : 1;
2345 uint64_t up_qos : 1;
2346 uint64_t reserved_13_63 : 51;
2349 struct cvmx_pip_hg_pri_qos_s cn52xx;
2350 struct cvmx_pip_hg_pri_qos_s cn52xxp1;
2351 struct cvmx_pip_hg_pri_qos_s cn56xx;
2352 struct cvmx_pip_hg_pri_qos_s cn61xx;
2353 struct cvmx_pip_hg_pri_qos_s cn63xx;
2354 struct cvmx_pip_hg_pri_qos_s cn63xxp1;
2355 struct cvmx_pip_hg_pri_qos_s cn66xx;
2356 struct cvmx_pip_hg_pri_qos_s cnf71xx;
2358 typedef union cvmx_pip_hg_pri_qos cvmx_pip_hg_pri_qos_t;
2363 * PIP_INT_EN = PIP's Interrupt Enable Register
2365 * Determines if hardward should raise an interrupt to software
2366 * when an exception event occurs.
2368 union cvmx_pip_int_en {
2370 struct cvmx_pip_int_en_s {
2371 #ifdef __BIG_ENDIAN_BITFIELD
2372 uint64_t reserved_13_63 : 51;
2373 uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
2374 stripping in IPD is enable */
2375 uint64_t lenerr : 1; /**< Frame was received with length error */
2376 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2377 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2378 uint64_t beperr : 1; /**< Parity Error in back end memory */
2379 uint64_t feperr : 1; /**< Parity Error in front end memory */
2380 uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2381 uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
2382 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2383 uint64_t prtnxa : 1; /**< Non-existent port */
2384 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2385 uint64_t crcerr : 1; /**< PIP calculated bad CRC */
2386 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2388 uint64_t pktdrp : 1;
2389 uint64_t crcerr : 1;
2390 uint64_t bckprs : 1;
2391 uint64_t prtnxa : 1;
2392 uint64_t badtag : 1;
2393 uint64_t skprunt : 1;
2394 uint64_t todoovr : 1;
2395 uint64_t feperr : 1;
2396 uint64_t beperr : 1;
2397 uint64_t minerr : 1;
2398 uint64_t maxerr : 1;
2399 uint64_t lenerr : 1;
2400 uint64_t punyerr : 1;
2401 uint64_t reserved_13_63 : 51;
2404 struct cvmx_pip_int_en_cn30xx {
2405 #ifdef __BIG_ENDIAN_BITFIELD
2406 uint64_t reserved_9_63 : 55;
2407 uint64_t beperr : 1; /**< Parity Error in back end memory */
2408 uint64_t feperr : 1; /**< Parity Error in front end memory */
2409 uint64_t todoovr : 1; /**< Todo list overflow
2410 (not used in O2P) */
2411 uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
2412 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2413 uint64_t prtnxa : 1; /**< Non-existent port */
2414 uint64_t bckprs : 1; /**< PIP asserted backpressure
2415 (not used in O2P) */
2416 uint64_t crcerr : 1; /**< PIP calculated bad CRC
2417 (not used in O2P) */
2418 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2420 uint64_t pktdrp : 1;
2421 uint64_t crcerr : 1;
2422 uint64_t bckprs : 1;
2423 uint64_t prtnxa : 1;
2424 uint64_t badtag : 1;
2425 uint64_t skprunt : 1;
2426 uint64_t todoovr : 1;
2427 uint64_t feperr : 1;
2428 uint64_t beperr : 1;
2429 uint64_t reserved_9_63 : 55;
2432 struct cvmx_pip_int_en_cn30xx cn31xx;
2433 struct cvmx_pip_int_en_cn30xx cn38xx;
2434 struct cvmx_pip_int_en_cn30xx cn38xxp2;
2435 struct cvmx_pip_int_en_cn50xx {
2436 #ifdef __BIG_ENDIAN_BITFIELD
2437 uint64_t reserved_12_63 : 52;
2438 uint64_t lenerr : 1; /**< Frame was received with length error */
2439 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2440 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2441 uint64_t beperr : 1; /**< Parity Error in back end memory */
2442 uint64_t feperr : 1; /**< Parity Error in front end memory */
2443 uint64_t todoovr : 1; /**< Todo list overflow */
2444 uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
2445 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2446 uint64_t prtnxa : 1; /**< Non-existent port */
2447 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2448 uint64_t reserved_1_1 : 1;
2449 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2451 uint64_t pktdrp : 1;
2452 uint64_t reserved_1_1 : 1;
2453 uint64_t bckprs : 1;
2454 uint64_t prtnxa : 1;
2455 uint64_t badtag : 1;
2456 uint64_t skprunt : 1;
2457 uint64_t todoovr : 1;
2458 uint64_t feperr : 1;
2459 uint64_t beperr : 1;
2460 uint64_t minerr : 1;
2461 uint64_t maxerr : 1;
2462 uint64_t lenerr : 1;
2463 uint64_t reserved_12_63 : 52;
2466 struct cvmx_pip_int_en_cn52xx {
2467 #ifdef __BIG_ENDIAN_BITFIELD
2468 uint64_t reserved_13_63 : 51;
2469 uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
2470 stripping in IPD is enable */
2471 uint64_t lenerr : 1; /**< Frame was received with length error */
2472 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2473 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2474 uint64_t beperr : 1; /**< Parity Error in back end memory */
2475 uint64_t feperr : 1; /**< Parity Error in front end memory */
2476 uint64_t todoovr : 1; /**< Todo list overflow */
2477 uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
2478 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2479 uint64_t prtnxa : 1; /**< Non-existent port */
2480 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2481 uint64_t reserved_1_1 : 1;
2482 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2484 uint64_t pktdrp : 1;
2485 uint64_t reserved_1_1 : 1;
2486 uint64_t bckprs : 1;
2487 uint64_t prtnxa : 1;
2488 uint64_t badtag : 1;
2489 uint64_t skprunt : 1;
2490 uint64_t todoovr : 1;
2491 uint64_t feperr : 1;
2492 uint64_t beperr : 1;
2493 uint64_t minerr : 1;
2494 uint64_t maxerr : 1;
2495 uint64_t lenerr : 1;
2496 uint64_t punyerr : 1;
2497 uint64_t reserved_13_63 : 51;
2500 struct cvmx_pip_int_en_cn52xx cn52xxp1;
2501 struct cvmx_pip_int_en_s cn56xx;
2502 struct cvmx_pip_int_en_cn56xxp1 {
2503 #ifdef __BIG_ENDIAN_BITFIELD
2504 uint64_t reserved_12_63 : 52;
2505 uint64_t lenerr : 1; /**< Frame was received with length error */
2506 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2507 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2508 uint64_t beperr : 1; /**< Parity Error in back end memory */
2509 uint64_t feperr : 1; /**< Parity Error in front end memory */
2510 uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2511 uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
2512 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2513 uint64_t prtnxa : 1; /**< Non-existent port */
2514 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2515 uint64_t crcerr : 1; /**< PIP calculated bad CRC
2516 (Disabled in 56xx) */
2517 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2519 uint64_t pktdrp : 1;
2520 uint64_t crcerr : 1;
2521 uint64_t bckprs : 1;
2522 uint64_t prtnxa : 1;
2523 uint64_t badtag : 1;
2524 uint64_t skprunt : 1;
2525 uint64_t todoovr : 1;
2526 uint64_t feperr : 1;
2527 uint64_t beperr : 1;
2528 uint64_t minerr : 1;
2529 uint64_t maxerr : 1;
2530 uint64_t lenerr : 1;
2531 uint64_t reserved_12_63 : 52;
2534 struct cvmx_pip_int_en_cn58xx {
2535 #ifdef __BIG_ENDIAN_BITFIELD
2536 uint64_t reserved_13_63 : 51;
2537 uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
2538 stripping in IPD is enable */
2539 uint64_t reserved_9_11 : 3;
2540 uint64_t beperr : 1; /**< Parity Error in back end memory */
2541 uint64_t feperr : 1; /**< Parity Error in front end memory */
2542 uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2543 uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
2544 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2545 uint64_t prtnxa : 1; /**< Non-existent port */
2546 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2547 uint64_t crcerr : 1; /**< PIP calculated bad CRC */
2548 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2550 uint64_t pktdrp : 1;
2551 uint64_t crcerr : 1;
2552 uint64_t bckprs : 1;
2553 uint64_t prtnxa : 1;
2554 uint64_t badtag : 1;
2555 uint64_t skprunt : 1;
2556 uint64_t todoovr : 1;
2557 uint64_t feperr : 1;
2558 uint64_t beperr : 1;
2559 uint64_t reserved_9_11 : 3;
2560 uint64_t punyerr : 1;
2561 uint64_t reserved_13_63 : 51;
2564 struct cvmx_pip_int_en_cn30xx cn58xxp1;
2565 struct cvmx_pip_int_en_s cn61xx;
2566 struct cvmx_pip_int_en_s cn63xx;
2567 struct cvmx_pip_int_en_s cn63xxp1;
2568 struct cvmx_pip_int_en_s cn66xx;
2569 struct cvmx_pip_int_en_s cn68xx;
2570 struct cvmx_pip_int_en_s cn68xxp1;
2571 struct cvmx_pip_int_en_s cnf71xx;
2573 typedef union cvmx_pip_int_en cvmx_pip_int_en_t;
2578 * PIP_INT_REG = PIP's Interrupt Register
2580 * Any exception event that occurs is captured in the PIP_INT_REG.
2581 * PIP_INT_REG will set the exception bit regardless of the value
2582 * of PIP_INT_EN. PIP_INT_EN only controls if an interrupt is
2583 * raised to software.
2587 * The PIP Todo list stores packets that have been received and require work
2588 * queue entry generation. PIP will normally assert backpressure when the
2589 * list fills up such that any error is normally is result of a programming
2590 * the PIP_BCK_PRS[HIWATER] incorrectly. PIP itself can handle 29M
2591 * packets/sec X500MHz or 15Gbs X 64B packets.
2594 * If a packet size is less then the amount programmed in the per port
2595 * skippers, then there will be nothing to parse and the entire packet will
2596 * basically be skipped over. This is probably not what the user desired, so
2597 * there is an indication to software.
2600 * A tag is considered bad when it is resued by a new packet before it was
2601 * released by PIP. PIP considers a tag released by one of two methods.
2602 * . QOS dropped so that it is released over the pip__ipd_release bus.
2603 * . WorkQ entry is validated by the pip__ipd_done signal
2606 * If PIP receives a packet that is not in the valid port range, the port
2607 * processed will be mapped into the valid port space (the mapping is
2608 * currently unpredictable) and the PRTNXA bit will be set. PRTNXA will be
2609 * set for packets received under the following conditions:
2611 * * packet ports (ports 0-31)
2612 * - GMX_INF_MODE[TYPE]==0 (SGMII), received port is 4-15 or 20-31
2613 * - GMX_INF_MODE[TYPE]==1 (XAUI), received port is 1-15 or 17-31
2614 * * upper ports (pci and loopback ports 32-63)
2615 * - received port is 40-47 or 52-63
2618 * PIP can assert backpressure to the receive logic when the todo list
2619 * exceeds a high-water mark (see PIP_BCK_PRS for more details). When this
2620 * occurs, PIP can raise an interrupt to software.
2623 * Octane can compute CRC in two places. Each RGMII port will compute its
2624 * own CRC, but PIP can provide an additional check or check loopback or
2625 * PCI ports. If PIP computes a bad CRC, then PIP will raise an interrupt.
2628 * PIP can drop packets based on QOS results received from IPD. If the QOS
2629 * algorithm decides to drop a packet, PIP will assert an interrupt.
2631 union cvmx_pip_int_reg {
2633 struct cvmx_pip_int_reg_s {
2634 #ifdef __BIG_ENDIAN_BITFIELD
2635 uint64_t reserved_13_63 : 51;
2636 uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
2637 stripping in IPD is enable */
2638 uint64_t lenerr : 1; /**< Frame was received with length error */
2639 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2640 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2641 uint64_t beperr : 1; /**< Parity Error in back end memory */
2642 uint64_t feperr : 1; /**< Parity Error in front end memory */
2643 uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2644 uint64_t skprunt : 1; /**< Packet was engulfed by skipper
2645 This interrupt can occur with received PARTIAL
2646 packets that are truncated to SKIP bytes or
2648 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2649 uint64_t prtnxa : 1; /**< Non-existent port */
2650 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2651 uint64_t crcerr : 1; /**< PIP calculated bad CRC */
2652 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2654 uint64_t pktdrp : 1;
2655 uint64_t crcerr : 1;
2656 uint64_t bckprs : 1;
2657 uint64_t prtnxa : 1;
2658 uint64_t badtag : 1;
2659 uint64_t skprunt : 1;
2660 uint64_t todoovr : 1;
2661 uint64_t feperr : 1;
2662 uint64_t beperr : 1;
2663 uint64_t minerr : 1;
2664 uint64_t maxerr : 1;
2665 uint64_t lenerr : 1;
2666 uint64_t punyerr : 1;
2667 uint64_t reserved_13_63 : 51;
2670 struct cvmx_pip_int_reg_cn30xx {
2671 #ifdef __BIG_ENDIAN_BITFIELD
2672 uint64_t reserved_9_63 : 55;
2673 uint64_t beperr : 1; /**< Parity Error in back end memory */
2674 uint64_t feperr : 1; /**< Parity Error in front end memory */
2675 uint64_t todoovr : 1; /**< Todo list overflow
2676 (not used in O2P) */
2677 uint64_t skprunt : 1; /**< Packet was engulfed by skipper
2678 This interrupt can occur with received PARTIAL
2679 packets that are truncated to SKIP bytes or
2681 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2682 uint64_t prtnxa : 1; /**< Non-existent port */
2683 uint64_t bckprs : 1; /**< PIP asserted backpressure
2684 (not used in O2P) */
2685 uint64_t crcerr : 1; /**< PIP calculated bad CRC
2686 (not used in O2P) */
2687 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2689 uint64_t pktdrp : 1;
2690 uint64_t crcerr : 1;
2691 uint64_t bckprs : 1;
2692 uint64_t prtnxa : 1;
2693 uint64_t badtag : 1;
2694 uint64_t skprunt : 1;
2695 uint64_t todoovr : 1;
2696 uint64_t feperr : 1;
2697 uint64_t beperr : 1;
2698 uint64_t reserved_9_63 : 55;
2701 struct cvmx_pip_int_reg_cn30xx cn31xx;
2702 struct cvmx_pip_int_reg_cn30xx cn38xx;
2703 struct cvmx_pip_int_reg_cn30xx cn38xxp2;
2704 struct cvmx_pip_int_reg_cn50xx {
2705 #ifdef __BIG_ENDIAN_BITFIELD
2706 uint64_t reserved_12_63 : 52;
2707 uint64_t lenerr : 1; /**< Frame was received with length error */
2708 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2709 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2710 uint64_t beperr : 1; /**< Parity Error in back end memory */
2711 uint64_t feperr : 1; /**< Parity Error in front end memory */
2712 uint64_t todoovr : 1; /**< Todo list overflow */
2713 uint64_t skprunt : 1; /**< Packet was engulfed by skipper
2714 This interrupt can occur with received PARTIAL
2715 packets that are truncated to SKIP bytes or
2717 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2718 uint64_t prtnxa : 1; /**< Non-existent port */
2719 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2720 uint64_t reserved_1_1 : 1;
2721 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2723 uint64_t pktdrp : 1;
2724 uint64_t reserved_1_1 : 1;
2725 uint64_t bckprs : 1;
2726 uint64_t prtnxa : 1;
2727 uint64_t badtag : 1;
2728 uint64_t skprunt : 1;
2729 uint64_t todoovr : 1;
2730 uint64_t feperr : 1;
2731 uint64_t beperr : 1;
2732 uint64_t minerr : 1;
2733 uint64_t maxerr : 1;
2734 uint64_t lenerr : 1;
2735 uint64_t reserved_12_63 : 52;
2738 struct cvmx_pip_int_reg_cn52xx {
2739 #ifdef __BIG_ENDIAN_BITFIELD
2740 uint64_t reserved_13_63 : 51;
2741 uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
2742 stripping in IPD is enable */
2743 uint64_t lenerr : 1; /**< Frame was received with length error */
2744 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2745 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2746 uint64_t beperr : 1; /**< Parity Error in back end memory */
2747 uint64_t feperr : 1; /**< Parity Error in front end memory */
2748 uint64_t todoovr : 1; /**< Todo list overflow */
2749 uint64_t skprunt : 1; /**< Packet was engulfed by skipper
2750 This interrupt can occur with received PARTIAL
2751 packets that are truncated to SKIP bytes or
2753 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2754 uint64_t prtnxa : 1; /**< Non-existent port */
2755 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2756 uint64_t reserved_1_1 : 1;
2757 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2759 uint64_t pktdrp : 1;
2760 uint64_t reserved_1_1 : 1;
2761 uint64_t bckprs : 1;
2762 uint64_t prtnxa : 1;
2763 uint64_t badtag : 1;
2764 uint64_t skprunt : 1;
2765 uint64_t todoovr : 1;
2766 uint64_t feperr : 1;
2767 uint64_t beperr : 1;
2768 uint64_t minerr : 1;
2769 uint64_t maxerr : 1;
2770 uint64_t lenerr : 1;
2771 uint64_t punyerr : 1;
2772 uint64_t reserved_13_63 : 51;
2775 struct cvmx_pip_int_reg_cn52xx cn52xxp1;
2776 struct cvmx_pip_int_reg_s cn56xx;
2777 struct cvmx_pip_int_reg_cn56xxp1 {
2778 #ifdef __BIG_ENDIAN_BITFIELD
2779 uint64_t reserved_12_63 : 52;
2780 uint64_t lenerr : 1; /**< Frame was received with length error */
2781 uint64_t maxerr : 1; /**< Frame was received with length > max_length */
2782 uint64_t minerr : 1; /**< Frame was received with length < min_length */
2783 uint64_t beperr : 1; /**< Parity Error in back end memory */
2784 uint64_t feperr : 1; /**< Parity Error in front end memory */
2785 uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2786 uint64_t skprunt : 1; /**< Packet was engulfed by skipper
2787 This interrupt can occur with received PARTIAL
2788 packets that are truncated to SKIP bytes or
2790 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2791 uint64_t prtnxa : 1; /**< Non-existent port */
2792 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2793 uint64_t crcerr : 1; /**< PIP calculated bad CRC
2794 (Disabled in 56xx) */
2795 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2797 uint64_t pktdrp : 1;
2798 uint64_t crcerr : 1;
2799 uint64_t bckprs : 1;
2800 uint64_t prtnxa : 1;
2801 uint64_t badtag : 1;
2802 uint64_t skprunt : 1;
2803 uint64_t todoovr : 1;
2804 uint64_t feperr : 1;
2805 uint64_t beperr : 1;
2806 uint64_t minerr : 1;
2807 uint64_t maxerr : 1;
2808 uint64_t lenerr : 1;
2809 uint64_t reserved_12_63 : 52;
2812 struct cvmx_pip_int_reg_cn58xx {
2813 #ifdef __BIG_ENDIAN_BITFIELD
2814 uint64_t reserved_13_63 : 51;
2815 uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
2816 stripping in IPD is enable */
2817 uint64_t reserved_9_11 : 3;
2818 uint64_t beperr : 1; /**< Parity Error in back end memory */
2819 uint64_t feperr : 1; /**< Parity Error in front end memory */
2820 uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
2821 uint64_t skprunt : 1; /**< Packet was engulfed by skipper
2822 This interrupt can occur with received PARTIAL
2823 packets that are truncated to SKIP bytes or
2825 uint64_t badtag : 1; /**< A bad tag was sent from IPD */
2826 uint64_t prtnxa : 1; /**< Non-existent port */
2827 uint64_t bckprs : 1; /**< PIP asserted backpressure */
2828 uint64_t crcerr : 1; /**< PIP calculated bad CRC */
2829 uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
2831 uint64_t pktdrp : 1;
2832 uint64_t crcerr : 1;
2833 uint64_t bckprs : 1;
2834 uint64_t prtnxa : 1;
2835 uint64_t badtag : 1;
2836 uint64_t skprunt : 1;
2837 uint64_t todoovr : 1;
2838 uint64_t feperr : 1;
2839 uint64_t beperr : 1;
2840 uint64_t reserved_9_11 : 3;
2841 uint64_t punyerr : 1;
2842 uint64_t reserved_13_63 : 51;
2845 struct cvmx_pip_int_reg_cn30xx cn58xxp1;
2846 struct cvmx_pip_int_reg_s cn61xx;
2847 struct cvmx_pip_int_reg_s cn63xx;
2848 struct cvmx_pip_int_reg_s cn63xxp1;
2849 struct cvmx_pip_int_reg_s cn66xx;
2850 struct cvmx_pip_int_reg_s cn68xx;
2851 struct cvmx_pip_int_reg_s cn68xxp1;
2852 struct cvmx_pip_int_reg_s cnf71xx;
2854 typedef union cvmx_pip_int_reg cvmx_pip_int_reg_t;
2857 * cvmx_pip_ip_offset
2859 * PIP_IP_OFFSET = Location of the IP in the workQ entry
2861 * An 8-byte offset to find the start of the IP header in the data portion of IP workQ entires
2864 * In normal configurations, OFFSET must be set in the 0..4 range to allow the
2865 * entire IP and TCP/UDP headers to be buffered in HW and calculate the L4
2866 * checksum for TCP/UDP packets.
2868 * The MAX value of OFFSET is determined by the the types of packets that can
2869 * be sent to PIP as follows...
2871 * Packet Type MAX OFFSET
2874 * IPv6/without L4 parsing 6
2876 * If the L4 can be ignored, then the MAX OFFSET for IPv6 packets can increase
2877 * to 6. Here are the following programming restrictions for IPv6 packets and
2880 * . PIP_GBL_CTL[TCP_FLAG] == 0
2881 * . PIP_GBL_CTL[L4_LEN] == 0
2882 * . PIP_GBL_CTL[L4_CHK] == 0
2883 * . PIP_GBL_CTL[L4_PRT] == 0
2884 * . PIP_GBL_CTL[L4_MAL] == 0
2885 * . PIP_DEC_IPSEC[TCP] == 0
2886 * . PIP_DEC_IPSEC[UDP] == 0
2887 * . PIP_PRT_TAG[IP6_DPRT] == 0
2888 * . PIP_PRT_TAG[IP6_SPRT] == 0
2889 * . PIP_PRT_TAG[TCP6_TAG] == 0
2890 * . PIP_GBL_CFG[TAG_SYN] == 0
2892 union cvmx_pip_ip_offset {
2894 struct cvmx_pip_ip_offset_s {
2895 #ifdef __BIG_ENDIAN_BITFIELD
2896 uint64_t reserved_3_63 : 61;
2897 uint64_t offset : 3; /**< Number of 8B ticks to include in workQ entry
2899 - 0: 0 Bytes / IP start at WORD4 of workQ entry
2900 - 1: 8 Bytes / IP start at WORD5 of workQ entry
2901 - 2: 16 Bytes / IP start at WORD6 of workQ entry
2902 - 3: 24 Bytes / IP start at WORD7 of workQ entry
2903 - 4: 32 Bytes / IP start at WORD8 of workQ entry
2904 - 5: 40 Bytes / IP start at WORD9 of workQ entry
2905 - 6: 48 Bytes / IP start at WORD10 of workQ entry
2906 - 7: 56 Bytes / IP start at WORD11 of workQ entry */
2908 uint64_t offset : 3;
2909 uint64_t reserved_3_63 : 61;
2912 struct cvmx_pip_ip_offset_s cn30xx;
2913 struct cvmx_pip_ip_offset_s cn31xx;
2914 struct cvmx_pip_ip_offset_s cn38xx;
2915 struct cvmx_pip_ip_offset_s cn38xxp2;
2916 struct cvmx_pip_ip_offset_s cn50xx;
2917 struct cvmx_pip_ip_offset_s cn52xx;
2918 struct cvmx_pip_ip_offset_s cn52xxp1;
2919 struct cvmx_pip_ip_offset_s cn56xx;
2920 struct cvmx_pip_ip_offset_s cn56xxp1;
2921 struct cvmx_pip_ip_offset_s cn58xx;
2922 struct cvmx_pip_ip_offset_s cn58xxp1;
2923 struct cvmx_pip_ip_offset_s cn61xx;
2924 struct cvmx_pip_ip_offset_s cn63xx;
2925 struct cvmx_pip_ip_offset_s cn63xxp1;
2926 struct cvmx_pip_ip_offset_s cn66xx;
2927 struct cvmx_pip_ip_offset_s cn68xx;
2928 struct cvmx_pip_ip_offset_s cn68xxp1;
2929 struct cvmx_pip_ip_offset_s cnf71xx;
2931 typedef union cvmx_pip_ip_offset cvmx_pip_ip_offset_t;
2937 * The priority level from HiGig header is as follows
2939 * HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
2940 * HiGig2 PRI = [DP[1:0], TC[3:0]]
2942 * DSA PRI = WORD0[15:13]
2944 * VLAN PRI = VLAN[15:13]
2946 * DIFFSERV = IP.TOS/CLASS<7:2>
2948 union cvmx_pip_pri_tblx {
2950 struct cvmx_pip_pri_tblx_s {
2951 #ifdef __BIG_ENDIAN_BITFIELD
2952 uint64_t diff2_padd : 8; /**< Diffserv port-add */
2953 uint64_t hg2_padd : 8; /**< HG_PRI port-add */
2954 uint64_t vlan2_padd : 8; /**< VLAN port-add */
2955 uint64_t reserved_38_39 : 2;
2956 uint64_t diff2_bpid : 6; /**< Diffserv backpressure ID */
2957 uint64_t reserved_30_31 : 2;
2958 uint64_t hg2_bpid : 6; /**< HG_PRI backpressure ID */
2959 uint64_t reserved_22_23 : 2;
2960 uint64_t vlan2_bpid : 6; /**< VLAN backpressure ID */
2961 uint64_t reserved_11_15 : 5;
2962 uint64_t diff2_qos : 3; /**< Diffserv QOS level */
2963 uint64_t reserved_7_7 : 1;
2964 uint64_t hg2_qos : 3; /**< HG_PRI QOS level */
2965 uint64_t reserved_3_3 : 1;
2966 uint64_t vlan2_qos : 3; /**< VLAN QOS level */
2968 uint64_t vlan2_qos : 3;
2969 uint64_t reserved_3_3 : 1;
2970 uint64_t hg2_qos : 3;
2971 uint64_t reserved_7_7 : 1;
2972 uint64_t diff2_qos : 3;
2973 uint64_t reserved_11_15 : 5;
2974 uint64_t vlan2_bpid : 6;
2975 uint64_t reserved_22_23 : 2;
2976 uint64_t hg2_bpid : 6;
2977 uint64_t reserved_30_31 : 2;
2978 uint64_t diff2_bpid : 6;
2979 uint64_t reserved_38_39 : 2;
2980 uint64_t vlan2_padd : 8;
2981 uint64_t hg2_padd : 8;
2982 uint64_t diff2_padd : 8;
2985 struct cvmx_pip_pri_tblx_s cn68xx;
2986 struct cvmx_pip_pri_tblx_s cn68xxp1;
2988 typedef union cvmx_pip_pri_tblx cvmx_pip_pri_tblx_t;
2993 * PIP_PRT_CFGX = Per port config information
2996 union cvmx_pip_prt_cfgx {
2998 struct cvmx_pip_prt_cfgx_s {
2999 #ifdef __BIG_ENDIAN_BITFIELD
3000 uint64_t reserved_55_63 : 9;
3001 uint64_t ih_pri : 1; /**< Use the PRI/QOS field in the instruction header
3002 as the PRIORITY in BPID calculations. */
3003 uint64_t len_chk_sel : 1; /**< Selects which PIP_FRM_LEN_CHK register is used
3004 for this port-kind for MINERR and MAXERR checks.
3005 LEN_CHK_SEL=0, use PIP_FRM_LEN_CHK0
3006 LEN_CHK_SEL=1, use PIP_FRM_LEN_CHK1 */
3007 uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
3008 padding in the client data */
3009 uint64_t vlan_len : 1; /**< When set, disables the length check for DSA/VLAN
3011 uint64_t lenerr_en : 1; /**< L2 length error check enable
3012 Frame was received with length error
3013 Typically, this check will not be enabled for
3014 incoming packets on the DPI and sRIO ports
3015 because the CRC bytes may not normally be
3017 uint64_t maxerr_en : 1; /**< Max frame error check enable
3018 Frame was received with length > max_length
3019 max_length is defined by PIP_FRM_LEN_CHK[MAXLEN] */
3020 uint64_t minerr_en : 1; /**< Min frame error check enable
3021 Frame was received with length < min_length
3022 Typically, this check will not be enabled for
3023 incoming packets on the DPI and sRIO ports
3024 because the CRC bytes may not normally be
3026 min_length is defined by PIP_FRM_LEN_CHK[MINLEN] */
3027 uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
3029 uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
3031 uint64_t reserved_37_39 : 3;
3032 uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
3033 Normally, IPD will never drop a packet that PIP
3035 0=never drop RAW packets based on RED algorithm
3036 1=allow RAW packet drops based on RED algorithm */
3037 uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
3038 calculating mask tag hash */
3039 uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
3040 configuration. If DYN_RS is set then
3041 PKT_INST_HDR[RS] is not used. When using 2-byte
3042 instruction header words, either DYN_RS or
3043 PIP_GBL_CTL[IGNRS] should be set. */
3044 uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
3045 Internally set for RAWFULL/RAWSCHED packets
3046 on the DPI ports (32-35).
3047 Internally cleared for all other packets on the
3049 Must be zero in DSA mode */
3050 uint64_t grp_wat : 4; /**< GRP Watcher enable */
3051 uint64_t hg_qos : 1; /**< When set, uses the HiGig priority bits as a
3052 lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
3053 to determine the QOS value
3054 HG_QOS must not be set when HIGIG_EN=0 */
3055 uint64_t qos : 3; /**< Default QOS level of the port */
3056 uint64_t qos_wat : 4; /**< QOS Watcher enable
3058 uint64_t qos_vsel : 1; /**< Which QOS in PIP_QOS_VLAN to use
3059 0 = PIP_QOS_VLAN[QOS]
3060 1 = PIP_QOS_VLAN[QOS1] */
3061 uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
3062 if DSA/VLAN exists, it is used
3063 else if IP exists, Diffserv is used
3064 else the per port default is used
3065 Watchers are still highest priority */
3066 uint64_t qos_diff : 1; /**< QOS Diffserv */
3067 uint64_t qos_vlan : 1; /**< QOS VLAN */
3068 uint64_t reserved_13_15 : 3;
3069 uint64_t crc_en : 1; /**< CRC Checking enabled */
3070 uint64_t higig_en : 1; /**< Enable HiGig parsing
3071 Should not be set for DPI ports (ports 32-35)
3072 Should not be set for sRIO ports (ports 40-47)
3073 Should not be set for ports in which PTP_MODE=1
3075 DSA_EN field below must be zero
3076 PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3077 SKIP field below is both Skip I size and the
3078 size of the HiGig* header (12 or 16 bytes) */
3079 uint64_t dsa_en : 1; /**< Enable DSA tag parsing
3080 Should not be set for sRIO (ports 40-47)
3081 Should not be set for ports in which PTP_MODE=1
3083 HIGIG_EN field above must be zero
3084 SKIP field below is size of DSA tag (4, 8, or
3085 12 bytes) rather than the size of Skip I
3086 total SKIP (Skip I + header + Skip II
3088 INST_HDR field above must be zero (non-DPI
3090 PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3091 For DPI ports, SLI_PKT*_INSTR_HEADER[USE_IHDR]
3092 and DPI_INST_HDR[R] should be clear
3093 MODE field below must be "skip to L2" */
3094 cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
3095 0 = no packet inspection (Uninterpreted)
3096 1 = L2 parsing / skip to L2
3097 2 = IP parsing / skip to L3
3099 Must be 2 ("skip to L2") when in DSA mode. */
3100 uint64_t reserved_7_7 : 1;
3101 uint64_t skip : 7; /**< Optional Skip I amount for packets.
3102 HW forces the SKIP to zero for packets on DPI
3103 ports (32-35) when a PKT_INST_HDR is present.
3104 See PIP_PRT_CFGB[ALT_SKP*] and PIP_ALT_SKIP_CFG.
3105 See HRM sections "Parse Mode and Skip Length
3106 Selection" and "Legal Skip Values"
3107 for further details.
3108 In DSA mode, indicates the DSA header length, not
3109 Skip I size. (Must be 4,8,or 12)
3110 In HIGIG mode, indicates both the Skip I size and
3111 the HiGig header size (Must be 12 or 16).
3112 If PTP_MODE, the 8B timestamp is prepended to the
3113 packet. SKIP should be increased by 8 to
3114 compensate for the additional timestamp field. */
3117 uint64_t reserved_7_7 : 1;
3118 cvmx_pip_port_parse_mode_t mode : 2;
3119 uint64_t dsa_en : 1;
3120 uint64_t higig_en : 1;
3121 uint64_t crc_en : 1;
3122 uint64_t reserved_13_15 : 3;
3123 uint64_t qos_vlan : 1;
3124 uint64_t qos_diff : 1;
3125 uint64_t qos_vod : 1;
3126 uint64_t qos_vsel : 1;
3127 uint64_t qos_wat : 4;
3129 uint64_t hg_qos : 1;
3130 uint64_t grp_wat : 4;
3131 uint64_t inst_hdr : 1;
3132 uint64_t dyn_rs : 1;
3133 uint64_t tag_inc : 2;
3134 uint64_t rawdrp : 1;
3135 uint64_t reserved_37_39 : 3;
3136 uint64_t qos_wat_47 : 4;
3137 uint64_t grp_wat_47 : 4;
3138 uint64_t minerr_en : 1;
3139 uint64_t maxerr_en : 1;
3140 uint64_t lenerr_en : 1;
3141 uint64_t vlan_len : 1;
3142 uint64_t pad_len : 1;
3143 uint64_t len_chk_sel : 1;
3144 uint64_t ih_pri : 1;
3145 uint64_t reserved_55_63 : 9;
3148 struct cvmx_pip_prt_cfgx_cn30xx {
3149 #ifdef __BIG_ENDIAN_BITFIELD
3150 uint64_t reserved_37_63 : 27;
3151 uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
3152 Normally, IPD will never drop a packet that PIP
3154 0=never drop RAW packets based on RED algorithm
3155 1=allow RAW packet drops based on RED algorithm */
3156 uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
3157 calculating mask tag hash */
3158 uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
3159 configuration. If DYN_RS is set then
3160 PKT_INST_HDR[RS] is not used. When using 2-byte
3161 instruction header words, either DYN_RS or
3162 PIP_GBL_CTL[IGNRS] should be set. */
3163 uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
3164 (not for PCI prts, 32-35) */
3165 uint64_t grp_wat : 4; /**< GRP Watcher enable */
3166 uint64_t reserved_27_27 : 1;
3167 uint64_t qos : 3; /**< Default QOS level of the port */
3168 uint64_t qos_wat : 4; /**< QOS Watcher enable */
3169 uint64_t reserved_18_19 : 2;
3170 uint64_t qos_diff : 1; /**< QOS Diffserv */
3171 uint64_t qos_vlan : 1; /**< QOS VLAN */
3172 uint64_t reserved_10_15 : 6;
3173 cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
3174 0 = no packet inspection (Uninterpreted)
3175 1 = L2 parsing / skip to L2
3176 2 = IP parsing / skip to L3
3177 3 = PCI Raw (illegal for software to set) */
3178 uint64_t reserved_7_7 : 1;
3179 uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
3180 apply to packets on PCI ports when a PKT_INST_HDR
3181 is present. See section 7.2.7 - Legal Skip
3182 Values for further details. */
3185 uint64_t reserved_7_7 : 1;
3186 cvmx_pip_port_parse_mode_t mode : 2;
3187 uint64_t reserved_10_15 : 6;
3188 uint64_t qos_vlan : 1;
3189 uint64_t qos_diff : 1;
3190 uint64_t reserved_18_19 : 2;
3191 uint64_t qos_wat : 4;
3193 uint64_t reserved_27_27 : 1;
3194 uint64_t grp_wat : 4;
3195 uint64_t inst_hdr : 1;
3196 uint64_t dyn_rs : 1;
3197 uint64_t tag_inc : 2;
3198 uint64_t rawdrp : 1;
3199 uint64_t reserved_37_63 : 27;
3202 struct cvmx_pip_prt_cfgx_cn30xx cn31xx;
3203 struct cvmx_pip_prt_cfgx_cn38xx {
3204 #ifdef __BIG_ENDIAN_BITFIELD
3205 uint64_t reserved_37_63 : 27;
3206 uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
3207 Normally, IPD will never drop a packet that PIP
3209 0=never drop RAW packets based on RED algorithm
3210 1=allow RAW packet drops based on RED algorithm */
3211 uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
3212 calculating mask tag hash */
3213 uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
3214 configuration. If DYN_RS is set then
3215 PKT_INST_HDR[RS] is not used. When using 2-byte
3216 instruction header words, either DYN_RS or
3217 PIP_GBL_CTL[IGNRS] should be set. */
3218 uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
3219 (not for PCI prts, 32-35) */
3220 uint64_t grp_wat : 4; /**< GRP Watcher enable */
3221 uint64_t reserved_27_27 : 1;
3222 uint64_t qos : 3; /**< Default QOS level of the port */
3223 uint64_t qos_wat : 4; /**< QOS Watcher enable */
3224 uint64_t reserved_18_19 : 2;
3225 uint64_t qos_diff : 1; /**< QOS Diffserv */
3226 uint64_t qos_vlan : 1; /**< QOS VLAN */
3227 uint64_t reserved_13_15 : 3;
3228 uint64_t crc_en : 1; /**< CRC Checking enabled (for ports 0-31 only) */
3229 uint64_t reserved_10_11 : 2;
3230 cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
3231 0 = no packet inspection (Uninterpreted)
3232 1 = L2 parsing / skip to L2
3233 2 = IP parsing / skip to L3
3234 3 = PCI Raw (illegal for software to set) */
3235 uint64_t reserved_7_7 : 1;
3236 uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
3237 apply to packets on PCI ports when a PKT_INST_HDR
3238 is present. See section 7.2.7 - Legal Skip
3239 Values for further details. */
3242 uint64_t reserved_7_7 : 1;
3243 cvmx_pip_port_parse_mode_t mode : 2;
3244 uint64_t reserved_10_11 : 2;
3245 uint64_t crc_en : 1;
3246 uint64_t reserved_13_15 : 3;
3247 uint64_t qos_vlan : 1;
3248 uint64_t qos_diff : 1;
3249 uint64_t reserved_18_19 : 2;
3250 uint64_t qos_wat : 4;
3252 uint64_t reserved_27_27 : 1;
3253 uint64_t grp_wat : 4;
3254 uint64_t inst_hdr : 1;
3255 uint64_t dyn_rs : 1;
3256 uint64_t tag_inc : 2;
3257 uint64_t rawdrp : 1;
3258 uint64_t reserved_37_63 : 27;
3261 struct cvmx_pip_prt_cfgx_cn38xx cn38xxp2;
3262 struct cvmx_pip_prt_cfgx_cn50xx {
3263 #ifdef __BIG_ENDIAN_BITFIELD
3264 uint64_t reserved_53_63 : 11;
3265 uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
3266 padding in the client data */
3267 uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts */
3268 uint64_t lenerr_en : 1; /**< L2 length error check enable
3269 Frame was received with length error */
3270 uint64_t maxerr_en : 1; /**< Max frame error check enable
3271 Frame was received with length > max_length */
3272 uint64_t minerr_en : 1; /**< Min frame error check enable
3273 Frame was received with length < min_length */
3274 uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
3276 uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
3278 uint64_t reserved_37_39 : 3;
3279 uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
3280 Normally, IPD will never drop a packet that PIP
3282 0=never drop RAW packets based on RED algorithm
3283 1=allow RAW packet drops based on RED algorithm */
3284 uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
3285 calculating mask tag hash */
3286 uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
3287 configuration. If DYN_RS is set then
3288 PKT_INST_HDR[RS] is not used. When using 2-byte
3289 instruction header words, either DYN_RS or
3290 PIP_GBL_CTL[IGNRS] should be set. */
3291 uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
3292 (not for PCI prts, 32-35) */
3293 uint64_t grp_wat : 4; /**< GRP Watcher enable */
3294 uint64_t reserved_27_27 : 1;
3295 uint64_t qos : 3; /**< Default QOS level of the port */
3296 uint64_t qos_wat : 4; /**< QOS Watcher enable
3298 uint64_t reserved_19_19 : 1;
3299 uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
3300 if VLAN exists, it is used
3301 else if IP exists, Diffserv is used
3302 else the per port default is used
3303 Watchers are still highest priority */
3304 uint64_t qos_diff : 1; /**< QOS Diffserv */
3305 uint64_t qos_vlan : 1; /**< QOS VLAN */
3306 uint64_t reserved_13_15 : 3;
3307 uint64_t crc_en : 1; /**< CRC Checking enabled
3308 (Disabled in 5020) */
3309 uint64_t reserved_10_11 : 2;
3310 cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
3311 0 = no packet inspection (Uninterpreted)
3312 1 = L2 parsing / skip to L2
3313 2 = IP parsing / skip to L3
3314 3 = PCI Raw (illegal for software to set) */
3315 uint64_t reserved_7_7 : 1;
3316 uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
3317 apply to packets on PCI ports when a PKT_INST_HDR
3318 is present. See section 7.2.7 - Legal Skip
3319 Values for further details. */
3322 uint64_t reserved_7_7 : 1;
3323 cvmx_pip_port_parse_mode_t mode : 2;
3324 uint64_t reserved_10_11 : 2;
3325 uint64_t crc_en : 1;
3326 uint64_t reserved_13_15 : 3;
3327 uint64_t qos_vlan : 1;
3328 uint64_t qos_diff : 1;
3329 uint64_t qos_vod : 1;
3330 uint64_t reserved_19_19 : 1;
3331 uint64_t qos_wat : 4;
3333 uint64_t reserved_27_27 : 1;
3334 uint64_t grp_wat : 4;
3335 uint64_t inst_hdr : 1;
3336 uint64_t dyn_rs : 1;
3337 uint64_t tag_inc : 2;
3338 uint64_t rawdrp : 1;
3339 uint64_t reserved_37_39 : 3;
3340 uint64_t qos_wat_47 : 4;
3341 uint64_t grp_wat_47 : 4;
3342 uint64_t minerr_en : 1;
3343 uint64_t maxerr_en : 1;
3344 uint64_t lenerr_en : 1;
3345 uint64_t vlan_len : 1;
3346 uint64_t pad_len : 1;
3347 uint64_t reserved_53_63 : 11;
3350 struct cvmx_pip_prt_cfgx_cn52xx {
3351 #ifdef __BIG_ENDIAN_BITFIELD
3352 uint64_t reserved_53_63 : 11;
3353 uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
3354 padding in the client data */
3355 uint64_t vlan_len : 1; /**< When set, disables the length check for DSA/VLAN
3357 uint64_t lenerr_en : 1; /**< L2 length error check enable
3358 Frame was received with length error
3359 Typically, this check will not be enabled for
3360 incoming packets on the PCIe ports. */
3361 uint64_t maxerr_en : 1; /**< Max frame error check enable
3362 Frame was received with length > max_length */
3363 uint64_t minerr_en : 1; /**< Min frame error check enable
3364 Frame was received with length < min_length
3365 Typically, this check will not be enabled for
3366 incoming packets on the PCIe ports. */
3367 uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
3369 uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
3371 uint64_t reserved_37_39 : 3;
3372 uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
3373 Normally, IPD will never drop a packet that PIP
3375 0=never drop RAW packets based on RED algorithm
3376 1=allow RAW packet drops based on RED algorithm */
3377 uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
3378 calculating mask tag hash */
3379 uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
3380 configuration. If DYN_RS is set then
3381 PKT_INST_HDR[RS] is not used. When using 2-byte
3382 instruction header words, either DYN_RS or
3383 PIP_GBL_CTL[IGNRS] should be set. */
3384 uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
3385 (not for PCI ports, 32-35)
3386 Must be zero in DSA mode */
3387 uint64_t grp_wat : 4; /**< GRP Watcher enable */
3388 uint64_t hg_qos : 1; /**< When set, uses the HiGig priority bits as a
3389 lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
3390 to determine the QOS value
3391 HG_QOS must not be set when HIGIG_EN=0 */
3392 uint64_t qos : 3; /**< Default QOS level of the port */
3393 uint64_t qos_wat : 4; /**< QOS Watcher enable
3395 uint64_t qos_vsel : 1; /**< Which QOS in PIP_QOS_VLAN to use
3396 0 = PIP_QOS_VLAN[QOS]
3397 1 = PIP_QOS_VLAN[QOS1] */
3398 uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
3399 if DSA/VLAN exists, it is used
3400 else if IP exists, Diffserv is used
3401 else the per port default is used
3402 Watchers are still highest priority */
3403 uint64_t qos_diff : 1; /**< QOS Diffserv */
3404 uint64_t qos_vlan : 1; /**< QOS VLAN */
3405 uint64_t reserved_13_15 : 3;
3406 uint64_t crc_en : 1; /**< CRC Checking enabled
3407 (Disabled in 52xx) */
3408 uint64_t higig_en : 1; /**< Enable HiGig parsing
3410 DSA_EN field below must be zero
3411 SKIP field below is both Skip I size and the
3412 size of the HiGig* header (12 or 16 bytes) */
3413 uint64_t dsa_en : 1; /**< Enable DSA tag parsing
3415 HIGIG_EN field above must be zero
3416 SKIP field below is size of DSA tag (4, 8, or
3417 12 bytes) rather than the size of Skip I
3418 total SKIP (Skip I + header + Skip II
3420 INST_HDR field above must be zero
3421 MODE field below must be "skip to L2" */
3422 cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
3423 0 = no packet inspection (Uninterpreted)
3424 1 = L2 parsing / skip to L2
3425 2 = IP parsing / skip to L3
3427 Must be 2 ("skip to L2") when in DSA mode. */
3428 uint64_t reserved_7_7 : 1;
3429 uint64_t skip : 7; /**< Optional Skip I amount for packets.
3430 See section 7.2.7 - Legal Skip
3431 Values for further details.
3432 In DSA mode, indicates the DSA header length, not
3433 Skip I size. (Must be 4,8,or 12)
3434 In HIGIG mode, indicates both the Skip I size and
3435 the HiGig header size (Must be 12 or 16). */
3438 uint64_t reserved_7_7 : 1;
3439 cvmx_pip_port_parse_mode_t mode : 2;
3440 uint64_t dsa_en : 1;
3441 uint64_t higig_en : 1;
3442 uint64_t crc_en : 1;
3443 uint64_t reserved_13_15 : 3;
3444 uint64_t qos_vlan : 1;
3445 uint64_t qos_diff : 1;
3446 uint64_t qos_vod : 1;
3447 uint64_t qos_vsel : 1;
3448 uint64_t qos_wat : 4;
3450 uint64_t hg_qos : 1;
3451 uint64_t grp_wat : 4;
3452 uint64_t inst_hdr : 1;
3453 uint64_t dyn_rs : 1;
3454 uint64_t tag_inc : 2;
3455 uint64_t rawdrp : 1;
3456 uint64_t reserved_37_39 : 3;
3457 uint64_t qos_wat_47 : 4;
3458 uint64_t grp_wat_47 : 4;
3459 uint64_t minerr_en : 1;
3460 uint64_t maxerr_en : 1;
3461 uint64_t lenerr_en : 1;
3462 uint64_t vlan_len : 1;
3463 uint64_t pad_len : 1;
3464 uint64_t reserved_53_63 : 11;
3467 struct cvmx_pip_prt_cfgx_cn52xx cn52xxp1;
3468 struct cvmx_pip_prt_cfgx_cn52xx cn56xx;
3469 struct cvmx_pip_prt_cfgx_cn50xx cn56xxp1;
3470 struct cvmx_pip_prt_cfgx_cn58xx {
3471 #ifdef __BIG_ENDIAN_BITFIELD
3472 uint64_t reserved_37_63 : 27;
3473 uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
3474 Normally, IPD will never drop a packet that PIP
3476 0=never drop RAW packets based on RED algorithm
3477 1=allow RAW packet drops based on RED algorithm */
3478 uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
3479 calculating mask tag hash */
3480 uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
3481 configuration. If DYN_RS is set then
3482 PKT_INST_HDR[RS] is not used. When using 2-byte
3483 instruction header words, either DYN_RS or
3484 PIP_GBL_CTL[IGNRS] should be set. */
3485 uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
3486 (not for PCI prts, 32-35) */
3487 uint64_t grp_wat : 4; /**< GRP Watcher enable */
3488 uint64_t reserved_27_27 : 1;
3489 uint64_t qos : 3; /**< Default QOS level of the port */
3490 uint64_t qos_wat : 4; /**< QOS Watcher enable */
3491 uint64_t reserved_19_19 : 1;
3492 uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
3493 if VLAN exists, it is used
3494 else if IP exists, Diffserv is used
3495 else the per port default is used
3496 Watchers are still highest priority */
3497 uint64_t qos_diff : 1; /**< QOS Diffserv */
3498 uint64_t qos_vlan : 1; /**< QOS VLAN */
3499 uint64_t reserved_13_15 : 3;
3500 uint64_t crc_en : 1; /**< CRC Checking enabled (for ports 0-31 only) */
3501 uint64_t reserved_10_11 : 2;
3502 cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
3503 0 = no packet inspection (Uninterpreted)
3504 1 = L2 parsing / skip to L2
3505 2 = IP parsing / skip to L3
3506 3 = PCI Raw (illegal for software to set) */
3507 uint64_t reserved_7_7 : 1;
3508 uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
3509 apply to packets on PCI ports when a PKT_INST_HDR
3510 is present. See section 7.2.7 - Legal Skip
3511 Values for further details. */
3514 uint64_t reserved_7_7 : 1;
3515 cvmx_pip_port_parse_mode_t mode : 2;
3516 uint64_t reserved_10_11 : 2;
3517 uint64_t crc_en : 1;
3518 uint64_t reserved_13_15 : 3;
3519 uint64_t qos_vlan : 1;
3520 uint64_t qos_diff : 1;
3521 uint64_t qos_vod : 1;
3522 uint64_t reserved_19_19 : 1;
3523 uint64_t qos_wat : 4;
3525 uint64_t reserved_27_27 : 1;
3526 uint64_t grp_wat : 4;
3527 uint64_t inst_hdr : 1;
3528 uint64_t dyn_rs : 1;
3529 uint64_t tag_inc : 2;
3530 uint64_t rawdrp : 1;
3531 uint64_t reserved_37_63 : 27;
3534 struct cvmx_pip_prt_cfgx_cn58xx cn58xxp1;
3535 struct cvmx_pip_prt_cfgx_cn52xx cn61xx;
3536 struct cvmx_pip_prt_cfgx_cn52xx cn63xx;
3537 struct cvmx_pip_prt_cfgx_cn52xx cn63xxp1;
3538 struct cvmx_pip_prt_cfgx_cn52xx cn66xx;
3539 struct cvmx_pip_prt_cfgx_cn68xx {
3540 #ifdef __BIG_ENDIAN_BITFIELD
3541 uint64_t reserved_55_63 : 9;
3542 uint64_t ih_pri : 1; /**< Use the PRI/QOS field in the instruction header
3543 as the PRIORITY in BPID calculations. */
3544 uint64_t len_chk_sel : 1; /**< Selects which PIP_FRM_LEN_CHK register is used
3545 for this port-kind for MINERR and MAXERR checks.
3546 LEN_CHK_SEL=0, use PIP_FRM_LEN_CHK0
3547 LEN_CHK_SEL=1, use PIP_FRM_LEN_CHK1 */
3548 uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
3549 padding in the client data */
3550 uint64_t vlan_len : 1; /**< When set, disables the length check for DSA/VLAN
3552 uint64_t lenerr_en : 1; /**< L2 length error check enable
3553 Frame was received with length error
3554 Typically, this check will not be enabled for
3555 incoming packets on the DPI rings
3556 because the CRC bytes may not normally be
3558 uint64_t maxerr_en : 1; /**< Max frame error check enable
3559 Frame was received with length > max_length
3560 max_length is defined by PIP_FRM_LEN_CHK[MAXLEN] */
3561 uint64_t minerr_en : 1; /**< Min frame error check enable
3562 Frame was received with length < min_length
3563 Typically, this check will not be enabled for
3564 incoming packets on the DPI rings
3565 because the CRC bytes may not normally be
3567 min_length is defined by PIP_FRM_LEN_CHK[MINLEN] */
3568 uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
3570 uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
3572 uint64_t reserved_37_39 : 3;
3573 uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
3574 Normally, IPD will never drop a packet in which
3575 PKT_INST_HDR[R] is set.
3576 0=never drop RAW packets based on RED algorithm
3577 1=allow RAW packet drops based on RED algorithm */
3578 uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
3579 calculating mask tag hash */
3580 uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
3581 configuration. If DYN_RS is set then
3582 PKT_INST_HDR[RS] is not used. When using 2-byte
3583 instruction header words, either DYN_RS or
3584 PIP_GBL_CTL[IGNRS] should be set. */
3585 uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
3586 Normally INST_HDR should be set for packets that
3587 include a PKT_INST_HDR prepended by DPI hardware.
3588 (If SLI_PORTx_PKIND[RPK_ENB]=0, for packets that
3589 include a PKT_INST_HDR prepended by DPI,
3590 PIP internally sets INST_HDR before using it.)
3591 Must be zero in DSA mode */
3592 uint64_t grp_wat : 4; /**< GRP Watcher enable */
3593 uint64_t hg_qos : 1; /**< When set, uses the HiGig priority bits as a
3594 lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
3595 to determine the QOS value
3596 HG_QOS must not be set when HIGIG_EN=0 */
3597 uint64_t qos : 3; /**< Default QOS level of the port */
3598 uint64_t qos_wat : 4; /**< QOS Watcher enable
3600 uint64_t reserved_19_19 : 1;
3601 uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
3602 if DSA/VLAN exists, it is used
3603 else if IP exists, Diffserv is used
3604 else the per port default is used
3605 Watchers are still highest priority */
3606 uint64_t qos_diff : 1; /**< QOS Diffserv */
3607 uint64_t qos_vlan : 1; /**< QOS VLAN */
3608 uint64_t reserved_13_15 : 3;
3609 uint64_t crc_en : 1; /**< CRC Checking enabled */
3610 uint64_t higig_en : 1; /**< Enable HiGig parsing
3611 Normally HIGIG_EN should be clear for packets that
3612 include a PKT_INST_HDR prepended by DPI hardware.
3613 (If SLI_PORTx_PKIND[RPK_ENB]=0, for packets that
3614 include a PKT_INST_HDR prepended by DPI,
3615 PIP internally clears HIGIG_EN before using it.)
3616 Should not be set for ports in which PTP_MODE=1
3618 DSA_EN field below must be zero
3619 PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3620 SKIP field below is both Skip I size and the
3621 size of the HiGig* header (12 or 16 bytes) */
3622 uint64_t dsa_en : 1; /**< Enable DSA tag parsing
3623 Should not be set for ports in which PTP_MODE=1
3625 HIGIG_EN field above must be zero
3626 SKIP field below is size of DSA tag (4, 8, or
3627 12 bytes) rather than the size of Skip I
3628 total SKIP (Skip I + header + Skip II
3630 INST_HDR field above must be zero
3631 PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
3632 For DPI rings, DPI hardware must not prepend
3633 a PKT_INST_HDR when DSA_EN=1.
3634 MODE field below must be "skip to L2" */
3635 cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
3636 0 = no packet inspection (Uninterpreted)
3637 1 = L2 parsing / skip to L2
3638 2 = IP parsing / skip to L3
3640 Must be 2 ("skip to L2") when in DSA mode. */
3641 uint64_t reserved_7_7 : 1;
3642 uint64_t skip : 7; /**< Optional Skip I amount for packets.
3643 Should normally be zero for packets on
3644 DPI rings when a PKT_INST_HDR is prepended by DPI
3646 See PIP_PRT_CFGB[ALT_SKP*] and PIP_ALT_SKIP_CFG.
3647 See HRM sections "Parse Mode and Skip Length
3648 Selection" and "Legal Skip Values"
3649 for further details.
3650 In DSA mode, indicates the DSA header length, not
3651 Skip I size. (Must be 4,8,or 12)
3652 In HIGIG mode, indicates both the Skip I size and
3653 the HiGig header size (Must be 12 or 16).
3654 If PTP_MODE, the 8B timestamp is prepended to the
3655 packet. SKIP should be increased by 8 to
3656 compensate for the additional timestamp field. */
3659 uint64_t reserved_7_7 : 1;
3660 cvmx_pip_port_parse_mode_t mode : 2;
3661 uint64_t dsa_en : 1;
3662 uint64_t higig_en : 1;
3663 uint64_t crc_en : 1;
3664 uint64_t reserved_13_15 : 3;
3665 uint64_t qos_vlan : 1;
3666 uint64_t qos_diff : 1;
3667 uint64_t qos_vod : 1;
3668 uint64_t reserved_19_19 : 1;
3669 uint64_t qos_wat : 4;
3671 uint64_t hg_qos : 1;
3672 uint64_t grp_wat : 4;
3673 uint64_t inst_hdr : 1;
3674 uint64_t dyn_rs : 1;
3675 uint64_t tag_inc : 2;
3676 uint64_t rawdrp : 1;
3677 uint64_t reserved_37_39 : 3;
3678 uint64_t qos_wat_47 : 4;
3679 uint64_t grp_wat_47 : 4;
3680 uint64_t minerr_en : 1;
3681 uint64_t maxerr_en : 1;
3682 uint64_t lenerr_en : 1;
3683 uint64_t vlan_len : 1;
3684 uint64_t pad_len : 1;
3685 uint64_t len_chk_sel : 1;
3686 uint64_t ih_pri : 1;
3687 uint64_t reserved_55_63 : 9;
3690 struct cvmx_pip_prt_cfgx_cn68xx cn68xxp1;
3691 struct cvmx_pip_prt_cfgx_cn52xx cnf71xx;
3693 typedef union cvmx_pip_prt_cfgx cvmx_pip_prt_cfgx_t;
3696 * cvmx_pip_prt_cfgb#
3699 * PIP_PRT_CFGB* does not exist prior to pass 1.2.
3702 union cvmx_pip_prt_cfgbx {
3704 struct cvmx_pip_prt_cfgbx_s {
3705 #ifdef __BIG_ENDIAN_BITFIELD
3706 uint64_t reserved_39_63 : 25;
3707 uint64_t alt_skp_sel : 2; /**< Alternate skip selector
3708 When enabled (ALT_SKP_EN), selects which of the
3709 four PIP_ALT_SKIP_CFGx to use with the packets
3710 arriving on the port-kind. */
3711 uint64_t alt_skp_en : 1; /**< Enable the alternate skip selector
3712 When enabled, the HW is able to recompute the
3713 SKIP I value based on the packet contents.
3714 Up to two of the initial 64 bits of the header
3715 are used along with four PIP_ALT_SKIP_CFGx to
3716 determine the updated SKIP I value.
3717 The bits of the packet used should be present in
3719 PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
3720 when ALT_SKP_EN is set.
3721 ALT_SKP_EN must not be set for DPI ports (32-35)
3722 when a PKT_INST_HDR is present.
3723 ALT_SKP_EN should not be enabled for ports which
3724 have GMX_RX_FRM_CTL[PTP_MODE] set as the timestamp
3725 will be prepended onto the initial 64 bits of the
3727 uint64_t reserved_35_35 : 1;
3728 uint64_t bsel_num : 2; /**< Which of the 4 bit select extractors to use
3729 (Alias to PIP_PRT_CFG) */
3730 uint64_t bsel_en : 1; /**< Enable to turn on/off use of bit select extractor
3731 (Alias to PIP_PRT_CFG) */
3732 uint64_t reserved_24_31 : 8;
3733 uint64_t base : 8; /**< Base priority address into the table */
3734 uint64_t reserved_6_15 : 10;
3735 uint64_t bpid : 6; /**< Default BPID to use for packets on this port-kind. */
3738 uint64_t reserved_6_15 : 10;
3740 uint64_t reserved_24_31 : 8;
3741 uint64_t bsel_en : 1;
3742 uint64_t bsel_num : 2;
3743 uint64_t reserved_35_35 : 1;
3744 uint64_t alt_skp_en : 1;
3745 uint64_t alt_skp_sel : 2;
3746 uint64_t reserved_39_63 : 25;
3749 struct cvmx_pip_prt_cfgbx_cn61xx {
3750 #ifdef __BIG_ENDIAN_BITFIELD
3751 uint64_t reserved_39_63 : 25;
3752 uint64_t alt_skp_sel : 2; /**< Alternate skip selector
3753 When enabled (ALT_SKP_EN), selects which of the
3754 four PIP_ALT_SKIP_CFGx to use with the packets
3755 arriving on the port-kind. */
3756 uint64_t alt_skp_en : 1; /**< Enable the alternate skip selector
3757 When enabled, the HW is able to recompute the
3758 SKIP I value based on the packet contents.
3759 Up to two of the initial 64 bits of the header
3760 are used along with four PIP_ALT_SKIP_CFGx to
3761 determine the updated SKIP I value.
3762 The bits of the packet used should be present in
3764 PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
3765 when ALT_SKP_EN is set.
3766 ALT_SKP_EN must not be set for DPI ports (32-35)
3767 when a PKT_INST_HDR is present.
3768 ALT_SKP_EN should not be enabled for ports which
3769 have GMX_RX_FRM_CTL[PTP_MODE] set as the timestamp
3770 will be prepended onto the initial 64 bits of the
3772 uint64_t reserved_35_35 : 1;
3773 uint64_t bsel_num : 2; /**< Which of the 4 bit select extractors to use
3774 (Alias to PIP_PRT_CFG) */
3775 uint64_t bsel_en : 1; /**< Enable to turn on/off use of bit select extractor
3776 (Alias to PIP_PRT_CFG) */
3777 uint64_t reserved_0_31 : 32;
3779 uint64_t reserved_0_31 : 32;
3780 uint64_t bsel_en : 1;
3781 uint64_t bsel_num : 2;
3782 uint64_t reserved_35_35 : 1;
3783 uint64_t alt_skp_en : 1;
3784 uint64_t alt_skp_sel : 2;
3785 uint64_t reserved_39_63 : 25;
3788 struct cvmx_pip_prt_cfgbx_cn66xx {
3789 #ifdef __BIG_ENDIAN_BITFIELD
3790 uint64_t reserved_39_63 : 25;
3791 uint64_t alt_skp_sel : 2; /**< Alternate skip selector
3792 When enabled (ALT_SKP_EN), selects which of the
3793 four PIP_ALT_SKIP_CFGx to use with the packets
3794 arriving on the port-kind. */
3795 uint64_t alt_skp_en : 1; /**< Enable the alternate skip selector
3796 When enabled, the HW is able to recompute the
3797 SKIP I value based on the packet contents.
3798 Up to two of the initial 64 bits of the header
3799 are used along with four PIP_ALT_SKIP_CFGx to
3800 determine the updated SKIP I value.
3801 The bits of the packet used should be present in
3803 PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
3804 when ALT_SKP_EN is set.
3805 ALT_SKP_EN must not be set for DPI ports (32-35)
3806 when a PKT_INST_HDR is present. */
3807 uint64_t reserved_0_35 : 36;
3809 uint64_t reserved_0_35 : 36;
3810 uint64_t alt_skp_en : 1;
3811 uint64_t alt_skp_sel : 2;
3812 uint64_t reserved_39_63 : 25;
3815 struct cvmx_pip_prt_cfgbx_s cn68xx;
3816 struct cvmx_pip_prt_cfgbx_cn68xxp1 {
3817 #ifdef __BIG_ENDIAN_BITFIELD
3818 uint64_t reserved_24_63 : 40;
3819 uint64_t base : 8; /**< Base priority address into the table */
3820 uint64_t reserved_6_15 : 10;
3821 uint64_t bpid : 6; /**< Default BPID to use for packets on this port-kind. */
3824 uint64_t reserved_6_15 : 10;
3826 uint64_t reserved_24_63 : 40;
3829 struct cvmx_pip_prt_cfgbx_cn61xx cnf71xx;
3831 typedef union cvmx_pip_prt_cfgbx cvmx_pip_prt_cfgbx_t;
3836 * PIP_PRT_TAGX = Per port config information
3839 union cvmx_pip_prt_tagx {
3841 struct cvmx_pip_prt_tagx_s {
3842 #ifdef __BIG_ENDIAN_BITFIELD
3843 uint64_t reserved_54_63 : 10;
3844 uint64_t portadd_en : 1; /**< Enables PIP to optionally increment the incoming
3845 port from the MACs based on port-kind
3846 configuration and packet contents. */
3847 uint64_t inc_hwchk : 1; /**< Include the HW_checksum into WORD0 of the WQE
3848 instead of the L4PTR. This mode will be
3849 deprecated in future products. */
3850 uint64_t reserved_50_51 : 2;
3851 uint64_t grptagbase_msb : 2; /**< Most significant 2 bits of the GRPTAGBASE value. */
3852 uint64_t reserved_46_47 : 2;
3853 uint64_t grptagmask_msb : 2; /**< Most significant 2 bits of the GRPTAGMASK value.
3854 group when GRPTAG is set. */
3855 uint64_t reserved_42_43 : 2;
3856 uint64_t grp_msb : 2; /**< Most significant 2 bits of the 6-bit value
3857 indicating the group to schedule to. */
3858 uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits
3859 when GRPTAG is set. */
3860 uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing
3861 group when GRPTAG is set. */
3862 uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute
3863 the group in the work queue entry
3864 GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
3865 uint64_t grptag_mskip : 1; /**< When set, GRPTAG will be used regardless if the
3867 uint64_t tag_mode : 2; /**< Which tag algorithm to use
3868 0 = always use tuple tag algorithm
3869 1 = always use mask tag algorithm
3870 2 = if packet is IP, use tuple else use mask
3871 3 = tuple XOR mask */
3872 uint64_t inc_vs : 2; /**< determines the DSA/VLAN ID (VID) to be included in
3873 tuple tag when VLAN stacking is detected
3874 0 = do not include VID in tuple tag generation
3875 1 = include VID (VLAN0) in hash
3876 2 = include VID (VLAN1) in hash
3877 3 = include VID ([VLAN0,VLAN1]) in hash */
3878 uint64_t inc_vlan : 1; /**< when set, the DSA/VLAN ID is included in tuple tag
3879 when VLAN stacking is not detected
3880 0 = do not include VID in tuple tag generation
3881 1 = include VID in hash */
3882 uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */
3883 uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
3884 included in tuple tag for IPv6 packets */
3885 uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
3886 included in tuple tag for IPv4 */
3887 uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
3888 included in tuple tag for IPv6 packets */
3889 uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
3890 included in tuple tag for IPv4 */
3891 uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple
3893 uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple
3895 uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple
3897 uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple
3899 uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple
3901 uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple
3903 cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6)
3907 cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4)
3911 cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type
3915 cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type
3919 cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type
3923 uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */
3926 cvmx_pow_tag_type_t non_tag_type : 2;
3927 cvmx_pow_tag_type_t ip4_tag_type : 2;
3928 cvmx_pow_tag_type_t ip6_tag_type : 2;
3929 cvmx_pow_tag_type_t tcp4_tag_type : 2;
3930 cvmx_pow_tag_type_t tcp6_tag_type : 2;
3931 uint64_t ip4_src_flag : 1;
3932 uint64_t ip6_src_flag : 1;
3933 uint64_t ip4_dst_flag : 1;
3934 uint64_t ip6_dst_flag : 1;
3935 uint64_t ip4_pctl_flag : 1;
3936 uint64_t ip6_nxth_flag : 1;
3937 uint64_t ip4_sprt_flag : 1;
3938 uint64_t ip6_sprt_flag : 1;
3939 uint64_t ip4_dprt_flag : 1;
3940 uint64_t ip6_dprt_flag : 1;
3941 uint64_t inc_prt_flag : 1;
3942 uint64_t inc_vlan : 1;
3943 uint64_t inc_vs : 2;
3944 uint64_t tag_mode : 2;
3945 uint64_t grptag_mskip : 1;
3946 uint64_t grptag : 1;
3947 uint64_t grptagmask : 4;
3948 uint64_t grptagbase : 4;
3949 uint64_t grp_msb : 2;
3950 uint64_t reserved_42_43 : 2;
3951 uint64_t grptagmask_msb : 2;
3952 uint64_t reserved_46_47 : 2;
3953 uint64_t grptagbase_msb : 2;
3954 uint64_t reserved_50_51 : 2;
3955 uint64_t inc_hwchk : 1;
3956 uint64_t portadd_en : 1;
3957 uint64_t reserved_54_63 : 10;
3960 struct cvmx_pip_prt_tagx_cn30xx {
3961 #ifdef __BIG_ENDIAN_BITFIELD
3962 uint64_t reserved_40_63 : 24;
3963 uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits
3964 when GRPTAG is set. */
3965 uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing
3966 group when GRPTAG is set. */
3967 uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute
3968 the group in the work queue entry
3969 GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
3970 uint64_t reserved_30_30 : 1;
3971 uint64_t tag_mode : 2; /**< Which tag algorithm to use
3972 0 = always use tuple tag algorithm
3973 1 = always use mask tag algorithm
3974 2 = if packet is IP, use tuple else use mask
3975 3 = tuple XOR mask */
3976 uint64_t inc_vs : 2; /**< determines the VLAN ID (VID) to be included in
3977 tuple tag when VLAN stacking is detected
3978 0 = do not include VID in tuple tag generation
3979 1 = include VID (VLAN0) in hash
3980 2 = include VID (VLAN1) in hash
3981 3 = include VID ([VLAN0,VLAN1]) in hash */
3982 uint64_t inc_vlan : 1; /**< when set, the VLAN ID is included in tuple tag
3983 when VLAN stacking is not detected
3984 0 = do not include VID in tuple tag generation
3985 1 = include VID in hash */
3986 uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */
3987 uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
3988 included in tuple tag for IPv6 packets */
3989 uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
3990 included in tuple tag for IPv4 */
3991 uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
3992 included in tuple tag for IPv6 packets */
3993 uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
3994 included in tuple tag for IPv4 */
3995 uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple
3997 uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple
3999 uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple
4001 uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple
4003 uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple
4005 uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple
4007 cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6)
4011 cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4)
4015 cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type
4019 cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type
4023 cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type
4027 uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */
4030 cvmx_pow_tag_type_t non_tag_type : 2;
4031 cvmx_pow_tag_type_t ip4_tag_type : 2;
4032 cvmx_pow_tag_type_t ip6_tag_type : 2;
4033 cvmx_pow_tag_type_t tcp4_tag_type : 2;
4034 cvmx_pow_tag_type_t tcp6_tag_type : 2;
4035 uint64_t ip4_src_flag : 1;
4036 uint64_t ip6_src_flag : 1;
4037 uint64_t ip4_dst_flag : 1;
4038 uint64_t ip6_dst_flag : 1;
4039 uint64_t ip4_pctl_flag : 1;
4040 uint64_t ip6_nxth_flag : 1;
4041 uint64_t ip4_sprt_flag : 1;
4042 uint64_t ip6_sprt_flag : 1;
4043 uint64_t ip4_dprt_flag : 1;
4044 uint64_t ip6_dprt_flag : 1;
4045 uint64_t inc_prt_flag : 1;
4046 uint64_t inc_vlan : 1;
4047 uint64_t inc_vs : 2;
4048 uint64_t tag_mode : 2;
4049 uint64_t reserved_30_30 : 1;
4050 uint64_t grptag : 1;
4051 uint64_t grptagmask : 4;
4052 uint64_t grptagbase : 4;
4053 uint64_t reserved_40_63 : 24;
4056 struct cvmx_pip_prt_tagx_cn30xx cn31xx;
4057 struct cvmx_pip_prt_tagx_cn30xx cn38xx;
4058 struct cvmx_pip_prt_tagx_cn30xx cn38xxp2;
4059 struct cvmx_pip_prt_tagx_cn50xx {
4060 #ifdef __BIG_ENDIAN_BITFIELD
4061 uint64_t reserved_40_63 : 24;
4062 uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits
4063 when GRPTAG is set. */
4064 uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing
4065 group when GRPTAG is set. */
4066 uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute
4067 the group in the work queue entry
4068 GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
4069 uint64_t grptag_mskip : 1; /**< When set, GRPTAG will be used regardless if the
4071 uint64_t tag_mode : 2; /**< Which tag algorithm to use
4072 0 = always use tuple tag algorithm
4073 1 = always use mask tag algorithm
4074 2 = if packet is IP, use tuple else use mask
4075 3 = tuple XOR mask */
4076 uint64_t inc_vs : 2; /**< determines the VLAN ID (VID) to be included in
4077 tuple tag when VLAN stacking is detected
4078 0 = do not include VID in tuple tag generation
4079 1 = include VID (VLAN0) in hash
4080 2 = include VID (VLAN1) in hash
4081 3 = include VID ([VLAN0,VLAN1]) in hash */
4082 uint64_t inc_vlan : 1; /**< when set, the VLAN ID is included in tuple tag
4083 when VLAN stacking is not detected
4084 0 = do not include VID in tuple tag generation
4085 1 = include VID in hash */
4086 uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */
4087 uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
4088 included in tuple tag for IPv6 packets */
4089 uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
4090 included in tuple tag for IPv4 */
4091 uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
4092 included in tuple tag for IPv6 packets */
4093 uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
4094 included in tuple tag for IPv4 */
4095 uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple
4097 uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple
4099 uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple
4101 uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple
4103 uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple
4105 uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple
4107 cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6)
4111 cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4)
4115 cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type
4119 cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type
4123 cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type
4127 uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */
4130 cvmx_pow_tag_type_t non_tag_type : 2;
4131 cvmx_pow_tag_type_t ip4_tag_type : 2;
4132 cvmx_pow_tag_type_t ip6_tag_type : 2;
4133 cvmx_pow_tag_type_t tcp4_tag_type : 2;
4134 cvmx_pow_tag_type_t tcp6_tag_type : 2;
4135 uint64_t ip4_src_flag : 1;
4136 uint64_t ip6_src_flag : 1;
4137 uint64_t ip4_dst_flag : 1;
4138 uint64_t ip6_dst_flag : 1;
4139 uint64_t ip4_pctl_flag : 1;
4140 uint64_t ip6_nxth_flag : 1;
4141 uint64_t ip4_sprt_flag : 1;
4142 uint64_t ip6_sprt_flag : 1;
4143 uint64_t ip4_dprt_flag : 1;
4144 uint64_t ip6_dprt_flag : 1;
4145 uint64_t inc_prt_flag : 1;
4146 uint64_t inc_vlan : 1;
4147 uint64_t inc_vs : 2;
4148 uint64_t tag_mode : 2;
4149 uint64_t grptag_mskip : 1;
4150 uint64_t grptag : 1;
4151 uint64_t grptagmask : 4;
4152 uint64_t grptagbase : 4;
4153 uint64_t reserved_40_63 : 24;
4156 struct cvmx_pip_prt_tagx_cn50xx cn52xx;
4157 struct cvmx_pip_prt_tagx_cn50xx cn52xxp1;
4158 struct cvmx_pip_prt_tagx_cn50xx cn56xx;
4159 struct cvmx_pip_prt_tagx_cn50xx cn56xxp1;
4160 struct cvmx_pip_prt_tagx_cn30xx cn58xx;
4161 struct cvmx_pip_prt_tagx_cn30xx cn58xxp1;
4162 struct cvmx_pip_prt_tagx_cn50xx cn61xx;
4163 struct cvmx_pip_prt_tagx_cn50xx cn63xx;
4164 struct cvmx_pip_prt_tagx_cn50xx cn63xxp1;
4165 struct cvmx_pip_prt_tagx_cn50xx cn66xx;
4166 struct cvmx_pip_prt_tagx_s cn68xx;
4167 struct cvmx_pip_prt_tagx_s cn68xxp1;
4168 struct cvmx_pip_prt_tagx_cn50xx cnf71xx;
4170 typedef union cvmx_pip_prt_tagx cvmx_pip_prt_tagx_t;
4173 * cvmx_pip_qos_diff#
4175 * PIP_QOS_DIFFX = QOS Diffserv Tables
4178 union cvmx_pip_qos_diffx {
4180 struct cvmx_pip_qos_diffx_s {
4181 #ifdef __BIG_ENDIAN_BITFIELD
4182 uint64_t reserved_3_63 : 61;
4183 uint64_t qos : 3; /**< Diffserv QOS level */
4186 uint64_t reserved_3_63 : 61;
4189 struct cvmx_pip_qos_diffx_s cn30xx;
4190 struct cvmx_pip_qos_diffx_s cn31xx;
4191 struct cvmx_pip_qos_diffx_s cn38xx;
4192 struct cvmx_pip_qos_diffx_s cn38xxp2;
4193 struct cvmx_pip_qos_diffx_s cn50xx;
4194 struct cvmx_pip_qos_diffx_s cn52xx;
4195 struct cvmx_pip_qos_diffx_s cn52xxp1;
4196 struct cvmx_pip_qos_diffx_s cn56xx;
4197 struct cvmx_pip_qos_diffx_s cn56xxp1;
4198 struct cvmx_pip_qos_diffx_s cn58xx;
4199 struct cvmx_pip_qos_diffx_s cn58xxp1;
4200 struct cvmx_pip_qos_diffx_s cn61xx;
4201 struct cvmx_pip_qos_diffx_s cn63xx;
4202 struct cvmx_pip_qos_diffx_s cn63xxp1;
4203 struct cvmx_pip_qos_diffx_s cn66xx;
4204 struct cvmx_pip_qos_diffx_s cnf71xx;
4206 typedef union cvmx_pip_qos_diffx cvmx_pip_qos_diffx_t;
4209 * cvmx_pip_qos_vlan#
4211 * PIP_QOS_VLANX = QOS VLAN Tables
4213 * If the PIP indentifies a packet is DSA/VLAN tagged, then the QOS
4214 * can be set based on the DSA/VLAN user priority. These eight register
4215 * comprise the QOS values for all DSA/VLAN user priority values.
4217 union cvmx_pip_qos_vlanx {
4219 struct cvmx_pip_qos_vlanx_s {
4220 #ifdef __BIG_ENDIAN_BITFIELD
4221 uint64_t reserved_7_63 : 57;
4222 uint64_t qos1 : 3; /**< DSA/VLAN QOS level
4223 Selected when PIP_PRT_CFGx[QOS_VSEL] = 1 */
4224 uint64_t reserved_3_3 : 1;
4225 uint64_t qos : 3; /**< DSA/VLAN QOS level
4226 Selected when PIP_PRT_CFGx[QOS_VSEL] = 0 */
4229 uint64_t reserved_3_3 : 1;
4231 uint64_t reserved_7_63 : 57;
4234 struct cvmx_pip_qos_vlanx_cn30xx {
4235 #ifdef __BIG_ENDIAN_BITFIELD
4236 uint64_t reserved_3_63 : 61;
4237 uint64_t qos : 3; /**< VLAN QOS level */
4240 uint64_t reserved_3_63 : 61;
4243 struct cvmx_pip_qos_vlanx_cn30xx cn31xx;
4244 struct cvmx_pip_qos_vlanx_cn30xx cn38xx;
4245 struct cvmx_pip_qos_vlanx_cn30xx cn38xxp2;
4246 struct cvmx_pip_qos_vlanx_cn30xx cn50xx;
4247 struct cvmx_pip_qos_vlanx_s cn52xx;
4248 struct cvmx_pip_qos_vlanx_s cn52xxp1;
4249 struct cvmx_pip_qos_vlanx_s cn56xx;
4250 struct cvmx_pip_qos_vlanx_cn30xx cn56xxp1;
4251 struct cvmx_pip_qos_vlanx_cn30xx cn58xx;
4252 struct cvmx_pip_qos_vlanx_cn30xx cn58xxp1;
4253 struct cvmx_pip_qos_vlanx_s cn61xx;
4254 struct cvmx_pip_qos_vlanx_s cn63xx;
4255 struct cvmx_pip_qos_vlanx_s cn63xxp1;
4256 struct cvmx_pip_qos_vlanx_s cn66xx;
4257 struct cvmx_pip_qos_vlanx_s cnf71xx;
4259 typedef union cvmx_pip_qos_vlanx cvmx_pip_qos_vlanx_t;
4262 * cvmx_pip_qos_watch#
4264 * PIP_QOS_WATCHX = QOS Watcher Tables
4266 * Sets up the Configuration CSRs for the four QOS Watchers.
4267 * Each Watcher can be set to look for a specific protocol,
4268 * TCP/UDP destination port, or Ethertype to override the
4269 * default QOS value.
4271 union cvmx_pip_qos_watchx {
4273 struct cvmx_pip_qos_watchx_s {
4274 #ifdef __BIG_ENDIAN_BITFIELD
4275 uint64_t reserved_48_63 : 16;
4276 uint64_t mask : 16; /**< Mask off a range of values */
4277 uint64_t reserved_30_31 : 2;
4278 uint64_t grp : 6; /**< The GRP number of the watcher */
4279 uint64_t reserved_23_23 : 1;
4280 uint64_t qos : 3; /**< The QOS level of the watcher */
4281 uint64_t reserved_19_19 : 1;
4282 cvmx_pip_qos_watch_types match_type : 3; /**< The field for the watcher match against
4283 0 = disable across all ports
4285 = next_header (ipv6)
4286 2 = TCP destination port
4287 3 = UDP destination port
4290 uint64_t match_value : 16; /**< The value to watch for */
4292 uint64_t match_value : 16;
4293 cvmx_pip_qos_watch_types match_type : 3;
4294 uint64_t reserved_19_19 : 1;
4296 uint64_t reserved_23_23 : 1;
4298 uint64_t reserved_30_31 : 2;
4300 uint64_t reserved_48_63 : 16;
4303 struct cvmx_pip_qos_watchx_cn30xx {
4304 #ifdef __BIG_ENDIAN_BITFIELD
4305 uint64_t reserved_48_63 : 16;
4306 uint64_t mask : 16; /**< Mask off a range of values */
4307 uint64_t reserved_28_31 : 4;
4308 uint64_t grp : 4; /**< The GRP number of the watcher */
4309 uint64_t reserved_23_23 : 1;
4310 uint64_t qos : 3; /**< The QOS level of the watcher */
4311 uint64_t reserved_18_19 : 2;
4312 cvmx_pip_qos_watch_types match_type : 2; /**< The field for the watcher match against
4313 0 = disable across all ports
4315 = next_header (ipv6)
4316 2 = TCP destination port
4317 3 = UDP destination port */
4318 uint64_t match_value : 16; /**< The value to watch for */
4320 uint64_t match_value : 16;
4321 cvmx_pip_qos_watch_types match_type : 2;
4322 uint64_t reserved_18_19 : 2;
4324 uint64_t reserved_23_23 : 1;
4326 uint64_t reserved_28_31 : 4;
4328 uint64_t reserved_48_63 : 16;
4331 struct cvmx_pip_qos_watchx_cn30xx cn31xx;
4332 struct cvmx_pip_qos_watchx_cn30xx cn38xx;
4333 struct cvmx_pip_qos_watchx_cn30xx cn38xxp2;
4334 struct cvmx_pip_qos_watchx_cn50xx {
4335 #ifdef __BIG_ENDIAN_BITFIELD
4336 uint64_t reserved_48_63 : 16;
4337 uint64_t mask : 16; /**< Mask off a range of values */
4338 uint64_t reserved_28_31 : 4;
4339 uint64_t grp : 4; /**< The GRP number of the watcher */
4340 uint64_t reserved_23_23 : 1;
4341 uint64_t qos : 3; /**< The QOS level of the watcher */
4342 uint64_t reserved_19_19 : 1;
4343 cvmx_pip_qos_watch_types match_type : 3; /**< The field for the watcher match against
4344 0 = disable across all ports
4346 = next_header (ipv6)
4347 2 = TCP destination port
4348 3 = UDP destination port
4351 uint64_t match_value : 16; /**< The value to watch for */
4353 uint64_t match_value : 16;
4354 cvmx_pip_qos_watch_types match_type : 3;
4355 uint64_t reserved_19_19 : 1;
4357 uint64_t reserved_23_23 : 1;
4359 uint64_t reserved_28_31 : 4;
4361 uint64_t reserved_48_63 : 16;
4364 struct cvmx_pip_qos_watchx_cn50xx cn52xx;
4365 struct cvmx_pip_qos_watchx_cn50xx cn52xxp1;
4366 struct cvmx_pip_qos_watchx_cn50xx cn56xx;
4367 struct cvmx_pip_qos_watchx_cn50xx cn56xxp1;
4368 struct cvmx_pip_qos_watchx_cn30xx cn58xx;
4369 struct cvmx_pip_qos_watchx_cn30xx cn58xxp1;
4370 struct cvmx_pip_qos_watchx_cn50xx cn61xx;
4371 struct cvmx_pip_qos_watchx_cn50xx cn63xx;
4372 struct cvmx_pip_qos_watchx_cn50xx cn63xxp1;
4373 struct cvmx_pip_qos_watchx_cn50xx cn66xx;
4374 struct cvmx_pip_qos_watchx_s cn68xx;
4375 struct cvmx_pip_qos_watchx_s cn68xxp1;
4376 struct cvmx_pip_qos_watchx_cn50xx cnf71xx;
4378 typedef union cvmx_pip_qos_watchx cvmx_pip_qos_watchx_t;
4383 * PIP_RAW_WORD = The RAW Word2 of the workQ entry.
4385 * The RAW Word2 to be inserted into the workQ entry of RAWFULL packets.
4387 union cvmx_pip_raw_word {
4389 struct cvmx_pip_raw_word_s {
4390 #ifdef __BIG_ENDIAN_BITFIELD
4391 uint64_t reserved_56_63 : 8;
4392 uint64_t word : 56; /**< Word2 of the workQ entry
4393 The 8-bit bufs field is still set by HW (IPD) */
4396 uint64_t reserved_56_63 : 8;
4399 struct cvmx_pip_raw_word_s cn30xx;
4400 struct cvmx_pip_raw_word_s cn31xx;
4401 struct cvmx_pip_raw_word_s cn38xx;
4402 struct cvmx_pip_raw_word_s cn38xxp2;
4403 struct cvmx_pip_raw_word_s cn50xx;
4404 struct cvmx_pip_raw_word_s cn52xx;
4405 struct cvmx_pip_raw_word_s cn52xxp1;
4406 struct cvmx_pip_raw_word_s cn56xx;
4407 struct cvmx_pip_raw_word_s cn56xxp1;
4408 struct cvmx_pip_raw_word_s cn58xx;
4409 struct cvmx_pip_raw_word_s cn58xxp1;
4410 struct cvmx_pip_raw_word_s cn61xx;
4411 struct cvmx_pip_raw_word_s cn63xx;
4412 struct cvmx_pip_raw_word_s cn63xxp1;
4413 struct cvmx_pip_raw_word_s cn66xx;
4414 struct cvmx_pip_raw_word_s cn68xx;
4415 struct cvmx_pip_raw_word_s cn68xxp1;
4416 struct cvmx_pip_raw_word_s cnf71xx;
4418 typedef union cvmx_pip_raw_word cvmx_pip_raw_word_t;
4423 * PIP_SFT_RST = PIP Soft Reset
4425 * When written to a '1', resets the pip block
4428 * When RST is set to a '1' by SW, PIP will get a short reset pulse (3 cycles
4429 * in duration). Although this will reset much of PIP's internal state, some
4430 * CSRs will not reset.
4453 * . PIP_STAT_INB_PKTS*
4454 * . PIP_STAT_INB_OCTS*
4455 * . PIP_STAT_INB_ERRS*
4458 union cvmx_pip_sft_rst {
4460 struct cvmx_pip_sft_rst_s {
4461 #ifdef __BIG_ENDIAN_BITFIELD
4462 uint64_t reserved_1_63 : 63;
4463 uint64_t rst : 1; /**< Soft Reset */
4466 uint64_t reserved_1_63 : 63;
4469 struct cvmx_pip_sft_rst_s cn30xx;
4470 struct cvmx_pip_sft_rst_s cn31xx;
4471 struct cvmx_pip_sft_rst_s cn38xx;
4472 struct cvmx_pip_sft_rst_s cn50xx;
4473 struct cvmx_pip_sft_rst_s cn52xx;
4474 struct cvmx_pip_sft_rst_s cn52xxp1;
4475 struct cvmx_pip_sft_rst_s cn56xx;
4476 struct cvmx_pip_sft_rst_s cn56xxp1;
4477 struct cvmx_pip_sft_rst_s cn58xx;
4478 struct cvmx_pip_sft_rst_s cn58xxp1;
4479 struct cvmx_pip_sft_rst_s cn61xx;
4480 struct cvmx_pip_sft_rst_s cn63xx;
4481 struct cvmx_pip_sft_rst_s cn63xxp1;
4482 struct cvmx_pip_sft_rst_s cn66xx;
4483 struct cvmx_pip_sft_rst_s cn68xx;
4484 struct cvmx_pip_sft_rst_s cn68xxp1;
4485 struct cvmx_pip_sft_rst_s cnf71xx;
4487 typedef union cvmx_pip_sft_rst cvmx_pip_sft_rst_t;
4492 * PIP Statistics Counters
4494 * Note: special stat counter behavior
4496 * 1) Read and write operations must arbitrate for the statistics resources
4497 * along with the packet engines which are incrementing the counters.
4498 * In order to not drop packet information, the packet HW is always a
4499 * higher priority and the CSR requests will only be satisified when
4500 * there are idle cycles. This can potentially cause long delays if the
4501 * system becomes full.
4503 * 2) stat counters can be cleared in two ways. If PIP_STAT_CTL[RDCLR] is
4504 * set, then all read accesses will clear the register. In addition,
4505 * any write to a stats register will also reset the register to zero.
4506 * Please note that the clearing operations must obey rule \#1 above.
4508 * 3) all counters are wrapping - software must ensure they are read periodically
4510 * 4) The counters accumulate statistics for packets that are sent to PKI. If
4511 * PTP_MODE is enabled, the 8B timestamp is prepended to the packet. This
4512 * additional 8B of data is captured in the octet counts.
4514 * 5) X represents either the packet's port-kind or backpressure ID as
4515 * determined by PIP_STAT_CTL[MODE]
4516 * PIP_STAT0_X = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
4518 union cvmx_pip_stat0_x {
4520 struct cvmx_pip_stat0_x_s {
4521 #ifdef __BIG_ENDIAN_BITFIELD
4522 uint64_t drp_pkts : 32; /**< Inbound packets marked to be dropped by the IPD
4523 QOS widget per port */
4524 uint64_t drp_octs : 32; /**< Inbound octets marked to be dropped by the IPD
4525 QOS widget per port */
4527 uint64_t drp_octs : 32;
4528 uint64_t drp_pkts : 32;
4531 struct cvmx_pip_stat0_x_s cn68xx;
4532 struct cvmx_pip_stat0_x_s cn68xxp1;
4534 typedef union cvmx_pip_stat0_x cvmx_pip_stat0_x_t;
4537 * cvmx_pip_stat0_prt#
4539 * PIP Statistics Counters
4541 * Note: special stat counter behavior
4543 * 1) Read and write operations must arbitrate for the statistics resources
4544 * along with the packet engines which are incrementing the counters.
4545 * In order to not drop packet information, the packet HW is always a
4546 * higher priority and the CSR requests will only be satisified when
4547 * there are idle cycles. This can potentially cause long delays if the
4548 * system becomes full.
4550 * 2) stat counters can be cleared in two ways. If PIP_STAT_CTL[RDCLR] is
4551 * set, then all read accesses will clear the register. In addition,
4552 * any write to a stats register will also reset the register to zero.
4553 * Please note that the clearing operations must obey rule \#1 above.
4555 * 3) all counters are wrapping - software must ensure they are read periodically
4557 * 4) The counters accumulate statistics for packets that are sent to PKI. If
4558 * PTP_MODE is enabled, the 8B timestamp is prepended to the packet. This
4559 * additional 8B of data is captured in the octet counts.
4560 * PIP_STAT0_PRT = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
4562 union cvmx_pip_stat0_prtx {
4564 struct cvmx_pip_stat0_prtx_s {
4565 #ifdef __BIG_ENDIAN_BITFIELD
4566 uint64_t drp_pkts : 32; /**< Inbound packets marked to be dropped by the IPD
4567 QOS widget per port */
4568 uint64_t drp_octs : 32; /**< Inbound octets marked to be dropped by the IPD
4569 QOS widget per port */
4571 uint64_t drp_octs : 32;
4572 uint64_t drp_pkts : 32;
4575 struct cvmx_pip_stat0_prtx_s cn30xx;
4576 struct cvmx_pip_stat0_prtx_s cn31xx;
4577 struct cvmx_pip_stat0_prtx_s cn38xx;
4578 struct cvmx_pip_stat0_prtx_s cn38xxp2;
4579 struct cvmx_pip_stat0_prtx_s cn50xx;
4580 struct cvmx_pip_stat0_prtx_s cn52xx;
4581 struct cvmx_pip_stat0_prtx_s cn52xxp1;
4582 struct cvmx_pip_stat0_prtx_s cn56xx;
4583 struct cvmx_pip_stat0_prtx_s cn56xxp1;
4584 struct cvmx_pip_stat0_prtx_s cn58xx;
4585 struct cvmx_pip_stat0_prtx_s cn58xxp1;
4586 struct cvmx_pip_stat0_prtx_s cn61xx;
4587 struct cvmx_pip_stat0_prtx_s cn63xx;
4588 struct cvmx_pip_stat0_prtx_s cn63xxp1;
4589 struct cvmx_pip_stat0_prtx_s cn66xx;
4590 struct cvmx_pip_stat0_prtx_s cnf71xx;
4592 typedef union cvmx_pip_stat0_prtx cvmx_pip_stat0_prtx_t;
4597 * PIP_STAT10_X = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
4600 union cvmx_pip_stat10_x {
4602 struct cvmx_pip_stat10_x_s {
4603 #ifdef __BIG_ENDIAN_BITFIELD
4604 uint64_t bcast : 32; /**< Number of packets with L2 Broadcast DMAC
4605 that were dropped due to RED.
4606 The HW will consider a packet to be an L2
4607 broadcast packet when the 48-bit DMAC is all 1's.
4608 Only applies when the parse mode for the packet
4610 uint64_t mcast : 32; /**< Number of packets with L2 Mulitcast DMAC
4611 that were dropped due to RED.
4612 The HW will consider a packet to be an L2
4613 multicast packet when the least-significant bit
4614 of the first byte of the DMAC is set and the
4615 packet is not an L2 broadcast packet.
4616 Only applies when the parse mode for the packet
4619 uint64_t mcast : 32;
4620 uint64_t bcast : 32;
4623 struct cvmx_pip_stat10_x_s cn68xx;
4624 struct cvmx_pip_stat10_x_s cn68xxp1;
4626 typedef union cvmx_pip_stat10_x cvmx_pip_stat10_x_t;
4629 * cvmx_pip_stat10_prt#
4631 * PIP_STAT10_PRTX = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
4634 union cvmx_pip_stat10_prtx {
4636 struct cvmx_pip_stat10_prtx_s {
4637 #ifdef __BIG_ENDIAN_BITFIELD
4638 uint64_t bcast : 32; /**< Number of packets with L2 Broadcast DMAC
4639 that were dropped due to RED.
4640 The HW will consider a packet to be an L2
4641 broadcast packet when the 48-bit DMAC is all 1's.
4642 Only applies when the parse mode for the packet
4644 uint64_t mcast : 32; /**< Number of packets with L2 Mulitcast DMAC
4645 that were dropped due to RED.
4646 The HW will consider a packet to be an L2
4647 multicast packet when the least-significant bit
4648 of the first byte of the DMAC is set and the
4649 packet is not an L2 broadcast packet.
4650 Only applies when the parse mode for the packet
4653 uint64_t mcast : 32;
4654 uint64_t bcast : 32;
4657 struct cvmx_pip_stat10_prtx_s cn52xx;
4658 struct cvmx_pip_stat10_prtx_s cn52xxp1;
4659 struct cvmx_pip_stat10_prtx_s cn56xx;
4660 struct cvmx_pip_stat10_prtx_s cn56xxp1;
4661 struct cvmx_pip_stat10_prtx_s cn61xx;
4662 struct cvmx_pip_stat10_prtx_s cn63xx;
4663 struct cvmx_pip_stat10_prtx_s cn63xxp1;
4664 struct cvmx_pip_stat10_prtx_s cn66xx;
4665 struct cvmx_pip_stat10_prtx_s cnf71xx;
4667 typedef union cvmx_pip_stat10_prtx cvmx_pip_stat10_prtx_t;
4672 * PIP_STAT11_X = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
4675 union cvmx_pip_stat11_x {
4677 struct cvmx_pip_stat11_x_s {
4678 #ifdef __BIG_ENDIAN_BITFIELD
4679 uint64_t bcast : 32; /**< Number of packets with L3 Broadcast Dest Address
4680 that were dropped due to RED.
4681 The HW considers an IPv4 packet to be broadcast
4682 when all bits are set in the MSB of the
4683 destination address. IPv6 does not have the
4684 concept of a broadcast packets.
4685 Only applies when the parse mode for the packet
4686 is SKIP-TO-L2 and the packet is IP or the parse
4687 mode for the packet is SKIP-TO-IP. */
4688 uint64_t mcast : 32; /**< Number of packets with L3 Multicast Dest Address
4689 that were dropped due to RED.
4690 The HW considers an IPv4 packet to be multicast
4691 when the most-significant nibble of the 32-bit
4692 destination address is 0xE (i.e. it is a class D
4693 address). The HW considers an IPv6 packet to be
4694 multicast when the most-significant byte of the
4695 128-bit destination address is all 1's.
4696 Only applies when the parse mode for the packet
4697 is SKIP-TO-L2 and the packet is IP or the parse
4698 mode for the packet is SKIP-TO-IP. */
4700 uint64_t mcast : 32;
4701 uint64_t bcast : 32;
4704 struct cvmx_pip_stat11_x_s cn68xx;
4705 struct cvmx_pip_stat11_x_s cn68xxp1;
4707 typedef union cvmx_pip_stat11_x cvmx_pip_stat11_x_t;
4710 * cvmx_pip_stat11_prt#
4712 * PIP_STAT11_PRTX = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
4715 union cvmx_pip_stat11_prtx {
4717 struct cvmx_pip_stat11_prtx_s {
4718 #ifdef __BIG_ENDIAN_BITFIELD
4719 uint64_t bcast : 32; /**< Number of packets with L3 Broadcast Dest Address
4720 that were dropped due to RED.
4721 The HW considers an IPv4 packet to be broadcast
4722 when all bits are set in the MSB of the
4723 destination address. IPv6 does not have the
4724 concept of a broadcast packets.
4725 Only applies when the parse mode for the packet
4726 is SKIP-TO-L2 and the packet is IP or the parse
4727 mode for the packet is SKIP-TO-IP. */
4728 uint64_t mcast : 32; /**< Number of packets with L3 Multicast Dest Address
4729 that were dropped due to RED.
4730 The HW considers an IPv4 packet to be multicast
4731 when the most-significant nibble of the 32-bit
4732 destination address is 0xE (i.e. it is a class D
4733 address). The HW considers an IPv6 packet to be
4734 multicast when the most-significant byte of the
4735 128-bit destination address is all 1's.
4736 Only applies when the parse mode for the packet
4737 is SKIP-TO-L2 and the packet is IP or the parse
4738 mode for the packet is SKIP-TO-IP. */
4740 uint64_t mcast : 32;
4741 uint64_t bcast : 32;
4744 struct cvmx_pip_stat11_prtx_s cn52xx;
4745 struct cvmx_pip_stat11_prtx_s cn52xxp1;
4746 struct cvmx_pip_stat11_prtx_s cn56xx;
4747 struct cvmx_pip_stat11_prtx_s cn56xxp1;
4748 struct cvmx_pip_stat11_prtx_s cn61xx;
4749 struct cvmx_pip_stat11_prtx_s cn63xx;
4750 struct cvmx_pip_stat11_prtx_s cn63xxp1;
4751 struct cvmx_pip_stat11_prtx_s cn66xx;
4752 struct cvmx_pip_stat11_prtx_s cnf71xx;
4754 typedef union cvmx_pip_stat11_prtx cvmx_pip_stat11_prtx_t;
4759 * PIP_STAT1_X = PIP_STAT_OCTS
4762 union cvmx_pip_stat1_x {
4764 struct cvmx_pip_stat1_x_s {
4765 #ifdef __BIG_ENDIAN_BITFIELD
4766 uint64_t reserved_48_63 : 16;
4767 uint64_t octs : 48; /**< Number of octets received by PIP (good and bad) */
4770 uint64_t reserved_48_63 : 16;
4773 struct cvmx_pip_stat1_x_s cn68xx;
4774 struct cvmx_pip_stat1_x_s cn68xxp1;
4776 typedef union cvmx_pip_stat1_x cvmx_pip_stat1_x_t;
4779 * cvmx_pip_stat1_prt#
4781 * PIP_STAT1_PRTX = PIP_STAT_OCTS
4784 union cvmx_pip_stat1_prtx {
4786 struct cvmx_pip_stat1_prtx_s {
4787 #ifdef __BIG_ENDIAN_BITFIELD
4788 uint64_t reserved_48_63 : 16;
4789 uint64_t octs : 48; /**< Number of octets received by PIP (good and bad) */
4792 uint64_t reserved_48_63 : 16;
4795 struct cvmx_pip_stat1_prtx_s cn30xx;
4796 struct cvmx_pip_stat1_prtx_s cn31xx;
4797 struct cvmx_pip_stat1_prtx_s cn38xx;
4798 struct cvmx_pip_stat1_prtx_s cn38xxp2;
4799 struct cvmx_pip_stat1_prtx_s cn50xx;
4800 struct cvmx_pip_stat1_prtx_s cn52xx;
4801 struct cvmx_pip_stat1_prtx_s cn52xxp1;
4802 struct cvmx_pip_stat1_prtx_s cn56xx;
4803 struct cvmx_pip_stat1_prtx_s cn56xxp1;
4804 struct cvmx_pip_stat1_prtx_s cn58xx;
4805 struct cvmx_pip_stat1_prtx_s cn58xxp1;
4806 struct cvmx_pip_stat1_prtx_s cn61xx;
4807 struct cvmx_pip_stat1_prtx_s cn63xx;
4808 struct cvmx_pip_stat1_prtx_s cn63xxp1;
4809 struct cvmx_pip_stat1_prtx_s cn66xx;
4810 struct cvmx_pip_stat1_prtx_s cnf71xx;
4812 typedef union cvmx_pip_stat1_prtx cvmx_pip_stat1_prtx_t;
4817 * PIP_STAT2_X = PIP_STAT_PKTS / PIP_STAT_RAW
4820 union cvmx_pip_stat2_x {
4822 struct cvmx_pip_stat2_x_s {
4823 #ifdef __BIG_ENDIAN_BITFIELD
4824 uint64_t pkts : 32; /**< Number of packets processed by PIP */
4825 uint64_t raw : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
4826 received by PIP per port */
4832 struct cvmx_pip_stat2_x_s cn68xx;
4833 struct cvmx_pip_stat2_x_s cn68xxp1;
4835 typedef union cvmx_pip_stat2_x cvmx_pip_stat2_x_t;
4838 * cvmx_pip_stat2_prt#
4840 * PIP_STAT2_PRTX = PIP_STAT_PKTS / PIP_STAT_RAW
4843 union cvmx_pip_stat2_prtx {
4845 struct cvmx_pip_stat2_prtx_s {
4846 #ifdef __BIG_ENDIAN_BITFIELD
4847 uint64_t pkts : 32; /**< Number of packets processed by PIP */
4848 uint64_t raw : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
4849 received by PIP per port */
4855 struct cvmx_pip_stat2_prtx_s cn30xx;
4856 struct cvmx_pip_stat2_prtx_s cn31xx;
4857 struct cvmx_pip_stat2_prtx_s cn38xx;
4858 struct cvmx_pip_stat2_prtx_s cn38xxp2;
4859 struct cvmx_pip_stat2_prtx_s cn50xx;
4860 struct cvmx_pip_stat2_prtx_s cn52xx;
4861 struct cvmx_pip_stat2_prtx_s cn52xxp1;
4862 struct cvmx_pip_stat2_prtx_s cn56xx;
4863 struct cvmx_pip_stat2_prtx_s cn56xxp1;
4864 struct cvmx_pip_stat2_prtx_s cn58xx;
4865 struct cvmx_pip_stat2_prtx_s cn58xxp1;
4866 struct cvmx_pip_stat2_prtx_s cn61xx;
4867 struct cvmx_pip_stat2_prtx_s cn63xx;
4868 struct cvmx_pip_stat2_prtx_s cn63xxp1;
4869 struct cvmx_pip_stat2_prtx_s cn66xx;
4870 struct cvmx_pip_stat2_prtx_s cnf71xx;
4872 typedef union cvmx_pip_stat2_prtx cvmx_pip_stat2_prtx_t;
4877 * PIP_STAT3_X = PIP_STAT_BCST / PIP_STAT_MCST
4880 union cvmx_pip_stat3_x {
4882 struct cvmx_pip_stat3_x_s {
4883 #ifdef __BIG_ENDIAN_BITFIELD
4884 uint64_t bcst : 32; /**< Number of indentified L2 broadcast packets
4885 Does not include multicast packets
4886 Only includes packets whose parse mode is
4888 uint64_t mcst : 32; /**< Number of indentified L2 multicast packets
4889 Does not include broadcast packets
4890 Only includes packets whose parse mode is
4897 struct cvmx_pip_stat3_x_s cn68xx;
4898 struct cvmx_pip_stat3_x_s cn68xxp1;
4900 typedef union cvmx_pip_stat3_x cvmx_pip_stat3_x_t;
4903 * cvmx_pip_stat3_prt#
4905 * PIP_STAT3_PRTX = PIP_STAT_BCST / PIP_STAT_MCST
4908 union cvmx_pip_stat3_prtx {
4910 struct cvmx_pip_stat3_prtx_s {
4911 #ifdef __BIG_ENDIAN_BITFIELD
4912 uint64_t bcst : 32; /**< Number of indentified L2 broadcast packets
4913 Does not include multicast packets
4914 Only includes packets whose parse mode is
4916 uint64_t mcst : 32; /**< Number of indentified L2 multicast packets
4917 Does not include broadcast packets
4918 Only includes packets whose parse mode is
4925 struct cvmx_pip_stat3_prtx_s cn30xx;
4926 struct cvmx_pip_stat3_prtx_s cn31xx;
4927 struct cvmx_pip_stat3_prtx_s cn38xx;
4928 struct cvmx_pip_stat3_prtx_s cn38xxp2;
4929 struct cvmx_pip_stat3_prtx_s cn50xx;
4930 struct cvmx_pip_stat3_prtx_s cn52xx;
4931 struct cvmx_pip_stat3_prtx_s cn52xxp1;
4932 struct cvmx_pip_stat3_prtx_s cn56xx;
4933 struct cvmx_pip_stat3_prtx_s cn56xxp1;
4934 struct cvmx_pip_stat3_prtx_s cn58xx;
4935 struct cvmx_pip_stat3_prtx_s cn58xxp1;
4936 struct cvmx_pip_stat3_prtx_s cn61xx;
4937 struct cvmx_pip_stat3_prtx_s cn63xx;
4938 struct cvmx_pip_stat3_prtx_s cn63xxp1;
4939 struct cvmx_pip_stat3_prtx_s cn66xx;
4940 struct cvmx_pip_stat3_prtx_s cnf71xx;
4942 typedef union cvmx_pip_stat3_prtx cvmx_pip_stat3_prtx_t;
4947 * PIP_STAT4_X = PIP_STAT_HIST1 / PIP_STAT_HIST0
4950 union cvmx_pip_stat4_x {
4952 struct cvmx_pip_stat4_x_s {
4953 #ifdef __BIG_ENDIAN_BITFIELD
4954 uint64_t h65to127 : 32; /**< Number of 65-127B packets */
4955 uint64_t h64 : 32; /**< Number of 1-64B packets */
4958 uint64_t h65to127 : 32;
4961 struct cvmx_pip_stat4_x_s cn68xx;
4962 struct cvmx_pip_stat4_x_s cn68xxp1;
4964 typedef union cvmx_pip_stat4_x cvmx_pip_stat4_x_t;
4967 * cvmx_pip_stat4_prt#
4969 * PIP_STAT4_PRTX = PIP_STAT_HIST1 / PIP_STAT_HIST0
4972 union cvmx_pip_stat4_prtx {
4974 struct cvmx_pip_stat4_prtx_s {
4975 #ifdef __BIG_ENDIAN_BITFIELD
4976 uint64_t h65to127 : 32; /**< Number of 65-127B packets */
4977 uint64_t h64 : 32; /**< Number of 1-64B packets */
4980 uint64_t h65to127 : 32;
4983 struct cvmx_pip_stat4_prtx_s cn30xx;
4984 struct cvmx_pip_stat4_prtx_s cn31xx;
4985 struct cvmx_pip_stat4_prtx_s cn38xx;
4986 struct cvmx_pip_stat4_prtx_s cn38xxp2;
4987 struct cvmx_pip_stat4_prtx_s cn50xx;
4988 struct cvmx_pip_stat4_prtx_s cn52xx;
4989 struct cvmx_pip_stat4_prtx_s cn52xxp1;
4990 struct cvmx_pip_stat4_prtx_s cn56xx;
4991 struct cvmx_pip_stat4_prtx_s cn56xxp1;
4992 struct cvmx_pip_stat4_prtx_s cn58xx;
4993 struct cvmx_pip_stat4_prtx_s cn58xxp1;
4994 struct cvmx_pip_stat4_prtx_s cn61xx;
4995 struct cvmx_pip_stat4_prtx_s cn63xx;
4996 struct cvmx_pip_stat4_prtx_s cn63xxp1;
4997 struct cvmx_pip_stat4_prtx_s cn66xx;
4998 struct cvmx_pip_stat4_prtx_s cnf71xx;
5000 typedef union cvmx_pip_stat4_prtx cvmx_pip_stat4_prtx_t;
5005 * PIP_STAT5_X = PIP_STAT_HIST3 / PIP_STAT_HIST2
5008 union cvmx_pip_stat5_x {
5010 struct cvmx_pip_stat5_x_s {
5011 #ifdef __BIG_ENDIAN_BITFIELD
5012 uint64_t h256to511 : 32; /**< Number of 256-511B packets */
5013 uint64_t h128to255 : 32; /**< Number of 128-255B packets */
5015 uint64_t h128to255 : 32;
5016 uint64_t h256to511 : 32;
5019 struct cvmx_pip_stat5_x_s cn68xx;
5020 struct cvmx_pip_stat5_x_s cn68xxp1;
5022 typedef union cvmx_pip_stat5_x cvmx_pip_stat5_x_t;
5025 * cvmx_pip_stat5_prt#
5027 * PIP_STAT5_PRTX = PIP_STAT_HIST3 / PIP_STAT_HIST2
5030 union cvmx_pip_stat5_prtx {
5032 struct cvmx_pip_stat5_prtx_s {
5033 #ifdef __BIG_ENDIAN_BITFIELD
5034 uint64_t h256to511 : 32; /**< Number of 256-511B packets */
5035 uint64_t h128to255 : 32; /**< Number of 128-255B packets */
5037 uint64_t h128to255 : 32;
5038 uint64_t h256to511 : 32;
5041 struct cvmx_pip_stat5_prtx_s cn30xx;
5042 struct cvmx_pip_stat5_prtx_s cn31xx;
5043 struct cvmx_pip_stat5_prtx_s cn38xx;
5044 struct cvmx_pip_stat5_prtx_s cn38xxp2;
5045 struct cvmx_pip_stat5_prtx_s cn50xx;
5046 struct cvmx_pip_stat5_prtx_s cn52xx;
5047 struct cvmx_pip_stat5_prtx_s cn52xxp1;
5048 struct cvmx_pip_stat5_prtx_s cn56xx;
5049 struct cvmx_pip_stat5_prtx_s cn56xxp1;
5050 struct cvmx_pip_stat5_prtx_s cn58xx;
5051 struct cvmx_pip_stat5_prtx_s cn58xxp1;
5052 struct cvmx_pip_stat5_prtx_s cn61xx;
5053 struct cvmx_pip_stat5_prtx_s cn63xx;
5054 struct cvmx_pip_stat5_prtx_s cn63xxp1;
5055 struct cvmx_pip_stat5_prtx_s cn66xx;
5056 struct cvmx_pip_stat5_prtx_s cnf71xx;
5058 typedef union cvmx_pip_stat5_prtx cvmx_pip_stat5_prtx_t;
5063 * PIP_STAT6_X = PIP_STAT_HIST5 / PIP_STAT_HIST4
5066 union cvmx_pip_stat6_x {
5068 struct cvmx_pip_stat6_x_s {
5069 #ifdef __BIG_ENDIAN_BITFIELD
5070 uint64_t h1024to1518 : 32; /**< Number of 1024-1518B packets */
5071 uint64_t h512to1023 : 32; /**< Number of 512-1023B packets */
5073 uint64_t h512to1023 : 32;
5074 uint64_t h1024to1518 : 32;
5077 struct cvmx_pip_stat6_x_s cn68xx;
5078 struct cvmx_pip_stat6_x_s cn68xxp1;
5080 typedef union cvmx_pip_stat6_x cvmx_pip_stat6_x_t;
5083 * cvmx_pip_stat6_prt#
5085 * PIP_STAT6_PRTX = PIP_STAT_HIST5 / PIP_STAT_HIST4
5088 union cvmx_pip_stat6_prtx {
5090 struct cvmx_pip_stat6_prtx_s {
5091 #ifdef __BIG_ENDIAN_BITFIELD
5092 uint64_t h1024to1518 : 32; /**< Number of 1024-1518B packets */
5093 uint64_t h512to1023 : 32; /**< Number of 512-1023B packets */
5095 uint64_t h512to1023 : 32;
5096 uint64_t h1024to1518 : 32;
5099 struct cvmx_pip_stat6_prtx_s cn30xx;
5100 struct cvmx_pip_stat6_prtx_s cn31xx;
5101 struct cvmx_pip_stat6_prtx_s cn38xx;
5102 struct cvmx_pip_stat6_prtx_s cn38xxp2;
5103 struct cvmx_pip_stat6_prtx_s cn50xx;
5104 struct cvmx_pip_stat6_prtx_s cn52xx;
5105 struct cvmx_pip_stat6_prtx_s cn52xxp1;
5106 struct cvmx_pip_stat6_prtx_s cn56xx;
5107 struct cvmx_pip_stat6_prtx_s cn56xxp1;
5108 struct cvmx_pip_stat6_prtx_s cn58xx;
5109 struct cvmx_pip_stat6_prtx_s cn58xxp1;
5110 struct cvmx_pip_stat6_prtx_s cn61xx;
5111 struct cvmx_pip_stat6_prtx_s cn63xx;
5112 struct cvmx_pip_stat6_prtx_s cn63xxp1;
5113 struct cvmx_pip_stat6_prtx_s cn66xx;
5114 struct cvmx_pip_stat6_prtx_s cnf71xx;
5116 typedef union cvmx_pip_stat6_prtx cvmx_pip_stat6_prtx_t;
5121 * PIP_STAT7_X = PIP_STAT_FCS / PIP_STAT_HIST6
5124 union cvmx_pip_stat7_x {
5126 struct cvmx_pip_stat7_x_s {
5127 #ifdef __BIG_ENDIAN_BITFIELD
5128 uint64_t fcs : 32; /**< Number of packets with FCS or Align opcode errors */
5129 uint64_t h1519 : 32; /**< Number of 1519-max packets */
5131 uint64_t h1519 : 32;
5135 struct cvmx_pip_stat7_x_s cn68xx;
5136 struct cvmx_pip_stat7_x_s cn68xxp1;
5138 typedef union cvmx_pip_stat7_x cvmx_pip_stat7_x_t;
5141 * cvmx_pip_stat7_prt#
5143 * PIP_STAT7_PRTX = PIP_STAT_FCS / PIP_STAT_HIST6
5147 * DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
5148 * sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
5150 union cvmx_pip_stat7_prtx {
5152 struct cvmx_pip_stat7_prtx_s {
5153 #ifdef __BIG_ENDIAN_BITFIELD
5154 uint64_t fcs : 32; /**< Number of packets with FCS or Align opcode errors */
5155 uint64_t h1519 : 32; /**< Number of 1519-max packets */
5157 uint64_t h1519 : 32;
5161 struct cvmx_pip_stat7_prtx_s cn30xx;
5162 struct cvmx_pip_stat7_prtx_s cn31xx;
5163 struct cvmx_pip_stat7_prtx_s cn38xx;
5164 struct cvmx_pip_stat7_prtx_s cn38xxp2;
5165 struct cvmx_pip_stat7_prtx_s cn50xx;
5166 struct cvmx_pip_stat7_prtx_s cn52xx;
5167 struct cvmx_pip_stat7_prtx_s cn52xxp1;
5168 struct cvmx_pip_stat7_prtx_s cn56xx;
5169 struct cvmx_pip_stat7_prtx_s cn56xxp1;
5170 struct cvmx_pip_stat7_prtx_s cn58xx;
5171 struct cvmx_pip_stat7_prtx_s cn58xxp1;
5172 struct cvmx_pip_stat7_prtx_s cn61xx;
5173 struct cvmx_pip_stat7_prtx_s cn63xx;
5174 struct cvmx_pip_stat7_prtx_s cn63xxp1;
5175 struct cvmx_pip_stat7_prtx_s cn66xx;
5176 struct cvmx_pip_stat7_prtx_s cnf71xx;
5178 typedef union cvmx_pip_stat7_prtx cvmx_pip_stat7_prtx_t;
5183 * PIP_STAT8_X = PIP_STAT_FRAG / PIP_STAT_UNDER
5186 union cvmx_pip_stat8_x {
5188 struct cvmx_pip_stat8_x_s {
5189 #ifdef __BIG_ENDIAN_BITFIELD
5190 uint64_t frag : 32; /**< Number of packets with length < min and FCS error */
5191 uint64_t undersz : 32; /**< Number of packets with length < min */
5193 uint64_t undersz : 32;
5197 struct cvmx_pip_stat8_x_s cn68xx;
5198 struct cvmx_pip_stat8_x_s cn68xxp1;
5200 typedef union cvmx_pip_stat8_x cvmx_pip_stat8_x_t;
5203 * cvmx_pip_stat8_prt#
5205 * PIP_STAT8_PRTX = PIP_STAT_FRAG / PIP_STAT_UNDER
5209 * DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
5210 * sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
5212 union cvmx_pip_stat8_prtx {
5214 struct cvmx_pip_stat8_prtx_s {
5215 #ifdef __BIG_ENDIAN_BITFIELD
5216 uint64_t frag : 32; /**< Number of packets with length < min and FCS error */
5217 uint64_t undersz : 32; /**< Number of packets with length < min */
5219 uint64_t undersz : 32;
5223 struct cvmx_pip_stat8_prtx_s cn30xx;
5224 struct cvmx_pip_stat8_prtx_s cn31xx;
5225 struct cvmx_pip_stat8_prtx_s cn38xx;
5226 struct cvmx_pip_stat8_prtx_s cn38xxp2;
5227 struct cvmx_pip_stat8_prtx_s cn50xx;
5228 struct cvmx_pip_stat8_prtx_s cn52xx;
5229 struct cvmx_pip_stat8_prtx_s cn52xxp1;
5230 struct cvmx_pip_stat8_prtx_s cn56xx;
5231 struct cvmx_pip_stat8_prtx_s cn56xxp1;
5232 struct cvmx_pip_stat8_prtx_s cn58xx;
5233 struct cvmx_pip_stat8_prtx_s cn58xxp1;
5234 struct cvmx_pip_stat8_prtx_s cn61xx;
5235 struct cvmx_pip_stat8_prtx_s cn63xx;
5236 struct cvmx_pip_stat8_prtx_s cn63xxp1;
5237 struct cvmx_pip_stat8_prtx_s cn66xx;
5238 struct cvmx_pip_stat8_prtx_s cnf71xx;
5240 typedef union cvmx_pip_stat8_prtx cvmx_pip_stat8_prtx_t;
5245 * PIP_STAT9_X = PIP_STAT_JABBER / PIP_STAT_OVER
5248 union cvmx_pip_stat9_x {
5250 struct cvmx_pip_stat9_x_s {
5251 #ifdef __BIG_ENDIAN_BITFIELD
5252 uint64_t jabber : 32; /**< Number of packets with length > max and FCS error */
5253 uint64_t oversz : 32; /**< Number of packets with length > max */
5255 uint64_t oversz : 32;
5256 uint64_t jabber : 32;
5259 struct cvmx_pip_stat9_x_s cn68xx;
5260 struct cvmx_pip_stat9_x_s cn68xxp1;
5262 typedef union cvmx_pip_stat9_x cvmx_pip_stat9_x_t;
5265 * cvmx_pip_stat9_prt#
5267 * PIP_STAT9_PRTX = PIP_STAT_JABBER / PIP_STAT_OVER
5271 * DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
5272 * sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
5273 * sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
5275 union cvmx_pip_stat9_prtx {
5277 struct cvmx_pip_stat9_prtx_s {
5278 #ifdef __BIG_ENDIAN_BITFIELD
5279 uint64_t jabber : 32; /**< Number of packets with length > max and FCS error */
5280 uint64_t oversz : 32; /**< Number of packets with length > max */
5282 uint64_t oversz : 32;
5283 uint64_t jabber : 32;
5286 struct cvmx_pip_stat9_prtx_s cn30xx;
5287 struct cvmx_pip_stat9_prtx_s cn31xx;
5288 struct cvmx_pip_stat9_prtx_s cn38xx;
5289 struct cvmx_pip_stat9_prtx_s cn38xxp2;
5290 struct cvmx_pip_stat9_prtx_s cn50xx;
5291 struct cvmx_pip_stat9_prtx_s cn52xx;
5292 struct cvmx_pip_stat9_prtx_s cn52xxp1;
5293 struct cvmx_pip_stat9_prtx_s cn56xx;
5294 struct cvmx_pip_stat9_prtx_s cn56xxp1;
5295 struct cvmx_pip_stat9_prtx_s cn58xx;
5296 struct cvmx_pip_stat9_prtx_s cn58xxp1;
5297 struct cvmx_pip_stat9_prtx_s cn61xx;
5298 struct cvmx_pip_stat9_prtx_s cn63xx;
5299 struct cvmx_pip_stat9_prtx_s cn63xxp1;
5300 struct cvmx_pip_stat9_prtx_s cn66xx;
5301 struct cvmx_pip_stat9_prtx_s cnf71xx;
5303 typedef union cvmx_pip_stat9_prtx cvmx_pip_stat9_prtx_t;
5308 * PIP_STAT_CTL = PIP's Stat Control Register
5310 * Controls how the PIP statistics counters are handled.
5312 union cvmx_pip_stat_ctl {
5314 struct cvmx_pip_stat_ctl_s {
5315 #ifdef __BIG_ENDIAN_BITFIELD
5316 uint64_t reserved_9_63 : 55;
5317 uint64_t mode : 1; /**< The PIP_STAT*_X registers can be indexed either by
5318 port-kind or backpressure ID.
5319 Does not apply to the PIP_STAT_INB* registers.
5320 0 = X represents the packet's port-kind
5321 1 = X represents the packet's backpressure ID */
5322 uint64_t reserved_1_7 : 7;
5323 uint64_t rdclr : 1; /**< Stat registers are read and clear
5324 0 = stat registers hold value when read
5325 1 = stat registers are cleared when read */
5328 uint64_t reserved_1_7 : 7;
5330 uint64_t reserved_9_63 : 55;
5333 struct cvmx_pip_stat_ctl_cn30xx {
5334 #ifdef __BIG_ENDIAN_BITFIELD
5335 uint64_t reserved_1_63 : 63;
5336 uint64_t rdclr : 1; /**< Stat registers are read and clear
5337 0 = stat registers hold value when read
5338 1 = stat registers are cleared when read */
5341 uint64_t reserved_1_63 : 63;
5344 struct cvmx_pip_stat_ctl_cn30xx cn31xx;
5345 struct cvmx_pip_stat_ctl_cn30xx cn38xx;
5346 struct cvmx_pip_stat_ctl_cn30xx cn38xxp2;
5347 struct cvmx_pip_stat_ctl_cn30xx cn50xx;
5348 struct cvmx_pip_stat_ctl_cn30xx cn52xx;
5349 struct cvmx_pip_stat_ctl_cn30xx cn52xxp1;
5350 struct cvmx_pip_stat_ctl_cn30xx cn56xx;
5351 struct cvmx_pip_stat_ctl_cn30xx cn56xxp1;
5352 struct cvmx_pip_stat_ctl_cn30xx cn58xx;
5353 struct cvmx_pip_stat_ctl_cn30xx cn58xxp1;
5354 struct cvmx_pip_stat_ctl_cn30xx cn61xx;
5355 struct cvmx_pip_stat_ctl_cn30xx cn63xx;
5356 struct cvmx_pip_stat_ctl_cn30xx cn63xxp1;
5357 struct cvmx_pip_stat_ctl_cn30xx cn66xx;
5358 struct cvmx_pip_stat_ctl_s cn68xx;
5359 struct cvmx_pip_stat_ctl_s cn68xxp1;
5360 struct cvmx_pip_stat_ctl_cn30xx cnf71xx;
5362 typedef union cvmx_pip_stat_ctl cvmx_pip_stat_ctl_t;
5365 * cvmx_pip_stat_inb_errs#
5367 * PIP_STAT_INB_ERRSX = Inbound error packets received by PIP per port
5369 * Inbound stats collect all data sent to PIP from all packet interfaces.
5370 * Its the raw counts of everything that comes into the block. The counts
5371 * will reflect all error packets and packets dropped by the PKI RED engine.
5372 * These counts are intended for system debug, but could convey useful
5373 * information in production systems.
5375 union cvmx_pip_stat_inb_errsx {
5377 struct cvmx_pip_stat_inb_errsx_s {
5378 #ifdef __BIG_ENDIAN_BITFIELD
5379 uint64_t reserved_16_63 : 48;
5380 uint64_t errs : 16; /**< Number of packets with errors
5384 uint64_t reserved_16_63 : 48;
5387 struct cvmx_pip_stat_inb_errsx_s cn30xx;
5388 struct cvmx_pip_stat_inb_errsx_s cn31xx;
5389 struct cvmx_pip_stat_inb_errsx_s cn38xx;
5390 struct cvmx_pip_stat_inb_errsx_s cn38xxp2;
5391 struct cvmx_pip_stat_inb_errsx_s cn50xx;
5392 struct cvmx_pip_stat_inb_errsx_s cn52xx;
5393 struct cvmx_pip_stat_inb_errsx_s cn52xxp1;
5394 struct cvmx_pip_stat_inb_errsx_s cn56xx;
5395 struct cvmx_pip_stat_inb_errsx_s cn56xxp1;
5396 struct cvmx_pip_stat_inb_errsx_s cn58xx;
5397 struct cvmx_pip_stat_inb_errsx_s cn58xxp1;
5398 struct cvmx_pip_stat_inb_errsx_s cn61xx;
5399 struct cvmx_pip_stat_inb_errsx_s cn63xx;
5400 struct cvmx_pip_stat_inb_errsx_s cn63xxp1;
5401 struct cvmx_pip_stat_inb_errsx_s cn66xx;
5402 struct cvmx_pip_stat_inb_errsx_s cnf71xx;
5404 typedef union cvmx_pip_stat_inb_errsx cvmx_pip_stat_inb_errsx_t;
5407 * cvmx_pip_stat_inb_errs_pknd#
5409 * PIP_STAT_INB_ERRS_PKNDX = Inbound error packets received by PIP per pkind
5411 * Inbound stats collect all data sent to PIP from all packet interfaces.
5412 * Its the raw counts of everything that comes into the block. The counts
5413 * will reflect all error packets and packets dropped by the PKI RED engine.
5414 * These counts are intended for system debug, but could convey useful
5415 * information in production systems.
5417 union cvmx_pip_stat_inb_errs_pkndx {
5419 struct cvmx_pip_stat_inb_errs_pkndx_s {
5420 #ifdef __BIG_ENDIAN_BITFIELD
5421 uint64_t reserved_16_63 : 48;
5422 uint64_t errs : 16; /**< Number of packets with errors
5426 uint64_t reserved_16_63 : 48;
5429 struct cvmx_pip_stat_inb_errs_pkndx_s cn68xx;
5430 struct cvmx_pip_stat_inb_errs_pkndx_s cn68xxp1;
5432 typedef union cvmx_pip_stat_inb_errs_pkndx cvmx_pip_stat_inb_errs_pkndx_t;
5435 * cvmx_pip_stat_inb_octs#
5437 * PIP_STAT_INB_OCTSX = Inbound octets received by PIP per port
5439 * Inbound stats collect all data sent to PIP from all packet interfaces.
5440 * Its the raw counts of everything that comes into the block. The counts
5441 * will reflect all error packets and packets dropped by the PKI RED engine.
5442 * These counts are intended for system debug, but could convey useful
5443 * information in production systems. The OCTS will include the bytes from
5444 * timestamp fields in PTP_MODE.
5446 union cvmx_pip_stat_inb_octsx {
5448 struct cvmx_pip_stat_inb_octsx_s {
5449 #ifdef __BIG_ENDIAN_BITFIELD
5450 uint64_t reserved_48_63 : 16;
5451 uint64_t octs : 48; /**< Total number of octets from all packets received
5455 uint64_t reserved_48_63 : 16;
5458 struct cvmx_pip_stat_inb_octsx_s cn30xx;
5459 struct cvmx_pip_stat_inb_octsx_s cn31xx;
5460 struct cvmx_pip_stat_inb_octsx_s cn38xx;
5461 struct cvmx_pip_stat_inb_octsx_s cn38xxp2;
5462 struct cvmx_pip_stat_inb_octsx_s cn50xx;
5463 struct cvmx_pip_stat_inb_octsx_s cn52xx;
5464 struct cvmx_pip_stat_inb_octsx_s cn52xxp1;
5465 struct cvmx_pip_stat_inb_octsx_s cn56xx;
5466 struct cvmx_pip_stat_inb_octsx_s cn56xxp1;
5467 struct cvmx_pip_stat_inb_octsx_s cn58xx;
5468 struct cvmx_pip_stat_inb_octsx_s cn58xxp1;
5469 struct cvmx_pip_stat_inb_octsx_s cn61xx;
5470 struct cvmx_pip_stat_inb_octsx_s cn63xx;
5471 struct cvmx_pip_stat_inb_octsx_s cn63xxp1;
5472 struct cvmx_pip_stat_inb_octsx_s cn66xx;
5473 struct cvmx_pip_stat_inb_octsx_s cnf71xx;
5475 typedef union cvmx_pip_stat_inb_octsx cvmx_pip_stat_inb_octsx_t;
5478 * cvmx_pip_stat_inb_octs_pknd#
5480 * PIP_STAT_INB_OCTS_PKNDX = Inbound octets received by PIP per pkind
5482 * Inbound stats collect all data sent to PIP from all packet interfaces.
5483 * Its the raw counts of everything that comes into the block. The counts
5484 * will reflect all error packets and packets dropped by the PKI RED engine.
5485 * These counts are intended for system debug, but could convey useful
5486 * information in production systems. The OCTS will include the bytes from
5487 * timestamp fields in PTP_MODE.
5489 union cvmx_pip_stat_inb_octs_pkndx {
5491 struct cvmx_pip_stat_inb_octs_pkndx_s {
5492 #ifdef __BIG_ENDIAN_BITFIELD
5493 uint64_t reserved_48_63 : 16;
5494 uint64_t octs : 48; /**< Total number of octets from all packets received
5498 uint64_t reserved_48_63 : 16;
5501 struct cvmx_pip_stat_inb_octs_pkndx_s cn68xx;
5502 struct cvmx_pip_stat_inb_octs_pkndx_s cn68xxp1;
5504 typedef union cvmx_pip_stat_inb_octs_pkndx cvmx_pip_stat_inb_octs_pkndx_t;
5507 * cvmx_pip_stat_inb_pkts#
5509 * PIP_STAT_INB_PKTSX = Inbound packets received by PIP per port
5511 * Inbound stats collect all data sent to PIP from all packet interfaces.
5512 * Its the raw counts of everything that comes into the block. The counts
5513 * will reflect all error packets and packets dropped by the PKI RED engine.
5514 * These counts are intended for system debug, but could convey useful
5515 * information in production systems.
5517 union cvmx_pip_stat_inb_pktsx {
5519 struct cvmx_pip_stat_inb_pktsx_s {
5520 #ifdef __BIG_ENDIAN_BITFIELD
5521 uint64_t reserved_32_63 : 32;
5522 uint64_t pkts : 32; /**< Number of packets without errors
5526 uint64_t reserved_32_63 : 32;
5529 struct cvmx_pip_stat_inb_pktsx_s cn30xx;
5530 struct cvmx_pip_stat_inb_pktsx_s cn31xx;
5531 struct cvmx_pip_stat_inb_pktsx_s cn38xx;
5532 struct cvmx_pip_stat_inb_pktsx_s cn38xxp2;
5533 struct cvmx_pip_stat_inb_pktsx_s cn50xx;
5534 struct cvmx_pip_stat_inb_pktsx_s cn52xx;
5535 struct cvmx_pip_stat_inb_pktsx_s cn52xxp1;
5536 struct cvmx_pip_stat_inb_pktsx_s cn56xx;
5537 struct cvmx_pip_stat_inb_pktsx_s cn56xxp1;
5538 struct cvmx_pip_stat_inb_pktsx_s cn58xx;
5539 struct cvmx_pip_stat_inb_pktsx_s cn58xxp1;
5540 struct cvmx_pip_stat_inb_pktsx_s cn61xx;
5541 struct cvmx_pip_stat_inb_pktsx_s cn63xx;
5542 struct cvmx_pip_stat_inb_pktsx_s cn63xxp1;
5543 struct cvmx_pip_stat_inb_pktsx_s cn66xx;
5544 struct cvmx_pip_stat_inb_pktsx_s cnf71xx;
5546 typedef union cvmx_pip_stat_inb_pktsx cvmx_pip_stat_inb_pktsx_t;
5549 * cvmx_pip_stat_inb_pkts_pknd#
5551 * PIP_STAT_INB_PKTS_PKNDX = Inbound packets received by PIP per pkind
5553 * Inbound stats collect all data sent to PIP from all packet interfaces.
5554 * Its the raw counts of everything that comes into the block. The counts
5555 * will reflect all error packets and packets dropped by the PKI RED engine.
5556 * These counts are intended for system debug, but could convey useful
5557 * information in production systems.
5559 union cvmx_pip_stat_inb_pkts_pkndx {
5561 struct cvmx_pip_stat_inb_pkts_pkndx_s {
5562 #ifdef __BIG_ENDIAN_BITFIELD
5563 uint64_t reserved_32_63 : 32;
5564 uint64_t pkts : 32; /**< Number of packets without errors
5568 uint64_t reserved_32_63 : 32;
5571 struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xx;
5572 struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xxp1;
5574 typedef union cvmx_pip_stat_inb_pkts_pkndx cvmx_pip_stat_inb_pkts_pkndx_t;
5577 * cvmx_pip_sub_pkind_fcs#
5579 union cvmx_pip_sub_pkind_fcsx {
5581 struct cvmx_pip_sub_pkind_fcsx_s {
5582 #ifdef __BIG_ENDIAN_BITFIELD
5583 uint64_t port_bit : 64; /**< When set '1', the pkind corresponding to the bit
5584 position set, will subtract the FCS for packets
5587 uint64_t port_bit : 64;
5590 struct cvmx_pip_sub_pkind_fcsx_s cn68xx;
5591 struct cvmx_pip_sub_pkind_fcsx_s cn68xxp1;
5593 typedef union cvmx_pip_sub_pkind_fcsx cvmx_pip_sub_pkind_fcsx_t;
5598 * PIP_TAG_INC = Which bytes to include in the new tag hash algorithm
5600 * # $PIP_TAG_INCX = 0x300+X X=(0..63) RegType=(RSL) RtlReg=(pip_tag_inc_csr_direct_TestbuilderTask)
5602 union cvmx_pip_tag_incx {
5604 struct cvmx_pip_tag_incx_s {
5605 #ifdef __BIG_ENDIAN_BITFIELD
5606 uint64_t reserved_8_63 : 56;
5607 uint64_t en : 8; /**< Which bytes to include in mask tag algorithm
5608 Broken into 4, 16-entry masks to cover 128B
5609 PIP_PRT_CFG[TAG_INC] selects 1 of 4 to use
5610 registers 0-15 map to PIP_PRT_CFG[TAG_INC] == 0
5611 registers 16-31 map to PIP_PRT_CFG[TAG_INC] == 1
5612 registers 32-47 map to PIP_PRT_CFG[TAG_INC] == 2
5613 registers 48-63 map to PIP_PRT_CFG[TAG_INC] == 3
5614 [7] coresponds to the MSB of the 8B word
5615 [0] coresponds to the LSB of the 8B word
5616 If PTP_MODE, the 8B timestamp is prepended to the
5617 packet. The EN byte masks should be adjusted to
5618 compensate for the additional timestamp field. */
5621 uint64_t reserved_8_63 : 56;
5624 struct cvmx_pip_tag_incx_s cn30xx;
5625 struct cvmx_pip_tag_incx_s cn31xx;
5626 struct cvmx_pip_tag_incx_s cn38xx;
5627 struct cvmx_pip_tag_incx_s cn38xxp2;
5628 struct cvmx_pip_tag_incx_s cn50xx;
5629 struct cvmx_pip_tag_incx_s cn52xx;
5630 struct cvmx_pip_tag_incx_s cn52xxp1;
5631 struct cvmx_pip_tag_incx_s cn56xx;
5632 struct cvmx_pip_tag_incx_s cn56xxp1;
5633 struct cvmx_pip_tag_incx_s cn58xx;
5634 struct cvmx_pip_tag_incx_s cn58xxp1;
5635 struct cvmx_pip_tag_incx_s cn61xx;
5636 struct cvmx_pip_tag_incx_s cn63xx;
5637 struct cvmx_pip_tag_incx_s cn63xxp1;
5638 struct cvmx_pip_tag_incx_s cn66xx;
5639 struct cvmx_pip_tag_incx_s cn68xx;
5640 struct cvmx_pip_tag_incx_s cn68xxp1;
5641 struct cvmx_pip_tag_incx_s cnf71xx;
5643 typedef union cvmx_pip_tag_incx cvmx_pip_tag_incx_t;
5648 * PIP_TAG_MASK = Mask bit in the tag generation
5651 union cvmx_pip_tag_mask {
5653 struct cvmx_pip_tag_mask_s {
5654 #ifdef __BIG_ENDIAN_BITFIELD
5655 uint64_t reserved_16_63 : 48;
5656 uint64_t mask : 16; /**< When set, MASK clears individual bits of lower 16
5657 bits of the computed tag. Does not effect RAW
5658 or INSTR HDR packets. */
5661 uint64_t reserved_16_63 : 48;
5664 struct cvmx_pip_tag_mask_s cn30xx;
5665 struct cvmx_pip_tag_mask_s cn31xx;
5666 struct cvmx_pip_tag_mask_s cn38xx;
5667 struct cvmx_pip_tag_mask_s cn38xxp2;
5668 struct cvmx_pip_tag_mask_s cn50xx;
5669 struct cvmx_pip_tag_mask_s cn52xx;
5670 struct cvmx_pip_tag_mask_s cn52xxp1;
5671 struct cvmx_pip_tag_mask_s cn56xx;
5672 struct cvmx_pip_tag_mask_s cn56xxp1;
5673 struct cvmx_pip_tag_mask_s cn58xx;
5674 struct cvmx_pip_tag_mask_s cn58xxp1;
5675 struct cvmx_pip_tag_mask_s cn61xx;
5676 struct cvmx_pip_tag_mask_s cn63xx;
5677 struct cvmx_pip_tag_mask_s cn63xxp1;
5678 struct cvmx_pip_tag_mask_s cn66xx;
5679 struct cvmx_pip_tag_mask_s cn68xx;
5680 struct cvmx_pip_tag_mask_s cn68xxp1;
5681 struct cvmx_pip_tag_mask_s cnf71xx;
5683 typedef union cvmx_pip_tag_mask cvmx_pip_tag_mask_t;
5686 * cvmx_pip_tag_secret
5688 * PIP_TAG_SECRET = Initial value in tag generation
5690 * The source and destination IV's provide a mechanism for each Octeon to be unique.
5692 union cvmx_pip_tag_secret {
5694 struct cvmx_pip_tag_secret_s {
5695 #ifdef __BIG_ENDIAN_BITFIELD
5696 uint64_t reserved_32_63 : 32;
5697 uint64_t dst : 16; /**< Secret for the destination tuple tag CRC calc */
5698 uint64_t src : 16; /**< Secret for the source tuple tag CRC calc */
5702 uint64_t reserved_32_63 : 32;
5705 struct cvmx_pip_tag_secret_s cn30xx;
5706 struct cvmx_pip_tag_secret_s cn31xx;
5707 struct cvmx_pip_tag_secret_s cn38xx;
5708 struct cvmx_pip_tag_secret_s cn38xxp2;
5709 struct cvmx_pip_tag_secret_s cn50xx;
5710 struct cvmx_pip_tag_secret_s cn52xx;
5711 struct cvmx_pip_tag_secret_s cn52xxp1;
5712 struct cvmx_pip_tag_secret_s cn56xx;
5713 struct cvmx_pip_tag_secret_s cn56xxp1;
5714 struct cvmx_pip_tag_secret_s cn58xx;
5715 struct cvmx_pip_tag_secret_s cn58xxp1;
5716 struct cvmx_pip_tag_secret_s cn61xx;
5717 struct cvmx_pip_tag_secret_s cn63xx;
5718 struct cvmx_pip_tag_secret_s cn63xxp1;
5719 struct cvmx_pip_tag_secret_s cn66xx;
5720 struct cvmx_pip_tag_secret_s cn68xx;
5721 struct cvmx_pip_tag_secret_s cn68xxp1;
5722 struct cvmx_pip_tag_secret_s cnf71xx;
5724 typedef union cvmx_pip_tag_secret cvmx_pip_tag_secret_t;
5727 * cvmx_pip_todo_entry
5729 * PIP_TODO_ENTRY = Head entry of the Todo list (debug only)
5731 * Summary of the current packet that has completed and waiting to be processed
5733 union cvmx_pip_todo_entry {
5735 struct cvmx_pip_todo_entry_s {
5736 #ifdef __BIG_ENDIAN_BITFIELD
5737 uint64_t val : 1; /**< Entry is valid */
5738 uint64_t reserved_62_62 : 1;
5739 uint64_t entry : 62; /**< Todo list entry summary */
5741 uint64_t entry : 62;
5742 uint64_t reserved_62_62 : 1;
5746 struct cvmx_pip_todo_entry_s cn30xx;
5747 struct cvmx_pip_todo_entry_s cn31xx;
5748 struct cvmx_pip_todo_entry_s cn38xx;
5749 struct cvmx_pip_todo_entry_s cn38xxp2;
5750 struct cvmx_pip_todo_entry_s cn50xx;
5751 struct cvmx_pip_todo_entry_s cn52xx;
5752 struct cvmx_pip_todo_entry_s cn52xxp1;
5753 struct cvmx_pip_todo_entry_s cn56xx;
5754 struct cvmx_pip_todo_entry_s cn56xxp1;
5755 struct cvmx_pip_todo_entry_s cn58xx;
5756 struct cvmx_pip_todo_entry_s cn58xxp1;
5757 struct cvmx_pip_todo_entry_s cn61xx;
5758 struct cvmx_pip_todo_entry_s cn63xx;
5759 struct cvmx_pip_todo_entry_s cn63xxp1;
5760 struct cvmx_pip_todo_entry_s cn66xx;
5761 struct cvmx_pip_todo_entry_s cn68xx;
5762 struct cvmx_pip_todo_entry_s cn68xxp1;
5763 struct cvmx_pip_todo_entry_s cnf71xx;
5765 typedef union cvmx_pip_todo_entry cvmx_pip_todo_entry_t;
5768 * cvmx_pip_vlan_etypes#
5770 union cvmx_pip_vlan_etypesx {
5772 struct cvmx_pip_vlan_etypesx_s {
5773 #ifdef __BIG_ENDIAN_BITFIELD
5774 uint64_t type3 : 16; /**< VLAN Ethertype */
5775 uint64_t type2 : 16; /**< VLAN Ethertype */
5776 uint64_t type1 : 16; /**< VLAN Ethertype */
5777 uint64_t type0 : 16; /**< VLAN Ethertype
5778 Specifies ethertypes that will be parsed as
5779 containing VLAN information. Each TYPE is
5780 orthagonal; if all eight are not required, set
5781 multiple TYPEs to the same value (as in the
5782 0x8100 default value). */
5784 uint64_t type0 : 16;
5785 uint64_t type1 : 16;
5786 uint64_t type2 : 16;
5787 uint64_t type3 : 16;
5790 struct cvmx_pip_vlan_etypesx_s cn61xx;
5791 struct cvmx_pip_vlan_etypesx_s cn66xx;
5792 struct cvmx_pip_vlan_etypesx_s cn68xx;
5793 struct cvmx_pip_vlan_etypesx_s cnf71xx;
5795 typedef union cvmx_pip_vlan_etypesx cvmx_pip_vlan_etypesx_t;
5798 * cvmx_pip_xstat0_prt#
5800 * PIP_XSTAT0_PRT = PIP_XSTAT_DRP_PKTS / PIP_XSTAT_DRP_OCTS
5803 union cvmx_pip_xstat0_prtx {
5805 struct cvmx_pip_xstat0_prtx_s {
5806 #ifdef __BIG_ENDIAN_BITFIELD
5807 uint64_t drp_pkts : 32; /**< Inbound packets marked to be dropped by the IPD
5808 QOS widget per port */
5809 uint64_t drp_octs : 32; /**< Inbound octets marked to be dropped by the IPD
5810 QOS widget per port */
5812 uint64_t drp_octs : 32;
5813 uint64_t drp_pkts : 32;
5816 struct cvmx_pip_xstat0_prtx_s cn63xx;
5817 struct cvmx_pip_xstat0_prtx_s cn63xxp1;
5818 struct cvmx_pip_xstat0_prtx_s cn66xx;
5820 typedef union cvmx_pip_xstat0_prtx cvmx_pip_xstat0_prtx_t;
5823 * cvmx_pip_xstat10_prt#
5825 * PIP_XSTAT10_PRTX = PIP_XSTAT_L2_MCAST / PIP_XSTAT_L2_BCAST
5828 union cvmx_pip_xstat10_prtx {
5830 struct cvmx_pip_xstat10_prtx_s {
5831 #ifdef __BIG_ENDIAN_BITFIELD
5832 uint64_t bcast : 32; /**< Number of packets with L2 Broadcast DMAC
5833 that were dropped due to RED.
5834 The HW will consider a packet to be an L2
5835 broadcast packet when the 48-bit DMAC is all 1's.
5836 Only applies when the parse mode for the packet
5838 uint64_t mcast : 32; /**< Number of packets with L2 Mulitcast DMAC
5839 that were dropped due to RED.
5840 The HW will consider a packet to be an L2
5841 multicast packet when the least-significant bit
5842 of the first byte of the DMAC is set and the
5843 packet is not an L2 broadcast packet.
5844 Only applies when the parse mode for the packet
5847 uint64_t mcast : 32;
5848 uint64_t bcast : 32;
5851 struct cvmx_pip_xstat10_prtx_s cn63xx;
5852 struct cvmx_pip_xstat10_prtx_s cn63xxp1;
5853 struct cvmx_pip_xstat10_prtx_s cn66xx;
5855 typedef union cvmx_pip_xstat10_prtx cvmx_pip_xstat10_prtx_t;
5858 * cvmx_pip_xstat11_prt#
5860 * PIP_XSTAT11_PRTX = PIP_XSTAT_L3_MCAST / PIP_XSTAT_L3_BCAST
5863 union cvmx_pip_xstat11_prtx {
5865 struct cvmx_pip_xstat11_prtx_s {
5866 #ifdef __BIG_ENDIAN_BITFIELD
5867 uint64_t bcast : 32; /**< Number of packets with L3 Broadcast Dest Address
5868 that were dropped due to RED.
5869 The HW considers an IPv4 packet to be broadcast
5870 when all bits are set in the MSB of the
5871 destination address. IPv6 does not have the
5872 concept of a broadcast packets.
5873 Only applies when the parse mode for the packet
5874 is SKIP-TO-L2 and the packet is IP or the parse
5875 mode for the packet is SKIP-TO-IP. */
5876 uint64_t mcast : 32; /**< Number of packets with L3 Multicast Dest Address
5877 that were dropped due to RED.
5878 The HW considers an IPv4 packet to be multicast
5879 when the most-significant nibble of the 32-bit
5880 destination address is 0xE (i.e. it is a class D
5881 address). The HW considers an IPv6 packet to be
5882 multicast when the most-significant byte of the
5883 128-bit destination address is all 1's.
5884 Only applies when the parse mode for the packet
5885 is SKIP-TO-L2 and the packet is IP or the parse
5886 mode for the packet is SKIP-TO-IP. */
5888 uint64_t mcast : 32;
5889 uint64_t bcast : 32;
5892 struct cvmx_pip_xstat11_prtx_s cn63xx;
5893 struct cvmx_pip_xstat11_prtx_s cn63xxp1;
5894 struct cvmx_pip_xstat11_prtx_s cn66xx;
5896 typedef union cvmx_pip_xstat11_prtx cvmx_pip_xstat11_prtx_t;
5899 * cvmx_pip_xstat1_prt#
5901 * PIP_XSTAT1_PRTX = PIP_XSTAT_OCTS
5904 union cvmx_pip_xstat1_prtx {
5906 struct cvmx_pip_xstat1_prtx_s {
5907 #ifdef __BIG_ENDIAN_BITFIELD
5908 uint64_t reserved_48_63 : 16;
5909 uint64_t octs : 48; /**< Number of octets received by PIP (good and bad) */
5912 uint64_t reserved_48_63 : 16;
5915 struct cvmx_pip_xstat1_prtx_s cn63xx;
5916 struct cvmx_pip_xstat1_prtx_s cn63xxp1;
5917 struct cvmx_pip_xstat1_prtx_s cn66xx;
5919 typedef union cvmx_pip_xstat1_prtx cvmx_pip_xstat1_prtx_t;
5922 * cvmx_pip_xstat2_prt#
5924 * PIP_XSTAT2_PRTX = PIP_XSTAT_PKTS / PIP_XSTAT_RAW
5927 union cvmx_pip_xstat2_prtx {
5929 struct cvmx_pip_xstat2_prtx_s {
5930 #ifdef __BIG_ENDIAN_BITFIELD
5931 uint64_t pkts : 32; /**< Number of packets processed by PIP */
5932 uint64_t raw : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
5933 received by PIP per port */
5939 struct cvmx_pip_xstat2_prtx_s cn63xx;
5940 struct cvmx_pip_xstat2_prtx_s cn63xxp1;
5941 struct cvmx_pip_xstat2_prtx_s cn66xx;
5943 typedef union cvmx_pip_xstat2_prtx cvmx_pip_xstat2_prtx_t;
5946 * cvmx_pip_xstat3_prt#
5948 * PIP_XSTAT3_PRTX = PIP_XSTAT_BCST / PIP_XSTAT_MCST
5951 union cvmx_pip_xstat3_prtx {
5953 struct cvmx_pip_xstat3_prtx_s {
5954 #ifdef __BIG_ENDIAN_BITFIELD
5955 uint64_t bcst : 32; /**< Number of indentified L2 broadcast packets
5956 Does not include multicast packets
5957 Only includes packets whose parse mode is
5959 uint64_t mcst : 32; /**< Number of indentified L2 multicast packets
5960 Does not include broadcast packets
5961 Only includes packets whose parse mode is
5968 struct cvmx_pip_xstat3_prtx_s cn63xx;
5969 struct cvmx_pip_xstat3_prtx_s cn63xxp1;
5970 struct cvmx_pip_xstat3_prtx_s cn66xx;
5972 typedef union cvmx_pip_xstat3_prtx cvmx_pip_xstat3_prtx_t;
5975 * cvmx_pip_xstat4_prt#
5977 * PIP_XSTAT4_PRTX = PIP_XSTAT_HIST1 / PIP_XSTAT_HIST0
5980 union cvmx_pip_xstat4_prtx {
5982 struct cvmx_pip_xstat4_prtx_s {
5983 #ifdef __BIG_ENDIAN_BITFIELD
5984 uint64_t h65to127 : 32; /**< Number of 65-127B packets */
5985 uint64_t h64 : 32; /**< Number of 1-64B packets */
5988 uint64_t h65to127 : 32;
5991 struct cvmx_pip_xstat4_prtx_s cn63xx;
5992 struct cvmx_pip_xstat4_prtx_s cn63xxp1;
5993 struct cvmx_pip_xstat4_prtx_s cn66xx;
5995 typedef union cvmx_pip_xstat4_prtx cvmx_pip_xstat4_prtx_t;
5998 * cvmx_pip_xstat5_prt#
6000 * PIP_XSTAT5_PRTX = PIP_XSTAT_HIST3 / PIP_XSTAT_HIST2
6003 union cvmx_pip_xstat5_prtx {
6005 struct cvmx_pip_xstat5_prtx_s {
6006 #ifdef __BIG_ENDIAN_BITFIELD
6007 uint64_t h256to511 : 32; /**< Number of 256-511B packets */
6008 uint64_t h128to255 : 32; /**< Number of 128-255B packets */
6010 uint64_t h128to255 : 32;
6011 uint64_t h256to511 : 32;
6014 struct cvmx_pip_xstat5_prtx_s cn63xx;
6015 struct cvmx_pip_xstat5_prtx_s cn63xxp1;
6016 struct cvmx_pip_xstat5_prtx_s cn66xx;
6018 typedef union cvmx_pip_xstat5_prtx cvmx_pip_xstat5_prtx_t;
6021 * cvmx_pip_xstat6_prt#
6023 * PIP_XSTAT6_PRTX = PIP_XSTAT_HIST5 / PIP_XSTAT_HIST4
6026 union cvmx_pip_xstat6_prtx {
6028 struct cvmx_pip_xstat6_prtx_s {
6029 #ifdef __BIG_ENDIAN_BITFIELD
6030 uint64_t h1024to1518 : 32; /**< Number of 1024-1518B packets */
6031 uint64_t h512to1023 : 32; /**< Number of 512-1023B packets */
6033 uint64_t h512to1023 : 32;
6034 uint64_t h1024to1518 : 32;
6037 struct cvmx_pip_xstat6_prtx_s cn63xx;
6038 struct cvmx_pip_xstat6_prtx_s cn63xxp1;
6039 struct cvmx_pip_xstat6_prtx_s cn66xx;
6041 typedef union cvmx_pip_xstat6_prtx cvmx_pip_xstat6_prtx_t;
6044 * cvmx_pip_xstat7_prt#
6046 * PIP_XSTAT7_PRTX = PIP_XSTAT_FCS / PIP_XSTAT_HIST6
6050 * DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
6051 * sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
6053 union cvmx_pip_xstat7_prtx {
6055 struct cvmx_pip_xstat7_prtx_s {
6056 #ifdef __BIG_ENDIAN_BITFIELD
6057 uint64_t fcs : 32; /**< Number of packets with FCS or Align opcode errors */
6058 uint64_t h1519 : 32; /**< Number of 1519-max packets */
6060 uint64_t h1519 : 32;
6064 struct cvmx_pip_xstat7_prtx_s cn63xx;
6065 struct cvmx_pip_xstat7_prtx_s cn63xxp1;
6066 struct cvmx_pip_xstat7_prtx_s cn66xx;
6068 typedef union cvmx_pip_xstat7_prtx cvmx_pip_xstat7_prtx_t;
6071 * cvmx_pip_xstat8_prt#
6073 * PIP_XSTAT8_PRTX = PIP_XSTAT_FRAG / PIP_XSTAT_UNDER
6077 * DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
6078 * sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
6080 union cvmx_pip_xstat8_prtx {
6082 struct cvmx_pip_xstat8_prtx_s {
6083 #ifdef __BIG_ENDIAN_BITFIELD
6084 uint64_t frag : 32; /**< Number of packets with length < min and FCS error */
6085 uint64_t undersz : 32; /**< Number of packets with length < min */
6087 uint64_t undersz : 32;
6091 struct cvmx_pip_xstat8_prtx_s cn63xx;
6092 struct cvmx_pip_xstat8_prtx_s cn63xxp1;
6093 struct cvmx_pip_xstat8_prtx_s cn66xx;
6095 typedef union cvmx_pip_xstat8_prtx cvmx_pip_xstat8_prtx_t;
6098 * cvmx_pip_xstat9_prt#
6100 * PIP_XSTAT9_PRTX = PIP_XSTAT_JABBER / PIP_XSTAT_OVER
6104 * DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
6105 * sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
6106 * sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
6108 union cvmx_pip_xstat9_prtx {
6110 struct cvmx_pip_xstat9_prtx_s {
6111 #ifdef __BIG_ENDIAN_BITFIELD
6112 uint64_t jabber : 32; /**< Number of packets with length > max and FCS error */
6113 uint64_t oversz : 32; /**< Number of packets with length > max */
6115 uint64_t oversz : 32;
6116 uint64_t jabber : 32;
6119 struct cvmx_pip_xstat9_prtx_s cn63xx;
6120 struct cvmx_pip_xstat9_prtx_s cn63xxp1;
6121 struct cvmx_pip_xstat9_prtx_s cn66xx;
6123 typedef union cvmx_pip_xstat9_prtx cvmx_pip_xstat9_prtx_t;