summaryrefslogtreecommitdiffstats
path: root/sys/contrib/octeon-sdk/cvmx-mixx-defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/octeon-sdk/cvmx-mixx-defs.h')
-rw-r--r--sys/contrib/octeon-sdk/cvmx-mixx-defs.h1524
1 files changed, 1524 insertions, 0 deletions
diff --git a/sys/contrib/octeon-sdk/cvmx-mixx-defs.h b/sys/contrib/octeon-sdk/cvmx-mixx-defs.h
new file mode 100644
index 0000000..6c65e4f
--- /dev/null
+++ b/sys/contrib/octeon-sdk/cvmx-mixx-defs.h
@@ -0,0 +1,1524 @@
+/***********************license start***************
+ * Copyright (c) 2003-2012 Cavium Inc. (support@cavium.com). All rights
+ * 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.
+
+ * * Neither the name of Cavium Inc. nor the names of
+ * 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"
+ * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
+ * 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-mixx-defs.h
+ *
+ * Configuration and status register (CSR) type definitions for
+ * Octeon mixx.
+ *
+ * This file is auto generated. Do not edit.
+ *
+ * <hr>$Revision$<hr>
+ *
+ */
+#ifndef __CVMX_MIXX_DEFS_H__
+#define __CVMX_MIXX_DEFS_H__
+
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_BIST(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_BIST(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100078ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_BIST(offset) (CVMX_ADD_IO_SEG(0x0001070000100078ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_CTL(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_CTL(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100020ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_CTL(offset) (CVMX_ADD_IO_SEG(0x0001070000100020ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_INTENA(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_INTENA(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100050ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_INTENA(offset) (CVMX_ADD_IO_SEG(0x0001070000100050ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_IRCNT(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_IRCNT(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100030ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_IRCNT(offset) (CVMX_ADD_IO_SEG(0x0001070000100030ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_IRHWM(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_IRHWM(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100028ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_IRHWM(offset) (CVMX_ADD_IO_SEG(0x0001070000100028ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_IRING1(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_IRING1(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100010ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_IRING1(offset) (CVMX_ADD_IO_SEG(0x0001070000100010ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_IRING2(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_IRING2(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100018ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_IRING2(offset) (CVMX_ADD_IO_SEG(0x0001070000100018ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_ISR(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_ISR(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100048ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_ISR(offset) (CVMX_ADD_IO_SEG(0x0001070000100048ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_ORCNT(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_ORCNT(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100040ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_ORCNT(offset) (CVMX_ADD_IO_SEG(0x0001070000100040ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_ORHWM(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_ORHWM(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100038ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_ORHWM(offset) (CVMX_ADD_IO_SEG(0x0001070000100038ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_ORING1(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_ORING1(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100000ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_ORING1(offset) (CVMX_ADD_IO_SEG(0x0001070000100000ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_ORING2(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_ORING2(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100008ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_ORING2(offset) (CVMX_ADD_IO_SEG(0x0001070000100008ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_REMCNT(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset == 0))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_REMCNT(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100058ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_REMCNT(offset) (CVMX_ADD_IO_SEG(0x0001070000100058ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_TSCTL(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_TSCTL(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100068ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_TSCTL(offset) (CVMX_ADD_IO_SEG(0x0001070000100068ull) + ((offset) & 1) * 2048)
+#endif
+#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
+static inline uint64_t CVMX_MIXX_TSTAMP(unsigned long offset)
+{
+ if (!(
+ (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1))) ||
+ (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset == 0)))))
+ cvmx_warn("CVMX_MIXX_TSTAMP(%lu) is invalid on this chip\n", offset);
+ return CVMX_ADD_IO_SEG(0x0001070000100060ull) + ((offset) & 1) * 2048;
+}
+#else
+#define CVMX_MIXX_TSTAMP(offset) (CVMX_ADD_IO_SEG(0x0001070000100060ull) + ((offset) & 1) * 2048)
+#endif
+
+/**
+ * cvmx_mix#_bist
+ *
+ * MIX_BIST = MIX BIST Register
+ *
+ * Description:
+ * NOTE: To read the MIX_BIST register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_bist {
+ uint64_t u64;
+ struct cvmx_mixx_bist_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_6_63 : 58;
+ uint64_t opfdat : 1; /**< Bist Results for AGO OPF Buffer RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t mrgdat : 1; /**< Bist Results for AGI MRG Buffer RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t mrqdat : 1; /**< Bist Results for NBR CSR RdReq RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t ipfdat : 1; /**< Bist Results for MIX Inbound Packet RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t irfdat : 1; /**< Bist Results for MIX I-Ring Entry RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t orfdat : 1; /**< Bist Results for MIX O-Ring Entry RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+#else
+ uint64_t orfdat : 1;
+ uint64_t irfdat : 1;
+ uint64_t ipfdat : 1;
+ uint64_t mrqdat : 1;
+ uint64_t mrgdat : 1;
+ uint64_t opfdat : 1;
+ uint64_t reserved_6_63 : 58;
+#endif
+ } s;
+ struct cvmx_mixx_bist_cn52xx {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_4_63 : 60;
+ uint64_t mrqdat : 1; /**< Bist Results for NBR CSR RdReq RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t ipfdat : 1; /**< Bist Results for MIX Inbound Packet RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t irfdat : 1; /**< Bist Results for MIX I-Ring Entry RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+ uint64_t orfdat : 1; /**< Bist Results for MIX O-Ring Entry RAM
+ - 0: GOOD (or bist in progress/never run)
+ - 1: BAD */
+#else
+ uint64_t orfdat : 1;
+ uint64_t irfdat : 1;
+ uint64_t ipfdat : 1;
+ uint64_t mrqdat : 1;
+ uint64_t reserved_4_63 : 60;
+#endif
+ } cn52xx;
+ struct cvmx_mixx_bist_cn52xx cn52xxp1;
+ struct cvmx_mixx_bist_cn52xx cn56xx;
+ struct cvmx_mixx_bist_cn52xx cn56xxp1;
+ struct cvmx_mixx_bist_s cn61xx;
+ struct cvmx_mixx_bist_s cn63xx;
+ struct cvmx_mixx_bist_s cn63xxp1;
+ struct cvmx_mixx_bist_s cn66xx;
+ struct cvmx_mixx_bist_s cn68xx;
+ struct cvmx_mixx_bist_s cn68xxp1;
+};
+typedef union cvmx_mixx_bist cvmx_mixx_bist_t;
+
+/**
+ * cvmx_mix#_ctl
+ *
+ * MIX_CTL = MIX Control Register
+ *
+ * Description:
+ * NOTE: To write to the MIX_CTL register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_CTL register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_ctl {
+ uint64_t u64;
+ struct cvmx_mixx_ctl_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_12_63 : 52;
+ uint64_t ts_thresh : 4; /**< TimeStamp Interrupt Threshold
+ When the \#of pending Timestamp interrupts (MIX_TSCTL[TSCNT]
+ is greater than MIX_CTL[TS_THRESH], then a programmable
+ TimeStamp Interrupt is issued (see MIX_INTR[TS]
+ MIX_INTENA[TSENA]).
+ SWNOTE: For o63, since the implementation only supports
+ 4 oustanding timestamp interrupts, this field should
+ only be programmed from [0..3]. */
+ uint64_t crc_strip : 1; /**< HW CRC Strip Enable
+ When enabled, the last 4 bytes(CRC) of the ingress packet
+ are not included in cumulative packet byte length.
+ In other words, the cumulative LEN field for all
+ I-Ring Buffer Entries associated with a given ingress
+ packet will be 4 bytes less (so that the final 4B HW CRC
+ packet data is not processed by software). */
+ uint64_t busy : 1; /**< MIX Busy Status bit
+ MIX will assert busy status any time there are:
+ 1) L2/DRAM reads in-flight (NCB-arb to read
+ response)
+ 2) L2/DRAM writes in-flight (NCB-arb to write
+ data is sent.
+ 3) L2/DRAM write commits in-flight (NCB-arb to write
+ commit response).
+ NOTE: After MIX_CTL[EN]=0, the MIX will eventually
+ complete any "inflight" transactions, at which point the
+ BUSY will de-assert. */
+ uint64_t en : 1; /**< MIX Enable bit
+ When EN=0, MIX will no longer arbitrate for
+ any new L2/DRAM read/write requests on the NCB Bus.
+ MIX will complete any requests that are currently
+ pended for the NCB Bus. */
+ uint64_t reset : 1; /**< MIX Soft Reset
+ When SW writes a '1' to MIX_CTL[RESET], the
+ MII-MIX/AGL logic will execute a soft reset.
+ NOTE: During a soft reset, CSR accesses are not effected.
+ However, the values of the CSR fields will be effected by
+ soft reset (except MIX_CTL[RESET] itself).
+ NOTE: After power-on, the MII-AGL/MIX are held in reset
+ until the MIX_CTL[RESET] is written to zero. SW MUST also
+ perform a MIX_CTL CSR read after this write to ensure the
+ soft reset de-assertion has had sufficient time to propagate
+ to all MIO-MIX internal logic before any subsequent MIX CSR
+ accesses are issued.
+ The intended "soft reset" sequence is: (please also
+ refer to HRM Section 12.6.2 on MIX/AGL Block Reset).
+ 1) Write MIX_CTL[EN]=0
+ [To prevent any NEW transactions from being started]
+ 2) Wait for MIX_CTL[BUSY]=0
+ [To indicate that all inflight transactions have
+ completed]
+ 3) Write MIX_CTL[RESET]=1, followed by a MIX_CTL CSR read
+ and wait for the result.
+ 4) Re-Initialize the MIX/AGL just as would be done
+ for a hard reset.
+ NOTE: Once the MII has been soft-reset, please refer to HRM Section
+ 12.6.1 MIX/AGL BringUp Sequence to complete the MIX/AGL
+ re-initialization sequence. */
+ uint64_t lendian : 1; /**< Packet Little Endian Mode
+ (0: Big Endian Mode/1: Little Endian Mode)
+ When the mode is set, MIX will byte-swap packet data
+ loads/stores at the MIX/NCB boundary. */
+ uint64_t nbtarb : 1; /**< MIX CB-Request Arbitration Mode.
+ When set to zero, the arbiter is fixed priority with
+ the following priority scheme:
+ Highest Priority: I-Ring Packet Write Request
+ O-Ring Packet Read Request
+ I-Ring Entry Write Request
+ I-Ring Entry Read Request
+ O-Ring Entry Read Request
+ When set to one, the arbiter is round robin. */
+ uint64_t mrq_hwm : 2; /**< MIX CB-Request FIFO Programmable High Water Mark.
+ The MRQ contains 16 CB-Requests which are CSR Rd/Wr
+ Requests. If the MRQ backs up with "HWM" entries,
+ then new CB-Requests are 'stalled'.
+ [0]: HWM = 11
+ [1]: HWM = 10
+ [2]: HWM = 9
+ [3]: HWM = 8
+ NOTE: This must only be written at power-on/boot time. */
+#else
+ uint64_t mrq_hwm : 2;
+ uint64_t nbtarb : 1;
+ uint64_t lendian : 1;
+ uint64_t reset : 1;
+ uint64_t en : 1;
+ uint64_t busy : 1;
+ uint64_t crc_strip : 1;
+ uint64_t ts_thresh : 4;
+ uint64_t reserved_12_63 : 52;
+#endif
+ } s;
+ struct cvmx_mixx_ctl_cn52xx {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_8_63 : 56;
+ uint64_t crc_strip : 1; /**< HW CRC Strip Enable
+ When enabled, the last 4 bytes(CRC) of the ingress packet
+ are not included in cumulative packet byte length.
+ In other words, the cumulative LEN field for all
+ I-Ring Buffer Entries associated with a given ingress
+ packet will be 4 bytes less (so that the final 4B HW CRC
+ packet data is not processed by software). */
+ uint64_t busy : 1; /**< MIX Busy Status bit
+ MIX will assert busy status any time there are:
+ 1) L2/DRAM reads in-flight (NCB-arb to read
+ response)
+ 2) L2/DRAM writes in-flight (NCB-arb to write
+ data is sent.
+ 3) L2/DRAM write commits in-flight (NCB-arb to write
+ commit response).
+ NOTE: After MIX_CTL[EN]=0, the MIX will eventually
+ complete any "inflight" transactions, at which point the
+ BUSY will de-assert. */
+ uint64_t en : 1; /**< MIX Enable bit
+ When EN=0, MIX will no longer arbitrate for
+ any new L2/DRAM read/write requests on the NCB Bus.
+ MIX will complete any requests that are currently
+ pended for the NCB Bus. */
+ uint64_t reset : 1; /**< MIX Soft Reset
+ When SW writes a '1' to MIX_CTL[RESET], the
+ MII-MIX/AGL logic will execute a soft reset.
+ NOTE: During a soft reset, CSR accesses are not effected.
+ However, the values of the CSR fields will be effected by
+ soft reset (except MIX_CTL[RESET] itself).
+ NOTE: After power-on, the MII-AGL/MIX are held in reset
+ until the MIX_CTL[RESET] is written to zero. SW MUST also
+ perform a MIX_CTL CSR read after this write to ensure the
+ soft reset de-assertion has had sufficient time to propagate
+ to all MIO-MIX internal logic before any subsequent MIX CSR
+ accesses are issued.
+ The intended "soft reset" sequence is: (please also
+ refer to HRM Section 12.6.2 on MIX/AGL Block Reset).
+ 1) Write MIX_CTL[EN]=0
+ [To prevent any NEW transactions from being started]
+ 2) Wait for MIX_CTL[BUSY]=0
+ [To indicate that all inflight transactions have
+ completed]
+ 3) Write MIX_CTL[RESET]=1, followed by a MIX_CTL CSR read
+ and wait for the result.
+ 4) Re-Initialize the MIX/AGL just as would be done
+ for a hard reset.
+ NOTE: Once the MII has been soft-reset, please refer to HRM Section
+ 12.6.1 MIX/AGL BringUp Sequence to complete the MIX/AGL
+ re-initialization sequence. */
+ uint64_t lendian : 1; /**< Packet Little Endian Mode
+ (0: Big Endian Mode/1: Little Endian Mode)
+ When the mode is set, MIX will byte-swap packet data
+ loads/stores at the MIX/NCB boundary. */
+ uint64_t nbtarb : 1; /**< MIX CB-Request Arbitration Mode.
+ When set to zero, the arbiter is fixed priority with
+ the following priority scheme:
+ Highest Priority: I-Ring Packet Write Request
+ O-Ring Packet Read Request
+ I-Ring Entry Write Request
+ I-Ring Entry Read Request
+ O-Ring Entry Read Request
+ When set to one, the arbiter is round robin. */
+ uint64_t mrq_hwm : 2; /**< MIX CB-Request FIFO Programmable High Water Mark.
+ The MRQ contains 16 CB-Requests which are CSR Rd/Wr
+ Requests. If the MRQ backs up with "HWM" entries,
+ then new CB-Requests are 'stalled'.
+ [0]: HWM = 11
+ [1]: HWM = 10
+ [2]: HWM = 9
+ [3]: HWM = 8
+ NOTE: This must only be written at power-on/boot time. */
+#else
+ uint64_t mrq_hwm : 2;
+ uint64_t nbtarb : 1;
+ uint64_t lendian : 1;
+ uint64_t reset : 1;
+ uint64_t en : 1;
+ uint64_t busy : 1;
+ uint64_t crc_strip : 1;
+ uint64_t reserved_8_63 : 56;
+#endif
+ } cn52xx;
+ struct cvmx_mixx_ctl_cn52xx cn52xxp1;
+ struct cvmx_mixx_ctl_cn52xx cn56xx;
+ struct cvmx_mixx_ctl_cn52xx cn56xxp1;
+ struct cvmx_mixx_ctl_s cn61xx;
+ struct cvmx_mixx_ctl_s cn63xx;
+ struct cvmx_mixx_ctl_s cn63xxp1;
+ struct cvmx_mixx_ctl_s cn66xx;
+ struct cvmx_mixx_ctl_s cn68xx;
+ struct cvmx_mixx_ctl_s cn68xxp1;
+};
+typedef union cvmx_mixx_ctl cvmx_mixx_ctl_t;
+
+/**
+ * cvmx_mix#_intena
+ *
+ * MIX_INTENA = MIX Local Interrupt Enable Mask Register
+ *
+ * Description:
+ * NOTE: To write to the MIX_INTENA register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_INTENA register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_intena {
+ uint64_t u64;
+ struct cvmx_mixx_intena_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_8_63 : 56;
+ uint64_t tsena : 1; /**< TimeStamp Interrupt Enable
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Outbound Ring with Timestamp
+ event (see: MIX_ISR[TS]). */
+ uint64_t orunena : 1; /**< ORCNT UnderFlow Detected Enable
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an ORCNT underflow condition
+ MIX_ISR[ORUN]. */
+ uint64_t irunena : 1; /**< IRCNT UnderFlow Interrupt Enable
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an IRCNT underflow condition
+ MIX_ISR[IRUN]. */
+ uint64_t data_drpena : 1; /**< Data was dropped due to RX FIFO full Interrupt
+ enable. If both the global interrupt mask bits
+ (CIU2_EN_xx_yy_PKT[MII]) and the local interrupt mask
+ bit(DATA_DRPENA) is set, than an interrupt is
+ reported for this event. */
+ uint64_t ithena : 1; /**< Inbound Ring Threshold Exceeded Interrupt Enable
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Inbound Ring Threshold
+ Exceeded event(IRTHRESH). */
+ uint64_t othena : 1; /**< Outbound Ring Threshold Exceeded Interrupt Enable
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Outbound Ring Threshold
+ Exceeded event(ORTHRESH). */
+ uint64_t ivfena : 1; /**< Inbound DoorBell(IDBELL) Overflow Detected
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Inbound Doorbell Overflow
+ event(IDBOVF). */
+ uint64_t ovfena : 1; /**< Outbound DoorBell(ODBELL) Overflow Interrupt Enable
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Outbound Doorbell Overflow
+ event(ODBOVF). */
+#else
+ uint64_t ovfena : 1;
+ uint64_t ivfena : 1;
+ uint64_t othena : 1;
+ uint64_t ithena : 1;
+ uint64_t data_drpena : 1;
+ uint64_t irunena : 1;
+ uint64_t orunena : 1;
+ uint64_t tsena : 1;
+ uint64_t reserved_8_63 : 56;
+#endif
+ } s;
+ struct cvmx_mixx_intena_cn52xx {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_7_63 : 57;
+ uint64_t orunena : 1; /**< ORCNT UnderFlow Detected
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an ORCNT underflow condition
+ MIX_ISR[ORUN]. */
+ uint64_t irunena : 1; /**< IRCNT UnderFlow Interrupt Enable
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an IRCNT underflow condition
+ MIX_ISR[IRUN]. */
+ uint64_t data_drpena : 1; /**< Data was dropped due to RX FIFO full Interrupt
+ enable. If both the global interrupt mask bits
+ (CIU_INTx_EN*[MII]) and the local interrupt mask
+ bit(DATA_DRPENA) is set, than an interrupt is
+ reported for this event. */
+ uint64_t ithena : 1; /**< Inbound Ring Threshold Exceeded Interrupt Enable
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Inbound Ring Threshold
+ Exceeded event(IRTHRESH). */
+ uint64_t othena : 1; /**< Outbound Ring Threshold Exceeded Interrupt Enable
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Outbound Ring Threshold
+ Exceeded event(ORTHRESH). */
+ uint64_t ivfena : 1; /**< Inbound DoorBell(IDBELL) Overflow Detected
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Inbound Doorbell Overflow
+ event(IDBOVF). */
+ uint64_t ovfena : 1; /**< Outbound DoorBell(ODBELL) Overflow Interrupt Enable
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Outbound Doorbell Overflow
+ event(ODBOVF). */
+#else
+ uint64_t ovfena : 1;
+ uint64_t ivfena : 1;
+ uint64_t othena : 1;
+ uint64_t ithena : 1;
+ uint64_t data_drpena : 1;
+ uint64_t irunena : 1;
+ uint64_t orunena : 1;
+ uint64_t reserved_7_63 : 57;
+#endif
+ } cn52xx;
+ struct cvmx_mixx_intena_cn52xx cn52xxp1;
+ struct cvmx_mixx_intena_cn52xx cn56xx;
+ struct cvmx_mixx_intena_cn52xx cn56xxp1;
+ struct cvmx_mixx_intena_s cn61xx;
+ struct cvmx_mixx_intena_s cn63xx;
+ struct cvmx_mixx_intena_s cn63xxp1;
+ struct cvmx_mixx_intena_s cn66xx;
+ struct cvmx_mixx_intena_s cn68xx;
+ struct cvmx_mixx_intena_s cn68xxp1;
+};
+typedef union cvmx_mixx_intena cvmx_mixx_intena_t;
+
+/**
+ * cvmx_mix#_ircnt
+ *
+ * MIX_IRCNT = MIX I-Ring Pending Packet Counter
+ *
+ * Description:
+ * NOTE: To write to the MIX_IRCNT register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_IRCNT register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_ircnt {
+ uint64_t u64;
+ struct cvmx_mixx_ircnt_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_20_63 : 44;
+ uint64_t ircnt : 20; /**< Pending \# of I-Ring Packets.
+ Whenever HW writes a completion code of Done, Trunc,
+ CRCErr or Err, it increments the IRCNT (to indicate
+ to SW the \# of pending Input packets in system memory).
+ NOTE: The HW guarantees that the completion code write
+ is always visible in system memory BEFORE it increments
+ the IRCNT.
+ Reads of IRCNT return the current inbound packet count.
+ Writes of IRCNT decrement the count by the value
+ written.
+ This register is used to generate interrupts to alert
+ SW of pending inbound MIX packets in system memory.
+ NOTE: In the case of inbound packets that span multiple
+ I-Ring entries, SW must keep track of the \# of I-Ring Entries
+ associated with a given inbound packet to reclaim the
+ proper \# of I-Ring Entries for re-use. */
+#else
+ uint64_t ircnt : 20;
+ uint64_t reserved_20_63 : 44;
+#endif
+ } s;
+ struct cvmx_mixx_ircnt_s cn52xx;
+ struct cvmx_mixx_ircnt_s cn52xxp1;
+ struct cvmx_mixx_ircnt_s cn56xx;
+ struct cvmx_mixx_ircnt_s cn56xxp1;
+ struct cvmx_mixx_ircnt_s cn61xx;
+ struct cvmx_mixx_ircnt_s cn63xx;
+ struct cvmx_mixx_ircnt_s cn63xxp1;
+ struct cvmx_mixx_ircnt_s cn66xx;
+ struct cvmx_mixx_ircnt_s cn68xx;
+ struct cvmx_mixx_ircnt_s cn68xxp1;
+};
+typedef union cvmx_mixx_ircnt cvmx_mixx_ircnt_t;
+
+/**
+ * cvmx_mix#_irhwm
+ *
+ * MIX_IRHWM = MIX I-Ring High-Water Mark Threshold Register
+ *
+ * Description:
+ * NOTE: To write to the MIX_IHWM register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_IHWM register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_irhwm {
+ uint64_t u64;
+ struct cvmx_mixx_irhwm_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_40_63 : 24;
+ uint64_t ibplwm : 20; /**< I-Ring BackPressure Low Water Mark Threshold.
+ When the \#of available I-Ring Entries (IDBELL)
+ is less than IBPLWM, the AGL-MAC will:
+ a) In full-duplex mode: send periodic PAUSE packets.
+ b) In half-duplex mode: Force collisions.
+ This programmable mechanism is provided as a means
+ to backpressure input traffic 'early' enough (so
+ that packets are not 'dropped' by OCTEON). */
+ uint64_t irhwm : 20; /**< I-Ring Entry High Water Mark Threshold.
+ Used to determine when the \# of Inbound packets
+ in system memory(MIX_IRCNT[IRCNT]) exceeds this IRHWM
+ threshold.
+ NOTE: The power-on value of the CIU2_EN_xx_yy_PKT[MII]
+ interrupt enable bits is zero and must be enabled
+ to allow interrupts to be reported. */
+#else
+ uint64_t irhwm : 20;
+ uint64_t ibplwm : 20;
+ uint64_t reserved_40_63 : 24;
+#endif
+ } s;
+ struct cvmx_mixx_irhwm_s cn52xx;
+ struct cvmx_mixx_irhwm_s cn52xxp1;
+ struct cvmx_mixx_irhwm_s cn56xx;
+ struct cvmx_mixx_irhwm_s cn56xxp1;
+ struct cvmx_mixx_irhwm_s cn61xx;
+ struct cvmx_mixx_irhwm_s cn63xx;
+ struct cvmx_mixx_irhwm_s cn63xxp1;
+ struct cvmx_mixx_irhwm_s cn66xx;
+ struct cvmx_mixx_irhwm_s cn68xx;
+ struct cvmx_mixx_irhwm_s cn68xxp1;
+};
+typedef union cvmx_mixx_irhwm cvmx_mixx_irhwm_t;
+
+/**
+ * cvmx_mix#_iring1
+ *
+ * MIX_IRING1 = MIX Inbound Ring Register \#1
+ *
+ * Description:
+ * NOTE: To write to the MIX_IRING1 register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_IRING1 register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_iring1 {
+ uint64_t u64;
+ struct cvmx_mixx_iring1_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_60_63 : 4;
+ uint64_t isize : 20; /**< Represents the Inbound Ring Buffer's Size(in 8B
+ words). The ring can be as large as 1M entries.
+ NOTE: This CSR MUST BE setup written by SW poweron
+ (when IDBELL/IRCNT=0). */
+ uint64_t ibase : 37; /**< Represents the 8B-aligned base address of the first
+ Inbound Ring entry in system memory.
+ NOTE: SW MUST ONLY write to this register during
+ power-on/boot code. */
+ uint64_t reserved_0_2 : 3;
+#else
+ uint64_t reserved_0_2 : 3;
+ uint64_t ibase : 37;
+ uint64_t isize : 20;
+ uint64_t reserved_60_63 : 4;
+#endif
+ } s;
+ struct cvmx_mixx_iring1_cn52xx {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_60_63 : 4;
+ uint64_t isize : 20; /**< Represents the Inbound Ring Buffer's Size(in 8B
+ words). The ring can be as large as 1M entries.
+ NOTE: This CSR MUST BE setup written by SW poweron
+ (when IDBELL/IRCNT=0). */
+ uint64_t reserved_36_39 : 4;
+ uint64_t ibase : 33; /**< Represents the 8B-aligned base address of the first
+ Inbound Ring entry in system memory.
+ NOTE: SW MUST ONLY write to this register during
+ power-on/boot code. */
+ uint64_t reserved_0_2 : 3;
+#else
+ uint64_t reserved_0_2 : 3;
+ uint64_t ibase : 33;
+ uint64_t reserved_36_39 : 4;
+ uint64_t isize : 20;
+ uint64_t reserved_60_63 : 4;
+#endif
+ } cn52xx;
+ struct cvmx_mixx_iring1_cn52xx cn52xxp1;
+ struct cvmx_mixx_iring1_cn52xx cn56xx;
+ struct cvmx_mixx_iring1_cn52xx cn56xxp1;
+ struct cvmx_mixx_iring1_s cn61xx;
+ struct cvmx_mixx_iring1_s cn63xx;
+ struct cvmx_mixx_iring1_s cn63xxp1;
+ struct cvmx_mixx_iring1_s cn66xx;
+ struct cvmx_mixx_iring1_s cn68xx;
+ struct cvmx_mixx_iring1_s cn68xxp1;
+};
+typedef union cvmx_mixx_iring1 cvmx_mixx_iring1_t;
+
+/**
+ * cvmx_mix#_iring2
+ *
+ * MIX_IRING2 = MIX Inbound Ring Register \#2
+ *
+ * Description:
+ * NOTE: To write to the MIX_IRING2 register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_IRING2 register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_iring2 {
+ uint64_t u64;
+ struct cvmx_mixx_iring2_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_52_63 : 12;
+ uint64_t itlptr : 20; /**< The Inbound Ring Tail Pointer selects the I-Ring
+ Entry that the HW will process next. After the HW
+ completes receiving an inbound packet, it increments
+ the I-Ring Tail Pointer. [NOTE: The I-Ring Tail
+ Pointer HW increment is always modulo ISIZE.
+ NOTE: This field is 'read-only' to SW. */
+ uint64_t reserved_20_31 : 12;
+ uint64_t idbell : 20; /**< Represents the cumulative total of pending
+ Inbound Ring Buffer Entries. Each I-Ring
+ Buffer Entry contains 1) an L2/DRAM byte pointer
+ along with a 2) a Byte Length.
+ After SW inserts a new entry into the I-Ring Buffer,
+ it "rings the doorbell for the inbound ring". When
+ the MIX HW receives the doorbell ring, it advances
+ the doorbell count for the I-Ring.
+ SW must never cause the doorbell count for the
+ I-Ring to exceed the size of the I-ring(ISIZE).
+ A read of the CSR indicates the current doorbell
+ count. */
+#else
+ uint64_t idbell : 20;
+ uint64_t reserved_20_31 : 12;
+ uint64_t itlptr : 20;
+ uint64_t reserved_52_63 : 12;
+#endif
+ } s;
+ struct cvmx_mixx_iring2_s cn52xx;
+ struct cvmx_mixx_iring2_s cn52xxp1;
+ struct cvmx_mixx_iring2_s cn56xx;
+ struct cvmx_mixx_iring2_s cn56xxp1;
+ struct cvmx_mixx_iring2_s cn61xx;
+ struct cvmx_mixx_iring2_s cn63xx;
+ struct cvmx_mixx_iring2_s cn63xxp1;
+ struct cvmx_mixx_iring2_s cn66xx;
+ struct cvmx_mixx_iring2_s cn68xx;
+ struct cvmx_mixx_iring2_s cn68xxp1;
+};
+typedef union cvmx_mixx_iring2 cvmx_mixx_iring2_t;
+
+/**
+ * cvmx_mix#_isr
+ *
+ * MIX_ISR = MIX Interrupt/Status Register
+ *
+ * Description:
+ * NOTE: To write to the MIX_ISR register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_ISR register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_isr {
+ uint64_t u64;
+ struct cvmx_mixx_isr_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_8_63 : 56;
+ uint64_t ts : 1; /**< TimeStamp Interrupt
+ When the \#of pending Timestamp Interrupts (MIX_TSCTL[TSCNT])
+ is greater than the TimeStamp Interrupt Threshold
+ (MIX_CTL[TS_THRESH]) value this interrupt bit is set.
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and this local interrupt mask bit is set, than an
+ interrupt is reported for an Outbound Ring with Timestamp
+ event (see: MIX_INTENA[TSENA]). */
+ uint64_t orun : 1; /**< ORCNT UnderFlow Detected
+ If SW writes a larger value than what is currently
+ in the MIX_ORCNT[ORCNT], then HW will report the
+ underflow condition.
+ NOTE: The MIX_ORCNT[IOCNT] will clamp to to zero.
+ NOTE: If an ORUN underflow condition is detected,
+ the integrity of the MIX/AGL HW state has
+ been compromised. To recover, SW must issue a
+ software reset sequence (see: MIX_CTL[RESET] */
+ uint64_t irun : 1; /**< IRCNT UnderFlow Detected
+ If SW writes a larger value than what is currently
+ in the MIX_IRCNT[IRCNT], then HW will report the
+ underflow condition.
+ NOTE: The MIX_IRCNT[IRCNT] will clamp to to zero.
+ NOTE: If an IRUN underflow condition is detected,
+ the integrity of the MIX/AGL HW state has
+ been compromised. To recover, SW must issue a
+ software reset sequence (see: MIX_CTL[RESET] */
+ uint64_t data_drp : 1; /**< Data was dropped due to RX FIFO full
+ If this does occur, the DATA_DRP is set and the
+ CIU2_RAW_PKT[MII] bit is set.
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and the local interrupt mask bit(DATA_DRPENA) is set, than an
+ interrupt is reported for this event. */
+ uint64_t irthresh : 1; /**< Inbound Ring Packet Threshold Exceeded
+ When the pending \#inbound packets in system
+ memory(IRCNT) has exceeded a programmable threshold
+ (IRHWM), then this bit is set. If this does occur,
+ the IRTHRESH is set and the CIU2_RAW_PKT[MII] bit
+ is set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and the local interrupt mask bit(ITHENA) is set, than an
+ interrupt is reported for this event. */
+ uint64_t orthresh : 1; /**< Outbound Ring Packet Threshold Exceeded
+ When the pending \#outbound packets in system
+ memory(ORCNT) has exceeded a programmable threshold
+ (ORHWM), then this bit is set. If this does occur,
+ the ORTHRESH is set and the CIU2_RAW_PKT[MII] bit
+ is set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and the local interrupt mask bit(OTHENA) is set, than an
+ interrupt is reported for this event. */
+ uint64_t idblovf : 1; /**< Inbound DoorBell(IDBELL) Overflow Detected
+ If SW attempts to write to the MIX_IRING2[IDBELL]
+ with a value greater than the remaining \#of
+ I-Ring Buffer Entries (MIX_REMCNT[IREMCNT]), then
+ the following occurs:
+ 1) The MIX_IRING2[IDBELL] write is IGNORED
+ 2) The ODBLOVF is set and the CIU2_RAW_PKT[MII]
+ bit is set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and the local interrupt mask bit(IVFENA) is set, than an
+ interrupt is reported for this event.
+ SW should keep track of the \#I-Ring Entries in use
+ (ie: cumulative \# of IDBELL writes), and ensure that
+ future IDBELL writes don't exceed the size of the
+ I-Ring Buffer (MIX_IRING2[ISIZE]).
+ SW must reclaim I-Ring Entries by keeping track of the
+ \#IRing-Entries, and writing to the MIX_IRCNT[IRCNT].
+ NOTE: The MIX_IRCNT[IRCNT] register represents the
+ total \#packets(not IRing Entries) and SW must further
+ keep track of the \# of I-Ring Entries associated with
+ each packet as they are processed.
+ NOTE: There is no recovery from an IDBLOVF Interrupt.
+ If it occurs, it's an indication that SW has
+ overwritten the I-Ring buffer, and the only recourse
+ is a HW reset. */
+ uint64_t odblovf : 1; /**< Outbound DoorBell(ODBELL) Overflow Detected
+ If SW attempts to write to the MIX_ORING2[ODBELL]
+ with a value greater than the remaining \#of
+ O-Ring Buffer Entries (MIX_REMCNT[OREMCNT]), then
+ the following occurs:
+ 1) The MIX_ORING2[ODBELL] write is IGNORED
+ 2) The ODBLOVF is set and the CIU2_RAW_PKT[MII]
+ bit is set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU2_EN_xx_yy_PKT[MII])
+ and the local interrupt mask bit(OVFENA) is set, than an
+ interrupt is reported for this event.
+ SW should keep track of the \#I-Ring Entries in use
+ (ie: cumulative \# of ODBELL writes), and ensure that
+ future ODBELL writes don't exceed the size of the
+ O-Ring Buffer (MIX_ORING2[OSIZE]).
+ SW must reclaim O-Ring Entries by writing to the
+ MIX_ORCNT[ORCNT]. .
+ NOTE: There is no recovery from an ODBLOVF Interrupt.
+ If it occurs, it's an indication that SW has
+ overwritten the O-Ring buffer, and the only recourse
+ is a HW reset. */
+#else
+ uint64_t odblovf : 1;
+ uint64_t idblovf : 1;
+ uint64_t orthresh : 1;
+ uint64_t irthresh : 1;
+ uint64_t data_drp : 1;
+ uint64_t irun : 1;
+ uint64_t orun : 1;
+ uint64_t ts : 1;
+ uint64_t reserved_8_63 : 56;
+#endif
+ } s;
+ struct cvmx_mixx_isr_cn52xx {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_7_63 : 57;
+ uint64_t orun : 1; /**< ORCNT UnderFlow Detected
+ If SW writes a larger value than what is currently
+ in the MIX_ORCNT[ORCNT], then HW will report the
+ underflow condition.
+ NOTE: The MIX_ORCNT[IOCNT] will clamp to to zero.
+ NOTE: If an ORUN underflow condition is detected,
+ the integrity of the MIX/AGL HW state has
+ been compromised. To recover, SW must issue a
+ software reset sequence (see: MIX_CTL[RESET] */
+ uint64_t irun : 1; /**< IRCNT UnderFlow Detected
+ If SW writes a larger value than what is currently
+ in the MIX_IRCNT[IRCNT], then HW will report the
+ underflow condition.
+ NOTE: The MIX_IRCNT[IRCNT] will clamp to to zero.
+ NOTE: If an IRUN underflow condition is detected,
+ the integrity of the MIX/AGL HW state has
+ been compromised. To recover, SW must issue a
+ software reset sequence (see: MIX_CTL[RESET] */
+ uint64_t data_drp : 1; /**< Data was dropped due to RX FIFO full
+ If this does occur, the DATA_DRP is set and the
+ CIU_INTx_SUM0,4[MII] bits are set.
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and the local interrupt mask bit(DATA_DRPENA) is set, than an
+ interrupt is reported for this event. */
+ uint64_t irthresh : 1; /**< Inbound Ring Packet Threshold Exceeded
+ When the pending \#inbound packets in system
+ memory(IRCNT) has exceeded a programmable threshold
+ (IRHWM), then this bit is set. If this does occur,
+ the IRTHRESH is set and the CIU_INTx_SUM0,4[MII] bits
+ are set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and the local interrupt mask bit(ITHENA) is set, than an
+ interrupt is reported for this event. */
+ uint64_t orthresh : 1; /**< Outbound Ring Packet Threshold Exceeded
+ When the pending \#outbound packets in system
+ memory(ORCNT) has exceeded a programmable threshold
+ (ORHWM), then this bit is set. If this does occur,
+ the ORTHRESH is set and the CIU_INTx_SUM0,4[MII] bits
+ are set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and the local interrupt mask bit(OTHENA) is set, than an
+ interrupt is reported for this event. */
+ uint64_t idblovf : 1; /**< Inbound DoorBell(IDBELL) Overflow Detected
+ If SW attempts to write to the MIX_IRING2[IDBELL]
+ with a value greater than the remaining \#of
+ I-Ring Buffer Entries (MIX_REMCNT[IREMCNT]), then
+ the following occurs:
+ 1) The MIX_IRING2[IDBELL] write is IGNORED
+ 2) The ODBLOVF is set and the CIU_INTx_SUM0,4[MII]
+ bits are set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and the local interrupt mask bit(IVFENA) is set, than an
+ interrupt is reported for this event.
+ SW should keep track of the \#I-Ring Entries in use
+ (ie: cumulative \# of IDBELL writes), and ensure that
+ future IDBELL writes don't exceed the size of the
+ I-Ring Buffer (MIX_IRING2[ISIZE]).
+ SW must reclaim I-Ring Entries by keeping track of the
+ \#IRing-Entries, and writing to the MIX_IRCNT[IRCNT].
+ NOTE: The MIX_IRCNT[IRCNT] register represents the
+ total \#packets(not IRing Entries) and SW must further
+ keep track of the \# of I-Ring Entries associated with
+ each packet as they are processed.
+ NOTE: There is no recovery from an IDBLOVF Interrupt.
+ If it occurs, it's an indication that SW has
+ overwritten the I-Ring buffer, and the only recourse
+ is a HW reset. */
+ uint64_t odblovf : 1; /**< Outbound DoorBell(ODBELL) Overflow Detected
+ If SW attempts to write to the MIX_ORING2[ODBELL]
+ with a value greater than the remaining \#of
+ O-Ring Buffer Entries (MIX_REMCNT[OREMCNT]), then
+ the following occurs:
+ 1) The MIX_ORING2[ODBELL] write is IGNORED
+ 2) The ODBLOVF is set and the CIU_INTx_SUM0,4[MII]
+ bits are set if ((MIX_ISR & MIX_INTENA) != 0)).
+ If both the global interrupt mask bits (CIU_INTx_EN*[MII])
+ and the local interrupt mask bit(OVFENA) is set, than an
+ interrupt is reported for this event.
+ SW should keep track of the \#I-Ring Entries in use
+ (ie: cumulative \# of ODBELL writes), and ensure that
+ future ODBELL writes don't exceed the size of the
+ O-Ring Buffer (MIX_ORING2[OSIZE]).
+ SW must reclaim O-Ring Entries by writing to the
+ MIX_ORCNT[ORCNT]. .
+ NOTE: There is no recovery from an ODBLOVF Interrupt.
+ If it occurs, it's an indication that SW has
+ overwritten the O-Ring buffer, and the only recourse
+ is a HW reset. */
+#else
+ uint64_t odblovf : 1;
+ uint64_t idblovf : 1;
+ uint64_t orthresh : 1;
+ uint64_t irthresh : 1;
+ uint64_t data_drp : 1;
+ uint64_t irun : 1;
+ uint64_t orun : 1;
+ uint64_t reserved_7_63 : 57;
+#endif
+ } cn52xx;
+ struct cvmx_mixx_isr_cn52xx cn52xxp1;
+ struct cvmx_mixx_isr_cn52xx cn56xx;
+ struct cvmx_mixx_isr_cn52xx cn56xxp1;
+ struct cvmx_mixx_isr_s cn61xx;
+ struct cvmx_mixx_isr_s cn63xx;
+ struct cvmx_mixx_isr_s cn63xxp1;
+ struct cvmx_mixx_isr_s cn66xx;
+ struct cvmx_mixx_isr_s cn68xx;
+ struct cvmx_mixx_isr_s cn68xxp1;
+};
+typedef union cvmx_mixx_isr cvmx_mixx_isr_t;
+
+/**
+ * cvmx_mix#_orcnt
+ *
+ * MIX_ORCNT = MIX O-Ring Packets Sent Counter
+ *
+ * Description:
+ * NOTE: To write to the MIX_ORCNT register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_ORCNT register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_orcnt {
+ uint64_t u64;
+ struct cvmx_mixx_orcnt_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_20_63 : 44;
+ uint64_t orcnt : 20; /**< Pending \# of O-Ring Packets.
+ Whenever HW removes a packet from the O-Ring, it
+ increments the ORCNT (to indicate to SW the \# of
+ Output packets in system memory that can be reclaimed).
+ Reads of ORCNT return the current count.
+ Writes of ORCNT decrement the count by the value
+ written.
+ This register is used to generate interrupts to alert
+ SW of pending outbound MIX packets that have been
+ removed from system memory. (see MIX_ISR[ORTHRESH]
+ description for more details).
+ NOTE: For outbound packets, the \# of O-Ring Packets
+ is equal to the \# of O-Ring Entries. */
+#else
+ uint64_t orcnt : 20;
+ uint64_t reserved_20_63 : 44;
+#endif
+ } s;
+ struct cvmx_mixx_orcnt_s cn52xx;
+ struct cvmx_mixx_orcnt_s cn52xxp1;
+ struct cvmx_mixx_orcnt_s cn56xx;
+ struct cvmx_mixx_orcnt_s cn56xxp1;
+ struct cvmx_mixx_orcnt_s cn61xx;
+ struct cvmx_mixx_orcnt_s cn63xx;
+ struct cvmx_mixx_orcnt_s cn63xxp1;
+ struct cvmx_mixx_orcnt_s cn66xx;
+ struct cvmx_mixx_orcnt_s cn68xx;
+ struct cvmx_mixx_orcnt_s cn68xxp1;
+};
+typedef union cvmx_mixx_orcnt cvmx_mixx_orcnt_t;
+
+/**
+ * cvmx_mix#_orhwm
+ *
+ * MIX_ORHWM = MIX O-Ring High-Water Mark Threshold Register
+ *
+ * Description:
+ * NOTE: To write to the MIX_ORHWM register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_ORHWM register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_orhwm {
+ uint64_t u64;
+ struct cvmx_mixx_orhwm_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_20_63 : 44;
+ uint64_t orhwm : 20; /**< O-Ring Entry High Water Mark Threshold.
+ Used to determine when the \# of Outbound packets
+ in system memory that can be reclaimed
+ (MIX_ORCNT[ORCNT]) exceeds this ORHWM threshold.
+ NOTE: The power-on value of the CIU2_EN_xx_yy_PKT[MII]
+ interrupt enable bits is zero and must be enabled
+ to allow interrupts to be reported. */
+#else
+ uint64_t orhwm : 20;
+ uint64_t reserved_20_63 : 44;
+#endif
+ } s;
+ struct cvmx_mixx_orhwm_s cn52xx;
+ struct cvmx_mixx_orhwm_s cn52xxp1;
+ struct cvmx_mixx_orhwm_s cn56xx;
+ struct cvmx_mixx_orhwm_s cn56xxp1;
+ struct cvmx_mixx_orhwm_s cn61xx;
+ struct cvmx_mixx_orhwm_s cn63xx;
+ struct cvmx_mixx_orhwm_s cn63xxp1;
+ struct cvmx_mixx_orhwm_s cn66xx;
+ struct cvmx_mixx_orhwm_s cn68xx;
+ struct cvmx_mixx_orhwm_s cn68xxp1;
+};
+typedef union cvmx_mixx_orhwm cvmx_mixx_orhwm_t;
+
+/**
+ * cvmx_mix#_oring1
+ *
+ * MIX_ORING1 = MIX Outbound Ring Register \#1
+ *
+ * Description:
+ * NOTE: To write to the MIX_ORING1 register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_ORING1 register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_oring1 {
+ uint64_t u64;
+ struct cvmx_mixx_oring1_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_60_63 : 4;
+ uint64_t osize : 20; /**< Represents the Outbound Ring Buffer's Size(in 8B
+ words). The ring can be as large as 1M entries.
+ NOTE: This CSR MUST BE setup written by SW poweron
+ (when ODBELL/ORCNT=0). */
+ uint64_t obase : 37; /**< Represents the 8B-aligned base address of the first
+ Outbound Ring(O-Ring) Entry in system memory.
+ NOTE: SW MUST ONLY write to this register during
+ power-on/boot code. */
+ uint64_t reserved_0_2 : 3;
+#else
+ uint64_t reserved_0_2 : 3;
+ uint64_t obase : 37;
+ uint64_t osize : 20;
+ uint64_t reserved_60_63 : 4;
+#endif
+ } s;
+ struct cvmx_mixx_oring1_cn52xx {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_60_63 : 4;
+ uint64_t osize : 20; /**< Represents the Outbound Ring Buffer's Size(in 8B
+ words). The ring can be as large as 1M entries.
+ NOTE: This CSR MUST BE setup written by SW poweron
+ (when ODBELL/ORCNT=0). */
+ uint64_t reserved_36_39 : 4;
+ uint64_t obase : 33; /**< Represents the 8B-aligned base address of the first
+ Outbound Ring(O-Ring) Entry in system memory.
+ NOTE: SW MUST ONLY write to this register during
+ power-on/boot code. */
+ uint64_t reserved_0_2 : 3;
+#else
+ uint64_t reserved_0_2 : 3;
+ uint64_t obase : 33;
+ uint64_t reserved_36_39 : 4;
+ uint64_t osize : 20;
+ uint64_t reserved_60_63 : 4;
+#endif
+ } cn52xx;
+ struct cvmx_mixx_oring1_cn52xx cn52xxp1;
+ struct cvmx_mixx_oring1_cn52xx cn56xx;
+ struct cvmx_mixx_oring1_cn52xx cn56xxp1;
+ struct cvmx_mixx_oring1_s cn61xx;
+ struct cvmx_mixx_oring1_s cn63xx;
+ struct cvmx_mixx_oring1_s cn63xxp1;
+ struct cvmx_mixx_oring1_s cn66xx;
+ struct cvmx_mixx_oring1_s cn68xx;
+ struct cvmx_mixx_oring1_s cn68xxp1;
+};
+typedef union cvmx_mixx_oring1 cvmx_mixx_oring1_t;
+
+/**
+ * cvmx_mix#_oring2
+ *
+ * MIX_ORING2 = MIX Outbound Ring Register \#2
+ *
+ * Description:
+ * NOTE: To write to the MIX_ORING2 register, a device would issue an IOBST directed at the MIO.
+ * To read the MIX_ORING2 register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_oring2 {
+ uint64_t u64;
+ struct cvmx_mixx_oring2_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_52_63 : 12;
+ uint64_t otlptr : 20; /**< The Outbound Ring Tail Pointer selects the O-Ring
+ Entry that the HW will process next. After the HW
+ completes sending an outbound packet, it increments
+ the O-Ring Tail Pointer. [NOTE: The O-Ring Tail
+ Pointer HW increment is always modulo
+ MIX_ORING2[OSIZE].
+ NOTE: This field is 'read-only' to SW. */
+ uint64_t reserved_20_31 : 12;
+ uint64_t odbell : 20; /**< Represents the cumulative total of pending
+ Outbound Ring(O-Ring) Buffer Entries. Each O-Ring
+ Buffer Entry contains 1) an L2/DRAM byte pointer
+ along with a 2) a Byte Length.
+ After SW inserts new entries into the O-Ring Buffer,
+ it "rings the doorbell with the count of the newly
+ inserted entries". When the MIX HW receives the
+ doorbell ring, it increments the current doorbell
+ count by the CSR write value.
+ SW must never cause the doorbell count for the
+ O-Ring to exceed the size of the ring(OSIZE).
+ A read of the CSR indicates the current doorbell
+ count. */
+#else
+ uint64_t odbell : 20;
+ uint64_t reserved_20_31 : 12;
+ uint64_t otlptr : 20;
+ uint64_t reserved_52_63 : 12;
+#endif
+ } s;
+ struct cvmx_mixx_oring2_s cn52xx;
+ struct cvmx_mixx_oring2_s cn52xxp1;
+ struct cvmx_mixx_oring2_s cn56xx;
+ struct cvmx_mixx_oring2_s cn56xxp1;
+ struct cvmx_mixx_oring2_s cn61xx;
+ struct cvmx_mixx_oring2_s cn63xx;
+ struct cvmx_mixx_oring2_s cn63xxp1;
+ struct cvmx_mixx_oring2_s cn66xx;
+ struct cvmx_mixx_oring2_s cn68xx;
+ struct cvmx_mixx_oring2_s cn68xxp1;
+};
+typedef union cvmx_mixx_oring2 cvmx_mixx_oring2_t;
+
+/**
+ * cvmx_mix#_remcnt
+ *
+ * MIX_REMCNT = MIX Ring Buffer Remainder Counts (useful for HW debug only)
+ *
+ * Description:
+ * NOTE: To read the MIX_REMCNT register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_remcnt {
+ uint64_t u64;
+ struct cvmx_mixx_remcnt_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_52_63 : 12;
+ uint64_t iremcnt : 20; /**< Remaining I-Ring Buffer Count
+ Reflects the \# of unused/remaining I-Ring Entries
+ that HW currently detects in the I-Ring Buffer.
+ HW uses this value to detect I-Ring Doorbell overflows.
+ (see: MIX_ISR[IDBLOVF])
+ When SW writes the MIX_IRING1[ISIZE], the IREMCNT
+ is loaded with MIX_IRING2[ISIZE] value. (NOTE: ISIZE should only
+ be written at power-on, when it's known that there are
+ no I-Ring Entries currently in use by HW).
+ When SW writes to the IDBELL register, the IREMCNT
+ is decremented by the CSR write value.
+ When HW issues an IRing Write Request(onto NCB Bus),
+ the IREMCNT is incremented by 1. */
+ uint64_t reserved_20_31 : 12;
+ uint64_t oremcnt : 20; /**< Remaining O-Ring Buffer Count
+ Reflects the \# of unused/remaining O-Ring Entries
+ that HW currently detects in the O-Ring Buffer.
+ HW uses this value to detect O-Ring Doorbell overflows.
+ (see: MIX_ISR[ODBLOVF])
+ When SW writes the MIX_IRING1[OSIZE], the OREMCNT
+ is loaded with MIX_ORING2[OSIZE] value. (NOTE: OSIZE should only
+ be written at power-on, when it's known that there are
+ no O-Ring Entries currently in use by HW).
+ When SW writes to the ODBELL register, the OREMCNT
+ is decremented by the CSR write value.
+ When SW writes to MIX_[OREMCNT], the OREMCNT is decremented
+ by the CSR write value. */
+#else
+ uint64_t oremcnt : 20;
+ uint64_t reserved_20_31 : 12;
+ uint64_t iremcnt : 20;
+ uint64_t reserved_52_63 : 12;
+#endif
+ } s;
+ struct cvmx_mixx_remcnt_s cn52xx;
+ struct cvmx_mixx_remcnt_s cn52xxp1;
+ struct cvmx_mixx_remcnt_s cn56xx;
+ struct cvmx_mixx_remcnt_s cn56xxp1;
+ struct cvmx_mixx_remcnt_s cn61xx;
+ struct cvmx_mixx_remcnt_s cn63xx;
+ struct cvmx_mixx_remcnt_s cn63xxp1;
+ struct cvmx_mixx_remcnt_s cn66xx;
+ struct cvmx_mixx_remcnt_s cn68xx;
+ struct cvmx_mixx_remcnt_s cn68xxp1;
+};
+typedef union cvmx_mixx_remcnt cvmx_mixx_remcnt_t;
+
+/**
+ * cvmx_mix#_tsctl
+ *
+ * MIX_TSCTL = MIX TimeStamp Control Register
+ *
+ * Description:
+ * NOTE: To read the MIX_TSCTL register, a device would issue an IOBLD64 directed at the MIO.
+ *
+ * Notes:
+ * SW can read the MIX_TSCTL register to determine the \#pending timestamp interrupts(TSCNT)
+ * as well as the \#outstanding timestamp requests in flight(TSTOT), as well as the \#of available
+ * timestamp entries (TSAVL) in the timestamp fifo.
+ * A write to the MIX_TSCTL register will advance the MIX*_TSTAMP fifo head ptr by 1, and
+ * also decrements the MIX*_TSCTL[TSCNT] and MIX*_TSCTL[TSTOT] pending count(s) by 1.
+ * For example, if SW reads MIX*_TSCTL[TSCNT]=2 (2 pending timestamp interrupts), it would immediately
+ * issue this sequence:
+ * 1) MIX*_TSTAMP[TSTAMP] read followed by MIX*_TSCTL write
+ * [gets timestamp value/pops timestamp fifo and decrements pending count(s) by 1]
+ * 2) MIX*_TSTAMP[TSTAMP] read followed by MIX*_TSCTL write
+ * [gets timestamp value/pops timestamp fifo and decrements pending count(s) by 1]
+ *
+ * SWNOTE: A MIX_TSCTL write when MIX_TSCTL[TSCNT]=0 (ie: TimeStamp Fifo empty), then the write is ignored.
+ */
+union cvmx_mixx_tsctl {
+ uint64_t u64;
+ struct cvmx_mixx_tsctl_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t reserved_21_63 : 43;
+ uint64_t tsavl : 5; /**< # of MIX TimeStamp Entries Available for use
+ For o63: TSAVL MAX=4 (implementation
+ depth of timestamp fifo)
+ TSAVL = [IMPLEMENTATION_DEPTH=4(MAX) - TSCNT] */
+ uint64_t reserved_13_15 : 3;
+ uint64_t tstot : 5; /**< # of pending MIX TimeStamp Requests in-flight
+ For o63: TSTOT must never exceed MAX=4 (implementation
+ depth of timestamp fifo) */
+ uint64_t reserved_5_7 : 3;
+ uint64_t tscnt : 5; /**< # of pending MIX TimeStamp Interrupts
+ For o63: TSCNT must never exceed MAX=4 (implementation
+ depth of timestamp fifo) */
+#else
+ uint64_t tscnt : 5;
+ uint64_t reserved_5_7 : 3;
+ uint64_t tstot : 5;
+ uint64_t reserved_13_15 : 3;
+ uint64_t tsavl : 5;
+ uint64_t reserved_21_63 : 43;
+#endif
+ } s;
+ struct cvmx_mixx_tsctl_s cn61xx;
+ struct cvmx_mixx_tsctl_s cn63xx;
+ struct cvmx_mixx_tsctl_s cn63xxp1;
+ struct cvmx_mixx_tsctl_s cn66xx;
+ struct cvmx_mixx_tsctl_s cn68xx;
+ struct cvmx_mixx_tsctl_s cn68xxp1;
+};
+typedef union cvmx_mixx_tsctl cvmx_mixx_tsctl_t;
+
+/**
+ * cvmx_mix#_tstamp
+ *
+ * MIX_TSTAMP = MIX TimeStamp Register
+ *
+ * Description:
+ * NOTE: To read the MIX_TSTAMP register, a device would issue an IOBLD64 directed at the MIO.
+ */
+union cvmx_mixx_tstamp {
+ uint64_t u64;
+ struct cvmx_mixx_tstamp_s {
+#ifdef __BIG_ENDIAN_BITFIELD
+ uint64_t tstamp : 64; /**< MIX TimeStamp Value
+ When SW sets up an ORING Entry with [47]=1(TSTAMP),
+ The packet is tagged with a specal SOP w/TSTAMP flag
+ as it is sent to the AGL.
+ Later the AGL will send "sample" strobe(s) to capture
+ a global 64bit timestamp value followed by a "commit"
+ strobe which writes the last sampled value into the
+ outbound Timestamp fifo (max depth=4) and increments
+ the MIX_TSCTL[TSCNT] register to indicate the total
+ \#of pending Timestamp interrupts.
+ If the \#pending Timestamp interrupts (MIX_TSCTL[TSCNT])
+ is greater than the MIX_CTL[TS_THRESH] value, then
+ a programmable interrupt is also triggered (see:
+ MIX_ISR[TS] MIX_INTENA[TSENA]).
+ SW will then read the MIX*_TSTAMP[TSTAMP]
+ register value, and MUST THEN write the MIX_TSCTL
+ register, which will decrement MIX_TSCTL[TSCNT] register,
+ to indicate that a single timestamp interrupt has
+ been serviced.
+ NOTE: The MIO-MIX HW tracks upto MAX=4 outstanding
+ timestamped outbound packets at a time. All subsequent
+ ORING Entries w/SOP-TSTAMP will be stalled until
+ SW can service the 4 outstanding interrupts.
+ SW can read the MIX_TSCTL register to determine the
+ \#pending timestamp interrupts(TSCNT) as well as the
+ \#outstanding timestamp requests in flight(TSTOT), as
+ well as the \#of available timestamp entries (TSAVL).
+ SW NOTE: A MIX_TSTAMP read when MIX_TSCTL[TSCNT]=0, will
+ result in a return value of all zeroes. SW should only
+ read this register when MIX_ISR[TS]=1 (or when
+ MIX_TSCTL[TSCNT] != 0) to retrieve the timestamp value
+ recorded by HW. If SW reads the TSTAMP when HW has not
+ recorded a valid timestamp, then an all zeroes value is
+ returned. */
+#else
+ uint64_t tstamp : 64;
+#endif
+ } s;
+ struct cvmx_mixx_tstamp_s cn61xx;
+ struct cvmx_mixx_tstamp_s cn63xx;
+ struct cvmx_mixx_tstamp_s cn63xxp1;
+ struct cvmx_mixx_tstamp_s cn66xx;
+ struct cvmx_mixx_tstamp_s cn68xx;
+ struct cvmx_mixx_tstamp_s cn68xxp1;
+};
+typedef union cvmx_mixx_tstamp cvmx_mixx_tstamp_t;
+
+#endif
OpenPOWER on IntegriCloud