2010-11-28 06:20:41 +00:00
|
|
|
/***********************license start***************
|
2012-03-11 04:14:00 +00:00
|
|
|
* Copyright (c) 2003-2012 Cavium Inc. (support@cavium.com). All rights
|
2010-11-28 06:20:41 +00:00
|
|
|
* reserved.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions are
|
|
|
|
* met:
|
|
|
|
*
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
*
|
|
|
|
* * Redistributions in binary form must reproduce the above
|
|
|
|
* copyright notice, this list of conditions and the following
|
|
|
|
* disclaimer in the documentation and/or other materials provided
|
|
|
|
* with the distribution.
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
* * Neither the name of Cavium Inc. nor the names of
|
2010-11-28 06:20:41 +00:00
|
|
|
* its contributors may be used to endorse or promote products
|
|
|
|
* derived from this software without specific prior written
|
|
|
|
* permission.
|
|
|
|
|
|
|
|
* This Software, including technical data, may be subject to U.S. export control
|
|
|
|
* laws, including the U.S. Export Administration Act and its associated
|
|
|
|
* regulations, and may be subject to export or import regulations in other
|
|
|
|
* countries.
|
|
|
|
|
|
|
|
* TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
|
2012-03-11 04:14:00 +00:00
|
|
|
* AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
|
2010-11-28 06:20:41 +00:00
|
|
|
* WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
|
|
|
|
* THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
|
|
|
|
* DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
|
|
|
|
* SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
|
|
|
|
* MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
|
|
|
|
* VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
|
|
|
|
* CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
|
|
|
|
* PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
|
|
|
|
***********************license end**************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx-pip-defs.h
|
|
|
|
*
|
|
|
|
* Configuration and status register (CSR) type definitions for
|
|
|
|
* Octeon pip.
|
|
|
|
*
|
|
|
|
* This file is auto generated. Do not edit.
|
|
|
|
*
|
|
|
|
* <hr>$Revision$<hr>
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
#ifndef __CVMX_PIP_DEFS_H__
|
|
|
|
#define __CVMX_PIP_DEFS_H__
|
2010-11-28 06:20:41 +00:00
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_ALT_SKIP_CFGX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
|
|
|
|
cvmx_warn("CVMX_PIP_ALT_SKIP_CFGX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002A00ull) + ((offset) & 3) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_ALT_SKIP_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002A00ull) + ((offset) & 3) * 8)
|
|
|
|
#endif
|
2010-11-28 06:20:41 +00:00
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
#define CVMX_PIP_BCK_PRS CVMX_PIP_BCK_PRS_FUNC()
|
|
|
|
static inline uint64_t CVMX_PIP_BCK_PRS_FUNC(void)
|
|
|
|
{
|
2012-03-11 04:14:00 +00:00
|
|
|
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)))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_BCK_PRS not supported on this chip\n");
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000038ull);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_BCK_PRS (CVMX_ADD_IO_SEG(0x00011800A0000038ull))
|
|
|
|
#endif
|
|
|
|
#define CVMX_PIP_BIST_STATUS (CVMX_ADD_IO_SEG(0x00011800A0000000ull))
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_BSEL_EXT_CFGX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
|
|
|
|
cvmx_warn("CVMX_PIP_BSEL_EXT_CFGX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002800ull) + ((offset) & 3) * 16;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_BSEL_EXT_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002800ull) + ((offset) & 3) * 16)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_BSEL_EXT_POSX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
|
|
|
|
cvmx_warn("CVMX_PIP_BSEL_EXT_POSX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002808ull) + ((offset) & 3) * 16;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_BSEL_EXT_POSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002808ull) + ((offset) & 3) * 16)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_BSEL_TBL_ENTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 511))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 511))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 511)))))
|
|
|
|
cvmx_warn("CVMX_PIP_BSEL_TBL_ENTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0003000ull) + ((offset) & 511) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_BSEL_TBL_ENTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0003000ull) + ((offset) & 511) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
#define CVMX_PIP_CLKEN CVMX_PIP_CLKEN_FUNC()
|
|
|
|
static inline uint64_t CVMX_PIP_CLKEN_FUNC(void)
|
|
|
|
{
|
2012-03-11 04:14:00 +00:00
|
|
|
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)))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_CLKEN not supported on this chip\n");
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000040ull);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_CLKEN (CVMX_ADD_IO_SEG(0x00011800A0000040ull))
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_CRC_CTLX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
|
|
|
|
cvmx_warn("CVMX_PIP_CRC_CTLX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_CRC_CTLX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000040ull) + ((offset) & 1) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_CRC_IVX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1)))))
|
|
|
|
cvmx_warn("CVMX_PIP_CRC_IVX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_CRC_IVX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000050ull) + ((offset) & 1) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_DEC_IPSECX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_DEC_IPSECX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_DEC_IPSECX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000080ull) + ((offset) & 3) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
#define CVMX_PIP_DSA_SRC_GRP CVMX_PIP_DSA_SRC_GRP_FUNC()
|
|
|
|
static inline uint64_t CVMX_PIP_DSA_SRC_GRP_FUNC(void)
|
|
|
|
{
|
2012-03-11 04:14:00 +00:00
|
|
|
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)))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_DSA_SRC_GRP not supported on this chip\n");
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000190ull);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_DSA_SRC_GRP (CVMX_ADD_IO_SEG(0x00011800A0000190ull))
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
#define CVMX_PIP_DSA_VID_GRP CVMX_PIP_DSA_VID_GRP_FUNC()
|
|
|
|
static inline uint64_t CVMX_PIP_DSA_VID_GRP_FUNC(void)
|
|
|
|
{
|
2012-03-11 04:14:00 +00:00
|
|
|
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)))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_DSA_VID_GRP not supported on this chip\n");
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000198ull);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_DSA_VID_GRP (CVMX_ADD_IO_SEG(0x00011800A0000198ull))
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_FRM_LEN_CHKX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 1))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_FRM_LEN_CHKX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_FRM_LEN_CHKX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000180ull) + ((offset) & 1) * 8)
|
|
|
|
#endif
|
|
|
|
#define CVMX_PIP_GBL_CFG (CVMX_ADD_IO_SEG(0x00011800A0000028ull))
|
|
|
|
#define CVMX_PIP_GBL_CTL (CVMX_ADD_IO_SEG(0x00011800A0000020ull))
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
#define CVMX_PIP_HG_PRI_QOS CVMX_PIP_HG_PRI_QOS_FUNC()
|
|
|
|
static inline uint64_t CVMX_PIP_HG_PRI_QOS_FUNC(void)
|
|
|
|
{
|
2012-03-11 04:14:00 +00:00
|
|
|
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)))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_HG_PRI_QOS not supported on this chip\n");
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A00001A0ull);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_HG_PRI_QOS (CVMX_ADD_IO_SEG(0x00011800A00001A0ull))
|
|
|
|
#endif
|
|
|
|
#define CVMX_PIP_INT_EN (CVMX_ADD_IO_SEG(0x00011800A0000010ull))
|
|
|
|
#define CVMX_PIP_INT_REG (CVMX_ADD_IO_SEG(0x00011800A0000008ull))
|
|
|
|
#define CVMX_PIP_IP_OFFSET (CVMX_ADD_IO_SEG(0x00011800A0000060ull))
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_PRI_TBLX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 255)))))
|
|
|
|
cvmx_warn("CVMX_PIP_PRI_TBLX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0004000ull) + ((offset) & 255) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_PRI_TBLX(offset) (CVMX_ADD_IO_SEG(0x00011800A0004000ull) + ((offset) & 255) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_PRT_CFGBX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(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)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
|
|
|
cvmx_warn("CVMX_PIP_PRT_CFGBX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0008000ull) + ((offset) & 63) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_PRT_CFGBX(offset) (CVMX_ADD_IO_SEG(0x00011800A0008000ull) + ((offset) & 63) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_PRT_CFGX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(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)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_PRT_CFGX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_PRT_CFGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000200ull) + ((offset) & 63) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_PRT_TAGX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(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)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_PRT_TAGX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_PRT_TAGX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000400ull) + ((offset) & 63) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_QOS_DIFFX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 63)))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_QOS_DIFFX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_QOS_DIFFX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000600ull) + ((offset) & 63) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_QOS_VLANX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_QOS_VLANX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_QOS_VLANX(offset) (CVMX_ADD_IO_SEG(0x00011800A00000C0ull) + ((offset) & 7) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_QOS_WATCHX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_QOS_WATCHX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_QOS_WATCHX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000100ull) + ((offset) & 7) * 8)
|
|
|
|
#endif
|
|
|
|
#define CVMX_PIP_RAW_WORD (CVMX_ADD_IO_SEG(0x00011800A00000B0ull))
|
|
|
|
#define CVMX_PIP_SFT_RST (CVMX_ADD_IO_SEG(0x00011800A0000030ull))
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_STAT0_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT0_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000800ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT0_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT0_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040000ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT0_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040000ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_STAT10_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT10_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001480ull) + ((offset) & 63) * 16;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT10_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001480ull) + ((offset) & 63) * 16)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_STAT10_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT10_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040050ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT10_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040050ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_STAT11_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT11_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001488ull) + ((offset) & 63) * 16;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT11_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001488ull) + ((offset) & 63) * 16)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_STAT11_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT11_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040058ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT11_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040058ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT1_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT1_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000808ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT1_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT1_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040008ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT1_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040008ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT2_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT2_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000810ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT2_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT2_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040010ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT2_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040010ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT3_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT3_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000818ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT3_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT3_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040018ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT3_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040018ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT4_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT4_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000820ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT4_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT4_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040020ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT4_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040020ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT5_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT5_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000828ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT5_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT5_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040028ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT5_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040028ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT6_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT6_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000830ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT6_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT6_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040030ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT6_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040030ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT7_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT7_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000838ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT7_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT7_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040038ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT7_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040038ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT8_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT8_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000840ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT8_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT8_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040040ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT8_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040040ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT9_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT9_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0000848ull) + ((offset) & 63) * 80)
|
|
|
|
#endif
|
2012-03-11 04:14:00 +00:00
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_STAT9_X(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT9_X(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0040048ull) + ((offset) & 63) * 128;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT9_X(offset) (CVMX_ADD_IO_SEG(0x00011800A0040048ull) + ((offset) & 63) * 128)
|
|
|
|
#endif
|
2010-11-28 06:20:41 +00:00
|
|
|
#define CVMX_PIP_STAT_CTL (CVMX_ADD_IO_SEG(0x00011800A0000018ull))
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_STAT_INB_ERRSX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(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)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT_INB_ERRSX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT_INB_ERRSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A10ull) + ((offset) & 63) * 32)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT_INB_ERRS_PKNDX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT_INB_ERRS_PKNDX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0020010ull) + ((offset) & 63) * 32;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT_INB_ERRS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020010ull) + ((offset) & 63) * 32)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT_INB_OCTSX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(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)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT_INB_OCTSX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT_INB_OCTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A08ull) + ((offset) & 63) * 32)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT_INB_OCTS_PKNDX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT_INB_OCTS_PKNDX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0020008ull) + ((offset) & 63) * 32;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT_INB_OCTS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020008ull) + ((offset) & 63) * 32)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT_INB_PKTSX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 35))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 2) || ((offset >= 32) && (offset <= 33)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 35))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3) || ((offset >= 16) && (offset <= 19)) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 3) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39)) || ((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(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)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1) || ((offset >= 32) && (offset <= 35)) || ((offset >= 36) && (offset <= 39))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_STAT_INB_PKTSX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT_INB_PKTSX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001A00ull) + ((offset) & 63) * 32)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_STAT_INB_PKTS_PKNDX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63)))))
|
|
|
|
cvmx_warn("CVMX_PIP_STAT_INB_PKTS_PKNDX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0020000ull) + ((offset) & 63) * 32;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_STAT_INB_PKTS_PKNDX(offset) (CVMX_ADD_IO_SEG(0x00011800A0020000ull) + ((offset) & 63) * 32)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_SUB_PKIND_FCSX(unsigned long block_id)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id == 0)))))
|
|
|
|
cvmx_warn("CVMX_PIP_SUB_PKIND_FCSX(%lu) is invalid on this chip\n", block_id);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0080000ull);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_SUB_PKIND_FCSX(block_id) (CVMX_ADD_IO_SEG(0x00011800A0080000ull))
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_TAG_INCX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 63))) ||
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 63))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 63)))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_TAG_INCX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_TAG_INCX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001800ull) + ((offset) & 63) * 8)
|
|
|
|
#endif
|
|
|
|
#define CVMX_PIP_TAG_MASK (CVMX_ADD_IO_SEG(0x00011800A0000070ull))
|
|
|
|
#define CVMX_PIP_TAG_SECRET (CVMX_ADD_IO_SEG(0x00011800A0000068ull))
|
|
|
|
#define CVMX_PIP_TODO_ENTRY (CVMX_ADD_IO_SEG(0x00011800A0000078ull))
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_VLAN_ETYPESX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1)))))
|
|
|
|
cvmx_warn("CVMX_PIP_VLAN_ETYPESX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A00001C0ull) + ((offset) & 1) * 8;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_VLAN_ETYPESX(offset) (CVMX_ADD_IO_SEG(0x00011800A00001C0ull) + ((offset) & 1) * 8)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_XSTAT0_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT0_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT0_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002000ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2012-03-11 04:14:00 +00:00
|
|
|
static inline uint64_t CVMX_PIP_XSTAT10_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
|
|
|
cvmx_warn("CVMX_PIP_XSTAT10_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001700ull) + ((offset) & 63) * 16 - 16*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT10_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001700ull) + ((offset) & 63) * 16 - 16*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT11_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
|
|
|
cvmx_warn("CVMX_PIP_XSTAT11_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0001708ull) + ((offset) & 63) * 16 - 16*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT11_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0001708ull) + ((offset) & 63) * 16 - 16*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
2010-11-28 06:20:41 +00:00
|
|
|
static inline uint64_t CVMX_PIP_XSTAT1_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT1_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT1_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002008ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT2_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT2_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT2_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002010ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT3_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT3_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT3_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002018ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT4_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT4_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT4_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002020ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT5_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT5_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT5_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002028ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT6_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT6_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT6_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002030ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT7_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT7_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT7_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002038ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT8_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT8_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT8_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002040ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
|
|
static inline uint64_t CVMX_PIP_XSTAT9_PRTX(unsigned long offset)
|
|
|
|
{
|
|
|
|
if (!(
|
2012-03-11 04:14:00 +00:00
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && (((offset >= 40) && (offset <= 43)))) ||
|
|
|
|
(OCTEON_IS_MODEL(OCTEON_CN66XX) && (((offset >= 40) && (offset <= 41)) || ((offset >= 44) && (offset <= 47))))))
|
2010-11-28 06:20:41 +00:00
|
|
|
cvmx_warn("CVMX_PIP_XSTAT9_PRTX(%lu) is invalid on this chip\n", offset);
|
|
|
|
return CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define CVMX_PIP_XSTAT9_PRTX(offset) (CVMX_ADD_IO_SEG(0x00011800A0002048ull) + ((offset) & 63) * 80 - 80*40)
|
|
|
|
#endif
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_alt_skip_cfg#
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* The actual SKIP I determined by HW is based on the packet contents. BIT0 and
|
|
|
|
* BIT1 make up a two value value that the selects the skip value as follows.
|
|
|
|
*
|
|
|
|
* lookup_value = LEN ? ( packet_in_bits[BIT1], packet_in_bits[BIT0] ) : ( 0, packet_in_bits[BIT0] );
|
|
|
|
* SKIP I = lookup_value == 3 ? SKIP3 :
|
|
|
|
* lookup_value == 2 ? SKIP2 :
|
|
|
|
* lookup_value == 1 ? SKIP1 :
|
|
|
|
* PIP_PRT_CFG<pknd>[SKIP];
|
|
|
|
*/
|
|
|
|
union cvmx_pip_alt_skip_cfgx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_alt_skip_cfgx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_57_63 : 7;
|
|
|
|
uint64_t len : 1; /**< Indicates the length of the selection field
|
|
|
|
0 = 0, BIT0
|
|
|
|
1 = BIT1, BIT0 */
|
|
|
|
uint64_t reserved_46_55 : 10;
|
|
|
|
uint64_t bit1 : 6; /**< Indicates the bit location in the first word of
|
|
|
|
the packet to use to select the skip amount.
|
|
|
|
BIT1 must be present in the packet. */
|
|
|
|
uint64_t reserved_38_39 : 2;
|
|
|
|
uint64_t bit0 : 6; /**< Indicates the bit location in the first word of
|
|
|
|
the packet to use to select the skip amount.
|
|
|
|
BIT0 must be present in the packet. */
|
|
|
|
uint64_t reserved_23_31 : 9;
|
|
|
|
uint64_t skip3 : 7; /**< Indicates number of bytes to skip from start of
|
|
|
|
packet 0-64 */
|
|
|
|
uint64_t reserved_15_15 : 1;
|
|
|
|
uint64_t skip2 : 7; /**< Indicates number of bytes to skip from start of
|
|
|
|
packet 0-64 */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip1 : 7; /**< Indicates number of bytes to skip from start of
|
|
|
|
packet 0-64 */
|
|
|
|
#else
|
|
|
|
uint64_t skip1 : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip2 : 7;
|
|
|
|
uint64_t reserved_15_15 : 1;
|
|
|
|
uint64_t skip3 : 7;
|
|
|
|
uint64_t reserved_23_31 : 9;
|
|
|
|
uint64_t bit0 : 6;
|
|
|
|
uint64_t reserved_38_39 : 2;
|
|
|
|
uint64_t bit1 : 6;
|
|
|
|
uint64_t reserved_46_55 : 10;
|
|
|
|
uint64_t len : 1;
|
|
|
|
uint64_t reserved_57_63 : 7;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_alt_skip_cfgx_s cn61xx;
|
|
|
|
struct cvmx_pip_alt_skip_cfgx_s cn66xx;
|
|
|
|
struct cvmx_pip_alt_skip_cfgx_s cn68xx;
|
|
|
|
struct cvmx_pip_alt_skip_cfgx_s cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_alt_skip_cfgx cvmx_pip_alt_skip_cfgx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_bck_prs
|
|
|
|
*
|
|
|
|
* PIP_BCK_PRS = PIP's Back Pressure Register
|
|
|
|
*
|
|
|
|
* When to assert backpressure based on the todo list filling up
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_bck_prs {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_bck_prs_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t bckprs : 1; /**< PIP is currently asserting backpressure to IOB
|
|
|
|
Backpressure from PIP will assert when the
|
|
|
|
entries to the todo list exceed HIWATER.
|
|
|
|
Backpressure will be held until the todo entries
|
|
|
|
is less than or equal to LOWATER. */
|
|
|
|
uint64_t reserved_13_62 : 50;
|
|
|
|
uint64_t hiwater : 5; /**< Water mark in the todo list to assert backpressure
|
|
|
|
Legal values are 1-26. A 0 value will deadlock
|
|
|
|
the machine. A value > 26, will trash memory */
|
|
|
|
uint64_t reserved_5_7 : 3;
|
|
|
|
uint64_t lowater : 5; /**< Water mark in the todo list to release backpressure
|
|
|
|
The LOWATER value should be < HIWATER. */
|
|
|
|
#else
|
|
|
|
uint64_t lowater : 5;
|
|
|
|
uint64_t reserved_5_7 : 3;
|
|
|
|
uint64_t hiwater : 5;
|
|
|
|
uint64_t reserved_13_62 : 50;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_bck_prs_s cn38xx;
|
|
|
|
struct cvmx_pip_bck_prs_s cn38xxp2;
|
|
|
|
struct cvmx_pip_bck_prs_s cn56xx;
|
|
|
|
struct cvmx_pip_bck_prs_s cn56xxp1;
|
|
|
|
struct cvmx_pip_bck_prs_s cn58xx;
|
|
|
|
struct cvmx_pip_bck_prs_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_bck_prs_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_bck_prs_s cn63xx;
|
|
|
|
struct cvmx_pip_bck_prs_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_bck_prs_s cn66xx;
|
|
|
|
struct cvmx_pip_bck_prs_s cn68xx;
|
|
|
|
struct cvmx_pip_bck_prs_s cn68xxp1;
|
|
|
|
struct cvmx_pip_bck_prs_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_bck_prs cvmx_pip_bck_prs_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_bist_status
|
|
|
|
*
|
|
|
|
* PIP_BIST_STATUS = PIP's BIST Results
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_bist_status {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_bist_status_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_22_63 : 42;
|
|
|
|
uint64_t bist : 22; /**< BIST Results.
|
|
|
|
HW sets a bit in BIST for for memory that fails
|
|
|
|
BIST. */
|
|
|
|
#else
|
|
|
|
uint64_t bist : 22;
|
|
|
|
uint64_t reserved_22_63 : 42;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_18_63 : 46;
|
|
|
|
uint64_t bist : 18; /**< BIST Results.
|
|
|
|
HW sets a bit in BIST for for memory that fails
|
|
|
|
BIST. */
|
|
|
|
#else
|
|
|
|
uint64_t bist : 18;
|
|
|
|
uint64_t reserved_18_63 : 46;
|
|
|
|
#endif
|
2012-03-11 04:14:00 +00:00
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn38xxp2;
|
|
|
|
struct cvmx_pip_bist_status_cn50xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_17_63 : 47;
|
|
|
|
uint64_t bist : 17; /**< BIST Results.
|
|
|
|
HW sets a bit in BIST for for memory that fails
|
|
|
|
BIST. */
|
|
|
|
#else
|
|
|
|
uint64_t bist : 17;
|
|
|
|
uint64_t reserved_17_63 : 47;
|
|
|
|
#endif
|
|
|
|
} cn50xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_bist_status_cn30xx cn52xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn52xxp1;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn56xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn56xxp1;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn58xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn58xxp1;
|
|
|
|
struct cvmx_pip_bist_status_cn61xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_20_63 : 44;
|
|
|
|
uint64_t bist : 20; /**< BIST Results.
|
|
|
|
HW sets a bit in BIST for for memory that fails
|
|
|
|
BIST. */
|
|
|
|
#else
|
|
|
|
uint64_t bist : 20;
|
|
|
|
uint64_t reserved_20_63 : 44;
|
|
|
|
#endif
|
|
|
|
} cn61xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn63xx;
|
|
|
|
struct cvmx_pip_bist_status_cn30xx cn63xxp1;
|
|
|
|
struct cvmx_pip_bist_status_cn61xx cn66xx;
|
|
|
|
struct cvmx_pip_bist_status_s cn68xx;
|
|
|
|
struct cvmx_pip_bist_status_cn61xx cn68xxp1;
|
|
|
|
struct cvmx_pip_bist_status_cn61xx cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_bist_status cvmx_pip_bist_status_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_bsel_ext_cfg#
|
|
|
|
*
|
|
|
|
* PIP_BSEL_EXT_CFGX = Bit Select Extractor config register containing the
|
|
|
|
* tag, offset, and skip values to be used when using the corresponding extractor.
|
|
|
|
*/
|
|
|
|
union cvmx_pip_bsel_ext_cfgx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_bsel_ext_cfgx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_56_63 : 8;
|
|
|
|
uint64_t upper_tag : 16; /**< Extra Tag bits to be added to tag field from table
|
|
|
|
Only included when PIP_PRT_TAG[INC_PRT]=0
|
|
|
|
WORD2[TAG<31:16>] */
|
|
|
|
uint64_t tag : 8; /**< Extra Tag bits to be added to tag field from table
|
|
|
|
WORD2[TAG<15:8>] */
|
|
|
|
uint64_t reserved_25_31 : 7;
|
|
|
|
uint64_t offset : 9; /**< Indicates offset to add to extractor mem adr
|
|
|
|
to get final address to the lookup table */
|
|
|
|
uint64_t reserved_7_15 : 9;
|
|
|
|
uint64_t skip : 7; /**< Indicates number of bytes to skip from start of
|
|
|
|
packet 0-64 */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_15 : 9;
|
|
|
|
uint64_t offset : 9;
|
|
|
|
uint64_t reserved_25_31 : 7;
|
|
|
|
uint64_t tag : 8;
|
|
|
|
uint64_t upper_tag : 16;
|
|
|
|
uint64_t reserved_56_63 : 8;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_bsel_ext_cfgx_s cn61xx;
|
|
|
|
struct cvmx_pip_bsel_ext_cfgx_s cn68xx;
|
|
|
|
struct cvmx_pip_bsel_ext_cfgx_s cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_bsel_ext_cfgx cvmx_pip_bsel_ext_cfgx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_bsel_ext_pos#
|
|
|
|
*
|
|
|
|
* PIP_BSEL_EXT_POSX = Bit Select Extractor config register containing the 8
|
|
|
|
* bit positions and valids to be used when using the corresponding extractor.
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* Examples on bit positioning:
|
|
|
|
* the most-significant-bit of the 3rd byte ... PIP_BSEL_EXT_CFG*[SKIP]=1 POSn=15 (decimal) or
|
|
|
|
* PIP_BSEL_EXT_CFG*[SKIP]=0 POSn=23 (decimal)
|
|
|
|
* the least-significant-bit of the 5th byte ... PIP_BSEL_EXT_CFG*[SKIP]=4 POSn=0
|
|
|
|
* the second-least-significant bit of the 1st byte ... PIP_BSEL_EXT_CFG*[SKIP]=0 POSn=1
|
|
|
|
*
|
|
|
|
* POSn_VAL and POSn correspond to <n> in the resultant index into
|
|
|
|
* PIP_BSEL_TBL_ENT. When only x bits (0 < x < 7) are to be extracted,
|
|
|
|
* POS[7:x] should normally be clear.
|
|
|
|
*/
|
|
|
|
union cvmx_pip_bsel_ext_posx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_bsel_ext_posx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t pos7_val : 1; /**< Valid bit for bit position 7 */
|
|
|
|
uint64_t pos7 : 7; /**< Bit position for the 8th bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
uint64_t pos6_val : 1; /**< Valid bit for bit position 6 */
|
|
|
|
uint64_t pos6 : 7; /**< Bit position for the 7th bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
uint64_t pos5_val : 1; /**< Valid bit for bit position 5 */
|
|
|
|
uint64_t pos5 : 7; /**< Bit position for the 6th bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
uint64_t pos4_val : 1; /**< Valid bit for bit position 4 */
|
|
|
|
uint64_t pos4 : 7; /**< Bit position for the 5th bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
uint64_t pos3_val : 1; /**< Valid bit for bit position 3 */
|
|
|
|
uint64_t pos3 : 7; /**< Bit position for the 4th bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
uint64_t pos2_val : 1; /**< Valid bit for bit position 2 */
|
|
|
|
uint64_t pos2 : 7; /**< Bit position for the 3rd bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
uint64_t pos1_val : 1; /**< Valid bit for bit position 1 */
|
|
|
|
uint64_t pos1 : 7; /**< Bit position for the 2nd bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
uint64_t pos0_val : 1; /**< Valid bit for bit position 0 */
|
|
|
|
uint64_t pos0 : 7; /**< Bit position for the 1st bit from 128 bit segment
|
|
|
|
of pkt that is defined by the SKIP field of
|
|
|
|
PIP_BSEL_EXT_CFG register. */
|
|
|
|
#else
|
|
|
|
uint64_t pos0 : 7;
|
|
|
|
uint64_t pos0_val : 1;
|
|
|
|
uint64_t pos1 : 7;
|
|
|
|
uint64_t pos1_val : 1;
|
|
|
|
uint64_t pos2 : 7;
|
|
|
|
uint64_t pos2_val : 1;
|
|
|
|
uint64_t pos3 : 7;
|
|
|
|
uint64_t pos3_val : 1;
|
|
|
|
uint64_t pos4 : 7;
|
|
|
|
uint64_t pos4_val : 1;
|
|
|
|
uint64_t pos5 : 7;
|
|
|
|
uint64_t pos5_val : 1;
|
|
|
|
uint64_t pos6 : 7;
|
|
|
|
uint64_t pos6_val : 1;
|
|
|
|
uint64_t pos7 : 7;
|
|
|
|
uint64_t pos7_val : 1;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_bsel_ext_posx_s cn61xx;
|
|
|
|
struct cvmx_pip_bsel_ext_posx_s cn68xx;
|
|
|
|
struct cvmx_pip_bsel_ext_posx_s cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_bsel_ext_posx cvmx_pip_bsel_ext_posx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_bsel_tbl_ent#
|
|
|
|
*
|
|
|
|
* PIP_BSEL_TBL_ENTX = Entry for the extractor table
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_bsel_tbl_entx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_bsel_tbl_entx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t tag_en : 1; /**< Enables the use of the TAG field */
|
|
|
|
uint64_t grp_en : 1; /**< Enables the use of the GRP field */
|
|
|
|
uint64_t tt_en : 1; /**< Enables the use of the TT field */
|
|
|
|
uint64_t qos_en : 1; /**< Enables the use of the QOS field */
|
|
|
|
uint64_t reserved_40_59 : 20;
|
|
|
|
uint64_t tag : 8; /**< TAG bits to be used if TAG_EN is set */
|
|
|
|
uint64_t reserved_22_31 : 10;
|
|
|
|
uint64_t grp : 6; /**< GRP field to be used if GRP_EN is set */
|
|
|
|
uint64_t reserved_10_15 : 6;
|
|
|
|
uint64_t tt : 2; /**< TT field to be used if TT_EN is set */
|
|
|
|
uint64_t reserved_3_7 : 5;
|
|
|
|
uint64_t qos : 3; /**< QOS field to be used if QOS_EN is set */
|
|
|
|
#else
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_3_7 : 5;
|
|
|
|
uint64_t tt : 2;
|
|
|
|
uint64_t reserved_10_15 : 6;
|
|
|
|
uint64_t grp : 6;
|
|
|
|
uint64_t reserved_22_31 : 10;
|
|
|
|
uint64_t tag : 8;
|
|
|
|
uint64_t reserved_40_59 : 20;
|
|
|
|
uint64_t qos_en : 1;
|
|
|
|
uint64_t tt_en : 1;
|
|
|
|
uint64_t grp_en : 1;
|
|
|
|
uint64_t tag_en : 1;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_bsel_tbl_entx_cn61xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t tag_en : 1; /**< Enables the use of the TAG field */
|
|
|
|
uint64_t grp_en : 1; /**< Enables the use of the GRP field */
|
|
|
|
uint64_t tt_en : 1; /**< Enables the use of the TT field */
|
|
|
|
uint64_t qos_en : 1; /**< Enables the use of the QOS field */
|
|
|
|
uint64_t reserved_40_59 : 20;
|
|
|
|
uint64_t tag : 8; /**< TAG bits to be used if TAG_EN is set */
|
|
|
|
uint64_t reserved_20_31 : 12;
|
|
|
|
uint64_t grp : 4; /**< GRP field to be used if GRP_EN is set */
|
|
|
|
uint64_t reserved_10_15 : 6;
|
|
|
|
uint64_t tt : 2; /**< TT field to be used if TT_EN is set */
|
|
|
|
uint64_t reserved_3_7 : 5;
|
|
|
|
uint64_t qos : 3; /**< QOS field to be used if QOS_EN is set */
|
|
|
|
#else
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_3_7 : 5;
|
|
|
|
uint64_t tt : 2;
|
|
|
|
uint64_t reserved_10_15 : 6;
|
|
|
|
uint64_t grp : 4;
|
|
|
|
uint64_t reserved_20_31 : 12;
|
|
|
|
uint64_t tag : 8;
|
|
|
|
uint64_t reserved_40_59 : 20;
|
|
|
|
uint64_t qos_en : 1;
|
|
|
|
uint64_t tt_en : 1;
|
|
|
|
uint64_t grp_en : 1;
|
|
|
|
uint64_t tag_en : 1;
|
|
|
|
#endif
|
|
|
|
} cn61xx;
|
|
|
|
struct cvmx_pip_bsel_tbl_entx_s cn68xx;
|
|
|
|
struct cvmx_pip_bsel_tbl_entx_cn61xx cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_bsel_tbl_entx cvmx_pip_bsel_tbl_entx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_clken
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_clken {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_clken_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_1_63 : 63;
|
|
|
|
uint64_t clken : 1; /**< Controls the conditional clocking within PIP
|
|
|
|
0=Allow HW to control the clocks
|
|
|
|
1=Force the clocks to be always on */
|
|
|
|
#else
|
|
|
|
uint64_t clken : 1;
|
|
|
|
uint64_t reserved_1_63 : 63;
|
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_clken_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_clken_s cn63xx;
|
|
|
|
struct cvmx_pip_clken_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_clken_s cn66xx;
|
|
|
|
struct cvmx_pip_clken_s cn68xx;
|
|
|
|
struct cvmx_pip_clken_s cn68xxp1;
|
|
|
|
struct cvmx_pip_clken_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_clken cvmx_pip_clken_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_crc_ctl#
|
|
|
|
*
|
|
|
|
* PIP_CRC_CTL = PIP CRC Control Register
|
|
|
|
*
|
|
|
|
* Controls datapath reflection when calculating CRC
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_crc_ctlx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_crc_ctlx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_2_63 : 62;
|
|
|
|
uint64_t invres : 1; /**< Invert the result */
|
|
|
|
uint64_t reflect : 1; /**< Reflect the bits in each byte.
|
|
|
|
Byte order does not change.
|
|
|
|
- 0: CRC is calculated MSB to LSB
|
|
|
|
- 1: CRC is calculated LSB to MSB */
|
|
|
|
#else
|
|
|
|
uint64_t reflect : 1;
|
|
|
|
uint64_t invres : 1;
|
|
|
|
uint64_t reserved_2_63 : 62;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_crc_ctlx_s cn38xx;
|
|
|
|
struct cvmx_pip_crc_ctlx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_crc_ctlx_s cn58xx;
|
|
|
|
struct cvmx_pip_crc_ctlx_s cn58xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_crc_ctlx cvmx_pip_crc_ctlx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_crc_iv#
|
|
|
|
*
|
|
|
|
* PIP_CRC_IV = PIP CRC IV Register
|
|
|
|
*
|
|
|
|
* Determines the IV used by the CRC algorithm
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* * PIP_CRC_IV
|
|
|
|
* PIP_CRC_IV controls the initial state of the CRC algorithm. Octane can
|
|
|
|
* support a wide range of CRC algorithms and as such, the IV must be
|
|
|
|
* carefully constructed to meet the specific algorithm. The code below
|
|
|
|
* determines the value to program into Octane based on the algorthim's IV
|
|
|
|
* and width. In the case of Octane, the width should always be 32.
|
|
|
|
*
|
|
|
|
* PIP_CRC_IV0 sets the IV for ports 0-15 while PIP_CRC_IV1 sets the IV for
|
|
|
|
* ports 16-31.
|
|
|
|
*
|
|
|
|
* unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
|
|
|
|
* [
|
|
|
|
* int i;
|
|
|
|
* int doit;
|
|
|
|
* unsigned int current_val = algorithm_iv;
|
|
|
|
*
|
|
|
|
* for(i = 0; i < w; i++) [
|
|
|
|
* doit = current_val & 0x1;
|
|
|
|
*
|
|
|
|
* if(doit) current_val ^= poly;
|
|
|
|
* assert(!(current_val & 0x1));
|
|
|
|
*
|
|
|
|
* current_val = (current_val >> 1) | (doit << (w-1));
|
|
|
|
* ]
|
|
|
|
*
|
|
|
|
* return current_val;
|
|
|
|
* ]
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_crc_ivx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_crc_ivx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
uint64_t iv : 32; /**< IV used by the CRC algorithm. Default is FCS32. */
|
|
|
|
#else
|
|
|
|
uint64_t iv : 32;
|
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_crc_ivx_s cn38xx;
|
|
|
|
struct cvmx_pip_crc_ivx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_crc_ivx_s cn58xx;
|
|
|
|
struct cvmx_pip_crc_ivx_s cn58xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_crc_ivx cvmx_pip_crc_ivx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_dec_ipsec#
|
|
|
|
*
|
|
|
|
* PIP_DEC_IPSEC = UDP or TCP ports to watch for DEC IPSEC
|
|
|
|
*
|
|
|
|
* PIP sets the dec_ipsec based on TCP or UDP destination port.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_dec_ipsecx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dec_ipsecx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_18_63 : 46;
|
|
|
|
uint64_t tcp : 1; /**< This DPRT should be used for TCP packets */
|
|
|
|
uint64_t udp : 1; /**< This DPRT should be used for UDP packets */
|
|
|
|
uint64_t dprt : 16; /**< UDP or TCP destination port to match on */
|
|
|
|
#else
|
|
|
|
uint64_t dprt : 16;
|
|
|
|
uint64_t udp : 1;
|
|
|
|
uint64_t tcp : 1;
|
|
|
|
uint64_t reserved_18_63 : 46;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn30xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn31xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn38xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn50xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn52xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn56xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn58xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dec_ipsecx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_dec_ipsecx_s cn63xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dec_ipsecx_s cn66xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn68xx;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cn68xxp1;
|
|
|
|
struct cvmx_pip_dec_ipsecx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_dec_ipsecx cvmx_pip_dec_ipsecx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_dsa_src_grp
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_dsa_src_grp {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dsa_src_grp_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t map15 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map14 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map13 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map12 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map11 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map10 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map9 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map8 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map7 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map6 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map5 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map4 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map3 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map2 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map1 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map0 : 4; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP */
|
|
|
|
#else
|
|
|
|
uint64_t map0 : 4;
|
|
|
|
uint64_t map1 : 4;
|
|
|
|
uint64_t map2 : 4;
|
|
|
|
uint64_t map3 : 4;
|
|
|
|
uint64_t map4 : 4;
|
|
|
|
uint64_t map5 : 4;
|
|
|
|
uint64_t map6 : 4;
|
|
|
|
uint64_t map7 : 4;
|
|
|
|
uint64_t map8 : 4;
|
|
|
|
uint64_t map9 : 4;
|
|
|
|
uint64_t map10 : 4;
|
|
|
|
uint64_t map11 : 4;
|
|
|
|
uint64_t map12 : 4;
|
|
|
|
uint64_t map13 : 4;
|
|
|
|
uint64_t map14 : 4;
|
|
|
|
uint64_t map15 : 4;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_dsa_src_grp_s cn52xx;
|
|
|
|
struct cvmx_pip_dsa_src_grp_s cn52xxp1;
|
|
|
|
struct cvmx_pip_dsa_src_grp_s cn56xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dsa_src_grp_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_dsa_src_grp_s cn63xx;
|
|
|
|
struct cvmx_pip_dsa_src_grp_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dsa_src_grp_s cn66xx;
|
|
|
|
struct cvmx_pip_dsa_src_grp_s cn68xx;
|
|
|
|
struct cvmx_pip_dsa_src_grp_s cn68xxp1;
|
|
|
|
struct cvmx_pip_dsa_src_grp_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_dsa_src_grp cvmx_pip_dsa_src_grp_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_dsa_vid_grp
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_dsa_vid_grp {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dsa_vid_grp_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t map15 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map14 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map13 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map12 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map11 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map10 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map9 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map8 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map7 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map6 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map5 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map4 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map3 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map2 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map1 : 4; /**< DSA Group Algorithm */
|
|
|
|
uint64_t map0 : 4; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP */
|
|
|
|
#else
|
|
|
|
uint64_t map0 : 4;
|
|
|
|
uint64_t map1 : 4;
|
|
|
|
uint64_t map2 : 4;
|
|
|
|
uint64_t map3 : 4;
|
|
|
|
uint64_t map4 : 4;
|
|
|
|
uint64_t map5 : 4;
|
|
|
|
uint64_t map6 : 4;
|
|
|
|
uint64_t map7 : 4;
|
|
|
|
uint64_t map8 : 4;
|
|
|
|
uint64_t map9 : 4;
|
|
|
|
uint64_t map10 : 4;
|
|
|
|
uint64_t map11 : 4;
|
|
|
|
uint64_t map12 : 4;
|
|
|
|
uint64_t map13 : 4;
|
|
|
|
uint64_t map14 : 4;
|
|
|
|
uint64_t map15 : 4;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn52xx;
|
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn52xxp1;
|
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn56xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn63xx;
|
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn66xx;
|
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn68xx;
|
|
|
|
struct cvmx_pip_dsa_vid_grp_s cn68xxp1;
|
|
|
|
struct cvmx_pip_dsa_vid_grp_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_dsa_vid_grp cvmx_pip_dsa_vid_grp_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_frm_len_chk#
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* PIP_FRM_LEN_CHK0 is used for packets on packet interface0, PCI, PCI RAW, and PKO loopback ports.
|
|
|
|
* PIP_FRM_LEN_CHK1 is unused.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_frm_len_chkx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_frm_len_chkx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
uint64_t maxlen : 16; /**< Byte count for Max-sized frame check
|
|
|
|
PIP_PRT_CFGn[MAXERR_EN] enables the check for
|
|
|
|
port n.
|
|
|
|
If enabled, failing packets set the MAXERR
|
|
|
|
interrupt and work-queue entry WORD2[opcode] is
|
|
|
|
set to OVER_FCS (0x3, if packet has bad FCS) or
|
|
|
|
OVER_ERR (0x4, if packet has good FCS).
|
|
|
|
The effective MAXLEN used by HW is
|
|
|
|
PIP_PRT_CFG[DSA_EN] == 0,
|
|
|
|
PIP_FRM_LEN_CHK[MAXLEN] + 4*VV + 4*VS
|
|
|
|
PIP_PRT_CFG[DSA_EN] == 1,
|
|
|
|
PIP_FRM_LEN_CHK[MAXLEN] + PIP_PRT_CFG[SKIP]+4*VS
|
|
|
|
If PTP_MODE, the 8B timestamp is prepended to the
|
|
|
|
packet. MAXLEN should be increased by 8 to
|
|
|
|
compensate for the additional timestamp field. */
|
|
|
|
uint64_t minlen : 16; /**< Byte count for Min-sized frame check
|
|
|
|
PIP_PRT_CFGn[MINERR_EN] enables the check for
|
|
|
|
port n.
|
|
|
|
If enabled, failing packets set the MINERR
|
|
|
|
interrupt and work-queue entry WORD2[opcode] is
|
|
|
|
set to UNDER_FCS (0x6, if packet has bad FCS) or
|
|
|
|
UNDER_ERR (0x8, if packet has good FCS).
|
|
|
|
If PTP_MODE, the 8B timestamp is prepended to the
|
|
|
|
packet. MINLEN should be increased by 8 to
|
|
|
|
compensate for the additional timestamp field. */
|
|
|
|
#else
|
|
|
|
uint64_t minlen : 16;
|
|
|
|
uint64_t maxlen : 16;
|
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn50xx;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn52xx;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn56xx;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn56xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_frm_len_chkx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_frm_len_chkx_s cn63xx;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_frm_len_chkx_s cn66xx;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn68xx;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cn68xxp1;
|
|
|
|
struct cvmx_pip_frm_len_chkx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_frm_len_chkx cvmx_pip_frm_len_chkx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_gbl_cfg
|
|
|
|
*
|
|
|
|
* PIP_GBL_CFG = PIP's Global Config Register
|
|
|
|
*
|
|
|
|
* Global config information that applies to all ports.
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* * IP6_UDP
|
|
|
|
* IPv4 allows optional UDP checksum by sending the all 0's patterns. IPv6
|
|
|
|
* outlaws this and the spec says to always check UDP checksum. This mode
|
|
|
|
* bit allows the user to treat IPv6 as IPv4, meaning that the all 0's
|
|
|
|
* pattern will cause a UDP checksum pass.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_gbl_cfg {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_cfg_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_19_63 : 45;
|
|
|
|
uint64_t tag_syn : 1; /**< Do not include src_crc for TCP/SYN&!ACK packets
|
|
|
|
0 = include src_crc
|
|
|
|
1 = tag hash is dst_crc for TCP/SYN&!ACK packets */
|
|
|
|
uint64_t ip6_udp : 1; /**< IPv6/UDP checksum is not optional
|
|
|
|
0 = Allow optional checksum code
|
|
|
|
1 = Do not allow optional checksum code */
|
|
|
|
uint64_t max_l2 : 1; /**< Config bit to choose the largest L2 frame size
|
|
|
|
Chooses the value of the L2 Type/Length field
|
|
|
|
to classify the frame as length.
|
|
|
|
0 = 1500 / 0x5dc
|
|
|
|
1 = 1535 / 0x5ff */
|
|
|
|
uint64_t reserved_11_15 : 5;
|
|
|
|
uint64_t raw_shf : 3; /**< RAW Packet shift amount
|
|
|
|
Number of bytes to pad a RAW packet. */
|
|
|
|
uint64_t reserved_3_7 : 5;
|
|
|
|
uint64_t nip_shf : 3; /**< Non-IP shift amount
|
|
|
|
Number of bytes to pad a packet that has been
|
|
|
|
classified as not IP. */
|
|
|
|
#else
|
|
|
|
uint64_t nip_shf : 3;
|
|
|
|
uint64_t reserved_3_7 : 5;
|
|
|
|
uint64_t raw_shf : 3;
|
|
|
|
uint64_t reserved_11_15 : 5;
|
|
|
|
uint64_t max_l2 : 1;
|
|
|
|
uint64_t ip6_udp : 1;
|
|
|
|
uint64_t tag_syn : 1;
|
|
|
|
uint64_t reserved_19_63 : 45;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn30xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn31xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn38xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn38xxp2;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn50xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn52xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn52xxp1;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn56xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn56xxp1;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn58xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_cfg_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_gbl_cfg_s cn63xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_cfg_s cn66xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn68xx;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cn68xxp1;
|
|
|
|
struct cvmx_pip_gbl_cfg_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_gbl_cfg cvmx_pip_gbl_cfg_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_gbl_ctl
|
|
|
|
*
|
|
|
|
* PIP_GBL_CTL = PIP's Global Control Register
|
|
|
|
*
|
|
|
|
* Global control information. These are the global checker enables for
|
|
|
|
* IPv4/IPv6 and TCP/UDP parsing. The enables effect all ports.
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* The following text describes the conditions in which each checker will
|
|
|
|
* assert and flag an exception. By disabling the checker, the exception will
|
|
|
|
* not be flagged and the packet will be parsed as best it can. Note, by
|
|
|
|
* disabling conditions, packets can be parsed incorrectly (.i.e. IP_MAL and
|
|
|
|
* L4_MAL could cause bits to be seen in the wrong place. IP_CHK and L4_CHK
|
|
|
|
* means that the packet was corrupted).
|
|
|
|
*
|
|
|
|
* * IP_CHK
|
|
|
|
* Indicates that an IPv4 packet contained an IPv4 header checksum
|
|
|
|
* violations. Only applies to packets classified as IPv4.
|
|
|
|
*
|
|
|
|
* * IP_MAL
|
|
|
|
* Indicates that the packet was malformed. Malformed packets are defined as
|
|
|
|
* packets that are not long enough to cover the IP header or not long enough
|
|
|
|
* to cover the length in the IP header.
|
|
|
|
*
|
|
|
|
* * IP_HOP
|
|
|
|
* Indicates that the IPv4 TTL field or IPv6 HOP field is zero.
|
|
|
|
*
|
|
|
|
* * IP4_OPTS
|
|
|
|
* Indicates the presence of IPv4 options. It is set when the length != 5.
|
|
|
|
* This only applies to packets classified as IPv4.
|
|
|
|
*
|
|
|
|
* * IP6_EEXT
|
|
|
|
* Indicate the presence of IPv6 early extension headers. These bits only
|
|
|
|
* apply to packets classified as IPv6. Bit 0 will flag early extensions
|
|
|
|
* when next_header is any one of the following...
|
|
|
|
*
|
|
|
|
* - hop-by-hop (0)
|
|
|
|
* - destination (60)
|
|
|
|
* - routing (43)
|
|
|
|
*
|
|
|
|
* Bit 1 will flag early extentions when next_header is NOT any of the
|
|
|
|
* following...
|
|
|
|
*
|
|
|
|
* - TCP (6)
|
|
|
|
* - UDP (17)
|
|
|
|
* - fragmentation (44)
|
|
|
|
* - ICMP (58)
|
|
|
|
* - IPSEC ESP (50)
|
|
|
|
* - IPSEC AH (51)
|
|
|
|
* - IPCOMP
|
|
|
|
*
|
|
|
|
* * L4_MAL
|
|
|
|
* Indicates that a TCP or UDP packet is not long enough to cover the TCP or
|
|
|
|
* UDP header.
|
|
|
|
*
|
|
|
|
* * L4_PRT
|
|
|
|
* Indicates that a TCP or UDP packet has an illegal port number - either the
|
|
|
|
* source or destination port is zero.
|
|
|
|
*
|
|
|
|
* * L4_CHK
|
|
|
|
* Indicates that a packet classified as either TCP or UDP contains an L4
|
|
|
|
* checksum failure
|
|
|
|
*
|
|
|
|
* * L4_LEN
|
|
|
|
* Indicates that the TCP or UDP length does not match the the IP length.
|
|
|
|
*
|
|
|
|
* * TCP_FLAG
|
|
|
|
* Indicates any of the following conditions...
|
|
|
|
*
|
|
|
|
* [URG, ACK, PSH, RST, SYN, FIN] : tcp_flag
|
|
|
|
* 6'b000001: (FIN only)
|
|
|
|
* 6'b000000: (0)
|
|
|
|
* 6'bxxx1x1: (RST+FIN+*)
|
|
|
|
* 6'b1xxx1x: (URG+SYN+*)
|
|
|
|
* 6'bxxx11x: (RST+SYN+*)
|
|
|
|
* 6'bxxxx11: (SYN+FIN+*)
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_gbl_ctl {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_ctl_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_29_63 : 35;
|
|
|
|
uint64_t egrp_dis : 1; /**< PKT_INST_HDR extended group field disable
|
|
|
|
When set, HW will ignore the EGRP field of the
|
|
|
|
PKT_INST_HDR - bits 47:46. */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
|
|
|
|
0=Allow NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header to control which fields from
|
|
|
|
the instruction header are used for WQE WORD2.
|
|
|
|
1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header and act as if these fields
|
|
|
|
were zero. Thus always use the TAG,TT,GRP,QOS
|
|
|
|
(depending on the instruction header length)
|
|
|
|
from the instruction header for the WQE WORD2. */
|
|
|
|
uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP */
|
|
|
|
uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP when the
|
|
|
|
DSA tag command to TO_CPU */
|
|
|
|
uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA VLAN id to compute GRP */
|
|
|
|
uint64_t reserved_21_23 : 3;
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t ring_en : 1; /**< Enable DPI ring information in WQE */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
|
2012-03-11 04:14:00 +00:00
|
|
|
Does not apply to DPI ports (32-35)
|
2010-11-28 06:20:41 +00:00
|
|
|
When using 2-byte instruction header words,
|
|
|
|
either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
|
|
|
|
uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
|
|
|
|
uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
|
|
|
|
uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
|
|
|
|
uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
|
|
|
|
uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
|
|
|
|
uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
|
|
|
|
uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
|
|
|
|
uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
|
|
|
|
uint64_t ip_mal : 1; /**< Enable malformed check */
|
|
|
|
uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
|
|
|
|
#else
|
|
|
|
uint64_t ip_chk : 1;
|
|
|
|
uint64_t ip_mal : 1;
|
|
|
|
uint64_t ip_hop : 1;
|
|
|
|
uint64_t ip4_opts : 1;
|
|
|
|
uint64_t ip6_eext : 2;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t l4_mal : 1;
|
|
|
|
uint64_t l4_prt : 1;
|
|
|
|
uint64_t l4_chk : 1;
|
|
|
|
uint64_t l4_len : 1;
|
|
|
|
uint64_t tcp_flag : 1;
|
|
|
|
uint64_t l2_mal : 1;
|
|
|
|
uint64_t vs_qos : 1;
|
|
|
|
uint64_t vs_wqe : 1;
|
|
|
|
uint64_t ignrs : 1;
|
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ring_en : 1;
|
|
|
|
uint64_t reserved_21_23 : 3;
|
|
|
|
uint64_t dsa_grp_sid : 1;
|
|
|
|
uint64_t dsa_grp_scmd : 1;
|
|
|
|
uint64_t dsa_grp_tvid : 1;
|
|
|
|
uint64_t ihmsk_dis : 1;
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t egrp_dis : 1;
|
|
|
|
uint64_t reserved_29_63 : 35;
|
2010-11-28 06:20:41 +00:00
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_ctl_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_17_63 : 47;
|
|
|
|
uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
|
|
|
|
Only applies to the packet interface prts (0-31)
|
|
|
|
When using 2-byte instruction header words,
|
|
|
|
either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
|
|
|
|
uint64_t vs_wqe : 1; /**< Which VLAN CFI and ID to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t vs_qos : 1; /**< Which VLAN priority to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
|
|
|
|
uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
|
|
|
|
uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
|
|
|
|
uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
|
|
|
|
uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
|
|
|
|
uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
|
|
|
|
uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
|
|
|
|
uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
|
|
|
|
uint64_t ip_mal : 1; /**< Enable malformed check */
|
|
|
|
uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
|
|
|
|
#else
|
|
|
|
uint64_t ip_chk : 1;
|
|
|
|
uint64_t ip_mal : 1;
|
|
|
|
uint64_t ip_hop : 1;
|
|
|
|
uint64_t ip4_opts : 1;
|
|
|
|
uint64_t ip6_eext : 2;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t l4_mal : 1;
|
|
|
|
uint64_t l4_prt : 1;
|
|
|
|
uint64_t l4_chk : 1;
|
|
|
|
uint64_t l4_len : 1;
|
|
|
|
uint64_t tcp_flag : 1;
|
|
|
|
uint64_t l2_mal : 1;
|
|
|
|
uint64_t vs_qos : 1;
|
|
|
|
uint64_t vs_wqe : 1;
|
|
|
|
uint64_t ignrs : 1;
|
|
|
|
uint64_t reserved_17_63 : 47;
|
|
|
|
#endif
|
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn30xx cn38xxp2;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn30xx cn50xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_ctl_cn52xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_27_63 : 37;
|
|
|
|
uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP */
|
|
|
|
uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP when the
|
|
|
|
DSA tag command to TO_CPU */
|
|
|
|
uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA VLAN id to compute GRP */
|
|
|
|
uint64_t reserved_21_23 : 3;
|
|
|
|
uint64_t ring_en : 1; /**< Enable PCIe ring information in WQE */
|
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
|
|
|
|
Does not apply to PCI ports (32-35)
|
|
|
|
When using 2-byte instruction header words,
|
|
|
|
either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
|
|
|
|
uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
|
|
|
|
uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
|
|
|
|
uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
|
|
|
|
uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
|
|
|
|
uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
|
|
|
|
uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
|
|
|
|
uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
|
|
|
|
uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
|
|
|
|
uint64_t ip_mal : 1; /**< Enable malformed check */
|
|
|
|
uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
|
|
|
|
#else
|
|
|
|
uint64_t ip_chk : 1;
|
|
|
|
uint64_t ip_mal : 1;
|
|
|
|
uint64_t ip_hop : 1;
|
|
|
|
uint64_t ip4_opts : 1;
|
|
|
|
uint64_t ip6_eext : 2;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t l4_mal : 1;
|
|
|
|
uint64_t l4_prt : 1;
|
|
|
|
uint64_t l4_chk : 1;
|
|
|
|
uint64_t l4_len : 1;
|
|
|
|
uint64_t tcp_flag : 1;
|
|
|
|
uint64_t l2_mal : 1;
|
|
|
|
uint64_t vs_qos : 1;
|
|
|
|
uint64_t vs_wqe : 1;
|
|
|
|
uint64_t ignrs : 1;
|
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ring_en : 1;
|
|
|
|
uint64_t reserved_21_23 : 3;
|
|
|
|
uint64_t dsa_grp_sid : 1;
|
|
|
|
uint64_t dsa_grp_scmd : 1;
|
|
|
|
uint64_t dsa_grp_tvid : 1;
|
|
|
|
uint64_t reserved_27_63 : 37;
|
|
|
|
#endif
|
|
|
|
} cn52xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn52xx cn52xxp1;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn52xx cn56xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_ctl_cn56xxp1 {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_21_63 : 43;
|
|
|
|
uint64_t ring_en : 1; /**< Enable PCIe ring information in WQE */
|
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
|
|
|
|
Does not apply to PCI ports (32-35)
|
|
|
|
When using 2-byte instruction header words,
|
|
|
|
either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
|
|
|
|
uint64_t vs_wqe : 1; /**< Which VLAN CFI and ID to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t vs_qos : 1; /**< Which VLAN priority to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
|
|
|
|
uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
|
|
|
|
uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
|
|
|
|
uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
|
|
|
|
uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
|
|
|
|
uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
|
|
|
|
uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
|
|
|
|
uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
|
|
|
|
uint64_t ip_mal : 1; /**< Enable malformed check */
|
|
|
|
uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
|
|
|
|
#else
|
|
|
|
uint64_t ip_chk : 1;
|
|
|
|
uint64_t ip_mal : 1;
|
|
|
|
uint64_t ip_hop : 1;
|
|
|
|
uint64_t ip4_opts : 1;
|
|
|
|
uint64_t ip6_eext : 2;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t l4_mal : 1;
|
|
|
|
uint64_t l4_prt : 1;
|
|
|
|
uint64_t l4_chk : 1;
|
|
|
|
uint64_t l4_len : 1;
|
|
|
|
uint64_t tcp_flag : 1;
|
|
|
|
uint64_t l2_mal : 1;
|
|
|
|
uint64_t vs_qos : 1;
|
|
|
|
uint64_t vs_wqe : 1;
|
|
|
|
uint64_t ignrs : 1;
|
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ring_en : 1;
|
|
|
|
uint64_t reserved_21_63 : 43;
|
|
|
|
#endif
|
|
|
|
} cn56xxp1;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn30xx cn58xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn30xx cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_gbl_ctl_cn61xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_28_63 : 36;
|
|
|
|
uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
|
|
|
|
0=Allow NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header to control which fields from
|
|
|
|
the instruction header are used for WQE WORD2.
|
|
|
|
1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header and act as if these fields
|
|
|
|
were zero. Thus always use the TAG,TT,GRP,QOS
|
|
|
|
(depending on the instruction header length)
|
|
|
|
from the instruction header for the WQE WORD2. */
|
|
|
|
uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP */
|
|
|
|
uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP when the
|
|
|
|
DSA tag command to TO_CPU */
|
|
|
|
uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA VLAN id to compute GRP */
|
|
|
|
uint64_t reserved_21_23 : 3;
|
|
|
|
uint64_t ring_en : 1; /**< Enable DPI ring information in WQE */
|
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
|
|
|
|
Does not apply to DPI ports (32-35)
|
|
|
|
When using 2-byte instruction header words,
|
|
|
|
either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
|
|
|
|
uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
|
|
|
|
uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
|
|
|
|
uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
|
|
|
|
uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
|
|
|
|
uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
|
|
|
|
uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
|
|
|
|
uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
|
|
|
|
uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
|
|
|
|
uint64_t ip_mal : 1; /**< Enable malformed check */
|
|
|
|
uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
|
|
|
|
#else
|
|
|
|
uint64_t ip_chk : 1;
|
|
|
|
uint64_t ip_mal : 1;
|
|
|
|
uint64_t ip_hop : 1;
|
|
|
|
uint64_t ip4_opts : 1;
|
|
|
|
uint64_t ip6_eext : 2;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t l4_mal : 1;
|
|
|
|
uint64_t l4_prt : 1;
|
|
|
|
uint64_t l4_chk : 1;
|
|
|
|
uint64_t l4_len : 1;
|
|
|
|
uint64_t tcp_flag : 1;
|
|
|
|
uint64_t l2_mal : 1;
|
|
|
|
uint64_t vs_qos : 1;
|
|
|
|
uint64_t vs_wqe : 1;
|
|
|
|
uint64_t ignrs : 1;
|
|
|
|
uint64_t reserved_17_19 : 3;
|
|
|
|
uint64_t ring_en : 1;
|
|
|
|
uint64_t reserved_21_23 : 3;
|
|
|
|
uint64_t dsa_grp_sid : 1;
|
|
|
|
uint64_t dsa_grp_scmd : 1;
|
|
|
|
uint64_t dsa_grp_tvid : 1;
|
|
|
|
uint64_t ihmsk_dis : 1;
|
|
|
|
uint64_t reserved_28_63 : 36;
|
|
|
|
#endif
|
|
|
|
} cn61xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn61xx cn63xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn61xx cn63xxp1;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn61xx cn66xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn68xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_29_63 : 35;
|
|
|
|
uint64_t egrp_dis : 1; /**< PKT_INST_HDR extended group field disable
|
|
|
|
When set, HW will ignore the EGRP field of the
|
|
|
|
PKT_INST_HDR - bits 47:46. */
|
|
|
|
uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
|
|
|
|
0=Allow NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header to control which fields from
|
|
|
|
the instruction header are used for WQE WORD2.
|
|
|
|
1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header and act as if these fields
|
|
|
|
were zero. Thus always use the TAG,TT,GRP,QOS
|
|
|
|
(depending on the instruction header length)
|
|
|
|
from the instruction header for the WQE WORD2. */
|
|
|
|
uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP */
|
|
|
|
uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP when the
|
|
|
|
DSA tag command to TO_CPU */
|
|
|
|
uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA VLAN id to compute GRP */
|
|
|
|
uint64_t reserved_17_23 : 7;
|
|
|
|
uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
|
|
|
|
When using 2-byte instruction header words,
|
|
|
|
either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
|
|
|
|
uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
|
|
|
|
uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
|
|
|
|
uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
|
|
|
|
uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
|
|
|
|
uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
|
|
|
|
uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
|
|
|
|
uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
|
|
|
|
uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
|
|
|
|
uint64_t ip_mal : 1; /**< Enable malformed check */
|
|
|
|
uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
|
|
|
|
#else
|
|
|
|
uint64_t ip_chk : 1;
|
|
|
|
uint64_t ip_mal : 1;
|
|
|
|
uint64_t ip_hop : 1;
|
|
|
|
uint64_t ip4_opts : 1;
|
|
|
|
uint64_t ip6_eext : 2;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t l4_mal : 1;
|
|
|
|
uint64_t l4_prt : 1;
|
|
|
|
uint64_t l4_chk : 1;
|
|
|
|
uint64_t l4_len : 1;
|
|
|
|
uint64_t tcp_flag : 1;
|
|
|
|
uint64_t l2_mal : 1;
|
|
|
|
uint64_t vs_qos : 1;
|
|
|
|
uint64_t vs_wqe : 1;
|
|
|
|
uint64_t ignrs : 1;
|
|
|
|
uint64_t reserved_17_23 : 7;
|
|
|
|
uint64_t dsa_grp_sid : 1;
|
|
|
|
uint64_t dsa_grp_scmd : 1;
|
|
|
|
uint64_t dsa_grp_tvid : 1;
|
|
|
|
uint64_t ihmsk_dis : 1;
|
|
|
|
uint64_t egrp_dis : 1;
|
|
|
|
uint64_t reserved_29_63 : 35;
|
|
|
|
#endif
|
|
|
|
} cn68xx;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn68xxp1 {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_28_63 : 36;
|
|
|
|
uint64_t ihmsk_dis : 1; /**< Instruction Header Mask Disable
|
|
|
|
0=Allow NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header to control which fields from
|
|
|
|
the instruction header are used for WQE WORD2.
|
|
|
|
1=Ignore the NTAG,NTT,NGRP,NQOS bits in the
|
|
|
|
instruction header and act as if these fields
|
|
|
|
were zero. Thus always use the TAG,TT,GRP,QOS
|
|
|
|
(depending on the instruction header length)
|
|
|
|
from the instruction header for the WQE WORD2. */
|
|
|
|
uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP */
|
|
|
|
uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA source id to compute GRP when the
|
|
|
|
DSA tag command to TO_CPU */
|
|
|
|
uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm
|
|
|
|
Use the DSA VLAN id to compute GRP */
|
|
|
|
uint64_t reserved_17_23 : 7;
|
|
|
|
uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set
|
|
|
|
When using 2-byte instruction header words,
|
|
|
|
either PIP_PRT_CFG[DYN_RS] or IGNRS should be set */
|
|
|
|
uint64_t vs_wqe : 1; /**< Which DSA/VLAN CFI/ID to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t vs_qos : 1; /**< Which DSA/VLAN priority to use when VLAN Stacking
|
|
|
|
0=use the 1st (network order) VLAN
|
|
|
|
1=use the 2nd (network order) VLAN */
|
|
|
|
uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */
|
|
|
|
uint64_t tcp_flag : 1; /**< Enable TCP flags checks */
|
|
|
|
uint64_t l4_len : 1; /**< Enable TCP/UDP length check */
|
|
|
|
uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */
|
|
|
|
uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */
|
|
|
|
uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */
|
|
|
|
uint64_t ip4_opts : 1; /**< Enable IPv4 options check */
|
|
|
|
uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */
|
|
|
|
uint64_t ip_mal : 1; /**< Enable malformed check */
|
|
|
|
uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */
|
|
|
|
#else
|
|
|
|
uint64_t ip_chk : 1;
|
|
|
|
uint64_t ip_mal : 1;
|
|
|
|
uint64_t ip_hop : 1;
|
|
|
|
uint64_t ip4_opts : 1;
|
|
|
|
uint64_t ip6_eext : 2;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t l4_mal : 1;
|
|
|
|
uint64_t l4_prt : 1;
|
|
|
|
uint64_t l4_chk : 1;
|
|
|
|
uint64_t l4_len : 1;
|
|
|
|
uint64_t tcp_flag : 1;
|
|
|
|
uint64_t l2_mal : 1;
|
|
|
|
uint64_t vs_qos : 1;
|
|
|
|
uint64_t vs_wqe : 1;
|
|
|
|
uint64_t ignrs : 1;
|
|
|
|
uint64_t reserved_17_23 : 7;
|
|
|
|
uint64_t dsa_grp_sid : 1;
|
|
|
|
uint64_t dsa_grp_scmd : 1;
|
|
|
|
uint64_t dsa_grp_tvid : 1;
|
|
|
|
uint64_t ihmsk_dis : 1;
|
|
|
|
uint64_t reserved_28_63 : 36;
|
|
|
|
#endif
|
|
|
|
} cn68xxp1;
|
|
|
|
struct cvmx_pip_gbl_ctl_cn61xx cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_gbl_ctl cvmx_pip_gbl_ctl_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_hg_pri_qos
|
|
|
|
*
|
2010-11-28 06:20:41 +00:00
|
|
|
* Notes:
|
|
|
|
* This register controls accesses to the HG_QOS_TABLE. To write an entry of
|
|
|
|
* the table, write PIP_HG_PRI_QOS with PRI=table address, QOS=priority level,
|
|
|
|
* UP_QOS=1. To read an entry of the table, write PIP_HG_PRI_QOS with
|
|
|
|
* PRI=table address, QOS=dont_carepriority level, UP_QOS=0 and then read
|
|
|
|
* PIP_HG_PRI_QOS. The table data will be in PIP_HG_PRI_QOS[QOS].
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_hg_pri_qos {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_hg_pri_qos_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
uint64_t up_qos : 1; /**< When written to '1', updates the entry in the
|
|
|
|
HG_QOS_TABLE as specified by PRI to a value of
|
|
|
|
QOS as follows
|
|
|
|
HG_QOS_TABLE[PRI] = QOS */
|
|
|
|
uint64_t reserved_11_11 : 1;
|
|
|
|
uint64_t qos : 3; /**< QOS Map level to priority */
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t pri : 6; /**< The priority level from HiGig header
|
|
|
|
HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
|
|
|
|
HiGig2 PRI = [DP[1:0], TC[3:0]] */
|
|
|
|
#else
|
|
|
|
uint64_t pri : 6;
|
|
|
|
uint64_t reserved_6_7 : 2;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_11_11 : 1;
|
|
|
|
uint64_t up_qos : 1;
|
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_hg_pri_qos_s cn52xx;
|
|
|
|
struct cvmx_pip_hg_pri_qos_s cn52xxp1;
|
|
|
|
struct cvmx_pip_hg_pri_qos_s cn56xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_hg_pri_qos_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_hg_pri_qos_s cn63xx;
|
|
|
|
struct cvmx_pip_hg_pri_qos_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_hg_pri_qos_s cn66xx;
|
|
|
|
struct cvmx_pip_hg_pri_qos_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_hg_pri_qos cvmx_pip_hg_pri_qos_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_int_en
|
|
|
|
*
|
|
|
|
* PIP_INT_EN = PIP's Interrupt Enable Register
|
|
|
|
*
|
|
|
|
* Determines if hardward should raise an interrupt to software
|
|
|
|
* when an exception event occurs.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_int_en {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
|
|
|
|
stripping in IPD is enable */
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t punyerr : 1;
|
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_9_63 : 55;
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow
|
|
|
|
(not used in O2P) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure
|
|
|
|
(not used in O2P) */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC
|
|
|
|
(not used in O2P) */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t reserved_9_63 : 55;
|
|
|
|
#endif
|
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_int_en_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_int_en_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_int_en_cn30xx cn38xxp2;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_cn50xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
#endif
|
|
|
|
} cn50xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_cn52xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
|
|
|
|
stripping in IPD is enable */
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t punyerr : 1;
|
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
#endif
|
|
|
|
} cn52xx;
|
|
|
|
struct cvmx_pip_int_en_cn52xx cn52xxp1;
|
|
|
|
struct cvmx_pip_int_en_s cn56xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_cn56xxp1 {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC
|
|
|
|
(Disabled in 56xx) */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
#endif
|
|
|
|
} cn56xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_cn58xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
|
|
|
|
stripping in IPD is enable */
|
|
|
|
uint64_t reserved_9_11 : 3;
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t reserved_9_11 : 3;
|
|
|
|
uint64_t punyerr : 1;
|
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
#endif
|
|
|
|
} cn58xx;
|
|
|
|
struct cvmx_pip_int_en_cn30xx cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_int_en_s cn63xx;
|
|
|
|
struct cvmx_pip_int_en_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_en_s cn66xx;
|
|
|
|
struct cvmx_pip_int_en_s cn68xx;
|
|
|
|
struct cvmx_pip_int_en_s cn68xxp1;
|
|
|
|
struct cvmx_pip_int_en_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_int_en cvmx_pip_int_en_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_int_reg
|
|
|
|
*
|
|
|
|
* PIP_INT_REG = PIP's Interrupt Register
|
|
|
|
*
|
|
|
|
* Any exception event that occurs is captured in the PIP_INT_REG.
|
|
|
|
* PIP_INT_REG will set the exception bit regardless of the value
|
|
|
|
* of PIP_INT_EN. PIP_INT_EN only controls if an interrupt is
|
|
|
|
* raised to software.
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* * TODOOVR
|
|
|
|
* The PIP Todo list stores packets that have been received and require work
|
|
|
|
* queue entry generation. PIP will normally assert backpressure when the
|
|
|
|
* list fills up such that any error is normally is result of a programming
|
|
|
|
* the PIP_BCK_PRS[HIWATER] incorrectly. PIP itself can handle 29M
|
|
|
|
* packets/sec X500MHz or 15Gbs X 64B packets.
|
|
|
|
*
|
|
|
|
* * SKPRUNT
|
|
|
|
* If a packet size is less then the amount programmed in the per port
|
|
|
|
* skippers, then there will be nothing to parse and the entire packet will
|
|
|
|
* basically be skipped over. This is probably not what the user desired, so
|
|
|
|
* there is an indication to software.
|
|
|
|
*
|
|
|
|
* * BADTAG
|
|
|
|
* A tag is considered bad when it is resued by a new packet before it was
|
|
|
|
* released by PIP. PIP considers a tag released by one of two methods.
|
|
|
|
* . QOS dropped so that it is released over the pip__ipd_release bus.
|
|
|
|
* . WorkQ entry is validated by the pip__ipd_done signal
|
|
|
|
*
|
|
|
|
* * PRTNXA
|
|
|
|
* If PIP receives a packet that is not in the valid port range, the port
|
|
|
|
* processed will be mapped into the valid port space (the mapping is
|
|
|
|
* currently unpredictable) and the PRTNXA bit will be set. PRTNXA will be
|
|
|
|
* set for packets received under the following conditions:
|
|
|
|
*
|
|
|
|
* * packet ports (ports 0-31)
|
|
|
|
* - GMX_INF_MODE[TYPE]==0 (SGMII), received port is 4-15 or 20-31
|
|
|
|
* - GMX_INF_MODE[TYPE]==1 (XAUI), received port is 1-15 or 17-31
|
|
|
|
* * upper ports (pci and loopback ports 32-63)
|
|
|
|
* - received port is 40-47 or 52-63
|
|
|
|
*
|
|
|
|
* * BCKPRS
|
|
|
|
* PIP can assert backpressure to the receive logic when the todo list
|
|
|
|
* exceeds a high-water mark (see PIP_BCK_PRS for more details). When this
|
|
|
|
* occurs, PIP can raise an interrupt to software.
|
|
|
|
*
|
|
|
|
* * CRCERR
|
|
|
|
* Octane can compute CRC in two places. Each RGMII port will compute its
|
|
|
|
* own CRC, but PIP can provide an additional check or check loopback or
|
|
|
|
* PCI ports. If PIP computes a bad CRC, then PIP will raise an interrupt.
|
|
|
|
*
|
|
|
|
* * PKTDRP
|
|
|
|
* PIP can drop packets based on QOS results received from IPD. If the QOS
|
|
|
|
* algorithm decides to drop a packet, PIP will assert an interrupt.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_int_reg {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
|
|
|
|
stripping in IPD is enable */
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper
|
|
|
|
This interrupt can occur with received PARTIAL
|
|
|
|
packets that are truncated to SKIP bytes or
|
|
|
|
smaller. */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t punyerr : 1;
|
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_9_63 : 55;
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow
|
|
|
|
(not used in O2P) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper
|
|
|
|
This interrupt can occur with received PARTIAL
|
|
|
|
packets that are truncated to SKIP bytes or
|
|
|
|
smaller. */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure
|
|
|
|
(not used in O2P) */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC
|
|
|
|
(not used in O2P) */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t reserved_9_63 : 55;
|
|
|
|
#endif
|
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_int_reg_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_int_reg_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_int_reg_cn30xx cn38xxp2;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_cn50xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper
|
|
|
|
This interrupt can occur with received PARTIAL
|
|
|
|
packets that are truncated to SKIP bytes or
|
|
|
|
smaller. */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
#endif
|
|
|
|
} cn50xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_cn52xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
|
|
|
|
stripping in IPD is enable */
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper
|
|
|
|
This interrupt can occur with received PARTIAL
|
|
|
|
packets that are truncated to SKIP bytes or
|
|
|
|
smaller. */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t reserved_1_1 : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t punyerr : 1;
|
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
#endif
|
|
|
|
} cn52xx;
|
|
|
|
struct cvmx_pip_int_reg_cn52xx cn52xxp1;
|
|
|
|
struct cvmx_pip_int_reg_s cn56xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_cn56xxp1 {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
uint64_t lenerr : 1; /**< Frame was received with length error */
|
|
|
|
uint64_t maxerr : 1; /**< Frame was received with length > max_length */
|
|
|
|
uint64_t minerr : 1; /**< Frame was received with length < min_length */
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper
|
|
|
|
This interrupt can occur with received PARTIAL
|
|
|
|
packets that are truncated to SKIP bytes or
|
|
|
|
smaller. */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC
|
|
|
|
(Disabled in 56xx) */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t minerr : 1;
|
|
|
|
uint64_t maxerr : 1;
|
|
|
|
uint64_t lenerr : 1;
|
|
|
|
uint64_t reserved_12_63 : 52;
|
|
|
|
#endif
|
|
|
|
} cn56xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_cn58xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC
|
|
|
|
stripping in IPD is enable */
|
|
|
|
uint64_t reserved_9_11 : 3;
|
|
|
|
uint64_t beperr : 1; /**< Parity Error in back end memory */
|
|
|
|
uint64_t feperr : 1; /**< Parity Error in front end memory */
|
|
|
|
uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
|
|
|
|
uint64_t skprunt : 1; /**< Packet was engulfed by skipper
|
|
|
|
This interrupt can occur with received PARTIAL
|
|
|
|
packets that are truncated to SKIP bytes or
|
|
|
|
smaller. */
|
|
|
|
uint64_t badtag : 1; /**< A bad tag was sent from IPD */
|
|
|
|
uint64_t prtnxa : 1; /**< Non-existent port */
|
|
|
|
uint64_t bckprs : 1; /**< PIP asserted backpressure */
|
|
|
|
uint64_t crcerr : 1; /**< PIP calculated bad CRC */
|
|
|
|
uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */
|
|
|
|
#else
|
|
|
|
uint64_t pktdrp : 1;
|
|
|
|
uint64_t crcerr : 1;
|
|
|
|
uint64_t bckprs : 1;
|
|
|
|
uint64_t prtnxa : 1;
|
|
|
|
uint64_t badtag : 1;
|
|
|
|
uint64_t skprunt : 1;
|
|
|
|
uint64_t todoovr : 1;
|
|
|
|
uint64_t feperr : 1;
|
|
|
|
uint64_t beperr : 1;
|
|
|
|
uint64_t reserved_9_11 : 3;
|
|
|
|
uint64_t punyerr : 1;
|
|
|
|
uint64_t reserved_13_63 : 51;
|
|
|
|
#endif
|
|
|
|
} cn58xx;
|
|
|
|
struct cvmx_pip_int_reg_cn30xx cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_int_reg_s cn63xx;
|
|
|
|
struct cvmx_pip_int_reg_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_int_reg_s cn66xx;
|
|
|
|
struct cvmx_pip_int_reg_s cn68xx;
|
|
|
|
struct cvmx_pip_int_reg_s cn68xxp1;
|
|
|
|
struct cvmx_pip_int_reg_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_int_reg cvmx_pip_int_reg_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_ip_offset
|
|
|
|
*
|
|
|
|
* PIP_IP_OFFSET = Location of the IP in the workQ entry
|
|
|
|
*
|
|
|
|
* An 8-byte offset to find the start of the IP header in the data portion of IP workQ entires
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* In normal configurations, OFFSET must be set in the 0..4 range to allow the
|
|
|
|
* entire IP and TCP/UDP headers to be buffered in HW and calculate the L4
|
|
|
|
* checksum for TCP/UDP packets.
|
|
|
|
*
|
|
|
|
* The MAX value of OFFSET is determined by the the types of packets that can
|
|
|
|
* be sent to PIP as follows...
|
|
|
|
*
|
|
|
|
* Packet Type MAX OFFSET
|
|
|
|
* IPv4/TCP/UDP 7
|
|
|
|
* IPv6/TCP/UDP 5
|
|
|
|
* IPv6/without L4 parsing 6
|
|
|
|
*
|
|
|
|
* If the L4 can be ignored, then the MAX OFFSET for IPv6 packets can increase
|
|
|
|
* to 6. Here are the following programming restrictions for IPv6 packets and
|
|
|
|
* OFFSET==6:
|
|
|
|
*
|
|
|
|
* . PIP_GBL_CTL[TCP_FLAG] == 0
|
|
|
|
* . PIP_GBL_CTL[L4_LEN] == 0
|
|
|
|
* . PIP_GBL_CTL[L4_CHK] == 0
|
|
|
|
* . PIP_GBL_CTL[L4_PRT] == 0
|
|
|
|
* . PIP_GBL_CTL[L4_MAL] == 0
|
|
|
|
* . PIP_DEC_IPSEC[TCP] == 0
|
|
|
|
* . PIP_DEC_IPSEC[UDP] == 0
|
|
|
|
* . PIP_PRT_TAG[IP6_DPRT] == 0
|
|
|
|
* . PIP_PRT_TAG[IP6_SPRT] == 0
|
|
|
|
* . PIP_PRT_TAG[TCP6_TAG] == 0
|
|
|
|
* . PIP_GBL_CFG[TAG_SYN] == 0
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_ip_offset {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_ip_offset_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_3_63 : 61;
|
|
|
|
uint64_t offset : 3; /**< Number of 8B ticks to include in workQ entry
|
|
|
|
prior to IP data
|
|
|
|
- 0: 0 Bytes / IP start at WORD4 of workQ entry
|
|
|
|
- 1: 8 Bytes / IP start at WORD5 of workQ entry
|
|
|
|
- 2: 16 Bytes / IP start at WORD6 of workQ entry
|
|
|
|
- 3: 24 Bytes / IP start at WORD7 of workQ entry
|
|
|
|
- 4: 32 Bytes / IP start at WORD8 of workQ entry
|
|
|
|
- 5: 40 Bytes / IP start at WORD9 of workQ entry
|
|
|
|
- 6: 48 Bytes / IP start at WORD10 of workQ entry
|
|
|
|
- 7: 56 Bytes / IP start at WORD11 of workQ entry */
|
|
|
|
#else
|
|
|
|
uint64_t offset : 3;
|
|
|
|
uint64_t reserved_3_63 : 61;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_ip_offset_s cn30xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn31xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn38xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn38xxp2;
|
|
|
|
struct cvmx_pip_ip_offset_s cn50xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn52xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn52xxp1;
|
|
|
|
struct cvmx_pip_ip_offset_s cn56xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn56xxp1;
|
|
|
|
struct cvmx_pip_ip_offset_s cn58xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_ip_offset_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_ip_offset_s cn63xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_ip_offset_s cn66xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn68xx;
|
|
|
|
struct cvmx_pip_ip_offset_s cn68xxp1;
|
|
|
|
struct cvmx_pip_ip_offset_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_ip_offset cvmx_pip_ip_offset_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_pri_tbl#
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* The priority level from HiGig header is as follows
|
|
|
|
*
|
|
|
|
* HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
|
|
|
|
* HiGig2 PRI = [DP[1:0], TC[3:0]]
|
|
|
|
*
|
|
|
|
* DSA PRI = WORD0[15:13]
|
|
|
|
*
|
|
|
|
* VLAN PRI = VLAN[15:13]
|
|
|
|
*
|
|
|
|
* DIFFSERV = IP.TOS/CLASS<7:2>
|
|
|
|
*/
|
|
|
|
union cvmx_pip_pri_tblx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_pri_tblx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t diff2_padd : 8; /**< Diffserv port-add */
|
|
|
|
uint64_t hg2_padd : 8; /**< HG_PRI port-add */
|
|
|
|
uint64_t vlan2_padd : 8; /**< VLAN port-add */
|
|
|
|
uint64_t reserved_38_39 : 2;
|
|
|
|
uint64_t diff2_bpid : 6; /**< Diffserv backpressure ID */
|
|
|
|
uint64_t reserved_30_31 : 2;
|
|
|
|
uint64_t hg2_bpid : 6; /**< HG_PRI backpressure ID */
|
|
|
|
uint64_t reserved_22_23 : 2;
|
|
|
|
uint64_t vlan2_bpid : 6; /**< VLAN backpressure ID */
|
|
|
|
uint64_t reserved_11_15 : 5;
|
|
|
|
uint64_t diff2_qos : 3; /**< Diffserv QOS level */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t hg2_qos : 3; /**< HG_PRI QOS level */
|
|
|
|
uint64_t reserved_3_3 : 1;
|
|
|
|
uint64_t vlan2_qos : 3; /**< VLAN QOS level */
|
|
|
|
#else
|
|
|
|
uint64_t vlan2_qos : 3;
|
|
|
|
uint64_t reserved_3_3 : 1;
|
|
|
|
uint64_t hg2_qos : 3;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t diff2_qos : 3;
|
|
|
|
uint64_t reserved_11_15 : 5;
|
|
|
|
uint64_t vlan2_bpid : 6;
|
|
|
|
uint64_t reserved_22_23 : 2;
|
|
|
|
uint64_t hg2_bpid : 6;
|
|
|
|
uint64_t reserved_30_31 : 2;
|
|
|
|
uint64_t diff2_bpid : 6;
|
|
|
|
uint64_t reserved_38_39 : 2;
|
|
|
|
uint64_t vlan2_padd : 8;
|
|
|
|
uint64_t hg2_padd : 8;
|
|
|
|
uint64_t diff2_padd : 8;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_pri_tblx_s cn68xx;
|
|
|
|
struct cvmx_pip_pri_tblx_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_pri_tblx cvmx_pip_pri_tblx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_prt_cfg#
|
|
|
|
*
|
|
|
|
* PIP_PRT_CFGX = Per port config information
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_prt_cfgx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_cfgx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_55_63 : 9;
|
|
|
|
uint64_t ih_pri : 1; /**< Use the PRI/QOS field in the instruction header
|
|
|
|
as the PRIORITY in BPID calculations. */
|
|
|
|
uint64_t len_chk_sel : 1; /**< Selects which PIP_FRM_LEN_CHK register is used
|
|
|
|
for this port-kind for MINERR and MAXERR checks.
|
|
|
|
LEN_CHK_SEL=0, use PIP_FRM_LEN_CHK0
|
|
|
|
LEN_CHK_SEL=1, use PIP_FRM_LEN_CHK1 */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
|
|
|
|
padding in the client data */
|
|
|
|
uint64_t vlan_len : 1; /**< When set, disables the length check for DSA/VLAN
|
|
|
|
pkts */
|
|
|
|
uint64_t lenerr_en : 1; /**< L2 length error check enable
|
|
|
|
Frame was received with length error
|
|
|
|
Typically, this check will not be enabled for
|
2012-03-11 04:14:00 +00:00
|
|
|
incoming packets on the DPI and sRIO ports
|
|
|
|
because the CRC bytes may not normally be
|
|
|
|
present. */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t maxerr_en : 1; /**< Max frame error check enable
|
2012-03-11 04:14:00 +00:00
|
|
|
Frame was received with length > max_length
|
|
|
|
max_length is defined by PIP_FRM_LEN_CHK[MAXLEN] */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t minerr_en : 1; /**< Min frame error check enable
|
|
|
|
Frame was received with length < min_length
|
|
|
|
Typically, this check will not be enabled for
|
2012-03-11 04:14:00 +00:00
|
|
|
incoming packets on the DPI and sRIO ports
|
|
|
|
because the CRC bytes may not normally be
|
|
|
|
present.
|
|
|
|
min_length is defined by PIP_FRM_LEN_CHK[MINLEN] */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t reserved_37_39 : 3;
|
|
|
|
uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
|
|
|
|
Normally, IPD will never drop a packet that PIP
|
|
|
|
indicates is RAW.
|
|
|
|
0=never drop RAW packets based on RED algorithm
|
|
|
|
1=allow RAW packet drops based on RED algorithm */
|
|
|
|
uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
|
|
|
|
calculating mask tag hash */
|
|
|
|
uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
|
|
|
|
configuration. If DYN_RS is set then
|
|
|
|
PKT_INST_HDR[RS] is not used. When using 2-byte
|
|
|
|
instruction header words, either DYN_RS or
|
|
|
|
PIP_GBL_CTL[IGNRS] should be set. */
|
|
|
|
uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
|
2012-03-11 04:14:00 +00:00
|
|
|
Internally set for RAWFULL/RAWSCHED packets
|
|
|
|
on the DPI ports (32-35).
|
|
|
|
Internally cleared for all other packets on the
|
|
|
|
DPI ports (32-35).
|
2010-11-28 06:20:41 +00:00
|
|
|
Must be zero in DSA mode */
|
|
|
|
uint64_t grp_wat : 4; /**< GRP Watcher enable */
|
|
|
|
uint64_t hg_qos : 1; /**< When set, uses the HiGig priority bits as a
|
|
|
|
lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
|
|
|
|
to determine the QOS value
|
|
|
|
HG_QOS must not be set when HIGIG_EN=0 */
|
|
|
|
uint64_t qos : 3; /**< Default QOS level of the port */
|
|
|
|
uint64_t qos_wat : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 0-3) */
|
|
|
|
uint64_t qos_vsel : 1; /**< Which QOS in PIP_QOS_VLAN to use
|
|
|
|
0 = PIP_QOS_VLAN[QOS]
|
|
|
|
1 = PIP_QOS_VLAN[QOS1] */
|
|
|
|
uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
|
|
|
|
if DSA/VLAN exists, it is used
|
|
|
|
else if IP exists, Diffserv is used
|
|
|
|
else the per port default is used
|
|
|
|
Watchers are still highest priority */
|
|
|
|
uint64_t qos_diff : 1; /**< QOS Diffserv */
|
|
|
|
uint64_t qos_vlan : 1; /**< QOS VLAN */
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t crc_en : 1; /**< CRC Checking enabled */
|
|
|
|
uint64_t higig_en : 1; /**< Enable HiGig parsing
|
2012-03-11 04:14:00 +00:00
|
|
|
Should not be set for DPI ports (ports 32-35)
|
|
|
|
Should not be set for sRIO ports (ports 40-47)
|
2010-11-28 06:20:41 +00:00
|
|
|
Should not be set for ports in which PTP_MODE=1
|
|
|
|
When HIGIG_EN=1:
|
|
|
|
DSA_EN field below must be zero
|
2012-03-11 04:14:00 +00:00
|
|
|
PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
|
2010-11-28 06:20:41 +00:00
|
|
|
SKIP field below is both Skip I size and the
|
|
|
|
size of the HiGig* header (12 or 16 bytes) */
|
|
|
|
uint64_t dsa_en : 1; /**< Enable DSA tag parsing
|
2012-03-11 04:14:00 +00:00
|
|
|
Should not be set for sRIO (ports 40-47)
|
|
|
|
Should not be set for ports in which PTP_MODE=1
|
2010-11-28 06:20:41 +00:00
|
|
|
When DSA_EN=1:
|
|
|
|
HIGIG_EN field above must be zero
|
|
|
|
SKIP field below is size of DSA tag (4, 8, or
|
|
|
|
12 bytes) rather than the size of Skip I
|
|
|
|
total SKIP (Skip I + header + Skip II
|
|
|
|
must be zero
|
2012-03-11 04:14:00 +00:00
|
|
|
INST_HDR field above must be zero (non-DPI
|
2010-11-28 06:20:41 +00:00
|
|
|
ports)
|
2012-03-11 04:14:00 +00:00
|
|
|
PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
|
|
|
|
For DPI ports, SLI_PKT*_INSTR_HEADER[USE_IHDR]
|
|
|
|
and DPI_INST_HDR[R] should be clear
|
2010-11-28 06:20:41 +00:00
|
|
|
MODE field below must be "skip to L2" */
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
|
|
|
|
0 = no packet inspection (Uninterpreted)
|
|
|
|
1 = L2 parsing / skip to L2
|
|
|
|
2 = IP parsing / skip to L3
|
|
|
|
3 = (illegal)
|
|
|
|
Must be 2 ("skip to L2") when in DSA mode. */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t skip : 7; /**< Optional Skip I amount for packets.
|
|
|
|
HW forces the SKIP to zero for packets on DPI
|
|
|
|
ports (32-35) when a PKT_INST_HDR is present.
|
|
|
|
See PIP_PRT_CFGB[ALT_SKP*] and PIP_ALT_SKIP_CFG.
|
|
|
|
See HRM sections "Parse Mode and Skip Length
|
|
|
|
Selection" and "Legal Skip Values"
|
|
|
|
for further details.
|
2010-11-28 06:20:41 +00:00
|
|
|
In DSA mode, indicates the DSA header length, not
|
|
|
|
Skip I size. (Must be 4,8,or 12)
|
|
|
|
In HIGIG mode, indicates both the Skip I size and
|
|
|
|
the HiGig header size (Must be 12 or 16).
|
|
|
|
If PTP_MODE, the 8B timestamp is prepended to the
|
|
|
|
packet. SKIP should be increased by 8 to
|
|
|
|
compensate for the additional timestamp field. */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2;
|
|
|
|
uint64_t dsa_en : 1;
|
|
|
|
uint64_t higig_en : 1;
|
|
|
|
uint64_t crc_en : 1;
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t qos_vlan : 1;
|
|
|
|
uint64_t qos_diff : 1;
|
|
|
|
uint64_t qos_vod : 1;
|
|
|
|
uint64_t qos_vsel : 1;
|
|
|
|
uint64_t qos_wat : 4;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t hg_qos : 1;
|
|
|
|
uint64_t grp_wat : 4;
|
|
|
|
uint64_t inst_hdr : 1;
|
|
|
|
uint64_t dyn_rs : 1;
|
|
|
|
uint64_t tag_inc : 2;
|
|
|
|
uint64_t rawdrp : 1;
|
|
|
|
uint64_t reserved_37_39 : 3;
|
|
|
|
uint64_t qos_wat_47 : 4;
|
|
|
|
uint64_t grp_wat_47 : 4;
|
|
|
|
uint64_t minerr_en : 1;
|
|
|
|
uint64_t maxerr_en : 1;
|
|
|
|
uint64_t lenerr_en : 1;
|
|
|
|
uint64_t vlan_len : 1;
|
|
|
|
uint64_t pad_len : 1;
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t len_chk_sel : 1;
|
|
|
|
uint64_t ih_pri : 1;
|
|
|
|
uint64_t reserved_55_63 : 9;
|
2010-11-28 06:20:41 +00:00
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_cfgx_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_37_63 : 27;
|
|
|
|
uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
|
|
|
|
Normally, IPD will never drop a packet that PIP
|
|
|
|
indicates is RAW.
|
|
|
|
0=never drop RAW packets based on RED algorithm
|
|
|
|
1=allow RAW packet drops based on RED algorithm */
|
|
|
|
uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
|
|
|
|
calculating mask tag hash */
|
|
|
|
uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
|
|
|
|
configuration. If DYN_RS is set then
|
|
|
|
PKT_INST_HDR[RS] is not used. When using 2-byte
|
|
|
|
instruction header words, either DYN_RS or
|
|
|
|
PIP_GBL_CTL[IGNRS] should be set. */
|
|
|
|
uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
|
|
|
|
(not for PCI prts, 32-35) */
|
|
|
|
uint64_t grp_wat : 4; /**< GRP Watcher enable */
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t qos : 3; /**< Default QOS level of the port */
|
|
|
|
uint64_t qos_wat : 4; /**< QOS Watcher enable */
|
|
|
|
uint64_t reserved_18_19 : 2;
|
|
|
|
uint64_t qos_diff : 1; /**< QOS Diffserv */
|
|
|
|
uint64_t qos_vlan : 1; /**< QOS VLAN */
|
|
|
|
uint64_t reserved_10_15 : 6;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
|
|
|
|
0 = no packet inspection (Uninterpreted)
|
|
|
|
1 = L2 parsing / skip to L2
|
|
|
|
2 = IP parsing / skip to L3
|
|
|
|
3 = PCI Raw (illegal for software to set) */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
|
|
|
|
apply to packets on PCI ports when a PKT_INST_HDR
|
|
|
|
is present. See section 7.2.7 - Legal Skip
|
|
|
|
Values for further details. */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2;
|
|
|
|
uint64_t reserved_10_15 : 6;
|
|
|
|
uint64_t qos_vlan : 1;
|
|
|
|
uint64_t qos_diff : 1;
|
|
|
|
uint64_t reserved_18_19 : 2;
|
|
|
|
uint64_t qos_wat : 4;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t grp_wat : 4;
|
|
|
|
uint64_t inst_hdr : 1;
|
|
|
|
uint64_t dyn_rs : 1;
|
|
|
|
uint64_t tag_inc : 2;
|
|
|
|
uint64_t rawdrp : 1;
|
|
|
|
uint64_t reserved_37_63 : 27;
|
|
|
|
#endif
|
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn30xx cn31xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_cfgx_cn38xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_37_63 : 27;
|
|
|
|
uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
|
|
|
|
Normally, IPD will never drop a packet that PIP
|
|
|
|
indicates is RAW.
|
|
|
|
0=never drop RAW packets based on RED algorithm
|
|
|
|
1=allow RAW packet drops based on RED algorithm */
|
|
|
|
uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
|
|
|
|
calculating mask tag hash */
|
|
|
|
uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
|
|
|
|
configuration. If DYN_RS is set then
|
|
|
|
PKT_INST_HDR[RS] is not used. When using 2-byte
|
|
|
|
instruction header words, either DYN_RS or
|
|
|
|
PIP_GBL_CTL[IGNRS] should be set. */
|
|
|
|
uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
|
|
|
|
(not for PCI prts, 32-35) */
|
|
|
|
uint64_t grp_wat : 4; /**< GRP Watcher enable */
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t qos : 3; /**< Default QOS level of the port */
|
|
|
|
uint64_t qos_wat : 4; /**< QOS Watcher enable */
|
|
|
|
uint64_t reserved_18_19 : 2;
|
|
|
|
uint64_t qos_diff : 1; /**< QOS Diffserv */
|
|
|
|
uint64_t qos_vlan : 1; /**< QOS VLAN */
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t crc_en : 1; /**< CRC Checking enabled (for ports 0-31 only) */
|
|
|
|
uint64_t reserved_10_11 : 2;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
|
|
|
|
0 = no packet inspection (Uninterpreted)
|
|
|
|
1 = L2 parsing / skip to L2
|
|
|
|
2 = IP parsing / skip to L3
|
|
|
|
3 = PCI Raw (illegal for software to set) */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
|
|
|
|
apply to packets on PCI ports when a PKT_INST_HDR
|
|
|
|
is present. See section 7.2.7 - Legal Skip
|
|
|
|
Values for further details. */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2;
|
|
|
|
uint64_t reserved_10_11 : 2;
|
|
|
|
uint64_t crc_en : 1;
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t qos_vlan : 1;
|
|
|
|
uint64_t qos_diff : 1;
|
|
|
|
uint64_t reserved_18_19 : 2;
|
|
|
|
uint64_t qos_wat : 4;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t grp_wat : 4;
|
|
|
|
uint64_t inst_hdr : 1;
|
|
|
|
uint64_t dyn_rs : 1;
|
|
|
|
uint64_t tag_inc : 2;
|
|
|
|
uint64_t rawdrp : 1;
|
|
|
|
uint64_t reserved_37_63 : 27;
|
|
|
|
#endif
|
|
|
|
} cn38xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn38xx cn38xxp2;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_cfgx_cn50xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_53_63 : 11;
|
|
|
|
uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
|
|
|
|
padding in the client data */
|
|
|
|
uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts */
|
|
|
|
uint64_t lenerr_en : 1; /**< L2 length error check enable
|
|
|
|
Frame was received with length error */
|
|
|
|
uint64_t maxerr_en : 1; /**< Max frame error check enable
|
|
|
|
Frame was received with length > max_length */
|
|
|
|
uint64_t minerr_en : 1; /**< Min frame error check enable
|
|
|
|
Frame was received with length < min_length */
|
|
|
|
uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t reserved_37_39 : 3;
|
|
|
|
uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
|
|
|
|
Normally, IPD will never drop a packet that PIP
|
|
|
|
indicates is RAW.
|
|
|
|
0=never drop RAW packets based on RED algorithm
|
|
|
|
1=allow RAW packet drops based on RED algorithm */
|
|
|
|
uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
|
|
|
|
calculating mask tag hash */
|
|
|
|
uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
|
|
|
|
configuration. If DYN_RS is set then
|
|
|
|
PKT_INST_HDR[RS] is not used. When using 2-byte
|
|
|
|
instruction header words, either DYN_RS or
|
|
|
|
PIP_GBL_CTL[IGNRS] should be set. */
|
|
|
|
uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
|
|
|
|
(not for PCI prts, 32-35) */
|
|
|
|
uint64_t grp_wat : 4; /**< GRP Watcher enable */
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t qos : 3; /**< Default QOS level of the port */
|
|
|
|
uint64_t qos_wat : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 0-3) */
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
|
|
|
|
if VLAN exists, it is used
|
|
|
|
else if IP exists, Diffserv is used
|
|
|
|
else the per port default is used
|
|
|
|
Watchers are still highest priority */
|
|
|
|
uint64_t qos_diff : 1; /**< QOS Diffserv */
|
|
|
|
uint64_t qos_vlan : 1; /**< QOS VLAN */
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t crc_en : 1; /**< CRC Checking enabled
|
|
|
|
(Disabled in 5020) */
|
|
|
|
uint64_t reserved_10_11 : 2;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
|
|
|
|
0 = no packet inspection (Uninterpreted)
|
|
|
|
1 = L2 parsing / skip to L2
|
|
|
|
2 = IP parsing / skip to L3
|
|
|
|
3 = PCI Raw (illegal for software to set) */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
|
|
|
|
apply to packets on PCI ports when a PKT_INST_HDR
|
|
|
|
is present. See section 7.2.7 - Legal Skip
|
|
|
|
Values for further details. */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2;
|
|
|
|
uint64_t reserved_10_11 : 2;
|
|
|
|
uint64_t crc_en : 1;
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t qos_vlan : 1;
|
|
|
|
uint64_t qos_diff : 1;
|
|
|
|
uint64_t qos_vod : 1;
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos_wat : 4;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t grp_wat : 4;
|
|
|
|
uint64_t inst_hdr : 1;
|
|
|
|
uint64_t dyn_rs : 1;
|
|
|
|
uint64_t tag_inc : 2;
|
|
|
|
uint64_t rawdrp : 1;
|
|
|
|
uint64_t reserved_37_39 : 3;
|
|
|
|
uint64_t qos_wat_47 : 4;
|
|
|
|
uint64_t grp_wat_47 : 4;
|
|
|
|
uint64_t minerr_en : 1;
|
|
|
|
uint64_t maxerr_en : 1;
|
|
|
|
uint64_t lenerr_en : 1;
|
|
|
|
uint64_t vlan_len : 1;
|
|
|
|
uint64_t pad_len : 1;
|
|
|
|
uint64_t reserved_53_63 : 11;
|
|
|
|
#endif
|
|
|
|
} cn50xx;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_53_63 : 11;
|
|
|
|
uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
|
|
|
|
padding in the client data */
|
|
|
|
uint64_t vlan_len : 1; /**< When set, disables the length check for DSA/VLAN
|
|
|
|
pkts */
|
|
|
|
uint64_t lenerr_en : 1; /**< L2 length error check enable
|
|
|
|
Frame was received with length error
|
|
|
|
Typically, this check will not be enabled for
|
|
|
|
incoming packets on the PCIe ports. */
|
|
|
|
uint64_t maxerr_en : 1; /**< Max frame error check enable
|
|
|
|
Frame was received with length > max_length */
|
|
|
|
uint64_t minerr_en : 1; /**< Min frame error check enable
|
|
|
|
Frame was received with length < min_length
|
|
|
|
Typically, this check will not be enabled for
|
|
|
|
incoming packets on the PCIe ports. */
|
|
|
|
uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t reserved_37_39 : 3;
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
|
|
|
|
Normally, IPD will never drop a packet that PIP
|
|
|
|
indicates is RAW.
|
|
|
|
0=never drop RAW packets based on RED algorithm
|
|
|
|
1=allow RAW packet drops based on RED algorithm */
|
|
|
|
uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
|
|
|
|
calculating mask tag hash */
|
|
|
|
uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
|
|
|
|
configuration. If DYN_RS is set then
|
|
|
|
PKT_INST_HDR[RS] is not used. When using 2-byte
|
|
|
|
instruction header words, either DYN_RS or
|
|
|
|
PIP_GBL_CTL[IGNRS] should be set. */
|
|
|
|
uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
|
2012-03-11 04:14:00 +00:00
|
|
|
(not for PCI ports, 32-35)
|
|
|
|
Must be zero in DSA mode */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t grp_wat : 4; /**< GRP Watcher enable */
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t hg_qos : 1; /**< When set, uses the HiGig priority bits as a
|
|
|
|
lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
|
|
|
|
to determine the QOS value
|
|
|
|
HG_QOS must not be set when HIGIG_EN=0 */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t qos : 3; /**< Default QOS level of the port */
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t qos_wat : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 0-3) */
|
|
|
|
uint64_t qos_vsel : 1; /**< Which QOS in PIP_QOS_VLAN to use
|
|
|
|
0 = PIP_QOS_VLAN[QOS]
|
|
|
|
1 = PIP_QOS_VLAN[QOS1] */
|
|
|
|
uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
|
|
|
|
if DSA/VLAN exists, it is used
|
|
|
|
else if IP exists, Diffserv is used
|
|
|
|
else the per port default is used
|
|
|
|
Watchers are still highest priority */
|
|
|
|
uint64_t qos_diff : 1; /**< QOS Diffserv */
|
|
|
|
uint64_t qos_vlan : 1; /**< QOS VLAN */
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t crc_en : 1; /**< CRC Checking enabled
|
|
|
|
(Disabled in 52xx) */
|
|
|
|
uint64_t higig_en : 1; /**< Enable HiGig parsing
|
|
|
|
When HIGIG_EN=1:
|
|
|
|
DSA_EN field below must be zero
|
|
|
|
SKIP field below is both Skip I size and the
|
|
|
|
size of the HiGig* header (12 or 16 bytes) */
|
|
|
|
uint64_t dsa_en : 1; /**< Enable DSA tag parsing
|
|
|
|
When DSA_EN=1:
|
|
|
|
HIGIG_EN field above must be zero
|
|
|
|
SKIP field below is size of DSA tag (4, 8, or
|
|
|
|
12 bytes) rather than the size of Skip I
|
|
|
|
total SKIP (Skip I + header + Skip II
|
|
|
|
must be zero
|
|
|
|
INST_HDR field above must be zero
|
|
|
|
MODE field below must be "skip to L2" */
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
|
|
|
|
0 = no packet inspection (Uninterpreted)
|
|
|
|
1 = L2 parsing / skip to L2
|
|
|
|
2 = IP parsing / skip to L3
|
|
|
|
3 = (illegal)
|
|
|
|
Must be 2 ("skip to L2") when in DSA mode. */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip : 7; /**< Optional Skip I amount for packets.
|
|
|
|
See section 7.2.7 - Legal Skip
|
|
|
|
Values for further details.
|
|
|
|
In DSA mode, indicates the DSA header length, not
|
|
|
|
Skip I size. (Must be 4,8,or 12)
|
|
|
|
In HIGIG mode, indicates both the Skip I size and
|
|
|
|
the HiGig header size (Must be 12 or 16). */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2;
|
|
|
|
uint64_t dsa_en : 1;
|
|
|
|
uint64_t higig_en : 1;
|
|
|
|
uint64_t crc_en : 1;
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t qos_vlan : 1;
|
|
|
|
uint64_t qos_diff : 1;
|
|
|
|
uint64_t qos_vod : 1;
|
|
|
|
uint64_t qos_vsel : 1;
|
|
|
|
uint64_t qos_wat : 4;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t hg_qos : 1;
|
|
|
|
uint64_t grp_wat : 4;
|
|
|
|
uint64_t inst_hdr : 1;
|
|
|
|
uint64_t dyn_rs : 1;
|
|
|
|
uint64_t tag_inc : 2;
|
|
|
|
uint64_t rawdrp : 1;
|
|
|
|
uint64_t reserved_37_39 : 3;
|
|
|
|
uint64_t qos_wat_47 : 4;
|
|
|
|
uint64_t grp_wat_47 : 4;
|
|
|
|
uint64_t minerr_en : 1;
|
|
|
|
uint64_t maxerr_en : 1;
|
|
|
|
uint64_t lenerr_en : 1;
|
|
|
|
uint64_t vlan_len : 1;
|
|
|
|
uint64_t pad_len : 1;
|
|
|
|
uint64_t reserved_53_63 : 11;
|
|
|
|
#endif
|
|
|
|
} cn52xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx cn52xxp1;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx cn56xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn50xx cn56xxp1;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn58xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_37_63 : 27;
|
|
|
|
uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
|
|
|
|
Normally, IPD will never drop a packet that PIP
|
|
|
|
indicates is RAW.
|
|
|
|
0=never drop RAW packets based on RED algorithm
|
|
|
|
1=allow RAW packet drops based on RED algorithm */
|
|
|
|
uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
|
|
|
|
calculating mask tag hash */
|
|
|
|
uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
|
|
|
|
configuration. If DYN_RS is set then
|
|
|
|
PKT_INST_HDR[RS] is not used. When using 2-byte
|
|
|
|
instruction header words, either DYN_RS or
|
|
|
|
PIP_GBL_CTL[IGNRS] should be set. */
|
|
|
|
uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
|
|
|
|
(not for PCI prts, 32-35) */
|
|
|
|
uint64_t grp_wat : 4; /**< GRP Watcher enable */
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t qos : 3; /**< Default QOS level of the port */
|
|
|
|
uint64_t qos_wat : 4; /**< QOS Watcher enable */
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
|
2010-11-28 06:20:41 +00:00
|
|
|
if VLAN exists, it is used
|
|
|
|
else if IP exists, Diffserv is used
|
|
|
|
else the per port default is used
|
|
|
|
Watchers are still highest priority */
|
|
|
|
uint64_t qos_diff : 1; /**< QOS Diffserv */
|
|
|
|
uint64_t qos_vlan : 1; /**< QOS VLAN */
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t crc_en : 1; /**< CRC Checking enabled (for ports 0-31 only) */
|
|
|
|
uint64_t reserved_10_11 : 2;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
|
|
|
|
0 = no packet inspection (Uninterpreted)
|
|
|
|
1 = L2 parsing / skip to L2
|
|
|
|
2 = IP parsing / skip to L3
|
|
|
|
3 = PCI Raw (illegal for software to set) */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not
|
|
|
|
apply to packets on PCI ports when a PKT_INST_HDR
|
|
|
|
is present. See section 7.2.7 - Legal Skip
|
|
|
|
Values for further details. */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2;
|
|
|
|
uint64_t reserved_10_11 : 2;
|
|
|
|
uint64_t crc_en : 1;
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t qos_vlan : 1;
|
|
|
|
uint64_t qos_diff : 1;
|
|
|
|
uint64_t qos_vod : 1;
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos_wat : 4;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_27_27 : 1;
|
|
|
|
uint64_t grp_wat : 4;
|
|
|
|
uint64_t inst_hdr : 1;
|
|
|
|
uint64_t dyn_rs : 1;
|
|
|
|
uint64_t tag_inc : 2;
|
|
|
|
uint64_t rawdrp : 1;
|
|
|
|
uint64_t reserved_37_63 : 27;
|
|
|
|
#endif
|
|
|
|
} cn58xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn58xx cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx cn61xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx cn63xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx cn63xxp1;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx cn66xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn68xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_55_63 : 9;
|
|
|
|
uint64_t ih_pri : 1; /**< Use the PRI/QOS field in the instruction header
|
|
|
|
as the PRIORITY in BPID calculations. */
|
|
|
|
uint64_t len_chk_sel : 1; /**< Selects which PIP_FRM_LEN_CHK register is used
|
|
|
|
for this port-kind for MINERR and MAXERR checks.
|
|
|
|
LEN_CHK_SEL=0, use PIP_FRM_LEN_CHK0
|
|
|
|
LEN_CHK_SEL=1, use PIP_FRM_LEN_CHK1 */
|
|
|
|
uint64_t pad_len : 1; /**< When set, disables the length check for pkts with
|
|
|
|
padding in the client data */
|
|
|
|
uint64_t vlan_len : 1; /**< When set, disables the length check for DSA/VLAN
|
|
|
|
pkts */
|
|
|
|
uint64_t lenerr_en : 1; /**< L2 length error check enable
|
|
|
|
Frame was received with length error
|
|
|
|
Typically, this check will not be enabled for
|
|
|
|
incoming packets on the DPI rings
|
|
|
|
because the CRC bytes may not normally be
|
|
|
|
present. */
|
|
|
|
uint64_t maxerr_en : 1; /**< Max frame error check enable
|
|
|
|
Frame was received with length > max_length
|
|
|
|
max_length is defined by PIP_FRM_LEN_CHK[MAXLEN] */
|
|
|
|
uint64_t minerr_en : 1; /**< Min frame error check enable
|
|
|
|
Frame was received with length < min_length
|
|
|
|
Typically, this check will not be enabled for
|
|
|
|
incoming packets on the DPI rings
|
|
|
|
because the CRC bytes may not normally be
|
|
|
|
present.
|
|
|
|
min_length is defined by PIP_FRM_LEN_CHK[MINLEN] */
|
|
|
|
uint64_t grp_wat_47 : 4; /**< GRP Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t qos_wat_47 : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 4-7) */
|
|
|
|
uint64_t reserved_37_39 : 3;
|
|
|
|
uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet.
|
|
|
|
Normally, IPD will never drop a packet in which
|
|
|
|
PKT_INST_HDR[R] is set.
|
|
|
|
0=never drop RAW packets based on RED algorithm
|
|
|
|
1=allow RAW packet drops based on RED algorithm */
|
|
|
|
uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when
|
|
|
|
calculating mask tag hash */
|
|
|
|
uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size and
|
|
|
|
configuration. If DYN_RS is set then
|
|
|
|
PKT_INST_HDR[RS] is not used. When using 2-byte
|
|
|
|
instruction header words, either DYN_RS or
|
|
|
|
PIP_GBL_CTL[IGNRS] should be set. */
|
|
|
|
uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets
|
|
|
|
Normally INST_HDR should be set for packets that
|
|
|
|
include a PKT_INST_HDR prepended by DPI hardware.
|
|
|
|
(If SLI_PORTx_PKIND[RPK_ENB]=0, for packets that
|
|
|
|
include a PKT_INST_HDR prepended by DPI,
|
|
|
|
PIP internally sets INST_HDR before using it.)
|
|
|
|
Must be zero in DSA mode */
|
|
|
|
uint64_t grp_wat : 4; /**< GRP Watcher enable */
|
|
|
|
uint64_t hg_qos : 1; /**< When set, uses the HiGig priority bits as a
|
|
|
|
lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
|
|
|
|
to determine the QOS value
|
|
|
|
HG_QOS must not be set when HIGIG_EN=0 */
|
|
|
|
uint64_t qos : 3; /**< Default QOS level of the port */
|
|
|
|
uint64_t qos_wat : 4; /**< QOS Watcher enable
|
|
|
|
(Watchers 0-3) */
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv
|
|
|
|
if DSA/VLAN exists, it is used
|
|
|
|
else if IP exists, Diffserv is used
|
|
|
|
else the per port default is used
|
|
|
|
Watchers are still highest priority */
|
|
|
|
uint64_t qos_diff : 1; /**< QOS Diffserv */
|
|
|
|
uint64_t qos_vlan : 1; /**< QOS VLAN */
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t crc_en : 1; /**< CRC Checking enabled */
|
|
|
|
uint64_t higig_en : 1; /**< Enable HiGig parsing
|
|
|
|
Normally HIGIG_EN should be clear for packets that
|
|
|
|
include a PKT_INST_HDR prepended by DPI hardware.
|
|
|
|
(If SLI_PORTx_PKIND[RPK_ENB]=0, for packets that
|
|
|
|
include a PKT_INST_HDR prepended by DPI,
|
|
|
|
PIP internally clears HIGIG_EN before using it.)
|
|
|
|
Should not be set for ports in which PTP_MODE=1
|
|
|
|
When HIGIG_EN=1:
|
|
|
|
DSA_EN field below must be zero
|
|
|
|
PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
|
|
|
|
SKIP field below is both Skip I size and the
|
|
|
|
size of the HiGig* header (12 or 16 bytes) */
|
|
|
|
uint64_t dsa_en : 1; /**< Enable DSA tag parsing
|
|
|
|
Should not be set for ports in which PTP_MODE=1
|
|
|
|
When DSA_EN=1:
|
|
|
|
HIGIG_EN field above must be zero
|
|
|
|
SKIP field below is size of DSA tag (4, 8, or
|
|
|
|
12 bytes) rather than the size of Skip I
|
|
|
|
total SKIP (Skip I + header + Skip II
|
|
|
|
must be zero
|
|
|
|
INST_HDR field above must be zero
|
|
|
|
PIP_PRT_CFGB[ALT_SKP_EN] must be zero.
|
|
|
|
For DPI rings, DPI hardware must not prepend
|
|
|
|
a PKT_INST_HDR when DSA_EN=1.
|
|
|
|
MODE field below must be "skip to L2" */
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode
|
|
|
|
0 = no packet inspection (Uninterpreted)
|
|
|
|
1 = L2 parsing / skip to L2
|
|
|
|
2 = IP parsing / skip to L3
|
|
|
|
3 = (illegal)
|
|
|
|
Must be 2 ("skip to L2") when in DSA mode. */
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
uint64_t skip : 7; /**< Optional Skip I amount for packets.
|
|
|
|
Should normally be zero for packets on
|
|
|
|
DPI rings when a PKT_INST_HDR is prepended by DPI
|
|
|
|
hardware.
|
|
|
|
See PIP_PRT_CFGB[ALT_SKP*] and PIP_ALT_SKIP_CFG.
|
|
|
|
See HRM sections "Parse Mode and Skip Length
|
|
|
|
Selection" and "Legal Skip Values"
|
|
|
|
for further details.
|
|
|
|
In DSA mode, indicates the DSA header length, not
|
|
|
|
Skip I size. (Must be 4,8,or 12)
|
|
|
|
In HIGIG mode, indicates both the Skip I size and
|
|
|
|
the HiGig header size (Must be 12 or 16).
|
|
|
|
If PTP_MODE, the 8B timestamp is prepended to the
|
|
|
|
packet. SKIP should be increased by 8 to
|
|
|
|
compensate for the additional timestamp field. */
|
|
|
|
#else
|
|
|
|
uint64_t skip : 7;
|
|
|
|
uint64_t reserved_7_7 : 1;
|
|
|
|
cvmx_pip_port_parse_mode_t mode : 2;
|
|
|
|
uint64_t dsa_en : 1;
|
|
|
|
uint64_t higig_en : 1;
|
|
|
|
uint64_t crc_en : 1;
|
|
|
|
uint64_t reserved_13_15 : 3;
|
|
|
|
uint64_t qos_vlan : 1;
|
|
|
|
uint64_t qos_diff : 1;
|
|
|
|
uint64_t qos_vod : 1;
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos_wat : 4;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t hg_qos : 1;
|
|
|
|
uint64_t grp_wat : 4;
|
|
|
|
uint64_t inst_hdr : 1;
|
|
|
|
uint64_t dyn_rs : 1;
|
|
|
|
uint64_t tag_inc : 2;
|
|
|
|
uint64_t rawdrp : 1;
|
|
|
|
uint64_t reserved_37_39 : 3;
|
|
|
|
uint64_t qos_wat_47 : 4;
|
|
|
|
uint64_t grp_wat_47 : 4;
|
|
|
|
uint64_t minerr_en : 1;
|
|
|
|
uint64_t maxerr_en : 1;
|
|
|
|
uint64_t lenerr_en : 1;
|
|
|
|
uint64_t vlan_len : 1;
|
|
|
|
uint64_t pad_len : 1;
|
|
|
|
uint64_t len_chk_sel : 1;
|
|
|
|
uint64_t ih_pri : 1;
|
|
|
|
uint64_t reserved_55_63 : 9;
|
|
|
|
#endif
|
|
|
|
} cn68xx;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn68xx cn68xxp1;
|
|
|
|
struct cvmx_pip_prt_cfgx_cn52xx cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_prt_cfgx cvmx_pip_prt_cfgx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_prt_cfgb#
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* PIP_PRT_CFGB* does not exist prior to pass 1.2.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_prt_cfgbx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_prt_cfgbx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_39_63 : 25;
|
|
|
|
uint64_t alt_skp_sel : 2; /**< Alternate skip selector
|
|
|
|
When enabled (ALT_SKP_EN), selects which of the
|
|
|
|
four PIP_ALT_SKIP_CFGx to use with the packets
|
|
|
|
arriving on the port-kind. */
|
|
|
|
uint64_t alt_skp_en : 1; /**< Enable the alternate skip selector
|
|
|
|
When enabled, the HW is able to recompute the
|
|
|
|
SKIP I value based on the packet contents.
|
|
|
|
Up to two of the initial 64 bits of the header
|
|
|
|
are used along with four PIP_ALT_SKIP_CFGx to
|
|
|
|
determine the updated SKIP I value.
|
|
|
|
The bits of the packet used should be present in
|
|
|
|
all packets.
|
|
|
|
PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
|
|
|
|
when ALT_SKP_EN is set.
|
|
|
|
ALT_SKP_EN must not be set for DPI ports (32-35)
|
|
|
|
when a PKT_INST_HDR is present.
|
|
|
|
ALT_SKP_EN should not be enabled for ports which
|
|
|
|
have GMX_RX_FRM_CTL[PTP_MODE] set as the timestamp
|
|
|
|
will be prepended onto the initial 64 bits of the
|
|
|
|
packet. */
|
|
|
|
uint64_t reserved_35_35 : 1;
|
|
|
|
uint64_t bsel_num : 2; /**< Which of the 4 bit select extractors to use
|
|
|
|
(Alias to PIP_PRT_CFG) */
|
|
|
|
uint64_t bsel_en : 1; /**< Enable to turn on/off use of bit select extractor
|
|
|
|
(Alias to PIP_PRT_CFG) */
|
|
|
|
uint64_t reserved_24_31 : 8;
|
|
|
|
uint64_t base : 8; /**< Base priority address into the table */
|
|
|
|
uint64_t reserved_6_15 : 10;
|
|
|
|
uint64_t bpid : 6; /**< Default BPID to use for packets on this port-kind. */
|
|
|
|
#else
|
|
|
|
uint64_t bpid : 6;
|
|
|
|
uint64_t reserved_6_15 : 10;
|
|
|
|
uint64_t base : 8;
|
|
|
|
uint64_t reserved_24_31 : 8;
|
|
|
|
uint64_t bsel_en : 1;
|
|
|
|
uint64_t bsel_num : 2;
|
|
|
|
uint64_t reserved_35_35 : 1;
|
|
|
|
uint64_t alt_skp_en : 1;
|
|
|
|
uint64_t alt_skp_sel : 2;
|
|
|
|
uint64_t reserved_39_63 : 25;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_prt_cfgbx_cn61xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_39_63 : 25;
|
|
|
|
uint64_t alt_skp_sel : 2; /**< Alternate skip selector
|
|
|
|
When enabled (ALT_SKP_EN), selects which of the
|
|
|
|
four PIP_ALT_SKIP_CFGx to use with the packets
|
|
|
|
arriving on the port-kind. */
|
|
|
|
uint64_t alt_skp_en : 1; /**< Enable the alternate skip selector
|
|
|
|
When enabled, the HW is able to recompute the
|
|
|
|
SKIP I value based on the packet contents.
|
|
|
|
Up to two of the initial 64 bits of the header
|
|
|
|
are used along with four PIP_ALT_SKIP_CFGx to
|
|
|
|
determine the updated SKIP I value.
|
|
|
|
The bits of the packet used should be present in
|
|
|
|
all packets.
|
|
|
|
PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
|
|
|
|
when ALT_SKP_EN is set.
|
|
|
|
ALT_SKP_EN must not be set for DPI ports (32-35)
|
|
|
|
when a PKT_INST_HDR is present.
|
|
|
|
ALT_SKP_EN should not be enabled for ports which
|
|
|
|
have GMX_RX_FRM_CTL[PTP_MODE] set as the timestamp
|
|
|
|
will be prepended onto the initial 64 bits of the
|
|
|
|
packet. */
|
|
|
|
uint64_t reserved_35_35 : 1;
|
|
|
|
uint64_t bsel_num : 2; /**< Which of the 4 bit select extractors to use
|
|
|
|
(Alias to PIP_PRT_CFG) */
|
|
|
|
uint64_t bsel_en : 1; /**< Enable to turn on/off use of bit select extractor
|
|
|
|
(Alias to PIP_PRT_CFG) */
|
|
|
|
uint64_t reserved_0_31 : 32;
|
|
|
|
#else
|
|
|
|
uint64_t reserved_0_31 : 32;
|
|
|
|
uint64_t bsel_en : 1;
|
|
|
|
uint64_t bsel_num : 2;
|
|
|
|
uint64_t reserved_35_35 : 1;
|
|
|
|
uint64_t alt_skp_en : 1;
|
|
|
|
uint64_t alt_skp_sel : 2;
|
|
|
|
uint64_t reserved_39_63 : 25;
|
|
|
|
#endif
|
|
|
|
} cn61xx;
|
|
|
|
struct cvmx_pip_prt_cfgbx_cn66xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_39_63 : 25;
|
|
|
|
uint64_t alt_skp_sel : 2; /**< Alternate skip selector
|
|
|
|
When enabled (ALT_SKP_EN), selects which of the
|
|
|
|
four PIP_ALT_SKIP_CFGx to use with the packets
|
|
|
|
arriving on the port-kind. */
|
|
|
|
uint64_t alt_skp_en : 1; /**< Enable the alternate skip selector
|
|
|
|
When enabled, the HW is able to recompute the
|
|
|
|
SKIP I value based on the packet contents.
|
|
|
|
Up to two of the initial 64 bits of the header
|
|
|
|
are used along with four PIP_ALT_SKIP_CFGx to
|
|
|
|
determine the updated SKIP I value.
|
|
|
|
The bits of the packet used should be present in
|
|
|
|
all packets.
|
|
|
|
PIP_PRT_CFG[DSA_EN,HIGIG_EN] must be disabled
|
|
|
|
when ALT_SKP_EN is set.
|
|
|
|
ALT_SKP_EN must not be set for DPI ports (32-35)
|
|
|
|
when a PKT_INST_HDR is present. */
|
|
|
|
uint64_t reserved_0_35 : 36;
|
|
|
|
#else
|
|
|
|
uint64_t reserved_0_35 : 36;
|
|
|
|
uint64_t alt_skp_en : 1;
|
|
|
|
uint64_t alt_skp_sel : 2;
|
|
|
|
uint64_t reserved_39_63 : 25;
|
|
|
|
#endif
|
|
|
|
} cn66xx;
|
|
|
|
struct cvmx_pip_prt_cfgbx_s cn68xx;
|
|
|
|
struct cvmx_pip_prt_cfgbx_cn68xxp1 {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_24_63 : 40;
|
|
|
|
uint64_t base : 8; /**< Base priority address into the table */
|
|
|
|
uint64_t reserved_6_15 : 10;
|
|
|
|
uint64_t bpid : 6; /**< Default BPID to use for packets on this port-kind. */
|
|
|
|
#else
|
|
|
|
uint64_t bpid : 6;
|
|
|
|
uint64_t reserved_6_15 : 10;
|
|
|
|
uint64_t base : 8;
|
|
|
|
uint64_t reserved_24_63 : 40;
|
|
|
|
#endif
|
|
|
|
} cn68xxp1;
|
|
|
|
struct cvmx_pip_prt_cfgbx_cn61xx cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_prt_cfgbx cvmx_pip_prt_cfgbx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_prt_tag#
|
|
|
|
*
|
|
|
|
* PIP_PRT_TAGX = Per port config information
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_prt_tagx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_tagx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_54_63 : 10;
|
|
|
|
uint64_t portadd_en : 1; /**< Enables PIP to optionally increment the incoming
|
|
|
|
port from the MACs based on port-kind
|
|
|
|
configuration and packet contents. */
|
|
|
|
uint64_t inc_hwchk : 1; /**< Include the HW_checksum into WORD0 of the WQE
|
|
|
|
instead of the L4PTR. This mode will be
|
|
|
|
deprecated in future products. */
|
|
|
|
uint64_t reserved_50_51 : 2;
|
|
|
|
uint64_t grptagbase_msb : 2; /**< Most significant 2 bits of the GRPTAGBASE value. */
|
|
|
|
uint64_t reserved_46_47 : 2;
|
|
|
|
uint64_t grptagmask_msb : 2; /**< Most significant 2 bits of the GRPTAGMASK value.
|
|
|
|
group when GRPTAG is set. */
|
|
|
|
uint64_t reserved_42_43 : 2;
|
|
|
|
uint64_t grp_msb : 2; /**< Most significant 2 bits of the 6-bit value
|
|
|
|
indicating the group to schedule to. */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits
|
|
|
|
when GRPTAG is set. */
|
|
|
|
uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing
|
|
|
|
group when GRPTAG is set. */
|
|
|
|
uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute
|
|
|
|
the group in the work queue entry
|
|
|
|
GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
|
|
|
|
uint64_t grptag_mskip : 1; /**< When set, GRPTAG will be used regardless if the
|
|
|
|
packet IS_IP. */
|
|
|
|
uint64_t tag_mode : 2; /**< Which tag algorithm to use
|
|
|
|
0 = always use tuple tag algorithm
|
|
|
|
1 = always use mask tag algorithm
|
|
|
|
2 = if packet is IP, use tuple else use mask
|
|
|
|
3 = tuple XOR mask */
|
|
|
|
uint64_t inc_vs : 2; /**< determines the DSA/VLAN ID (VID) to be included in
|
|
|
|
tuple tag when VLAN stacking is detected
|
|
|
|
0 = do not include VID in tuple tag generation
|
|
|
|
1 = include VID (VLAN0) in hash
|
|
|
|
2 = include VID (VLAN1) in hash
|
|
|
|
3 = include VID ([VLAN0,VLAN1]) in hash */
|
|
|
|
uint64_t inc_vlan : 1; /**< when set, the DSA/VLAN ID is included in tuple tag
|
|
|
|
when VLAN stacking is not detected
|
|
|
|
0 = do not include VID in tuple tag generation
|
|
|
|
1 = include VID in hash */
|
|
|
|
uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */
|
|
|
|
uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
|
|
|
|
included in tuple tag for IPv6 packets */
|
|
|
|
uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
|
|
|
|
included in tuple tag for IPv4 */
|
|
|
|
uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
|
|
|
|
included in tuple tag for IPv6 packets */
|
|
|
|
uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
|
|
|
|
included in tuple tag for IPv4 */
|
|
|
|
uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple
|
|
|
|
tag hash */
|
|
|
|
cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6)
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4)
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */
|
|
|
|
#else
|
|
|
|
uint64_t grp : 4;
|
|
|
|
cvmx_pow_tag_type_t non_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t ip4_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t ip6_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t tcp4_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t tcp6_tag_type : 2;
|
|
|
|
uint64_t ip4_src_flag : 1;
|
|
|
|
uint64_t ip6_src_flag : 1;
|
|
|
|
uint64_t ip4_dst_flag : 1;
|
|
|
|
uint64_t ip6_dst_flag : 1;
|
|
|
|
uint64_t ip4_pctl_flag : 1;
|
|
|
|
uint64_t ip6_nxth_flag : 1;
|
|
|
|
uint64_t ip4_sprt_flag : 1;
|
|
|
|
uint64_t ip6_sprt_flag : 1;
|
|
|
|
uint64_t ip4_dprt_flag : 1;
|
|
|
|
uint64_t ip6_dprt_flag : 1;
|
|
|
|
uint64_t inc_prt_flag : 1;
|
|
|
|
uint64_t inc_vlan : 1;
|
|
|
|
uint64_t inc_vs : 2;
|
|
|
|
uint64_t tag_mode : 2;
|
|
|
|
uint64_t grptag_mskip : 1;
|
|
|
|
uint64_t grptag : 1;
|
|
|
|
uint64_t grptagmask : 4;
|
|
|
|
uint64_t grptagbase : 4;
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t grp_msb : 2;
|
|
|
|
uint64_t reserved_42_43 : 2;
|
|
|
|
uint64_t grptagmask_msb : 2;
|
|
|
|
uint64_t reserved_46_47 : 2;
|
|
|
|
uint64_t grptagbase_msb : 2;
|
|
|
|
uint64_t reserved_50_51 : 2;
|
|
|
|
uint64_t inc_hwchk : 1;
|
|
|
|
uint64_t portadd_en : 1;
|
|
|
|
uint64_t reserved_54_63 : 10;
|
2010-11-28 06:20:41 +00:00
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_tagx_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_40_63 : 24;
|
|
|
|
uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits
|
|
|
|
when GRPTAG is set. */
|
|
|
|
uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing
|
|
|
|
group when GRPTAG is set. */
|
|
|
|
uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute
|
|
|
|
the group in the work queue entry
|
|
|
|
GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
|
|
|
|
uint64_t reserved_30_30 : 1;
|
|
|
|
uint64_t tag_mode : 2; /**< Which tag algorithm to use
|
|
|
|
0 = always use tuple tag algorithm
|
|
|
|
1 = always use mask tag algorithm
|
|
|
|
2 = if packet is IP, use tuple else use mask
|
|
|
|
3 = tuple XOR mask */
|
|
|
|
uint64_t inc_vs : 2; /**< determines the VLAN ID (VID) to be included in
|
|
|
|
tuple tag when VLAN stacking is detected
|
|
|
|
0 = do not include VID in tuple tag generation
|
|
|
|
1 = include VID (VLAN0) in hash
|
|
|
|
2 = include VID (VLAN1) in hash
|
|
|
|
3 = include VID ([VLAN0,VLAN1]) in hash */
|
|
|
|
uint64_t inc_vlan : 1; /**< when set, the VLAN ID is included in tuple tag
|
|
|
|
when VLAN stacking is not detected
|
|
|
|
0 = do not include VID in tuple tag generation
|
|
|
|
1 = include VID in hash */
|
|
|
|
uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */
|
|
|
|
uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
|
|
|
|
included in tuple tag for IPv6 packets */
|
|
|
|
uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
|
|
|
|
included in tuple tag for IPv4 */
|
|
|
|
uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
|
|
|
|
included in tuple tag for IPv6 packets */
|
|
|
|
uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
|
|
|
|
included in tuple tag for IPv4 */
|
|
|
|
uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple
|
|
|
|
tag hash */
|
|
|
|
cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6)
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4)
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */
|
|
|
|
#else
|
|
|
|
uint64_t grp : 4;
|
|
|
|
cvmx_pow_tag_type_t non_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t ip4_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t ip6_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t tcp4_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t tcp6_tag_type : 2;
|
|
|
|
uint64_t ip4_src_flag : 1;
|
|
|
|
uint64_t ip6_src_flag : 1;
|
|
|
|
uint64_t ip4_dst_flag : 1;
|
|
|
|
uint64_t ip6_dst_flag : 1;
|
|
|
|
uint64_t ip4_pctl_flag : 1;
|
|
|
|
uint64_t ip6_nxth_flag : 1;
|
|
|
|
uint64_t ip4_sprt_flag : 1;
|
|
|
|
uint64_t ip6_sprt_flag : 1;
|
|
|
|
uint64_t ip4_dprt_flag : 1;
|
|
|
|
uint64_t ip6_dprt_flag : 1;
|
|
|
|
uint64_t inc_prt_flag : 1;
|
|
|
|
uint64_t inc_vlan : 1;
|
|
|
|
uint64_t inc_vs : 2;
|
|
|
|
uint64_t tag_mode : 2;
|
|
|
|
uint64_t reserved_30_30 : 1;
|
|
|
|
uint64_t grptag : 1;
|
|
|
|
uint64_t grptagmask : 4;
|
|
|
|
uint64_t grptagbase : 4;
|
|
|
|
uint64_t reserved_40_63 : 24;
|
|
|
|
#endif
|
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn30xx cn38xxp2;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_tagx_cn50xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_40_63 : 24;
|
|
|
|
uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits
|
|
|
|
when GRPTAG is set. */
|
|
|
|
uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing
|
|
|
|
group when GRPTAG is set. */
|
|
|
|
uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute
|
|
|
|
the group in the work queue entry
|
|
|
|
GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
|
|
|
|
uint64_t grptag_mskip : 1; /**< When set, GRPTAG will be used regardless if the
|
|
|
|
packet IS_IP. */
|
|
|
|
uint64_t tag_mode : 2; /**< Which tag algorithm to use
|
|
|
|
0 = always use tuple tag algorithm
|
|
|
|
1 = always use mask tag algorithm
|
|
|
|
2 = if packet is IP, use tuple else use mask
|
|
|
|
3 = tuple XOR mask */
|
|
|
|
uint64_t inc_vs : 2; /**< determines the VLAN ID (VID) to be included in
|
|
|
|
tuple tag when VLAN stacking is detected
|
|
|
|
0 = do not include VID in tuple tag generation
|
|
|
|
1 = include VID (VLAN0) in hash
|
|
|
|
2 = include VID (VLAN1) in hash
|
|
|
|
3 = include VID ([VLAN0,VLAN1]) in hash */
|
|
|
|
uint64_t inc_vlan : 1; /**< when set, the VLAN ID is included in tuple tag
|
|
|
|
when VLAN stacking is not detected
|
|
|
|
0 = do not include VID in tuple tag generation
|
|
|
|
1 = include VID in hash */
|
|
|
|
uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */
|
|
|
|
uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
|
|
|
|
included in tuple tag for IPv6 packets */
|
|
|
|
uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is
|
|
|
|
included in tuple tag for IPv4 */
|
|
|
|
uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
|
|
|
|
included in tuple tag for IPv6 packets */
|
|
|
|
uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is
|
|
|
|
included in tuple tag for IPv4 */
|
|
|
|
uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple
|
|
|
|
tag hash */
|
|
|
|
uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple
|
|
|
|
tag hash */
|
|
|
|
cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6)
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4)
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type
|
|
|
|
0 = ordered tags
|
|
|
|
1 = atomic tags
|
|
|
|
2 = Null tags */
|
|
|
|
uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */
|
|
|
|
#else
|
|
|
|
uint64_t grp : 4;
|
|
|
|
cvmx_pow_tag_type_t non_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t ip4_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t ip6_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t tcp4_tag_type : 2;
|
|
|
|
cvmx_pow_tag_type_t tcp6_tag_type : 2;
|
|
|
|
uint64_t ip4_src_flag : 1;
|
|
|
|
uint64_t ip6_src_flag : 1;
|
|
|
|
uint64_t ip4_dst_flag : 1;
|
|
|
|
uint64_t ip6_dst_flag : 1;
|
|
|
|
uint64_t ip4_pctl_flag : 1;
|
|
|
|
uint64_t ip6_nxth_flag : 1;
|
|
|
|
uint64_t ip4_sprt_flag : 1;
|
|
|
|
uint64_t ip6_sprt_flag : 1;
|
|
|
|
uint64_t ip4_dprt_flag : 1;
|
|
|
|
uint64_t ip6_dprt_flag : 1;
|
|
|
|
uint64_t inc_prt_flag : 1;
|
|
|
|
uint64_t inc_vlan : 1;
|
|
|
|
uint64_t inc_vs : 2;
|
|
|
|
uint64_t tag_mode : 2;
|
|
|
|
uint64_t grptag_mskip : 1;
|
|
|
|
uint64_t grptag : 1;
|
|
|
|
uint64_t grptagmask : 4;
|
|
|
|
uint64_t grptagbase : 4;
|
|
|
|
uint64_t reserved_40_63 : 24;
|
|
|
|
#endif
|
|
|
|
} cn50xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn52xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn52xxp1;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn56xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn56xxp1;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_prt_tagx_cn30xx cn58xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn30xx cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn61xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn63xx;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn63xxp1;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cn66xx;
|
|
|
|
struct cvmx_pip_prt_tagx_s cn68xx;
|
|
|
|
struct cvmx_pip_prt_tagx_s cn68xxp1;
|
|
|
|
struct cvmx_pip_prt_tagx_cn50xx cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_prt_tagx cvmx_pip_prt_tagx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_qos_diff#
|
|
|
|
*
|
|
|
|
* PIP_QOS_DIFFX = QOS Diffserv Tables
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_qos_diffx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_diffx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_3_63 : 61;
|
|
|
|
uint64_t qos : 3; /**< Diffserv QOS level */
|
|
|
|
#else
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_3_63 : 61;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn30xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn31xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn38xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn50xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn52xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn56xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn58xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_diffx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_qos_diffx_s cn63xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_diffx_s cn66xx;
|
|
|
|
struct cvmx_pip_qos_diffx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_qos_diffx cvmx_pip_qos_diffx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_qos_vlan#
|
|
|
|
*
|
|
|
|
* PIP_QOS_VLANX = QOS VLAN Tables
|
|
|
|
*
|
|
|
|
* If the PIP indentifies a packet is DSA/VLAN tagged, then the QOS
|
|
|
|
* can be set based on the DSA/VLAN user priority. These eight register
|
|
|
|
* comprise the QOS values for all DSA/VLAN user priority values.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_qos_vlanx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_vlanx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_7_63 : 57;
|
|
|
|
uint64_t qos1 : 3; /**< DSA/VLAN QOS level
|
|
|
|
Selected when PIP_PRT_CFGx[QOS_VSEL] = 1 */
|
|
|
|
uint64_t reserved_3_3 : 1;
|
|
|
|
uint64_t qos : 3; /**< DSA/VLAN QOS level
|
|
|
|
Selected when PIP_PRT_CFGx[QOS_VSEL] = 0 */
|
|
|
|
#else
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_3_3 : 1;
|
|
|
|
uint64_t qos1 : 3;
|
|
|
|
uint64_t reserved_7_63 : 57;
|
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_3_63 : 61;
|
|
|
|
uint64_t qos : 3; /**< VLAN QOS level */
|
|
|
|
#else
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_3_63 : 61;
|
|
|
|
#endif
|
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx cn38xxp2;
|
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx cn50xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_s cn52xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_qos_vlanx_s cn56xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx cn56xxp1;
|
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx cn58xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_cn30xx cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_vlanx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_qos_vlanx_s cn63xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_vlanx_s cn66xx;
|
|
|
|
struct cvmx_pip_qos_vlanx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_qos_vlanx cvmx_pip_qos_vlanx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_qos_watch#
|
|
|
|
*
|
|
|
|
* PIP_QOS_WATCHX = QOS Watcher Tables
|
|
|
|
*
|
|
|
|
* Sets up the Configuration CSRs for the four QOS Watchers.
|
|
|
|
* Each Watcher can be set to look for a specific protocol,
|
|
|
|
* TCP/UDP destination port, or Ethertype to override the
|
|
|
|
* default QOS value.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_qos_watchx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_watchx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t mask : 16; /**< Mask off a range of values */
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t reserved_30_31 : 2;
|
|
|
|
uint64_t grp : 6; /**< The GRP number of the watcher */
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_23_23 : 1;
|
|
|
|
uint64_t qos : 3; /**< The QOS level of the watcher */
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
cvmx_pip_qos_watch_types match_type : 3; /**< The field for the watcher match against
|
|
|
|
0 = disable across all ports
|
|
|
|
1 = protocol (ipv4)
|
|
|
|
= next_header (ipv6)
|
|
|
|
2 = TCP destination port
|
|
|
|
3 = UDP destination port
|
|
|
|
4 = Ether type
|
|
|
|
5-7 = Reserved */
|
|
|
|
uint64_t match_value : 16; /**< The value to watch for */
|
|
|
|
#else
|
|
|
|
uint64_t match_value : 16;
|
|
|
|
cvmx_pip_qos_watch_types match_type : 3;
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_23_23 : 1;
|
2012-03-11 04:14:00 +00:00
|
|
|
uint64_t grp : 6;
|
|
|
|
uint64_t reserved_30_31 : 2;
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t mask : 16;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} s;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_watchx_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t mask : 16; /**< Mask off a range of values */
|
|
|
|
uint64_t reserved_28_31 : 4;
|
|
|
|
uint64_t grp : 4; /**< The GRP number of the watcher */
|
|
|
|
uint64_t reserved_23_23 : 1;
|
|
|
|
uint64_t qos : 3; /**< The QOS level of the watcher */
|
|
|
|
uint64_t reserved_18_19 : 2;
|
|
|
|
cvmx_pip_qos_watch_types match_type : 2; /**< The field for the watcher match against
|
|
|
|
0 = disable across all ports
|
|
|
|
1 = protocol (ipv4)
|
|
|
|
= next_header (ipv6)
|
|
|
|
2 = TCP destination port
|
|
|
|
3 = UDP destination port */
|
|
|
|
uint64_t match_value : 16; /**< The value to watch for */
|
|
|
|
#else
|
|
|
|
uint64_t match_value : 16;
|
|
|
|
cvmx_pip_qos_watch_types match_type : 2;
|
|
|
|
uint64_t reserved_18_19 : 2;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_23_23 : 1;
|
|
|
|
uint64_t grp : 4;
|
|
|
|
uint64_t reserved_28_31 : 4;
|
|
|
|
uint64_t mask : 16;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn30xx cn38xxp2;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_watchx_cn50xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t mask : 16; /**< Mask off a range of values */
|
|
|
|
uint64_t reserved_28_31 : 4;
|
|
|
|
uint64_t grp : 4; /**< The GRP number of the watcher */
|
|
|
|
uint64_t reserved_23_23 : 1;
|
|
|
|
uint64_t qos : 3; /**< The QOS level of the watcher */
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
cvmx_pip_qos_watch_types match_type : 3; /**< The field for the watcher match against
|
|
|
|
0 = disable across all ports
|
|
|
|
1 = protocol (ipv4)
|
|
|
|
= next_header (ipv6)
|
|
|
|
2 = TCP destination port
|
|
|
|
3 = UDP destination port
|
|
|
|
4 = Ether type
|
|
|
|
5-7 = Reserved */
|
|
|
|
uint64_t match_value : 16; /**< The value to watch for */
|
|
|
|
#else
|
|
|
|
uint64_t match_value : 16;
|
|
|
|
cvmx_pip_qos_watch_types match_type : 3;
|
|
|
|
uint64_t reserved_19_19 : 1;
|
|
|
|
uint64_t qos : 3;
|
|
|
|
uint64_t reserved_23_23 : 1;
|
|
|
|
uint64_t grp : 4;
|
|
|
|
uint64_t reserved_28_31 : 4;
|
|
|
|
uint64_t mask : 16;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} cn50xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn52xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn52xxp1;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn56xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn56xxp1;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_qos_watchx_cn30xx cn58xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn30xx cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn61xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn63xx;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn63xxp1;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cn66xx;
|
|
|
|
struct cvmx_pip_qos_watchx_s cn68xx;
|
|
|
|
struct cvmx_pip_qos_watchx_s cn68xxp1;
|
|
|
|
struct cvmx_pip_qos_watchx_cn50xx cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_qos_watchx cvmx_pip_qos_watchx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_raw_word
|
|
|
|
*
|
|
|
|
* PIP_RAW_WORD = The RAW Word2 of the workQ entry.
|
|
|
|
*
|
|
|
|
* The RAW Word2 to be inserted into the workQ entry of RAWFULL packets.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_raw_word {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_raw_word_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_56_63 : 8;
|
|
|
|
uint64_t word : 56; /**< Word2 of the workQ entry
|
|
|
|
The 8-bit bufs field is still set by HW (IPD) */
|
|
|
|
#else
|
|
|
|
uint64_t word : 56;
|
|
|
|
uint64_t reserved_56_63 : 8;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_raw_word_s cn30xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn31xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn38xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn38xxp2;
|
|
|
|
struct cvmx_pip_raw_word_s cn50xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn52xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn52xxp1;
|
|
|
|
struct cvmx_pip_raw_word_s cn56xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn56xxp1;
|
|
|
|
struct cvmx_pip_raw_word_s cn58xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_raw_word_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_raw_word_s cn63xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_raw_word_s cn66xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn68xx;
|
|
|
|
struct cvmx_pip_raw_word_s cn68xxp1;
|
|
|
|
struct cvmx_pip_raw_word_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_raw_word cvmx_pip_raw_word_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_sft_rst
|
|
|
|
*
|
|
|
|
* PIP_SFT_RST = PIP Soft Reset
|
|
|
|
*
|
|
|
|
* When written to a '1', resets the pip block
|
|
|
|
*
|
|
|
|
* Notes:
|
|
|
|
* When RST is set to a '1' by SW, PIP will get a short reset pulse (3 cycles
|
|
|
|
* in duration). Although this will reset much of PIP's internal state, some
|
|
|
|
* CSRs will not reset.
|
|
|
|
*
|
|
|
|
* . PIP_BIST_STATUS
|
|
|
|
* . PIP_STAT0_PRT*
|
|
|
|
* . PIP_STAT1_PRT*
|
|
|
|
* . PIP_STAT2_PRT*
|
|
|
|
* . PIP_STAT3_PRT*
|
|
|
|
* . PIP_STAT4_PRT*
|
|
|
|
* . PIP_STAT5_PRT*
|
|
|
|
* . PIP_STAT6_PRT*
|
|
|
|
* . PIP_STAT7_PRT*
|
|
|
|
* . PIP_STAT8_PRT*
|
|
|
|
* . PIP_STAT9_PRT*
|
|
|
|
* . PIP_XSTAT0_PRT*
|
|
|
|
* . PIP_XSTAT1_PRT*
|
|
|
|
* . PIP_XSTAT2_PRT*
|
|
|
|
* . PIP_XSTAT3_PRT*
|
|
|
|
* . PIP_XSTAT4_PRT*
|
|
|
|
* . PIP_XSTAT5_PRT*
|
|
|
|
* . PIP_XSTAT6_PRT*
|
|
|
|
* . PIP_XSTAT7_PRT*
|
|
|
|
* . PIP_XSTAT8_PRT*
|
|
|
|
* . PIP_XSTAT9_PRT*
|
|
|
|
* . PIP_STAT_INB_PKTS*
|
|
|
|
* . PIP_STAT_INB_OCTS*
|
|
|
|
* . PIP_STAT_INB_ERRS*
|
|
|
|
* . PIP_TAG_INC*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_sft_rst {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_sft_rst_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_1_63 : 63;
|
|
|
|
uint64_t rst : 1; /**< Soft Reset */
|
|
|
|
#else
|
|
|
|
uint64_t rst : 1;
|
|
|
|
uint64_t reserved_1_63 : 63;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_sft_rst_s cn30xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn31xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn38xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn50xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn52xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn52xxp1;
|
|
|
|
struct cvmx_pip_sft_rst_s cn56xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn56xxp1;
|
|
|
|
struct cvmx_pip_sft_rst_s cn58xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_sft_rst_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_sft_rst_s cn63xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_sft_rst_s cn66xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn68xx;
|
|
|
|
struct cvmx_pip_sft_rst_s cn68xxp1;
|
|
|
|
struct cvmx_pip_sft_rst_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_sft_rst cvmx_pip_sft_rst_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat0_#
|
|
|
|
*
|
|
|
|
* PIP Statistics Counters
|
|
|
|
*
|
|
|
|
* Note: special stat counter behavior
|
|
|
|
*
|
|
|
|
* 1) Read and write operations must arbitrate for the statistics resources
|
|
|
|
* along with the packet engines which are incrementing the counters.
|
|
|
|
* In order to not drop packet information, the packet HW is always a
|
|
|
|
* higher priority and the CSR requests will only be satisified when
|
|
|
|
* there are idle cycles. This can potentially cause long delays if the
|
|
|
|
* system becomes full.
|
|
|
|
*
|
|
|
|
* 2) stat counters can be cleared in two ways. If PIP_STAT_CTL[RDCLR] is
|
|
|
|
* set, then all read accesses will clear the register. In addition,
|
|
|
|
* any write to a stats register will also reset the register to zero.
|
|
|
|
* Please note that the clearing operations must obey rule \#1 above.
|
|
|
|
*
|
|
|
|
* 3) all counters are wrapping - software must ensure they are read periodically
|
|
|
|
*
|
|
|
|
* 4) The counters accumulate statistics for packets that are sent to PKI. If
|
|
|
|
* PTP_MODE is enabled, the 8B timestamp is prepended to the packet. This
|
|
|
|
* additional 8B of data is captured in the octet counts.
|
|
|
|
*
|
|
|
|
* 5) X represents either the packet's port-kind or backpressure ID as
|
|
|
|
* determined by PIP_STAT_CTL[MODE]
|
|
|
|
* PIP_STAT0_X = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat0_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat0_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t drp_pkts : 32; /**< Inbound packets marked to be dropped by the IPD
|
|
|
|
QOS widget per port */
|
|
|
|
uint64_t drp_octs : 32; /**< Inbound octets marked to be dropped by the IPD
|
|
|
|
QOS widget per port */
|
|
|
|
#else
|
|
|
|
uint64_t drp_octs : 32;
|
|
|
|
uint64_t drp_pkts : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat0_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat0_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat0_x cvmx_pip_stat0_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat0_prt#
|
|
|
|
*
|
|
|
|
* PIP Statistics Counters
|
|
|
|
*
|
|
|
|
* Note: special stat counter behavior
|
|
|
|
*
|
|
|
|
* 1) Read and write operations must arbitrate for the statistics resources
|
|
|
|
* along with the packet engines which are incrementing the counters.
|
|
|
|
* In order to not drop packet information, the packet HW is always a
|
|
|
|
* higher priority and the CSR requests will only be satisified when
|
|
|
|
* there are idle cycles. This can potentially cause long delays if the
|
|
|
|
* system becomes full.
|
|
|
|
*
|
|
|
|
* 2) stat counters can be cleared in two ways. If PIP_STAT_CTL[RDCLR] is
|
|
|
|
* set, then all read accesses will clear the register. In addition,
|
|
|
|
* any write to a stats register will also reset the register to zero.
|
|
|
|
* Please note that the clearing operations must obey rule \#1 above.
|
|
|
|
*
|
|
|
|
* 3) all counters are wrapping - software must ensure they are read periodically
|
|
|
|
*
|
|
|
|
* 4) The counters accumulate statistics for packets that are sent to PKI. If
|
|
|
|
* PTP_MODE is enabled, the 8B timestamp is prepended to the packet. This
|
|
|
|
* additional 8B of data is captured in the octet counts.
|
|
|
|
* PIP_STAT0_PRT = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat0_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat0_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t drp_pkts : 32; /**< Inbound packets marked to be dropped by the IPD
|
|
|
|
QOS widget per port */
|
|
|
|
uint64_t drp_octs : 32; /**< Inbound octets marked to be dropped by the IPD
|
|
|
|
QOS widget per port */
|
|
|
|
#else
|
|
|
|
uint64_t drp_octs : 32;
|
|
|
|
uint64_t drp_pkts : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat0_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat0_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat0_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat0_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat0_prtx cvmx_pip_stat0_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat10_#
|
|
|
|
*
|
|
|
|
* PIP_STAT10_X = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat10_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat10_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t bcast : 32; /**< Number of packets with L2 Broadcast DMAC
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW will consider a packet to be an L2
|
|
|
|
broadcast packet when the 48-bit DMAC is all 1's.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2. */
|
|
|
|
uint64_t mcast : 32; /**< Number of packets with L2 Mulitcast DMAC
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW will consider a packet to be an L2
|
|
|
|
multicast packet when the least-significant bit
|
|
|
|
of the first byte of the DMAC is set and the
|
|
|
|
packet is not an L2 broadcast packet.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2. */
|
|
|
|
#else
|
|
|
|
uint64_t mcast : 32;
|
|
|
|
uint64_t bcast : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat10_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat10_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat10_x cvmx_pip_stat10_x_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat10_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT10_PRTX = PIP_STAT_L2_MCAST / PIP_STAT_L2_BCAST
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat10_prtx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat10_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t bcast : 32; /**< Number of packets with L2 Broadcast DMAC
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW will consider a packet to be an L2
|
|
|
|
broadcast packet when the 48-bit DMAC is all 1's.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2. */
|
|
|
|
uint64_t mcast : 32; /**< Number of packets with L2 Mulitcast DMAC
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW will consider a packet to be an L2
|
|
|
|
multicast packet when the least-significant bit
|
|
|
|
of the first byte of the DMAC is set and the
|
|
|
|
packet is not an L2 broadcast packet.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2. */
|
|
|
|
#else
|
|
|
|
uint64_t mcast : 32;
|
|
|
|
uint64_t bcast : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn61xx;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn63xxp1;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat10_prtx_s cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat10_prtx cvmx_pip_stat10_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat11_#
|
|
|
|
*
|
|
|
|
* PIP_STAT11_X = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat11_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat11_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t bcast : 32; /**< Number of packets with L3 Broadcast Dest Address
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW considers an IPv4 packet to be broadcast
|
|
|
|
when all bits are set in the MSB of the
|
|
|
|
destination address. IPv6 does not have the
|
|
|
|
concept of a broadcast packets.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2 and the packet is IP or the parse
|
|
|
|
mode for the packet is SKIP-TO-IP. */
|
|
|
|
uint64_t mcast : 32; /**< Number of packets with L3 Multicast Dest Address
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW considers an IPv4 packet to be multicast
|
|
|
|
when the most-significant nibble of the 32-bit
|
|
|
|
destination address is 0xE (i.e. it is a class D
|
|
|
|
address). The HW considers an IPv6 packet to be
|
|
|
|
multicast when the most-significant byte of the
|
|
|
|
128-bit destination address is all 1's.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2 and the packet is IP or the parse
|
|
|
|
mode for the packet is SKIP-TO-IP. */
|
|
|
|
#else
|
|
|
|
uint64_t mcast : 32;
|
|
|
|
uint64_t bcast : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat11_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat11_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat11_x cvmx_pip_stat11_x_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat11_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT11_PRTX = PIP_STAT_L3_MCAST / PIP_STAT_L3_BCAST
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat11_prtx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat11_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t bcast : 32; /**< Number of packets with L3 Broadcast Dest Address
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW considers an IPv4 packet to be broadcast
|
|
|
|
when all bits are set in the MSB of the
|
|
|
|
destination address. IPv6 does not have the
|
|
|
|
concept of a broadcast packets.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2 and the packet is IP or the parse
|
|
|
|
mode for the packet is SKIP-TO-IP. */
|
|
|
|
uint64_t mcast : 32; /**< Number of packets with L3 Multicast Dest Address
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW considers an IPv4 packet to be multicast
|
|
|
|
when the most-significant nibble of the 32-bit
|
|
|
|
destination address is 0xE (i.e. it is a class D
|
|
|
|
address). The HW considers an IPv6 packet to be
|
|
|
|
multicast when the most-significant byte of the
|
|
|
|
128-bit destination address is all 1's.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2 and the packet is IP or the parse
|
|
|
|
mode for the packet is SKIP-TO-IP. */
|
|
|
|
#else
|
|
|
|
uint64_t mcast : 32;
|
|
|
|
uint64_t bcast : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn61xx;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn63xxp1;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat11_prtx_s cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat11_prtx cvmx_pip_stat11_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat1_#
|
|
|
|
*
|
|
|
|
* PIP_STAT1_X = PIP_STAT_OCTS
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat1_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat1_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t octs : 48; /**< Number of octets received by PIP (good and bad) */
|
|
|
|
#else
|
|
|
|
uint64_t octs : 48;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat1_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat1_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat1_x cvmx_pip_stat1_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat1_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT1_PRTX = PIP_STAT_OCTS
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat1_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat1_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t octs : 48; /**< Number of octets received by PIP (good and bad) */
|
|
|
|
#else
|
|
|
|
uint64_t octs : 48;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat1_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat1_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat1_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat1_prtx_s cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat1_prtx cvmx_pip_stat1_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat2_#
|
|
|
|
*
|
|
|
|
* PIP_STAT2_X = PIP_STAT_PKTS / PIP_STAT_RAW
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat2_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat2_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t pkts : 32; /**< Number of packets processed by PIP */
|
|
|
|
uint64_t raw : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
|
|
|
|
received by PIP per port */
|
|
|
|
#else
|
|
|
|
uint64_t raw : 32;
|
|
|
|
uint64_t pkts : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat2_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat2_x_s cn68xxp1;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
2012-03-11 04:14:00 +00:00
|
|
|
typedef union cvmx_pip_stat2_x cvmx_pip_stat2_x_t;
|
2010-11-28 06:20:41 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat2_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT2_PRTX = PIP_STAT_PKTS / PIP_STAT_RAW
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat2_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat2_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t pkts : 32; /**< Number of packets processed by PIP */
|
|
|
|
uint64_t raw : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
|
|
|
|
received by PIP per port */
|
|
|
|
#else
|
|
|
|
uint64_t raw : 32;
|
|
|
|
uint64_t pkts : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat2_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat2_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat2_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat2_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat2_prtx cvmx_pip_stat2_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat3_#
|
|
|
|
*
|
|
|
|
* PIP_STAT3_X = PIP_STAT_BCST / PIP_STAT_MCST
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat3_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat3_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t bcst : 32; /**< Number of indentified L2 broadcast packets
|
|
|
|
Does not include multicast packets
|
|
|
|
Only includes packets whose parse mode is
|
|
|
|
SKIP_TO_L2. */
|
|
|
|
uint64_t mcst : 32; /**< Number of indentified L2 multicast packets
|
|
|
|
Does not include broadcast packets
|
|
|
|
Only includes packets whose parse mode is
|
|
|
|
SKIP_TO_L2. */
|
|
|
|
#else
|
|
|
|
uint64_t mcst : 32;
|
|
|
|
uint64_t bcst : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat3_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat3_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat3_x cvmx_pip_stat3_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat3_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT3_PRTX = PIP_STAT_BCST / PIP_STAT_MCST
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat3_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat3_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t bcst : 32; /**< Number of indentified L2 broadcast packets
|
|
|
|
Does not include multicast packets
|
|
|
|
Only includes packets whose parse mode is
|
|
|
|
SKIP_TO_L2. */
|
|
|
|
uint64_t mcst : 32; /**< Number of indentified L2 multicast packets
|
|
|
|
Does not include broadcast packets
|
|
|
|
Only includes packets whose parse mode is
|
|
|
|
SKIP_TO_L2. */
|
|
|
|
#else
|
|
|
|
uint64_t mcst : 32;
|
|
|
|
uint64_t bcst : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat3_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat3_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat3_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat3_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat3_prtx cvmx_pip_stat3_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat4_#
|
|
|
|
*
|
|
|
|
* PIP_STAT4_X = PIP_STAT_HIST1 / PIP_STAT_HIST0
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat4_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat4_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t h65to127 : 32; /**< Number of 65-127B packets */
|
|
|
|
uint64_t h64 : 32; /**< Number of 1-64B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h64 : 32;
|
|
|
|
uint64_t h65to127 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat4_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat4_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat4_x cvmx_pip_stat4_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat4_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT4_PRTX = PIP_STAT_HIST1 / PIP_STAT_HIST0
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat4_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat4_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t h65to127 : 32; /**< Number of 65-127B packets */
|
|
|
|
uint64_t h64 : 32; /**< Number of 1-64B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h64 : 32;
|
|
|
|
uint64_t h65to127 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat4_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat4_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat4_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat4_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat4_prtx cvmx_pip_stat4_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat5_#
|
|
|
|
*
|
|
|
|
* PIP_STAT5_X = PIP_STAT_HIST3 / PIP_STAT_HIST2
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat5_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat5_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t h256to511 : 32; /**< Number of 256-511B packets */
|
|
|
|
uint64_t h128to255 : 32; /**< Number of 128-255B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h128to255 : 32;
|
|
|
|
uint64_t h256to511 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat5_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat5_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat5_x cvmx_pip_stat5_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat5_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT5_PRTX = PIP_STAT_HIST3 / PIP_STAT_HIST2
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat5_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat5_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t h256to511 : 32; /**< Number of 256-511B packets */
|
|
|
|
uint64_t h128to255 : 32; /**< Number of 128-255B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h128to255 : 32;
|
|
|
|
uint64_t h256to511 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat5_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat5_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat5_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat5_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat5_prtx cvmx_pip_stat5_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat6_#
|
|
|
|
*
|
|
|
|
* PIP_STAT6_X = PIP_STAT_HIST5 / PIP_STAT_HIST4
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat6_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat6_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t h1024to1518 : 32; /**< Number of 1024-1518B packets */
|
|
|
|
uint64_t h512to1023 : 32; /**< Number of 512-1023B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h512to1023 : 32;
|
|
|
|
uint64_t h1024to1518 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat6_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat6_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat6_x cvmx_pip_stat6_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat6_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT6_PRTX = PIP_STAT_HIST5 / PIP_STAT_HIST4
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat6_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat6_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t h1024to1518 : 32; /**< Number of 1024-1518B packets */
|
|
|
|
uint64_t h512to1023 : 32; /**< Number of 512-1023B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h512to1023 : 32;
|
|
|
|
uint64_t h1024to1518 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat6_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat6_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat6_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat6_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat6_prtx cvmx_pip_stat6_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat7_#
|
|
|
|
*
|
|
|
|
* PIP_STAT7_X = PIP_STAT_FCS / PIP_STAT_HIST6
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat7_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat7_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t fcs : 32; /**< Number of packets with FCS or Align opcode errors */
|
|
|
|
uint64_t h1519 : 32; /**< Number of 1519-max packets */
|
|
|
|
#else
|
|
|
|
uint64_t h1519 : 32;
|
|
|
|
uint64_t fcs : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat7_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat7_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat7_x cvmx_pip_stat7_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat7_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT7_PRTX = PIP_STAT_FCS / PIP_STAT_HIST6
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Notes:
|
2012-03-11 04:14:00 +00:00
|
|
|
* DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
|
|
|
|
* sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
|
2010-11-28 06:20:41 +00:00
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat7_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat7_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t fcs : 32; /**< Number of packets with FCS or Align opcode errors */
|
|
|
|
uint64_t h1519 : 32; /**< Number of 1519-max packets */
|
|
|
|
#else
|
|
|
|
uint64_t h1519 : 32;
|
|
|
|
uint64_t fcs : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat7_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat7_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat7_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat7_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat7_prtx cvmx_pip_stat7_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat8_#
|
|
|
|
*
|
|
|
|
* PIP_STAT8_X = PIP_STAT_FRAG / PIP_STAT_UNDER
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat8_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat8_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t frag : 32; /**< Number of packets with length < min and FCS error */
|
|
|
|
uint64_t undersz : 32; /**< Number of packets with length < min */
|
|
|
|
#else
|
|
|
|
uint64_t undersz : 32;
|
|
|
|
uint64_t frag : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat8_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat8_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat8_x cvmx_pip_stat8_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat8_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT8_PRTX = PIP_STAT_FRAG / PIP_STAT_UNDER
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Notes:
|
2012-03-11 04:14:00 +00:00
|
|
|
* DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
|
|
|
|
* sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
|
2010-11-28 06:20:41 +00:00
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat8_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat8_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t frag : 32; /**< Number of packets with length < min and FCS error */
|
|
|
|
uint64_t undersz : 32; /**< Number of packets with length < min */
|
|
|
|
#else
|
|
|
|
uint64_t undersz : 32;
|
|
|
|
uint64_t frag : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat8_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat8_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat8_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat8_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat8_prtx cvmx_pip_stat8_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat9_#
|
|
|
|
*
|
|
|
|
* PIP_STAT9_X = PIP_STAT_JABBER / PIP_STAT_OVER
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat9_x {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat9_x_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t jabber : 32; /**< Number of packets with length > max and FCS error */
|
|
|
|
uint64_t oversz : 32; /**< Number of packets with length > max */
|
|
|
|
#else
|
|
|
|
uint64_t oversz : 32;
|
|
|
|
uint64_t jabber : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat9_x_s cn68xx;
|
|
|
|
struct cvmx_pip_stat9_x_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat9_x cvmx_pip_stat9_x_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat9_prt#
|
|
|
|
*
|
|
|
|
* PIP_STAT9_PRTX = PIP_STAT_JABBER / PIP_STAT_OVER
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Notes:
|
2012-03-11 04:14:00 +00:00
|
|
|
* DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
|
|
|
|
* sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
|
|
|
|
* sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
|
2010-11-28 06:20:41 +00:00
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat9_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat9_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t jabber : 32; /**< Number of packets with length > max and FCS error */
|
|
|
|
uint64_t oversz : 32; /**< Number of packets with length > max */
|
|
|
|
#else
|
|
|
|
uint64_t oversz : 32;
|
|
|
|
uint64_t jabber : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat9_prtx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat9_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat9_prtx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat9_prtx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat9_prtx cvmx_pip_stat9_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat_ctl
|
|
|
|
*
|
|
|
|
* PIP_STAT_CTL = PIP's Stat Control Register
|
|
|
|
*
|
|
|
|
* Controls how the PIP statistics counters are handled.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat_ctl {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_ctl_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_9_63 : 55;
|
|
|
|
uint64_t mode : 1; /**< The PIP_STAT*_X registers can be indexed either by
|
|
|
|
port-kind or backpressure ID.
|
|
|
|
Does not apply to the PIP_STAT_INB* registers.
|
|
|
|
0 = X represents the packet's port-kind
|
|
|
|
1 = X represents the packet's backpressure ID */
|
|
|
|
uint64_t reserved_1_7 : 7;
|
|
|
|
uint64_t rdclr : 1; /**< Stat registers are read and clear
|
|
|
|
0 = stat registers hold value when read
|
|
|
|
1 = stat registers are cleared when read */
|
|
|
|
#else
|
|
|
|
uint64_t rdclr : 1;
|
|
|
|
uint64_t reserved_1_7 : 7;
|
|
|
|
uint64_t mode : 1;
|
|
|
|
uint64_t reserved_9_63 : 55;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_1_63 : 63;
|
|
|
|
uint64_t rdclr : 1; /**< Stat registers are read and clear
|
|
|
|
0 = stat registers hold value when read
|
|
|
|
1 = stat registers are cleared when read */
|
|
|
|
#else
|
|
|
|
uint64_t rdclr : 1;
|
|
|
|
uint64_t reserved_1_63 : 63;
|
|
|
|
#endif
|
2012-03-11 04:14:00 +00:00
|
|
|
} cn30xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn31xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn38xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn38xxp2;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn50xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn52xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn52xxp1;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn56xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn56xxp1;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn58xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn58xxp1;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn61xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn63xx;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn63xxp1;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cn66xx;
|
|
|
|
struct cvmx_pip_stat_ctl_s cn68xx;
|
|
|
|
struct cvmx_pip_stat_ctl_s cn68xxp1;
|
|
|
|
struct cvmx_pip_stat_ctl_cn30xx cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat_ctl cvmx_pip_stat_ctl_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_stat_inb_errs#
|
|
|
|
*
|
|
|
|
* PIP_STAT_INB_ERRSX = Inbound error packets received by PIP per port
|
|
|
|
*
|
|
|
|
* Inbound stats collect all data sent to PIP from all packet interfaces.
|
|
|
|
* Its the raw counts of everything that comes into the block. The counts
|
|
|
|
* will reflect all error packets and packets dropped by the PKI RED engine.
|
|
|
|
* These counts are intended for system debug, but could convey useful
|
|
|
|
* information in production systems.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat_inb_errsx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_errsx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_16_63 : 48;
|
|
|
|
uint64_t errs : 16; /**< Number of packets with errors
|
|
|
|
received by PIP */
|
|
|
|
#else
|
|
|
|
uint64_t errs : 16;
|
|
|
|
uint64_t reserved_16_63 : 48;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_errsx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat_inb_errsx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat_inb_errsx cvmx_pip_stat_inb_errsx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat_inb_errs_pknd#
|
|
|
|
*
|
|
|
|
* PIP_STAT_INB_ERRS_PKNDX = Inbound error packets received by PIP per pkind
|
|
|
|
*
|
|
|
|
* Inbound stats collect all data sent to PIP from all packet interfaces.
|
|
|
|
* Its the raw counts of everything that comes into the block. The counts
|
|
|
|
* will reflect all error packets and packets dropped by the PKI RED engine.
|
|
|
|
* These counts are intended for system debug, but could convey useful
|
|
|
|
* information in production systems.
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat_inb_errs_pkndx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat_inb_errs_pkndx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_16_63 : 48;
|
|
|
|
uint64_t errs : 16; /**< Number of packets with errors
|
|
|
|
received by PIP */
|
|
|
|
#else
|
|
|
|
uint64_t errs : 16;
|
|
|
|
uint64_t reserved_16_63 : 48;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat_inb_errs_pkndx_s cn68xx;
|
|
|
|
struct cvmx_pip_stat_inb_errs_pkndx_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat_inb_errs_pkndx cvmx_pip_stat_inb_errs_pkndx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat_inb_octs#
|
|
|
|
*
|
|
|
|
* PIP_STAT_INB_OCTSX = Inbound octets received by PIP per port
|
|
|
|
*
|
|
|
|
* Inbound stats collect all data sent to PIP from all packet interfaces.
|
|
|
|
* Its the raw counts of everything that comes into the block. The counts
|
|
|
|
* will reflect all error packets and packets dropped by the PKI RED engine.
|
|
|
|
* These counts are intended for system debug, but could convey useful
|
|
|
|
* information in production systems. The OCTS will include the bytes from
|
|
|
|
* timestamp fields in PTP_MODE.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat_inb_octsx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_octsx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t octs : 48; /**< Total number of octets from all packets received
|
|
|
|
by PIP */
|
|
|
|
#else
|
|
|
|
uint64_t octs : 48;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_octsx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat_inb_octsx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat_inb_octsx cvmx_pip_stat_inb_octsx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat_inb_octs_pknd#
|
|
|
|
*
|
|
|
|
* PIP_STAT_INB_OCTS_PKNDX = Inbound octets received by PIP per pkind
|
|
|
|
*
|
|
|
|
* Inbound stats collect all data sent to PIP from all packet interfaces.
|
|
|
|
* Its the raw counts of everything that comes into the block. The counts
|
|
|
|
* will reflect all error packets and packets dropped by the PKI RED engine.
|
|
|
|
* These counts are intended for system debug, but could convey useful
|
|
|
|
* information in production systems. The OCTS will include the bytes from
|
|
|
|
* timestamp fields in PTP_MODE.
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat_inb_octs_pkndx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat_inb_octs_pkndx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t octs : 48; /**< Total number of octets from all packets received
|
|
|
|
by PIP */
|
|
|
|
#else
|
|
|
|
uint64_t octs : 48;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat_inb_octs_pkndx_s cn68xx;
|
|
|
|
struct cvmx_pip_stat_inb_octs_pkndx_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat_inb_octs_pkndx cvmx_pip_stat_inb_octs_pkndx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat_inb_pkts#
|
|
|
|
*
|
|
|
|
* PIP_STAT_INB_PKTSX = Inbound packets received by PIP per port
|
|
|
|
*
|
|
|
|
* Inbound stats collect all data sent to PIP from all packet interfaces.
|
|
|
|
* Its the raw counts of everything that comes into the block. The counts
|
|
|
|
* will reflect all error packets and packets dropped by the PKI RED engine.
|
|
|
|
* These counts are intended for system debug, but could convey useful
|
|
|
|
* information in production systems.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_stat_inb_pktsx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_pktsx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
uint64_t pkts : 32; /**< Number of packets without errors
|
|
|
|
received by PIP */
|
|
|
|
#else
|
|
|
|
uint64_t pkts : 32;
|
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn30xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn31xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn38xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn50xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn52xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn56xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn58xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn63xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cn66xx;
|
|
|
|
struct cvmx_pip_stat_inb_pktsx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat_inb_pktsx cvmx_pip_stat_inb_pktsx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_stat_inb_pkts_pknd#
|
|
|
|
*
|
|
|
|
* PIP_STAT_INB_PKTS_PKNDX = Inbound packets received by PIP per pkind
|
|
|
|
*
|
|
|
|
* Inbound stats collect all data sent to PIP from all packet interfaces.
|
|
|
|
* Its the raw counts of everything that comes into the block. The counts
|
|
|
|
* will reflect all error packets and packets dropped by the PKI RED engine.
|
|
|
|
* These counts are intended for system debug, but could convey useful
|
|
|
|
* information in production systems.
|
|
|
|
*/
|
|
|
|
union cvmx_pip_stat_inb_pkts_pkndx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_stat_inb_pkts_pkndx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
uint64_t pkts : 32; /**< Number of packets without errors
|
|
|
|
received by PIP */
|
|
|
|
#else
|
|
|
|
uint64_t pkts : 32;
|
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xx;
|
|
|
|
struct cvmx_pip_stat_inb_pkts_pkndx_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_stat_inb_pkts_pkndx cvmx_pip_stat_inb_pkts_pkndx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_sub_pkind_fcs#
|
|
|
|
*/
|
|
|
|
union cvmx_pip_sub_pkind_fcsx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_sub_pkind_fcsx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t port_bit : 64; /**< When set '1', the pkind corresponding to the bit
|
|
|
|
position set, will subtract the FCS for packets
|
|
|
|
on that pkind. */
|
|
|
|
#else
|
|
|
|
uint64_t port_bit : 64;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_sub_pkind_fcsx_s cn68xx;
|
|
|
|
struct cvmx_pip_sub_pkind_fcsx_s cn68xxp1;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_sub_pkind_fcsx cvmx_pip_sub_pkind_fcsx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_tag_inc#
|
|
|
|
*
|
|
|
|
* PIP_TAG_INC = Which bytes to include in the new tag hash algorithm
|
|
|
|
*
|
|
|
|
* # $PIP_TAG_INCX = 0x300+X X=(0..63) RegType=(RSL) RtlReg=(pip_tag_inc_csr_direct_TestbuilderTask)
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_tag_incx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_incx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_8_63 : 56;
|
|
|
|
uint64_t en : 8; /**< Which bytes to include in mask tag algorithm
|
|
|
|
Broken into 4, 16-entry masks to cover 128B
|
|
|
|
PIP_PRT_CFG[TAG_INC] selects 1 of 4 to use
|
|
|
|
registers 0-15 map to PIP_PRT_CFG[TAG_INC] == 0
|
|
|
|
registers 16-31 map to PIP_PRT_CFG[TAG_INC] == 1
|
|
|
|
registers 32-47 map to PIP_PRT_CFG[TAG_INC] == 2
|
|
|
|
registers 48-63 map to PIP_PRT_CFG[TAG_INC] == 3
|
|
|
|
[7] coresponds to the MSB of the 8B word
|
|
|
|
[0] coresponds to the LSB of the 8B word
|
|
|
|
If PTP_MODE, the 8B timestamp is prepended to the
|
|
|
|
packet. The EN byte masks should be adjusted to
|
|
|
|
compensate for the additional timestamp field. */
|
|
|
|
#else
|
|
|
|
uint64_t en : 8;
|
|
|
|
uint64_t reserved_8_63 : 56;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_tag_incx_s cn30xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn31xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn38xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn38xxp2;
|
|
|
|
struct cvmx_pip_tag_incx_s cn50xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn52xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn52xxp1;
|
|
|
|
struct cvmx_pip_tag_incx_s cn56xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn56xxp1;
|
|
|
|
struct cvmx_pip_tag_incx_s cn58xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_incx_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_tag_incx_s cn63xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_incx_s cn66xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn68xx;
|
|
|
|
struct cvmx_pip_tag_incx_s cn68xxp1;
|
|
|
|
struct cvmx_pip_tag_incx_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_tag_incx cvmx_pip_tag_incx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_tag_mask
|
|
|
|
*
|
|
|
|
* PIP_TAG_MASK = Mask bit in the tag generation
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_tag_mask {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_mask_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_16_63 : 48;
|
|
|
|
uint64_t mask : 16; /**< When set, MASK clears individual bits of lower 16
|
|
|
|
bits of the computed tag. Does not effect RAW
|
|
|
|
or INSTR HDR packets. */
|
|
|
|
#else
|
|
|
|
uint64_t mask : 16;
|
|
|
|
uint64_t reserved_16_63 : 48;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_tag_mask_s cn30xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn31xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn38xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn38xxp2;
|
|
|
|
struct cvmx_pip_tag_mask_s cn50xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn52xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn52xxp1;
|
|
|
|
struct cvmx_pip_tag_mask_s cn56xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn56xxp1;
|
|
|
|
struct cvmx_pip_tag_mask_s cn58xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_mask_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_tag_mask_s cn63xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_mask_s cn66xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn68xx;
|
|
|
|
struct cvmx_pip_tag_mask_s cn68xxp1;
|
|
|
|
struct cvmx_pip_tag_mask_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_tag_mask cvmx_pip_tag_mask_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_tag_secret
|
|
|
|
*
|
|
|
|
* PIP_TAG_SECRET = Initial value in tag generation
|
|
|
|
*
|
|
|
|
* The source and destination IV's provide a mechanism for each Octeon to be unique.
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_tag_secret {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_secret_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
uint64_t dst : 16; /**< Secret for the destination tuple tag CRC calc */
|
|
|
|
uint64_t src : 16; /**< Secret for the source tuple tag CRC calc */
|
|
|
|
#else
|
|
|
|
uint64_t src : 16;
|
|
|
|
uint64_t dst : 16;
|
|
|
|
uint64_t reserved_32_63 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_tag_secret_s cn30xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn31xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn38xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn38xxp2;
|
|
|
|
struct cvmx_pip_tag_secret_s cn50xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn52xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn52xxp1;
|
|
|
|
struct cvmx_pip_tag_secret_s cn56xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn56xxp1;
|
|
|
|
struct cvmx_pip_tag_secret_s cn58xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_secret_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_tag_secret_s cn63xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_tag_secret_s cn66xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn68xx;
|
|
|
|
struct cvmx_pip_tag_secret_s cn68xxp1;
|
|
|
|
struct cvmx_pip_tag_secret_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_tag_secret cvmx_pip_tag_secret_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_todo_entry
|
|
|
|
*
|
|
|
|
* PIP_TODO_ENTRY = Head entry of the Todo list (debug only)
|
|
|
|
*
|
|
|
|
* Summary of the current packet that has completed and waiting to be processed
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_todo_entry {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_todo_entry_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t val : 1; /**< Entry is valid */
|
|
|
|
uint64_t reserved_62_62 : 1;
|
|
|
|
uint64_t entry : 62; /**< Todo list entry summary */
|
|
|
|
#else
|
|
|
|
uint64_t entry : 62;
|
|
|
|
uint64_t reserved_62_62 : 1;
|
|
|
|
uint64_t val : 1;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_todo_entry_s cn30xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn31xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn38xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn38xxp2;
|
|
|
|
struct cvmx_pip_todo_entry_s cn50xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn52xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn52xxp1;
|
|
|
|
struct cvmx_pip_todo_entry_s cn56xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn56xxp1;
|
|
|
|
struct cvmx_pip_todo_entry_s cn58xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn58xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_todo_entry_s cn61xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
struct cvmx_pip_todo_entry_s cn63xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_todo_entry_s cn66xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn68xx;
|
|
|
|
struct cvmx_pip_todo_entry_s cn68xxp1;
|
|
|
|
struct cvmx_pip_todo_entry_s cnf71xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_todo_entry cvmx_pip_todo_entry_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_vlan_etypes#
|
|
|
|
*/
|
|
|
|
union cvmx_pip_vlan_etypesx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_vlan_etypesx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t type3 : 16; /**< VLAN Ethertype */
|
|
|
|
uint64_t type2 : 16; /**< VLAN Ethertype */
|
|
|
|
uint64_t type1 : 16; /**< VLAN Ethertype */
|
|
|
|
uint64_t type0 : 16; /**< VLAN Ethertype
|
|
|
|
Specifies ethertypes that will be parsed as
|
|
|
|
containing VLAN information. Each TYPE is
|
|
|
|
orthagonal; if all eight are not required, set
|
|
|
|
multiple TYPEs to the same value (as in the
|
|
|
|
0x8100 default value). */
|
|
|
|
#else
|
|
|
|
uint64_t type0 : 16;
|
|
|
|
uint64_t type1 : 16;
|
|
|
|
uint64_t type2 : 16;
|
|
|
|
uint64_t type3 : 16;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_vlan_etypesx_s cn61xx;
|
|
|
|
struct cvmx_pip_vlan_etypesx_s cn66xx;
|
|
|
|
struct cvmx_pip_vlan_etypesx_s cn68xx;
|
|
|
|
struct cvmx_pip_vlan_etypesx_s cnf71xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_vlan_etypesx cvmx_pip_vlan_etypesx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat0_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT0_PRT = PIP_XSTAT_DRP_PKTS / PIP_XSTAT_DRP_OCTS
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat0_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat0_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t drp_pkts : 32; /**< Inbound packets marked to be dropped by the IPD
|
|
|
|
QOS widget per port */
|
|
|
|
uint64_t drp_octs : 32; /**< Inbound octets marked to be dropped by the IPD
|
|
|
|
QOS widget per port */
|
|
|
|
#else
|
|
|
|
uint64_t drp_octs : 32;
|
|
|
|
uint64_t drp_pkts : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat0_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat0_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat0_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat0_prtx cvmx_pip_xstat0_prtx_t;
|
|
|
|
|
2012-03-11 04:14:00 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat10_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT10_PRTX = PIP_XSTAT_L2_MCAST / PIP_XSTAT_L2_BCAST
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_xstat10_prtx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_xstat10_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t bcast : 32; /**< Number of packets with L2 Broadcast DMAC
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW will consider a packet to be an L2
|
|
|
|
broadcast packet when the 48-bit DMAC is all 1's.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2. */
|
|
|
|
uint64_t mcast : 32; /**< Number of packets with L2 Mulitcast DMAC
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW will consider a packet to be an L2
|
|
|
|
multicast packet when the least-significant bit
|
|
|
|
of the first byte of the DMAC is set and the
|
|
|
|
packet is not an L2 broadcast packet.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2. */
|
|
|
|
#else
|
|
|
|
uint64_t mcast : 32;
|
|
|
|
uint64_t bcast : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat10_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat10_prtx_s cn63xxp1;
|
|
|
|
struct cvmx_pip_xstat10_prtx_s cn66xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat10_prtx cvmx_pip_xstat10_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat11_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT11_PRTX = PIP_XSTAT_L3_MCAST / PIP_XSTAT_L3_BCAST
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
union cvmx_pip_xstat11_prtx {
|
|
|
|
uint64_t u64;
|
|
|
|
struct cvmx_pip_xstat11_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
|
|
|
uint64_t bcast : 32; /**< Number of packets with L3 Broadcast Dest Address
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW considers an IPv4 packet to be broadcast
|
|
|
|
when all bits are set in the MSB of the
|
|
|
|
destination address. IPv6 does not have the
|
|
|
|
concept of a broadcast packets.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2 and the packet is IP or the parse
|
|
|
|
mode for the packet is SKIP-TO-IP. */
|
|
|
|
uint64_t mcast : 32; /**< Number of packets with L3 Multicast Dest Address
|
|
|
|
that were dropped due to RED.
|
|
|
|
The HW considers an IPv4 packet to be multicast
|
|
|
|
when the most-significant nibble of the 32-bit
|
|
|
|
destination address is 0xE (i.e. it is a class D
|
|
|
|
address). The HW considers an IPv6 packet to be
|
|
|
|
multicast when the most-significant byte of the
|
|
|
|
128-bit destination address is all 1's.
|
|
|
|
Only applies when the parse mode for the packet
|
|
|
|
is SKIP-TO-L2 and the packet is IP or the parse
|
|
|
|
mode for the packet is SKIP-TO-IP. */
|
|
|
|
#else
|
|
|
|
uint64_t mcast : 32;
|
|
|
|
uint64_t bcast : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat11_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat11_prtx_s cn63xxp1;
|
|
|
|
struct cvmx_pip_xstat11_prtx_s cn66xx;
|
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat11_prtx cvmx_pip_xstat11_prtx_t;
|
|
|
|
|
2010-11-28 06:20:41 +00:00
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat1_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT1_PRTX = PIP_XSTAT_OCTS
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat1_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat1_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
uint64_t octs : 48; /**< Number of octets received by PIP (good and bad) */
|
|
|
|
#else
|
|
|
|
uint64_t octs : 48;
|
|
|
|
uint64_t reserved_48_63 : 16;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat1_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat1_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat1_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat1_prtx cvmx_pip_xstat1_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat2_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT2_PRTX = PIP_XSTAT_PKTS / PIP_XSTAT_RAW
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat2_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat2_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t pkts : 32; /**< Number of packets processed by PIP */
|
|
|
|
uint64_t raw : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error
|
|
|
|
received by PIP per port */
|
|
|
|
#else
|
|
|
|
uint64_t raw : 32;
|
|
|
|
uint64_t pkts : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat2_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat2_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat2_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat2_prtx cvmx_pip_xstat2_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat3_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT3_PRTX = PIP_XSTAT_BCST / PIP_XSTAT_MCST
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat3_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat3_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t bcst : 32; /**< Number of indentified L2 broadcast packets
|
|
|
|
Does not include multicast packets
|
|
|
|
Only includes packets whose parse mode is
|
|
|
|
SKIP_TO_L2. */
|
|
|
|
uint64_t mcst : 32; /**< Number of indentified L2 multicast packets
|
|
|
|
Does not include broadcast packets
|
|
|
|
Only includes packets whose parse mode is
|
|
|
|
SKIP_TO_L2. */
|
|
|
|
#else
|
|
|
|
uint64_t mcst : 32;
|
|
|
|
uint64_t bcst : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat3_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat3_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat3_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat3_prtx cvmx_pip_xstat3_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat4_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT4_PRTX = PIP_XSTAT_HIST1 / PIP_XSTAT_HIST0
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat4_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat4_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t h65to127 : 32; /**< Number of 65-127B packets */
|
|
|
|
uint64_t h64 : 32; /**< Number of 1-64B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h64 : 32;
|
|
|
|
uint64_t h65to127 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat4_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat4_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat4_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat4_prtx cvmx_pip_xstat4_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat5_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT5_PRTX = PIP_XSTAT_HIST3 / PIP_XSTAT_HIST2
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat5_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat5_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t h256to511 : 32; /**< Number of 256-511B packets */
|
|
|
|
uint64_t h128to255 : 32; /**< Number of 128-255B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h128to255 : 32;
|
|
|
|
uint64_t h256to511 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat5_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat5_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat5_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat5_prtx cvmx_pip_xstat5_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat6_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT6_PRTX = PIP_XSTAT_HIST5 / PIP_XSTAT_HIST4
|
|
|
|
*
|
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat6_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat6_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t h1024to1518 : 32; /**< Number of 1024-1518B packets */
|
|
|
|
uint64_t h512to1023 : 32; /**< Number of 512-1023B packets */
|
|
|
|
#else
|
|
|
|
uint64_t h512to1023 : 32;
|
|
|
|
uint64_t h1024to1518 : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat6_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat6_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat6_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat6_prtx cvmx_pip_xstat6_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat7_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT7_PRTX = PIP_XSTAT_FCS / PIP_XSTAT_HIST6
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Notes:
|
2012-03-11 04:14:00 +00:00
|
|
|
* DPI does not check FCS, therefore FCS will never increment on DPI ports 32-35
|
|
|
|
* sRIO does not check FCS, therefore FCS will never increment on sRIO ports 40-47
|
2010-11-28 06:20:41 +00:00
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat7_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat7_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t fcs : 32; /**< Number of packets with FCS or Align opcode errors */
|
|
|
|
uint64_t h1519 : 32; /**< Number of 1519-max packets */
|
|
|
|
#else
|
|
|
|
uint64_t h1519 : 32;
|
|
|
|
uint64_t fcs : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat7_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat7_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat7_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat7_prtx cvmx_pip_xstat7_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat8_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT8_PRTX = PIP_XSTAT_FRAG / PIP_XSTAT_UNDER
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Notes:
|
2012-03-11 04:14:00 +00:00
|
|
|
* DPI does not check FCS, therefore FRAG will never increment on DPI ports 32-35
|
|
|
|
* sRIO does not check FCS, therefore FRAG will never increment on sRIO ports 40-47
|
2010-11-28 06:20:41 +00:00
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat8_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat8_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t frag : 32; /**< Number of packets with length < min and FCS error */
|
|
|
|
uint64_t undersz : 32; /**< Number of packets with length < min */
|
|
|
|
#else
|
|
|
|
uint64_t undersz : 32;
|
|
|
|
uint64_t frag : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat8_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat8_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat8_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat8_prtx cvmx_pip_xstat8_prtx_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cvmx_pip_xstat9_prt#
|
|
|
|
*
|
|
|
|
* PIP_XSTAT9_PRTX = PIP_XSTAT_JABBER / PIP_XSTAT_OVER
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Notes:
|
2012-03-11 04:14:00 +00:00
|
|
|
* DPI does not check FCS, therefore JABBER will never increment on DPI ports 32-35
|
|
|
|
* sRIO does not check FCS, therefore JABBER will never increment on sRIO ports 40-47 due to FCS errors
|
|
|
|
* sRIO does use the JABBER opcode to communicate sRIO error, therefore JABBER can increment under the sRIO error conditions
|
2010-11-28 06:20:41 +00:00
|
|
|
*/
|
2012-03-11 04:14:00 +00:00
|
|
|
union cvmx_pip_xstat9_prtx {
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t u64;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat9_prtx_s {
|
|
|
|
#ifdef __BIG_ENDIAN_BITFIELD
|
2010-11-28 06:20:41 +00:00
|
|
|
uint64_t jabber : 32; /**< Number of packets with length > max and FCS error */
|
|
|
|
uint64_t oversz : 32; /**< Number of packets with length > max */
|
|
|
|
#else
|
|
|
|
uint64_t oversz : 32;
|
|
|
|
uint64_t jabber : 32;
|
|
|
|
#endif
|
|
|
|
} s;
|
|
|
|
struct cvmx_pip_xstat9_prtx_s cn63xx;
|
|
|
|
struct cvmx_pip_xstat9_prtx_s cn63xxp1;
|
2012-03-11 04:14:00 +00:00
|
|
|
struct cvmx_pip_xstat9_prtx_s cn66xx;
|
2010-11-28 06:20:41 +00:00
|
|
|
};
|
|
|
|
typedef union cvmx_pip_xstat9_prtx cvmx_pip_xstat9_prtx_t;
|
|
|
|
|
|
|
|
#endif
|