uboot/arch/mips/mach-octeon/include/mach/cvmx-bgxx-defs.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright (C) 2020 Marvell International Ltd.
   4 *
   5 * Configuration and status register (CSR) type definitions for
   6 * Octeon bgxx.
   7 */
   8
   9#ifndef __CVMX_BGXX_DEFS_H__
  10#define __CVMX_BGXX_DEFS_H__
  11
  12#define CVMX_BGXX_CMRX_CONFIG(offset, block_id)                                                    \
  13        (0x00011800E0000000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  14#define CVMX_BGXX_CMRX_INT(offset, block_id)                                                       \
  15        (0x00011800E0000020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  16#define CVMX_BGXX_CMRX_PRT_CBFC_CTL(offset, block_id)                                              \
  17        (0x00011800E0000408ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  18#define CVMX_BGXX_CMRX_RX_ADR_CTL(offset, block_id)                                                \
  19        (0x00011800E00000A0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  20#define CVMX_BGXX_CMRX_RX_BP_DROP(offset, block_id)                                                \
  21        (0x00011800E0000080ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  22#define CVMX_BGXX_CMRX_RX_BP_OFF(offset, block_id)                                                 \
  23        (0x00011800E0000090ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  24#define CVMX_BGXX_CMRX_RX_BP_ON(offset, block_id)                                                  \
  25        (0x00011800E0000088ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  26#define CVMX_BGXX_CMRX_RX_BP_STATUS(offset, block_id)                                              \
  27        (0x00011800E00000A8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  28#define CVMX_BGXX_CMRX_RX_FIFO_LEN(offset, block_id)                                               \
  29        (0x00011800E00000C0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  30#define CVMX_BGXX_CMRX_RX_ID_MAP(offset, block_id)                                                 \
  31        (0x00011800E0000028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  32#define CVMX_BGXX_CMRX_RX_LOGL_XOFF(offset, block_id)                                              \
  33        (0x00011800E00000B0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  34#define CVMX_BGXX_CMRX_RX_LOGL_XON(offset, block_id)                                               \
  35        (0x00011800E00000B8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  36#define CVMX_BGXX_CMRX_RX_PAUSE_DROP_TIME(offset, block_id)                                        \
  37        (0x00011800E0000030ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  38#define CVMX_BGXX_CMRX_RX_STAT0(offset, block_id)                                                  \
  39        (0x00011800E0000038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  40#define CVMX_BGXX_CMRX_RX_STAT1(offset, block_id)                                                  \
  41        (0x00011800E0000040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  42#define CVMX_BGXX_CMRX_RX_STAT2(offset, block_id)                                                  \
  43        (0x00011800E0000048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  44#define CVMX_BGXX_CMRX_RX_STAT3(offset, block_id)                                                  \
  45        (0x00011800E0000050ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  46#define CVMX_BGXX_CMRX_RX_STAT4(offset, block_id)                                                  \
  47        (0x00011800E0000058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  48#define CVMX_BGXX_CMRX_RX_STAT5(offset, block_id)                                                  \
  49        (0x00011800E0000060ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  50#define CVMX_BGXX_CMRX_RX_STAT6(offset, block_id)                                                  \
  51        (0x00011800E0000068ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  52#define CVMX_BGXX_CMRX_RX_STAT7(offset, block_id)                                                  \
  53        (0x00011800E0000070ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  54#define CVMX_BGXX_CMRX_RX_STAT8(offset, block_id)                                                  \
  55        (0x00011800E0000078ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  56#define CVMX_BGXX_CMRX_RX_WEIGHT(offset, block_id)                                                 \
  57        (0x00011800E0000098ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  58#define CVMX_BGXX_CMRX_TX_CHANNEL(offset, block_id)                                                \
  59        (0x00011800E0000400ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  60#define CVMX_BGXX_CMRX_TX_FIFO_LEN(offset, block_id)                                               \
  61        (0x00011800E0000418ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  62#define CVMX_BGXX_CMRX_TX_HG2_STATUS(offset, block_id)                                             \
  63        (0x00011800E0000410ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  64#define CVMX_BGXX_CMRX_TX_OVR_BP(offset, block_id)                                                 \
  65        (0x00011800E0000420ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  66#define CVMX_BGXX_CMRX_TX_STAT0(offset, block_id)                                                  \
  67        (0x00011800E0000508ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  68#define CVMX_BGXX_CMRX_TX_STAT1(offset, block_id)                                                  \
  69        (0x00011800E0000510ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  70#define CVMX_BGXX_CMRX_TX_STAT10(offset, block_id)                                                 \
  71        (0x00011800E0000558ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  72#define CVMX_BGXX_CMRX_TX_STAT11(offset, block_id)                                                 \
  73        (0x00011800E0000560ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  74#define CVMX_BGXX_CMRX_TX_STAT12(offset, block_id)                                                 \
  75        (0x00011800E0000568ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  76#define CVMX_BGXX_CMRX_TX_STAT13(offset, block_id)                                                 \
  77        (0x00011800E0000570ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  78#define CVMX_BGXX_CMRX_TX_STAT14(offset, block_id)                                                 \
  79        (0x00011800E0000578ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  80#define CVMX_BGXX_CMRX_TX_STAT15(offset, block_id)                                                 \
  81        (0x00011800E0000580ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  82#define CVMX_BGXX_CMRX_TX_STAT16(offset, block_id)                                                 \
  83        (0x00011800E0000588ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  84#define CVMX_BGXX_CMRX_TX_STAT17(offset, block_id)                                                 \
  85        (0x00011800E0000590ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  86#define CVMX_BGXX_CMRX_TX_STAT2(offset, block_id)                                                  \
  87        (0x00011800E0000518ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  88#define CVMX_BGXX_CMRX_TX_STAT3(offset, block_id)                                                  \
  89        (0x00011800E0000520ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  90#define CVMX_BGXX_CMRX_TX_STAT4(offset, block_id)                                                  \
  91        (0x00011800E0000528ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  92#define CVMX_BGXX_CMRX_TX_STAT5(offset, block_id)                                                  \
  93        (0x00011800E0000530ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  94#define CVMX_BGXX_CMRX_TX_STAT6(offset, block_id)                                                  \
  95        (0x00011800E0000538ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  96#define CVMX_BGXX_CMRX_TX_STAT7(offset, block_id)                                                  \
  97        (0x00011800E0000540ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
  98#define CVMX_BGXX_CMRX_TX_STAT8(offset, block_id)                                                  \
  99        (0x00011800E0000548ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 100#define CVMX_BGXX_CMRX_TX_STAT9(offset, block_id)                                                  \
 101        (0x00011800E0000550ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 102#define CVMX_BGXX_CMR_BAD(offset)           (0x00011800E0001020ull + ((offset) & 7) * 0x1000000ull)
 103#define CVMX_BGXX_CMR_BIST_STATUS(offset)   (0x00011800E0000300ull + ((offset) & 7) * 0x1000000ull)
 104#define CVMX_BGXX_CMR_CHAN_MSK_AND(offset)  (0x00011800E0000200ull + ((offset) & 7) * 0x1000000ull)
 105#define CVMX_BGXX_CMR_CHAN_MSK_OR(offset)   (0x00011800E0000208ull + ((offset) & 7) * 0x1000000ull)
 106#define CVMX_BGXX_CMR_ECO(offset)           (0x00011800E0001028ull + ((offset) & 7) * 0x1000000ull)
 107#define CVMX_BGXX_CMR_GLOBAL_CONFIG(offset) (0x00011800E0000008ull + ((offset) & 7) * 0x1000000ull)
 108#define CVMX_BGXX_CMR_MEM_CTRL(offset)      (0x00011800E0000018ull + ((offset) & 7) * 0x1000000ull)
 109#define CVMX_BGXX_CMR_MEM_INT(offset)       (0x00011800E0000010ull + ((offset) & 7) * 0x1000000ull)
 110#define CVMX_BGXX_CMR_NXC_ADR(offset)       (0x00011800E0001018ull + ((offset) & 7) * 0x1000000ull)
 111#define CVMX_BGXX_CMR_RX_ADRX_CAM(offset, block_id)                                                \
 112        (0x00011800E0000100ull + (((offset) & 31) + ((block_id) & 7) * 0x200000ull) * 8)
 113#define CVMX_BGXX_CMR_RX_LMACS(offset)  (0x00011800E0000308ull + ((offset) & 7) * 0x1000000ull)
 114#define CVMX_BGXX_CMR_RX_OVR_BP(offset) (0x00011800E0000318ull + ((offset) & 7) * 0x1000000ull)
 115#define CVMX_BGXX_CMR_TX_LMACS(offset)  (0x00011800E0001000ull + ((offset) & 7) * 0x1000000ull)
 116#define CVMX_BGXX_GMP_GMI_PRTX_CFG(offset, block_id)                                               \
 117        (0x00011800E0038010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 118#define CVMX_BGXX_GMP_GMI_RXX_DECISION(offset, block_id)                                           \
 119        (0x00011800E0038040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 120#define CVMX_BGXX_GMP_GMI_RXX_FRM_CHK(offset, block_id)                                            \
 121        (0x00011800E0038020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 122#define CVMX_BGXX_GMP_GMI_RXX_FRM_CTL(offset, block_id)                                            \
 123        (0x00011800E0038018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 124#define CVMX_BGXX_GMP_GMI_RXX_IFG(offset, block_id)                                                \
 125        (0x00011800E0038058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 126#define CVMX_BGXX_GMP_GMI_RXX_INT(offset, block_id)                                                \
 127        (0x00011800E0038000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 128#define CVMX_BGXX_GMP_GMI_RXX_JABBER(offset, block_id)                                             \
 129        (0x00011800E0038038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 130#define CVMX_BGXX_GMP_GMI_RXX_UDD_SKP(offset, block_id)                                            \
 131        (0x00011800E0038048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 132#define CVMX_BGXX_GMP_GMI_SMACX(offset, block_id)                                                  \
 133        (0x00011800E0038230ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 134#define CVMX_BGXX_GMP_GMI_TXX_APPEND(offset, block_id)                                             \
 135        (0x00011800E0038218ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 136#define CVMX_BGXX_GMP_GMI_TXX_BURST(offset, block_id)                                              \
 137        (0x00011800E0038228ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 138#define CVMX_BGXX_GMP_GMI_TXX_CTL(offset, block_id)                                                \
 139        (0x00011800E0038270ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 140#define CVMX_BGXX_GMP_GMI_TXX_INT(offset, block_id)                                                \
 141        (0x00011800E0038500ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 142#define CVMX_BGXX_GMP_GMI_TXX_MIN_PKT(offset, block_id)                                            \
 143        (0x00011800E0038240ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 144#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(offset, block_id)                                 \
 145        (0x00011800E0038248ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 146#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(offset, block_id)                                     \
 147        (0x00011800E0038238ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 148#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_TOGO(offset, block_id)                                         \
 149        (0x00011800E0038258ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 150#define CVMX_BGXX_GMP_GMI_TXX_PAUSE_ZERO(offset, block_id)                                         \
 151        (0x00011800E0038260ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 152#define CVMX_BGXX_GMP_GMI_TXX_SGMII_CTL(offset, block_id)                                          \
 153        (0x00011800E0038300ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 154#define CVMX_BGXX_GMP_GMI_TXX_SLOT(offset, block_id)                                               \
 155        (0x00011800E0038220ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 156#define CVMX_BGXX_GMP_GMI_TXX_SOFT_PAUSE(offset, block_id)                                         \
 157        (0x00011800E0038250ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 158#define CVMX_BGXX_GMP_GMI_TXX_THRESH(offset, block_id)                                             \
 159        (0x00011800E0038210ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 160#define CVMX_BGXX_GMP_GMI_TX_COL_ATTEMPT(offset)                                                   \
 161        (0x00011800E0039010ull + ((offset) & 7) * 0x1000000ull)
 162#define CVMX_BGXX_GMP_GMI_TX_IFG(offset)  (0x00011800E0039000ull + ((offset) & 7) * 0x1000000ull)
 163#define CVMX_BGXX_GMP_GMI_TX_JAM(offset)  (0x00011800E0039008ull + ((offset) & 7) * 0x1000000ull)
 164#define CVMX_BGXX_GMP_GMI_TX_LFSR(offset) (0x00011800E0039028ull + ((offset) & 7) * 0x1000000ull)
 165#define CVMX_BGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(offset)                                                \
 166        (0x00011800E0039018ull + ((offset) & 7) * 0x1000000ull)
 167#define CVMX_BGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(offset)                                                \
 168        (0x00011800E0039020ull + ((offset) & 7) * 0x1000000ull)
 169#define CVMX_BGXX_GMP_PCS_ANX_ADV(offset, block_id)                                                \
 170        (0x00011800E0030010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 171#define CVMX_BGXX_GMP_PCS_ANX_EXT_ST(offset, block_id)                                             \
 172        (0x00011800E0030028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 173#define CVMX_BGXX_GMP_PCS_ANX_LP_ABIL(offset, block_id)                                            \
 174        (0x00011800E0030018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 175#define CVMX_BGXX_GMP_PCS_ANX_RESULTS(offset, block_id)                                            \
 176        (0x00011800E0030020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 177#define CVMX_BGXX_GMP_PCS_INTX(offset, block_id)                                                   \
 178        (0x00011800E0030080ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 179#define CVMX_BGXX_GMP_PCS_LINKX_TIMER(offset, block_id)                                            \
 180        (0x00011800E0030040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 181#define CVMX_BGXX_GMP_PCS_MISCX_CTL(offset, block_id)                                              \
 182        (0x00011800E0030078ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 183#define CVMX_BGXX_GMP_PCS_MRX_CONTROL(offset, block_id)                                            \
 184        (0x00011800E0030000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 185#define CVMX_BGXX_GMP_PCS_MRX_STATUS(offset, block_id)                                             \
 186        (0x00011800E0030008ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 187#define CVMX_BGXX_GMP_PCS_RXX_STATES(offset, block_id)                                             \
 188        (0x00011800E0030058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 189#define CVMX_BGXX_GMP_PCS_RXX_SYNC(offset, block_id)                                               \
 190        (0x00011800E0030050ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 191#define CVMX_BGXX_GMP_PCS_SGMX_AN_ADV(offset, block_id)                                            \
 192        (0x00011800E0030068ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 193#define CVMX_BGXX_GMP_PCS_SGMX_LP_ADV(offset, block_id)                                            \
 194        (0x00011800E0030070ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 195#define CVMX_BGXX_GMP_PCS_TXX_STATES(offset, block_id)                                             \
 196        (0x00011800E0030060ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 197#define CVMX_BGXX_GMP_PCS_TX_RXX_POLARITY(offset, block_id)                                        \
 198        (0x00011800E0030048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 199#define CVMX_BGXX_SMUX_CBFC_CTL(offset, block_id)                                                  \
 200        (0x00011800E0020218ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 201#define CVMX_BGXX_SMUX_CTRL(offset, block_id)                                                      \
 202        (0x00011800E0020200ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 203#define CVMX_BGXX_SMUX_EXT_LOOPBACK(offset, block_id)                                              \
 204        (0x00011800E0020208ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 205#define CVMX_BGXX_SMUX_HG2_CONTROL(offset, block_id)                                               \
 206        (0x00011800E0020210ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 207#define CVMX_BGXX_SMUX_RX_BAD_COL_HI(offset, block_id)                                             \
 208        (0x00011800E0020040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 209#define CVMX_BGXX_SMUX_RX_BAD_COL_LO(offset, block_id)                                             \
 210        (0x00011800E0020038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 211#define CVMX_BGXX_SMUX_RX_CTL(offset, block_id)                                                    \
 212        (0x00011800E0020030ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 213#define CVMX_BGXX_SMUX_RX_DECISION(offset, block_id)                                               \
 214        (0x00011800E0020020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 215#define CVMX_BGXX_SMUX_RX_FRM_CHK(offset, block_id)                                                \
 216        (0x00011800E0020010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 217#define CVMX_BGXX_SMUX_RX_FRM_CTL(offset, block_id)                                                \
 218        (0x00011800E0020008ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 219#define CVMX_BGXX_SMUX_RX_INT(offset, block_id)                                                    \
 220        (0x00011800E0020000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 221#define CVMX_BGXX_SMUX_RX_JABBER(offset, block_id)                                                 \
 222        (0x00011800E0020018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 223#define CVMX_BGXX_SMUX_RX_UDD_SKP(offset, block_id)                                                \
 224        (0x00011800E0020028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 225#define CVMX_BGXX_SMUX_SMAC(offset, block_id)                                                      \
 226        (0x00011800E0020108ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 227#define CVMX_BGXX_SMUX_TX_APPEND(offset, block_id)                                                 \
 228        (0x00011800E0020100ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 229#define CVMX_BGXX_SMUX_TX_CTL(offset, block_id)                                                    \
 230        (0x00011800E0020160ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 231#define CVMX_BGXX_SMUX_TX_IFG(offset, block_id)                                                    \
 232        (0x00011800E0020148ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 233#define CVMX_BGXX_SMUX_TX_INT(offset, block_id)                                                    \
 234        (0x00011800E0020140ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 235#define CVMX_BGXX_SMUX_TX_MIN_PKT(offset, block_id)                                                \
 236        (0x00011800E0020118ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 237#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_DMAC(offset, block_id)                                         \
 238        (0x00011800E0020150ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 239#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_INTERVAL(offset, block_id)                                     \
 240        (0x00011800E0020120ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 241#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_TIME(offset, block_id)                                         \
 242        (0x00011800E0020110ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 243#define CVMX_BGXX_SMUX_TX_PAUSE_PKT_TYPE(offset, block_id)                                         \
 244        (0x00011800E0020158ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 245#define CVMX_BGXX_SMUX_TX_PAUSE_TOGO(offset, block_id)                                             \
 246        (0x00011800E0020130ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 247#define CVMX_BGXX_SMUX_TX_PAUSE_ZERO(offset, block_id)                                             \
 248        (0x00011800E0020138ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 249#define CVMX_BGXX_SMUX_TX_SOFT_PAUSE(offset, block_id)                                             \
 250        (0x00011800E0020128ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 251#define CVMX_BGXX_SMUX_TX_THRESH(offset, block_id)                                                 \
 252        (0x00011800E0020168ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 253#define CVMX_BGXX_SPUX_AN_ADV(offset, block_id)                                                    \
 254        (0x00011800E00100D8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 255#define CVMX_BGXX_SPUX_AN_BP_STATUS(offset, block_id)                                              \
 256        (0x00011800E00100F8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 257#define CVMX_BGXX_SPUX_AN_CONTROL(offset, block_id)                                                \
 258        (0x00011800E00100C8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 259#define CVMX_BGXX_SPUX_AN_LP_BASE(offset, block_id)                                                \
 260        (0x00011800E00100E0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 261#define CVMX_BGXX_SPUX_AN_LP_XNP(offset, block_id)                                                 \
 262        (0x00011800E00100F0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 263#define CVMX_BGXX_SPUX_AN_STATUS(offset, block_id)                                                 \
 264        (0x00011800E00100D0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 265#define CVMX_BGXX_SPUX_AN_XNP_TX(offset, block_id)                                                 \
 266        (0x00011800E00100E8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 267#define CVMX_BGXX_SPUX_BR_ALGN_STATUS(offset, block_id)                                            \
 268        (0x00011800E0010050ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 269#define CVMX_BGXX_SPUX_BR_BIP_ERR_CNT(offset, block_id)                                            \
 270        (0x00011800E0010058ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 271#define CVMX_BGXX_SPUX_BR_LANE_MAP(offset, block_id)                                               \
 272        (0x00011800E0010060ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 273#define CVMX_BGXX_SPUX_BR_PMD_CONTROL(offset, block_id)                                            \
 274        (0x00011800E0010068ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 275#define CVMX_BGXX_SPUX_BR_PMD_LD_CUP(offset, block_id)                                             \
 276        (0x00011800E0010088ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 277#define CVMX_BGXX_SPUX_BR_PMD_LD_REP(offset, block_id)                                             \
 278        (0x00011800E0010090ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 279#define CVMX_BGXX_SPUX_BR_PMD_LP_CUP(offset, block_id)                                             \
 280        (0x00011800E0010078ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 281#define CVMX_BGXX_SPUX_BR_PMD_LP_REP(offset, block_id)                                             \
 282        (0x00011800E0010080ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 283#define CVMX_BGXX_SPUX_BR_PMD_STATUS(offset, block_id)                                             \
 284        (0x00011800E0010070ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 285#define CVMX_BGXX_SPUX_BR_STATUS1(offset, block_id)                                                \
 286        (0x00011800E0010030ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 287#define CVMX_BGXX_SPUX_BR_STATUS2(offset, block_id)                                                \
 288        (0x00011800E0010038ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 289#define CVMX_BGXX_SPUX_BR_TP_CONTROL(offset, block_id)                                             \
 290        (0x00011800E0010040ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 291#define CVMX_BGXX_SPUX_BR_TP_ERR_CNT(offset, block_id)                                             \
 292        (0x00011800E0010048ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 293#define CVMX_BGXX_SPUX_BX_STATUS(offset, block_id)                                                 \
 294        (0x00011800E0010028ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 295#define CVMX_BGXX_SPUX_CONTROL1(offset, block_id)                                                  \
 296        (0x00011800E0010000ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 297#define CVMX_BGXX_SPUX_CONTROL2(offset, block_id)                                                  \
 298        (0x00011800E0010018ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 299#define CVMX_BGXX_SPUX_FEC_ABIL(offset, block_id)                                                  \
 300        (0x00011800E0010098ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 301#define CVMX_BGXX_SPUX_FEC_CONTROL(offset, block_id)                                               \
 302        (0x00011800E00100A0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 303#define CVMX_BGXX_SPUX_FEC_CORR_BLKS01(offset, block_id)                                           \
 304        (0x00011800E00100A8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 305#define CVMX_BGXX_SPUX_FEC_CORR_BLKS23(offset, block_id)                                           \
 306        (0x00011800E00100B0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 307#define CVMX_BGXX_SPUX_FEC_UNCORR_BLKS01(offset, block_id)                                         \
 308        (0x00011800E00100B8ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 309#define CVMX_BGXX_SPUX_FEC_UNCORR_BLKS23(offset, block_id)                                         \
 310        (0x00011800E00100C0ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 311#define CVMX_BGXX_SPUX_INT(offset, block_id)                                                       \
 312        (0x00011800E0010220ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 313#define CVMX_BGXX_SPUX_LPCS_STATES(offset, block_id)                                               \
 314        (0x00011800E0010208ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 315#define CVMX_BGXX_SPUX_MISC_CONTROL(offset, block_id)                                              \
 316        (0x00011800E0010218ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 317#define CVMX_BGXX_SPUX_SPD_ABIL(offset, block_id)                                                  \
 318        (0x00011800E0010010ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 319#define CVMX_BGXX_SPUX_STATUS1(offset, block_id)                                                   \
 320        (0x00011800E0010008ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 321#define CVMX_BGXX_SPUX_STATUS2(offset, block_id)                                                   \
 322        (0x00011800E0010020ull + (((offset) & 3) + ((block_id) & 7) * 0x10ull) * 1048576)
 323#define CVMX_BGXX_SPU_BIST_STATUS(offset) (0x00011800E0010318ull + ((offset) & 7) * 0x1000000ull)
 324#define CVMX_BGXX_SPU_DBG_CONTROL(offset) (0x00011800E0010300ull + ((offset) & 7) * 0x1000000ull)
 325#define CVMX_BGXX_SPU_MEM_INT(offset)     (0x00011800E0010310ull + ((offset) & 7) * 0x1000000ull)
 326#define CVMX_BGXX_SPU_MEM_STATUS(offset)  (0x00011800E0010308ull + ((offset) & 7) * 0x1000000ull)
 327#define CVMX_BGXX_SPU_SDSX_SKEW_STATUS(offset, block_id)                                           \
 328        (0x00011800E0010320ull + (((offset) & 3) + ((block_id) & 7) * 0x200000ull) * 8)
 329#define CVMX_BGXX_SPU_SDSX_STATES(offset, block_id)                                                \
 330        (0x00011800E0010340ull + (((offset) & 3) + ((block_id) & 7) * 0x200000ull) * 8)
 331
 332/**
 333 * cvmx_bgx#_cmr#_config
 334 *
 335 * Logical MAC/PCS configuration registers; one per LMAC. The maximum number of LMACs (and
 336 * maximum LMAC ID) that can be enabled by these registers is limited by
 337 * BGX()_CMR_RX_LMACS[LMACS] and BGX()_CMR_TX_LMACS[LMACS]. When multiple LMACs are
 338 * enabled, they must be configured with the same [LMAC_TYPE] value.
 339 */
 340union cvmx_bgxx_cmrx_config {
 341        u64 u64;
 342        struct cvmx_bgxx_cmrx_config_s {
 343                u64 reserved_16_63 : 48;
 344                u64 enable : 1;
 345                u64 data_pkt_rx_en : 1;
 346                u64 data_pkt_tx_en : 1;
 347                u64 int_beat_gen : 1;
 348                u64 mix_en : 1;
 349                u64 lmac_type : 3;
 350                u64 lane_to_sds : 8;
 351        } s;
 352        struct cvmx_bgxx_cmrx_config_s cn73xx;
 353        struct cvmx_bgxx_cmrx_config_s cn78xx;
 354        struct cvmx_bgxx_cmrx_config_s cn78xxp1;
 355        struct cvmx_bgxx_cmrx_config_s cnf75xx;
 356};
 357
 358typedef union cvmx_bgxx_cmrx_config cvmx_bgxx_cmrx_config_t;
 359
 360/**
 361 * cvmx_bgx#_cmr#_int
 362 */
 363union cvmx_bgxx_cmrx_int {
 364        u64 u64;
 365        struct cvmx_bgxx_cmrx_int_s {
 366                u64 reserved_3_63 : 61;
 367                u64 pko_nxc : 1;
 368                u64 overflw : 1;
 369                u64 pause_drp : 1;
 370        } s;
 371        struct cvmx_bgxx_cmrx_int_s cn73xx;
 372        struct cvmx_bgxx_cmrx_int_s cn78xx;
 373        struct cvmx_bgxx_cmrx_int_s cn78xxp1;
 374        struct cvmx_bgxx_cmrx_int_s cnf75xx;
 375};
 376
 377typedef union cvmx_bgxx_cmrx_int cvmx_bgxx_cmrx_int_t;
 378
 379/**
 380 * cvmx_bgx#_cmr#_prt_cbfc_ctl
 381 *
 382 * See XOFF definition listed under BGX()_SMU()_CBFC_CTL.
 383 *
 384 */
 385union cvmx_bgxx_cmrx_prt_cbfc_ctl {
 386        u64 u64;
 387        struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s {
 388                u64 reserved_32_63 : 32;
 389                u64 phys_bp : 16;
 390                u64 reserved_0_15 : 16;
 391        } s;
 392        struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cn73xx;
 393        struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cn78xx;
 394        struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cn78xxp1;
 395        struct cvmx_bgxx_cmrx_prt_cbfc_ctl_s cnf75xx;
 396};
 397
 398typedef union cvmx_bgxx_cmrx_prt_cbfc_ctl cvmx_bgxx_cmrx_prt_cbfc_ctl_t;
 399
 400/**
 401 * cvmx_bgx#_cmr#_rx_adr_ctl
 402 */
 403union cvmx_bgxx_cmrx_rx_adr_ctl {
 404        u64 u64;
 405        struct cvmx_bgxx_cmrx_rx_adr_ctl_s {
 406                u64 reserved_4_63 : 60;
 407                u64 cam_accept : 1;
 408                u64 mcst_mode : 2;
 409                u64 bcst_accept : 1;
 410        } s;
 411        struct cvmx_bgxx_cmrx_rx_adr_ctl_s cn73xx;
 412        struct cvmx_bgxx_cmrx_rx_adr_ctl_s cn78xx;
 413        struct cvmx_bgxx_cmrx_rx_adr_ctl_s cn78xxp1;
 414        struct cvmx_bgxx_cmrx_rx_adr_ctl_s cnf75xx;
 415};
 416
 417typedef union cvmx_bgxx_cmrx_rx_adr_ctl cvmx_bgxx_cmrx_rx_adr_ctl_t;
 418
 419/**
 420 * cvmx_bgx#_cmr#_rx_bp_drop
 421 */
 422union cvmx_bgxx_cmrx_rx_bp_drop {
 423        u64 u64;
 424        struct cvmx_bgxx_cmrx_rx_bp_drop_s {
 425                u64 reserved_7_63 : 57;
 426                u64 mark : 7;
 427        } s;
 428        struct cvmx_bgxx_cmrx_rx_bp_drop_s cn73xx;
 429        struct cvmx_bgxx_cmrx_rx_bp_drop_s cn78xx;
 430        struct cvmx_bgxx_cmrx_rx_bp_drop_s cn78xxp1;
 431        struct cvmx_bgxx_cmrx_rx_bp_drop_s cnf75xx;
 432};
 433
 434typedef union cvmx_bgxx_cmrx_rx_bp_drop cvmx_bgxx_cmrx_rx_bp_drop_t;
 435
 436/**
 437 * cvmx_bgx#_cmr#_rx_bp_off
 438 */
 439union cvmx_bgxx_cmrx_rx_bp_off {
 440        u64 u64;
 441        struct cvmx_bgxx_cmrx_rx_bp_off_s {
 442                u64 reserved_7_63 : 57;
 443                u64 mark : 7;
 444        } s;
 445        struct cvmx_bgxx_cmrx_rx_bp_off_s cn73xx;
 446        struct cvmx_bgxx_cmrx_rx_bp_off_s cn78xx;
 447        struct cvmx_bgxx_cmrx_rx_bp_off_s cn78xxp1;
 448        struct cvmx_bgxx_cmrx_rx_bp_off_s cnf75xx;
 449};
 450
 451typedef union cvmx_bgxx_cmrx_rx_bp_off cvmx_bgxx_cmrx_rx_bp_off_t;
 452
 453/**
 454 * cvmx_bgx#_cmr#_rx_bp_on
 455 */
 456union cvmx_bgxx_cmrx_rx_bp_on {
 457        u64 u64;
 458        struct cvmx_bgxx_cmrx_rx_bp_on_s {
 459                u64 reserved_12_63 : 52;
 460                u64 mark : 12;
 461        } s;
 462        struct cvmx_bgxx_cmrx_rx_bp_on_s cn73xx;
 463        struct cvmx_bgxx_cmrx_rx_bp_on_s cn78xx;
 464        struct cvmx_bgxx_cmrx_rx_bp_on_s cn78xxp1;
 465        struct cvmx_bgxx_cmrx_rx_bp_on_s cnf75xx;
 466};
 467
 468typedef union cvmx_bgxx_cmrx_rx_bp_on cvmx_bgxx_cmrx_rx_bp_on_t;
 469
 470/**
 471 * cvmx_bgx#_cmr#_rx_bp_status
 472 */
 473union cvmx_bgxx_cmrx_rx_bp_status {
 474        u64 u64;
 475        struct cvmx_bgxx_cmrx_rx_bp_status_s {
 476                u64 reserved_1_63 : 63;
 477                u64 bp : 1;
 478        } s;
 479        struct cvmx_bgxx_cmrx_rx_bp_status_s cn73xx;
 480        struct cvmx_bgxx_cmrx_rx_bp_status_s cn78xx;
 481        struct cvmx_bgxx_cmrx_rx_bp_status_s cn78xxp1;
 482        struct cvmx_bgxx_cmrx_rx_bp_status_s cnf75xx;
 483};
 484
 485typedef union cvmx_bgxx_cmrx_rx_bp_status cvmx_bgxx_cmrx_rx_bp_status_t;
 486
 487/**
 488 * cvmx_bgx#_cmr#_rx_fifo_len
 489 */
 490union cvmx_bgxx_cmrx_rx_fifo_len {
 491        u64 u64;
 492        struct cvmx_bgxx_cmrx_rx_fifo_len_s {
 493                u64 reserved_13_63 : 51;
 494                u64 fifo_len : 13;
 495        } s;
 496        struct cvmx_bgxx_cmrx_rx_fifo_len_s cn73xx;
 497        struct cvmx_bgxx_cmrx_rx_fifo_len_s cn78xx;
 498        struct cvmx_bgxx_cmrx_rx_fifo_len_s cn78xxp1;
 499        struct cvmx_bgxx_cmrx_rx_fifo_len_s cnf75xx;
 500};
 501
 502typedef union cvmx_bgxx_cmrx_rx_fifo_len cvmx_bgxx_cmrx_rx_fifo_len_t;
 503
 504/**
 505 * cvmx_bgx#_cmr#_rx_id_map
 506 *
 507 * These registers set the RX LMAC ID mapping for X2P/PKI.
 508 *
 509 */
 510union cvmx_bgxx_cmrx_rx_id_map {
 511        u64 u64;
 512        struct cvmx_bgxx_cmrx_rx_id_map_s {
 513                u64 reserved_15_63 : 49;
 514                u64 rid : 7;
 515                u64 pknd : 8;
 516        } s;
 517        struct cvmx_bgxx_cmrx_rx_id_map_cn73xx {
 518                u64 reserved_15_63 : 49;
 519                u64 rid : 7;
 520                u64 reserved_6_7 : 2;
 521                u64 pknd : 6;
 522        } cn73xx;
 523        struct cvmx_bgxx_cmrx_rx_id_map_cn73xx cn78xx;
 524        struct cvmx_bgxx_cmrx_rx_id_map_s cn78xxp1;
 525        struct cvmx_bgxx_cmrx_rx_id_map_cn73xx cnf75xx;
 526};
 527
 528typedef union cvmx_bgxx_cmrx_rx_id_map cvmx_bgxx_cmrx_rx_id_map_t;
 529
 530/**
 531 * cvmx_bgx#_cmr#_rx_logl_xoff
 532 */
 533union cvmx_bgxx_cmrx_rx_logl_xoff {
 534        u64 u64;
 535        struct cvmx_bgxx_cmrx_rx_logl_xoff_s {
 536                u64 reserved_16_63 : 48;
 537                u64 xoff : 16;
 538        } s;
 539        struct cvmx_bgxx_cmrx_rx_logl_xoff_s cn73xx;
 540        struct cvmx_bgxx_cmrx_rx_logl_xoff_s cn78xx;
 541        struct cvmx_bgxx_cmrx_rx_logl_xoff_s cn78xxp1;
 542        struct cvmx_bgxx_cmrx_rx_logl_xoff_s cnf75xx;
 543};
 544
 545typedef union cvmx_bgxx_cmrx_rx_logl_xoff cvmx_bgxx_cmrx_rx_logl_xoff_t;
 546
 547/**
 548 * cvmx_bgx#_cmr#_rx_logl_xon
 549 */
 550union cvmx_bgxx_cmrx_rx_logl_xon {
 551        u64 u64;
 552        struct cvmx_bgxx_cmrx_rx_logl_xon_s {
 553                u64 reserved_16_63 : 48;
 554                u64 xon : 16;
 555        } s;
 556        struct cvmx_bgxx_cmrx_rx_logl_xon_s cn73xx;
 557        struct cvmx_bgxx_cmrx_rx_logl_xon_s cn78xx;
 558        struct cvmx_bgxx_cmrx_rx_logl_xon_s cn78xxp1;
 559        struct cvmx_bgxx_cmrx_rx_logl_xon_s cnf75xx;
 560};
 561
 562typedef union cvmx_bgxx_cmrx_rx_logl_xon cvmx_bgxx_cmrx_rx_logl_xon_t;
 563
 564/**
 565 * cvmx_bgx#_cmr#_rx_pause_drop_time
 566 */
 567union cvmx_bgxx_cmrx_rx_pause_drop_time {
 568        u64 u64;
 569        struct cvmx_bgxx_cmrx_rx_pause_drop_time_s {
 570                u64 reserved_16_63 : 48;
 571                u64 pause_time : 16;
 572        } s;
 573        struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cn73xx;
 574        struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cn78xx;
 575        struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cn78xxp1;
 576        struct cvmx_bgxx_cmrx_rx_pause_drop_time_s cnf75xx;
 577};
 578
 579typedef union cvmx_bgxx_cmrx_rx_pause_drop_time cvmx_bgxx_cmrx_rx_pause_drop_time_t;
 580
 581/**
 582 * cvmx_bgx#_cmr#_rx_stat0
 583 *
 584 * These registers provide a count of received packets that meet the following conditions:
 585 * * are not recognized as PAUSE packets.
 586 * * are not dropped due DMAC filtering.
 587 * * are not dropped due FIFO full status.
 588 * * do not have any other OPCODE (FCS, Length, etc).
 589 */
 590union cvmx_bgxx_cmrx_rx_stat0 {
 591        u64 u64;
 592        struct cvmx_bgxx_cmrx_rx_stat0_s {
 593                u64 reserved_48_63 : 16;
 594                u64 cnt : 48;
 595        } s;
 596        struct cvmx_bgxx_cmrx_rx_stat0_s cn73xx;
 597        struct cvmx_bgxx_cmrx_rx_stat0_s cn78xx;
 598        struct cvmx_bgxx_cmrx_rx_stat0_s cn78xxp1;
 599        struct cvmx_bgxx_cmrx_rx_stat0_s cnf75xx;
 600};
 601
 602typedef union cvmx_bgxx_cmrx_rx_stat0 cvmx_bgxx_cmrx_rx_stat0_t;
 603
 604/**
 605 * cvmx_bgx#_cmr#_rx_stat1
 606 *
 607 * These registers provide a count of octets of received packets.
 608 *
 609 */
 610union cvmx_bgxx_cmrx_rx_stat1 {
 611        u64 u64;
 612        struct cvmx_bgxx_cmrx_rx_stat1_s {
 613                u64 reserved_48_63 : 16;
 614                u64 cnt : 48;
 615        } s;
 616        struct cvmx_bgxx_cmrx_rx_stat1_s cn73xx;
 617        struct cvmx_bgxx_cmrx_rx_stat1_s cn78xx;
 618        struct cvmx_bgxx_cmrx_rx_stat1_s cn78xxp1;
 619        struct cvmx_bgxx_cmrx_rx_stat1_s cnf75xx;
 620};
 621
 622typedef union cvmx_bgxx_cmrx_rx_stat1 cvmx_bgxx_cmrx_rx_stat1_t;
 623
 624/**
 625 * cvmx_bgx#_cmr#_rx_stat2
 626 *
 627 * These registers provide a count of all packets received that were recognized as flow-control
 628 * or PAUSE packets. PAUSE packets with any kind of error are counted in
 629 * BGX()_CMR()_RX_STAT8 (error stats register). Pause packets can be optionally dropped
 630 * or forwarded based on BGX()_SMU()_RX_FRM_CTL[CTL_DRP]. This count increments
 631 * regardless of whether the packet is dropped. PAUSE packets are never counted in
 632 * BGX()_CMR()_RX_STAT0.
 633 */
 634union cvmx_bgxx_cmrx_rx_stat2 {
 635        u64 u64;
 636        struct cvmx_bgxx_cmrx_rx_stat2_s {
 637                u64 reserved_48_63 : 16;
 638                u64 cnt : 48;
 639        } s;
 640        struct cvmx_bgxx_cmrx_rx_stat2_s cn73xx;
 641        struct cvmx_bgxx_cmrx_rx_stat2_s cn78xx;
 642        struct cvmx_bgxx_cmrx_rx_stat2_s cn78xxp1;
 643        struct cvmx_bgxx_cmrx_rx_stat2_s cnf75xx;
 644};
 645
 646typedef union cvmx_bgxx_cmrx_rx_stat2 cvmx_bgxx_cmrx_rx_stat2_t;
 647
 648/**
 649 * cvmx_bgx#_cmr#_rx_stat3
 650 *
 651 * These registers provide a count of octets of received PAUSE and control packets.
 652 *
 653 */
 654union cvmx_bgxx_cmrx_rx_stat3 {
 655        u64 u64;
 656        struct cvmx_bgxx_cmrx_rx_stat3_s {
 657                u64 reserved_48_63 : 16;
 658                u64 cnt : 48;
 659        } s;
 660        struct cvmx_bgxx_cmrx_rx_stat3_s cn73xx;
 661        struct cvmx_bgxx_cmrx_rx_stat3_s cn78xx;
 662        struct cvmx_bgxx_cmrx_rx_stat3_s cn78xxp1;
 663        struct cvmx_bgxx_cmrx_rx_stat3_s cnf75xx;
 664};
 665
 666typedef union cvmx_bgxx_cmrx_rx_stat3 cvmx_bgxx_cmrx_rx_stat3_t;
 667
 668/**
 669 * cvmx_bgx#_cmr#_rx_stat4
 670 *
 671 * These registers provide a count of all packets received that were dropped by the DMAC filter.
 672 * Packets that match the DMAC are dropped and counted here regardless of whether they were ERR
 673 * packets, but does not include those reported in BGX()_CMR()_RX_STAT6. These packets
 674 * are never counted in BGX()_CMR()_RX_STAT0. Eight-byte packets as the result of
 675 * truncation or other means are not dropped by CNXXXX and will never appear in this count.
 676 */
 677union cvmx_bgxx_cmrx_rx_stat4 {
 678        u64 u64;
 679        struct cvmx_bgxx_cmrx_rx_stat4_s {
 680                u64 reserved_48_63 : 16;
 681                u64 cnt : 48;
 682        } s;
 683        struct cvmx_bgxx_cmrx_rx_stat4_s cn73xx;
 684        struct cvmx_bgxx_cmrx_rx_stat4_s cn78xx;
 685        struct cvmx_bgxx_cmrx_rx_stat4_s cn78xxp1;
 686        struct cvmx_bgxx_cmrx_rx_stat4_s cnf75xx;
 687};
 688
 689typedef union cvmx_bgxx_cmrx_rx_stat4 cvmx_bgxx_cmrx_rx_stat4_t;
 690
 691/**
 692 * cvmx_bgx#_cmr#_rx_stat5
 693 *
 694 * These registers provide a count of octets of filtered DMAC packets.
 695 *
 696 */
 697union cvmx_bgxx_cmrx_rx_stat5 {
 698        u64 u64;
 699        struct cvmx_bgxx_cmrx_rx_stat5_s {
 700                u64 reserved_48_63 : 16;
 701                u64 cnt : 48;
 702        } s;
 703        struct cvmx_bgxx_cmrx_rx_stat5_s cn73xx;
 704        struct cvmx_bgxx_cmrx_rx_stat5_s cn78xx;
 705        struct cvmx_bgxx_cmrx_rx_stat5_s cn78xxp1;
 706        struct cvmx_bgxx_cmrx_rx_stat5_s cnf75xx;
 707};
 708
 709typedef union cvmx_bgxx_cmrx_rx_stat5 cvmx_bgxx_cmrx_rx_stat5_t;
 710
 711/**
 712 * cvmx_bgx#_cmr#_rx_stat6
 713 *
 714 * These registers provide a count of all packets received that were dropped due to a full
 715 * receive FIFO. They do not count any packet that is truncated at the point of overflow and sent
 716 * on to the PKI. These registers count all entire packets dropped by the FIFO for a given LMAC
 717 * regardless of DMAC or PAUSE type.
 718 */
 719union cvmx_bgxx_cmrx_rx_stat6 {
 720        u64 u64;
 721        struct cvmx_bgxx_cmrx_rx_stat6_s {
 722                u64 reserved_48_63 : 16;
 723                u64 cnt : 48;
 724        } s;
 725        struct cvmx_bgxx_cmrx_rx_stat6_s cn73xx;
 726        struct cvmx_bgxx_cmrx_rx_stat6_s cn78xx;
 727        struct cvmx_bgxx_cmrx_rx_stat6_s cn78xxp1;
 728        struct cvmx_bgxx_cmrx_rx_stat6_s cnf75xx;
 729};
 730
 731typedef union cvmx_bgxx_cmrx_rx_stat6 cvmx_bgxx_cmrx_rx_stat6_t;
 732
 733/**
 734 * cvmx_bgx#_cmr#_rx_stat7
 735 *
 736 * These registers provide a count of octets of received packets that were dropped due to a full
 737 * receive FIFO.
 738 */
 739union cvmx_bgxx_cmrx_rx_stat7 {
 740        u64 u64;
 741        struct cvmx_bgxx_cmrx_rx_stat7_s {
 742                u64 reserved_48_63 : 16;
 743                u64 cnt : 48;
 744        } s;
 745        struct cvmx_bgxx_cmrx_rx_stat7_s cn73xx;
 746        struct cvmx_bgxx_cmrx_rx_stat7_s cn78xx;
 747        struct cvmx_bgxx_cmrx_rx_stat7_s cn78xxp1;
 748        struct cvmx_bgxx_cmrx_rx_stat7_s cnf75xx;
 749};
 750
 751typedef union cvmx_bgxx_cmrx_rx_stat7 cvmx_bgxx_cmrx_rx_stat7_t;
 752
 753/**
 754 * cvmx_bgx#_cmr#_rx_stat8
 755 *
 756 * These registers provide a count of all packets received with some error that were not dropped
 757 * either due to the DMAC filter or lack of room in the receive FIFO.
 758 * This does not include packets which were counted in
 759 * BGX()_CMR()_RX_STAT2, BGX()_CMR()_RX_STAT4 nor
 760 * BGX()_CMR()_RX_STAT6.
 761 *
 762 * Which statistics are updated on control packet errors and drops are shown below:
 763 *
 764 * <pre>
 765 * if dropped [
 766 *   if !errored STAT8
 767 *   if overflow STAT6
 768 *   else if dmac drop STAT4
 769 *   else if filter drop STAT2
 770 * ] else [
 771 *   if errored STAT2
 772 *   else STAT8
 773 * ]
 774 * </pre>
 775 */
 776union cvmx_bgxx_cmrx_rx_stat8 {
 777        u64 u64;
 778        struct cvmx_bgxx_cmrx_rx_stat8_s {
 779                u64 reserved_48_63 : 16;
 780                u64 cnt : 48;
 781        } s;
 782        struct cvmx_bgxx_cmrx_rx_stat8_s cn73xx;
 783        struct cvmx_bgxx_cmrx_rx_stat8_s cn78xx;
 784        struct cvmx_bgxx_cmrx_rx_stat8_s cn78xxp1;
 785        struct cvmx_bgxx_cmrx_rx_stat8_s cnf75xx;
 786};
 787
 788typedef union cvmx_bgxx_cmrx_rx_stat8 cvmx_bgxx_cmrx_rx_stat8_t;
 789
 790/**
 791 * cvmx_bgx#_cmr#_rx_weight
 792 */
 793union cvmx_bgxx_cmrx_rx_weight {
 794        u64 u64;
 795        struct cvmx_bgxx_cmrx_rx_weight_s {
 796                u64 reserved_4_63 : 60;
 797                u64 weight : 4;
 798        } s;
 799        struct cvmx_bgxx_cmrx_rx_weight_s cn73xx;
 800        struct cvmx_bgxx_cmrx_rx_weight_s cn78xx;
 801        struct cvmx_bgxx_cmrx_rx_weight_s cn78xxp1;
 802        struct cvmx_bgxx_cmrx_rx_weight_s cnf75xx;
 803};
 804
 805typedef union cvmx_bgxx_cmrx_rx_weight cvmx_bgxx_cmrx_rx_weight_t;
 806
 807/**
 808 * cvmx_bgx#_cmr#_tx_channel
 809 */
 810union cvmx_bgxx_cmrx_tx_channel {
 811        u64 u64;
 812        struct cvmx_bgxx_cmrx_tx_channel_s {
 813                u64 reserved_32_63 : 32;
 814                u64 msk : 16;
 815                u64 dis : 16;
 816        } s;
 817        struct cvmx_bgxx_cmrx_tx_channel_s cn73xx;
 818        struct cvmx_bgxx_cmrx_tx_channel_s cn78xx;
 819        struct cvmx_bgxx_cmrx_tx_channel_s cn78xxp1;
 820        struct cvmx_bgxx_cmrx_tx_channel_s cnf75xx;
 821};
 822
 823typedef union cvmx_bgxx_cmrx_tx_channel cvmx_bgxx_cmrx_tx_channel_t;
 824
 825/**
 826 * cvmx_bgx#_cmr#_tx_fifo_len
 827 */
 828union cvmx_bgxx_cmrx_tx_fifo_len {
 829        u64 u64;
 830        struct cvmx_bgxx_cmrx_tx_fifo_len_s {
 831                u64 reserved_14_63 : 50;
 832                u64 lmac_idle : 1;
 833                u64 fifo_len : 13;
 834        } s;
 835        struct cvmx_bgxx_cmrx_tx_fifo_len_s cn73xx;
 836        struct cvmx_bgxx_cmrx_tx_fifo_len_s cn78xx;
 837        struct cvmx_bgxx_cmrx_tx_fifo_len_s cn78xxp1;
 838        struct cvmx_bgxx_cmrx_tx_fifo_len_s cnf75xx;
 839};
 840
 841typedef union cvmx_bgxx_cmrx_tx_fifo_len cvmx_bgxx_cmrx_tx_fifo_len_t;
 842
 843/**
 844 * cvmx_bgx#_cmr#_tx_hg2_status
 845 */
 846union cvmx_bgxx_cmrx_tx_hg2_status {
 847        u64 u64;
 848        struct cvmx_bgxx_cmrx_tx_hg2_status_s {
 849                u64 reserved_32_63 : 32;
 850                u64 xof : 16;
 851                u64 lgtim2go : 16;
 852        } s;
 853        struct cvmx_bgxx_cmrx_tx_hg2_status_s cn73xx;
 854        struct cvmx_bgxx_cmrx_tx_hg2_status_s cn78xx;
 855        struct cvmx_bgxx_cmrx_tx_hg2_status_s cn78xxp1;
 856        struct cvmx_bgxx_cmrx_tx_hg2_status_s cnf75xx;
 857};
 858
 859typedef union cvmx_bgxx_cmrx_tx_hg2_status cvmx_bgxx_cmrx_tx_hg2_status_t;
 860
 861/**
 862 * cvmx_bgx#_cmr#_tx_ovr_bp
 863 */
 864union cvmx_bgxx_cmrx_tx_ovr_bp {
 865        u64 u64;
 866        struct cvmx_bgxx_cmrx_tx_ovr_bp_s {
 867                u64 reserved_16_63 : 48;
 868                u64 tx_chan_bp : 16;
 869        } s;
 870        struct cvmx_bgxx_cmrx_tx_ovr_bp_s cn73xx;
 871        struct cvmx_bgxx_cmrx_tx_ovr_bp_s cn78xx;
 872        struct cvmx_bgxx_cmrx_tx_ovr_bp_s cn78xxp1;
 873        struct cvmx_bgxx_cmrx_tx_ovr_bp_s cnf75xx;
 874};
 875
 876typedef union cvmx_bgxx_cmrx_tx_ovr_bp cvmx_bgxx_cmrx_tx_ovr_bp_t;
 877
 878/**
 879 * cvmx_bgx#_cmr#_tx_stat0
 880 */
 881union cvmx_bgxx_cmrx_tx_stat0 {
 882        u64 u64;
 883        struct cvmx_bgxx_cmrx_tx_stat0_s {
 884                u64 reserved_48_63 : 16;
 885                u64 xscol : 48;
 886        } s;
 887        struct cvmx_bgxx_cmrx_tx_stat0_s cn73xx;
 888        struct cvmx_bgxx_cmrx_tx_stat0_s cn78xx;
 889        struct cvmx_bgxx_cmrx_tx_stat0_s cn78xxp1;
 890        struct cvmx_bgxx_cmrx_tx_stat0_s cnf75xx;
 891};
 892
 893typedef union cvmx_bgxx_cmrx_tx_stat0 cvmx_bgxx_cmrx_tx_stat0_t;
 894
 895/**
 896 * cvmx_bgx#_cmr#_tx_stat1
 897 */
 898union cvmx_bgxx_cmrx_tx_stat1 {
 899        u64 u64;
 900        struct cvmx_bgxx_cmrx_tx_stat1_s {
 901                u64 reserved_48_63 : 16;
 902                u64 xsdef : 48;
 903        } s;
 904        struct cvmx_bgxx_cmrx_tx_stat1_s cn73xx;
 905        struct cvmx_bgxx_cmrx_tx_stat1_s cn78xx;
 906        struct cvmx_bgxx_cmrx_tx_stat1_s cn78xxp1;
 907        struct cvmx_bgxx_cmrx_tx_stat1_s cnf75xx;
 908};
 909
 910typedef union cvmx_bgxx_cmrx_tx_stat1 cvmx_bgxx_cmrx_tx_stat1_t;
 911
 912/**
 913 * cvmx_bgx#_cmr#_tx_stat10
 914 */
 915union cvmx_bgxx_cmrx_tx_stat10 {
 916        u64 u64;
 917        struct cvmx_bgxx_cmrx_tx_stat10_s {
 918                u64 reserved_48_63 : 16;
 919                u64 hist4 : 48;
 920        } s;
 921        struct cvmx_bgxx_cmrx_tx_stat10_s cn73xx;
 922        struct cvmx_bgxx_cmrx_tx_stat10_s cn78xx;
 923        struct cvmx_bgxx_cmrx_tx_stat10_s cn78xxp1;
 924        struct cvmx_bgxx_cmrx_tx_stat10_s cnf75xx;
 925};
 926
 927typedef union cvmx_bgxx_cmrx_tx_stat10 cvmx_bgxx_cmrx_tx_stat10_t;
 928
 929/**
 930 * cvmx_bgx#_cmr#_tx_stat11
 931 */
 932union cvmx_bgxx_cmrx_tx_stat11 {
 933        u64 u64;
 934        struct cvmx_bgxx_cmrx_tx_stat11_s {
 935                u64 reserved_48_63 : 16;
 936                u64 hist5 : 48;
 937        } s;
 938        struct cvmx_bgxx_cmrx_tx_stat11_s cn73xx;
 939        struct cvmx_bgxx_cmrx_tx_stat11_s cn78xx;
 940        struct cvmx_bgxx_cmrx_tx_stat11_s cn78xxp1;
 941        struct cvmx_bgxx_cmrx_tx_stat11_s cnf75xx;
 942};
 943
 944typedef union cvmx_bgxx_cmrx_tx_stat11 cvmx_bgxx_cmrx_tx_stat11_t;
 945
 946/**
 947 * cvmx_bgx#_cmr#_tx_stat12
 948 */
 949union cvmx_bgxx_cmrx_tx_stat12 {
 950        u64 u64;
 951        struct cvmx_bgxx_cmrx_tx_stat12_s {
 952                u64 reserved_48_63 : 16;
 953                u64 hist6 : 48;
 954        } s;
 955        struct cvmx_bgxx_cmrx_tx_stat12_s cn73xx;
 956        struct cvmx_bgxx_cmrx_tx_stat12_s cn78xx;
 957        struct cvmx_bgxx_cmrx_tx_stat12_s cn78xxp1;
 958        struct cvmx_bgxx_cmrx_tx_stat12_s cnf75xx;
 959};
 960
 961typedef union cvmx_bgxx_cmrx_tx_stat12 cvmx_bgxx_cmrx_tx_stat12_t;
 962
 963/**
 964 * cvmx_bgx#_cmr#_tx_stat13
 965 */
 966union cvmx_bgxx_cmrx_tx_stat13 {
 967        u64 u64;
 968        struct cvmx_bgxx_cmrx_tx_stat13_s {
 969                u64 reserved_48_63 : 16;
 970                u64 hist7 : 48;
 971        } s;
 972        struct cvmx_bgxx_cmrx_tx_stat13_s cn73xx;
 973        struct cvmx_bgxx_cmrx_tx_stat13_s cn78xx;
 974        struct cvmx_bgxx_cmrx_tx_stat13_s cn78xxp1;
 975        struct cvmx_bgxx_cmrx_tx_stat13_s cnf75xx;
 976};
 977
 978typedef union cvmx_bgxx_cmrx_tx_stat13 cvmx_bgxx_cmrx_tx_stat13_t;
 979
 980/**
 981 * cvmx_bgx#_cmr#_tx_stat14
 982 */
 983union cvmx_bgxx_cmrx_tx_stat14 {
 984        u64 u64;
 985        struct cvmx_bgxx_cmrx_tx_stat14_s {
 986                u64 reserved_48_63 : 16;
 987                u64 bcst : 48;
 988        } s;
 989        struct cvmx_bgxx_cmrx_tx_stat14_s cn73xx;
 990        struct cvmx_bgxx_cmrx_tx_stat14_s cn78xx;
 991        struct cvmx_bgxx_cmrx_tx_stat14_s cn78xxp1;
 992        struct cvmx_bgxx_cmrx_tx_stat14_s cnf75xx;
 993};
 994
 995typedef union cvmx_bgxx_cmrx_tx_stat14 cvmx_bgxx_cmrx_tx_stat14_t;
 996
 997/**
 998 * cvmx_bgx#_cmr#_tx_stat15
 999 */
1000union cvmx_bgxx_cmrx_tx_stat15 {
1001        u64 u64;
1002        struct cvmx_bgxx_cmrx_tx_stat15_s {
1003                u64 reserved_48_63 : 16;
1004                u64 mcst : 48;
1005        } s;
1006        struct cvmx_bgxx_cmrx_tx_stat15_s cn73xx;
1007        struct cvmx_bgxx_cmrx_tx_stat15_s cn78xx;
1008        struct cvmx_bgxx_cmrx_tx_stat15_s cn78xxp1;
1009        struct cvmx_bgxx_cmrx_tx_stat15_s cnf75xx;
1010};
1011
1012typedef union cvmx_bgxx_cmrx_tx_stat15 cvmx_bgxx_cmrx_tx_stat15_t;
1013
1014/**
1015 * cvmx_bgx#_cmr#_tx_stat16
1016 */
1017union cvmx_bgxx_cmrx_tx_stat16 {
1018        u64 u64;
1019        struct cvmx_bgxx_cmrx_tx_stat16_s {
1020                u64 reserved_48_63 : 16;
1021                u64 undflw : 48;
1022        } s;
1023        struct cvmx_bgxx_cmrx_tx_stat16_s cn73xx;
1024        struct cvmx_bgxx_cmrx_tx_stat16_s cn78xx;
1025        struct cvmx_bgxx_cmrx_tx_stat16_s cn78xxp1;
1026        struct cvmx_bgxx_cmrx_tx_stat16_s cnf75xx;
1027};
1028
1029typedef union cvmx_bgxx_cmrx_tx_stat16 cvmx_bgxx_cmrx_tx_stat16_t;
1030
1031/**
1032 * cvmx_bgx#_cmr#_tx_stat17
1033 */
1034union cvmx_bgxx_cmrx_tx_stat17 {
1035        u64 u64;
1036        struct cvmx_bgxx_cmrx_tx_stat17_s {
1037                u64 reserved_48_63 : 16;
1038                u64 ctl : 48;
1039        } s;
1040        struct cvmx_bgxx_cmrx_tx_stat17_s cn73xx;
1041        struct cvmx_bgxx_cmrx_tx_stat17_s cn78xx;
1042        struct cvmx_bgxx_cmrx_tx_stat17_s cn78xxp1;
1043        struct cvmx_bgxx_cmrx_tx_stat17_s cnf75xx;
1044};
1045
1046typedef union cvmx_bgxx_cmrx_tx_stat17 cvmx_bgxx_cmrx_tx_stat17_t;
1047
1048/**
1049 * cvmx_bgx#_cmr#_tx_stat2
1050 */
1051union cvmx_bgxx_cmrx_tx_stat2 {
1052        u64 u64;
1053        struct cvmx_bgxx_cmrx_tx_stat2_s {
1054                u64 reserved_48_63 : 16;
1055                u64 mcol : 48;
1056        } s;
1057        struct cvmx_bgxx_cmrx_tx_stat2_s cn73xx;
1058        struct cvmx_bgxx_cmrx_tx_stat2_s cn78xx;
1059        struct cvmx_bgxx_cmrx_tx_stat2_s cn78xxp1;
1060        struct cvmx_bgxx_cmrx_tx_stat2_s cnf75xx;
1061};
1062
1063typedef union cvmx_bgxx_cmrx_tx_stat2 cvmx_bgxx_cmrx_tx_stat2_t;
1064
1065/**
1066 * cvmx_bgx#_cmr#_tx_stat3
1067 */
1068union cvmx_bgxx_cmrx_tx_stat3 {
1069        u64 u64;
1070        struct cvmx_bgxx_cmrx_tx_stat3_s {
1071                u64 reserved_48_63 : 16;
1072                u64 scol : 48;
1073        } s;
1074        struct cvmx_bgxx_cmrx_tx_stat3_s cn73xx;
1075        struct cvmx_bgxx_cmrx_tx_stat3_s cn78xx;
1076        struct cvmx_bgxx_cmrx_tx_stat3_s cn78xxp1;
1077        struct cvmx_bgxx_cmrx_tx_stat3_s cnf75xx;
1078};
1079
1080typedef union cvmx_bgxx_cmrx_tx_stat3 cvmx_bgxx_cmrx_tx_stat3_t;
1081
1082/**
1083 * cvmx_bgx#_cmr#_tx_stat4
1084 */
1085union cvmx_bgxx_cmrx_tx_stat4 {
1086        u64 u64;
1087        struct cvmx_bgxx_cmrx_tx_stat4_s {
1088                u64 reserved_48_63 : 16;
1089                u64 octs : 48;
1090        } s;
1091        struct cvmx_bgxx_cmrx_tx_stat4_s cn73xx;
1092        struct cvmx_bgxx_cmrx_tx_stat4_s cn78xx;
1093        struct cvmx_bgxx_cmrx_tx_stat4_s cn78xxp1;
1094        struct cvmx_bgxx_cmrx_tx_stat4_s cnf75xx;
1095};
1096
1097typedef union cvmx_bgxx_cmrx_tx_stat4 cvmx_bgxx_cmrx_tx_stat4_t;
1098
1099/**
1100 * cvmx_bgx#_cmr#_tx_stat5
1101 */
1102union cvmx_bgxx_cmrx_tx_stat5 {
1103        u64 u64;
1104        struct cvmx_bgxx_cmrx_tx_stat5_s {
1105                u64 reserved_48_63 : 16;
1106                u64 pkts : 48;
1107        } s;
1108        struct cvmx_bgxx_cmrx_tx_stat5_s cn73xx;
1109        struct cvmx_bgxx_cmrx_tx_stat5_s cn78xx;
1110        struct cvmx_bgxx_cmrx_tx_stat5_s cn78xxp1;
1111        struct cvmx_bgxx_cmrx_tx_stat5_s cnf75xx;
1112};
1113
1114typedef union cvmx_bgxx_cmrx_tx_stat5 cvmx_bgxx_cmrx_tx_stat5_t;
1115
1116/**
1117 * cvmx_bgx#_cmr#_tx_stat6
1118 */
1119union cvmx_bgxx_cmrx_tx_stat6 {
1120        u64 u64;
1121        struct cvmx_bgxx_cmrx_tx_stat6_s {
1122                u64 reserved_48_63 : 16;
1123                u64 hist0 : 48;
1124        } s;
1125        struct cvmx_bgxx_cmrx_tx_stat6_s cn73xx;
1126        struct cvmx_bgxx_cmrx_tx_stat6_s cn78xx;
1127        struct cvmx_bgxx_cmrx_tx_stat6_s cn78xxp1;
1128        struct cvmx_bgxx_cmrx_tx_stat6_s cnf75xx;
1129};
1130
1131typedef union cvmx_bgxx_cmrx_tx_stat6 cvmx_bgxx_cmrx_tx_stat6_t;
1132
1133/**
1134 * cvmx_bgx#_cmr#_tx_stat7
1135 */
1136union cvmx_bgxx_cmrx_tx_stat7 {
1137        u64 u64;
1138        struct cvmx_bgxx_cmrx_tx_stat7_s {
1139                u64 reserved_48_63 : 16;
1140                u64 hist1 : 48;
1141        } s;
1142        struct cvmx_bgxx_cmrx_tx_stat7_s cn73xx;
1143        struct cvmx_bgxx_cmrx_tx_stat7_s cn78xx;
1144        struct cvmx_bgxx_cmrx_tx_stat7_s cn78xxp1;
1145        struct cvmx_bgxx_cmrx_tx_stat7_s cnf75xx;
1146};
1147
1148typedef union cvmx_bgxx_cmrx_tx_stat7 cvmx_bgxx_cmrx_tx_stat7_t;
1149
1150/**
1151 * cvmx_bgx#_cmr#_tx_stat8
1152 */
1153union cvmx_bgxx_cmrx_tx_stat8 {
1154        u64 u64;
1155        struct cvmx_bgxx_cmrx_tx_stat8_s {
1156                u64 reserved_48_63 : 16;
1157                u64 hist2 : 48;
1158        } s;
1159        struct cvmx_bgxx_cmrx_tx_stat8_s cn73xx;
1160        struct cvmx_bgxx_cmrx_tx_stat8_s cn78xx;
1161        struct cvmx_bgxx_cmrx_tx_stat8_s cn78xxp1;
1162        struct cvmx_bgxx_cmrx_tx_stat8_s cnf75xx;
1163};
1164
1165typedef union cvmx_bgxx_cmrx_tx_stat8 cvmx_bgxx_cmrx_tx_stat8_t;
1166
1167/**
1168 * cvmx_bgx#_cmr#_tx_stat9
1169 */
1170union cvmx_bgxx_cmrx_tx_stat9 {
1171        u64 u64;
1172        struct cvmx_bgxx_cmrx_tx_stat9_s {
1173                u64 reserved_48_63 : 16;
1174                u64 hist3 : 48;
1175        } s;
1176        struct cvmx_bgxx_cmrx_tx_stat9_s cn73xx;
1177        struct cvmx_bgxx_cmrx_tx_stat9_s cn78xx;
1178        struct cvmx_bgxx_cmrx_tx_stat9_s cn78xxp1;
1179        struct cvmx_bgxx_cmrx_tx_stat9_s cnf75xx;
1180};
1181
1182typedef union cvmx_bgxx_cmrx_tx_stat9 cvmx_bgxx_cmrx_tx_stat9_t;
1183
1184/**
1185 * cvmx_bgx#_cmr_bad
1186 */
1187union cvmx_bgxx_cmr_bad {
1188        u64 u64;
1189        struct cvmx_bgxx_cmr_bad_s {
1190                u64 reserved_1_63 : 63;
1191                u64 rxb_nxl : 1;
1192        } s;
1193        struct cvmx_bgxx_cmr_bad_s cn73xx;
1194        struct cvmx_bgxx_cmr_bad_s cn78xx;
1195        struct cvmx_bgxx_cmr_bad_s cn78xxp1;
1196        struct cvmx_bgxx_cmr_bad_s cnf75xx;
1197};
1198
1199typedef union cvmx_bgxx_cmr_bad cvmx_bgxx_cmr_bad_t;
1200
1201/**
1202 * cvmx_bgx#_cmr_bist_status
1203 */
1204union cvmx_bgxx_cmr_bist_status {
1205        u64 u64;
1206        struct cvmx_bgxx_cmr_bist_status_s {
1207                u64 reserved_25_63 : 39;
1208                u64 status : 25;
1209        } s;
1210        struct cvmx_bgxx_cmr_bist_status_s cn73xx;
1211        struct cvmx_bgxx_cmr_bist_status_s cn78xx;
1212        struct cvmx_bgxx_cmr_bist_status_s cn78xxp1;
1213        struct cvmx_bgxx_cmr_bist_status_s cnf75xx;
1214};
1215
1216typedef union cvmx_bgxx_cmr_bist_status cvmx_bgxx_cmr_bist_status_t;
1217
1218/**
1219 * cvmx_bgx#_cmr_chan_msk_and
1220 */
1221union cvmx_bgxx_cmr_chan_msk_and {
1222        u64 u64;
1223        struct cvmx_bgxx_cmr_chan_msk_and_s {
1224                u64 msk_and : 64;
1225        } s;
1226        struct cvmx_bgxx_cmr_chan_msk_and_s cn73xx;
1227        struct cvmx_bgxx_cmr_chan_msk_and_s cn78xx;
1228        struct cvmx_bgxx_cmr_chan_msk_and_s cn78xxp1;
1229        struct cvmx_bgxx_cmr_chan_msk_and_s cnf75xx;
1230};
1231
1232typedef union cvmx_bgxx_cmr_chan_msk_and cvmx_bgxx_cmr_chan_msk_and_t;
1233
1234/**
1235 * cvmx_bgx#_cmr_chan_msk_or
1236 */
1237union cvmx_bgxx_cmr_chan_msk_or {
1238        u64 u64;
1239        struct cvmx_bgxx_cmr_chan_msk_or_s {
1240                u64 msk_or : 64;
1241        } s;
1242        struct cvmx_bgxx_cmr_chan_msk_or_s cn73xx;
1243        struct cvmx_bgxx_cmr_chan_msk_or_s cn78xx;
1244        struct cvmx_bgxx_cmr_chan_msk_or_s cn78xxp1;
1245        struct cvmx_bgxx_cmr_chan_msk_or_s cnf75xx;
1246};
1247
1248typedef union cvmx_bgxx_cmr_chan_msk_or cvmx_bgxx_cmr_chan_msk_or_t;
1249
1250/**
1251 * cvmx_bgx#_cmr_eco
1252 */
1253union cvmx_bgxx_cmr_eco {
1254        u64 u64;
1255        struct cvmx_bgxx_cmr_eco_s {
1256                u64 eco_ro : 32;
1257                u64 eco_rw : 32;
1258        } s;
1259        struct cvmx_bgxx_cmr_eco_s cn73xx;
1260        struct cvmx_bgxx_cmr_eco_s cn78xx;
1261        struct cvmx_bgxx_cmr_eco_s cnf75xx;
1262};
1263
1264typedef union cvmx_bgxx_cmr_eco cvmx_bgxx_cmr_eco_t;
1265
1266/**
1267 * cvmx_bgx#_cmr_global_config
1268 *
1269 * These registers configure the global CMR, PCS, and MAC.
1270 *
1271 */
1272union cvmx_bgxx_cmr_global_config {
1273        u64 u64;
1274        struct cvmx_bgxx_cmr_global_config_s {
1275                u64 reserved_5_63 : 59;
1276                u64 cmr_mix1_reset : 1;
1277                u64 cmr_mix0_reset : 1;
1278                u64 cmr_x2p_reset : 1;
1279                u64 bgx_clk_enable : 1;
1280                u64 pmux_sds_sel : 1;
1281        } s;
1282        struct cvmx_bgxx_cmr_global_config_s cn73xx;
1283        struct cvmx_bgxx_cmr_global_config_s cn78xx;
1284        struct cvmx_bgxx_cmr_global_config_s cn78xxp1;
1285        struct cvmx_bgxx_cmr_global_config_s cnf75xx;
1286};
1287
1288typedef union cvmx_bgxx_cmr_global_config cvmx_bgxx_cmr_global_config_t;
1289
1290/**
1291 * cvmx_bgx#_cmr_mem_ctrl
1292 */
1293union cvmx_bgxx_cmr_mem_ctrl {
1294        u64 u64;
1295        struct cvmx_bgxx_cmr_mem_ctrl_s {
1296                u64 reserved_24_63 : 40;
1297                u64 txb_skid_synd : 2;
1298                u64 txb_skid_cor_dis : 1;
1299                u64 txb_fif_bk1_syn : 2;
1300                u64 txb_fif_bk1_cdis : 1;
1301                u64 txb_fif_bk0_syn : 2;
1302                u64 txb_fif_bk0_cdis : 1;
1303                u64 rxb_skid_synd : 2;
1304                u64 rxb_skid_cor_dis : 1;
1305                u64 rxb_fif_bk1_syn1 : 2;
1306                u64 rxb_fif_bk1_cdis1 : 1;
1307                u64 rxb_fif_bk1_syn0 : 2;
1308                u64 rxb_fif_bk1_cdis0 : 1;
1309                u64 rxb_fif_bk0_syn1 : 2;
1310                u64 rxb_fif_bk0_cdis1 : 1;
1311                u64 rxb_fif_bk0_syn0 : 2;
1312                u64 rxb_fif_bk0_cdis0 : 1;
1313        } s;
1314        struct cvmx_bgxx_cmr_mem_ctrl_s cn73xx;
1315        struct cvmx_bgxx_cmr_mem_ctrl_s cn78xx;
1316        struct cvmx_bgxx_cmr_mem_ctrl_s cn78xxp1;
1317        struct cvmx_bgxx_cmr_mem_ctrl_s cnf75xx;
1318};
1319
1320typedef union cvmx_bgxx_cmr_mem_ctrl cvmx_bgxx_cmr_mem_ctrl_t;
1321
1322/**
1323 * cvmx_bgx#_cmr_mem_int
1324 */
1325union cvmx_bgxx_cmr_mem_int {
1326        u64 u64;
1327        struct cvmx_bgxx_cmr_mem_int_s {
1328                u64 reserved_18_63 : 46;
1329                u64 smu_in_overfl : 1;
1330                u64 gmp_in_overfl : 1;
1331                u64 txb_skid_sbe : 1;
1332                u64 txb_skid_dbe : 1;
1333                u64 txb_fif_bk1_sbe : 1;
1334                u64 txb_fif_bk1_dbe : 1;
1335                u64 txb_fif_bk0_sbe : 1;
1336                u64 txb_fif_bk0_dbe : 1;
1337                u64 rxb_skid_sbe : 1;
1338                u64 rxb_skid_dbe : 1;
1339                u64 rxb_fif_bk1_sbe1 : 1;
1340                u64 rxb_fif_bk1_dbe1 : 1;
1341                u64 rxb_fif_bk1_sbe0 : 1;
1342                u64 rxb_fif_bk1_dbe0 : 1;
1343                u64 rxb_fif_bk0_sbe1 : 1;
1344                u64 rxb_fif_bk0_dbe1 : 1;
1345                u64 rxb_fif_bk0_sbe0 : 1;
1346                u64 rxb_fif_bk0_dbe0 : 1;
1347        } s;
1348        struct cvmx_bgxx_cmr_mem_int_s cn73xx;
1349        struct cvmx_bgxx_cmr_mem_int_s cn78xx;
1350        struct cvmx_bgxx_cmr_mem_int_s cn78xxp1;
1351        struct cvmx_bgxx_cmr_mem_int_s cnf75xx;
1352};
1353
1354typedef union cvmx_bgxx_cmr_mem_int cvmx_bgxx_cmr_mem_int_t;
1355
1356/**
1357 * cvmx_bgx#_cmr_nxc_adr
1358 */
1359union cvmx_bgxx_cmr_nxc_adr {
1360        u64 u64;
1361        struct cvmx_bgxx_cmr_nxc_adr_s {
1362                u64 reserved_16_63 : 48;
1363                u64 lmac_id : 4;
1364                u64 channel : 12;
1365        } s;
1366        struct cvmx_bgxx_cmr_nxc_adr_s cn73xx;
1367        struct cvmx_bgxx_cmr_nxc_adr_s cn78xx;
1368        struct cvmx_bgxx_cmr_nxc_adr_s cn78xxp1;
1369        struct cvmx_bgxx_cmr_nxc_adr_s cnf75xx;
1370};
1371
1372typedef union cvmx_bgxx_cmr_nxc_adr cvmx_bgxx_cmr_nxc_adr_t;
1373
1374/**
1375 * cvmx_bgx#_cmr_rx_adr#_cam
1376 *
1377 * These registers provide access to the 32 DMAC CAM entries in BGX.
1378 *
1379 */
1380union cvmx_bgxx_cmr_rx_adrx_cam {
1381        u64 u64;
1382        struct cvmx_bgxx_cmr_rx_adrx_cam_s {
1383                u64 reserved_54_63 : 10;
1384                u64 id : 2;
1385                u64 reserved_49_51 : 3;
1386                u64 en : 1;
1387                u64 adr : 48;
1388        } s;
1389        struct cvmx_bgxx_cmr_rx_adrx_cam_s cn73xx;
1390        struct cvmx_bgxx_cmr_rx_adrx_cam_s cn78xx;
1391        struct cvmx_bgxx_cmr_rx_adrx_cam_s cn78xxp1;
1392        struct cvmx_bgxx_cmr_rx_adrx_cam_s cnf75xx;
1393};
1394
1395typedef union cvmx_bgxx_cmr_rx_adrx_cam cvmx_bgxx_cmr_rx_adrx_cam_t;
1396
1397/**
1398 * cvmx_bgx#_cmr_rx_lmacs
1399 */
1400union cvmx_bgxx_cmr_rx_lmacs {
1401        u64 u64;
1402        struct cvmx_bgxx_cmr_rx_lmacs_s {
1403                u64 reserved_3_63 : 61;
1404                u64 lmacs : 3;
1405        } s;
1406        struct cvmx_bgxx_cmr_rx_lmacs_s cn73xx;
1407        struct cvmx_bgxx_cmr_rx_lmacs_s cn78xx;
1408        struct cvmx_bgxx_cmr_rx_lmacs_s cn78xxp1;
1409        struct cvmx_bgxx_cmr_rx_lmacs_s cnf75xx;
1410};
1411
1412typedef union cvmx_bgxx_cmr_rx_lmacs cvmx_bgxx_cmr_rx_lmacs_t;
1413
1414/**
1415 * cvmx_bgx#_cmr_rx_ovr_bp
1416 *
1417 * BGX()_CMR_RX_OVR_BP[EN<0>] must be set to one and BGX()_CMR_RX_OVR_BP[BP<0>] must be
1418 * cleared to zero (to forcibly disable hardware-automatic 802.3 PAUSE packet generation) with
1419 * the HiGig2 Protocol when BGX()_SMU()_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is
1420 * indicated by BGX()_SMU()_TX_CTL[HG_EN]=1 and BGX()_SMU()_RX_UDD_SKP[LEN]=16).
1421 * Hardware can only auto-generate backpressure through HiGig2 messages (optionally, when
1422 * BGX()_SMU()_HG2_CONTROL[HG2TX_EN]=1) with the HiGig2 protocol.
1423 */
1424union cvmx_bgxx_cmr_rx_ovr_bp {
1425        u64 u64;
1426        struct cvmx_bgxx_cmr_rx_ovr_bp_s {
1427                u64 reserved_12_63 : 52;
1428                u64 en : 4;
1429                u64 bp : 4;
1430                u64 ign_fifo_bp : 4;
1431        } s;
1432        struct cvmx_bgxx_cmr_rx_ovr_bp_s cn73xx;
1433        struct cvmx_bgxx_cmr_rx_ovr_bp_s cn78xx;
1434        struct cvmx_bgxx_cmr_rx_ovr_bp_s cn78xxp1;
1435        struct cvmx_bgxx_cmr_rx_ovr_bp_s cnf75xx;
1436};
1437
1438typedef union cvmx_bgxx_cmr_rx_ovr_bp cvmx_bgxx_cmr_rx_ovr_bp_t;
1439
1440/**
1441 * cvmx_bgx#_cmr_tx_lmacs
1442 *
1443 * This register sets the number of LMACs allowed on the TX interface. The value is important for
1444 * defining the partitioning of the transmit FIFO.
1445 */
1446union cvmx_bgxx_cmr_tx_lmacs {
1447        u64 u64;
1448        struct cvmx_bgxx_cmr_tx_lmacs_s {
1449                u64 reserved_3_63 : 61;
1450                u64 lmacs : 3;
1451        } s;
1452        struct cvmx_bgxx_cmr_tx_lmacs_s cn73xx;
1453        struct cvmx_bgxx_cmr_tx_lmacs_s cn78xx;
1454        struct cvmx_bgxx_cmr_tx_lmacs_s cn78xxp1;
1455        struct cvmx_bgxx_cmr_tx_lmacs_s cnf75xx;
1456};
1457
1458typedef union cvmx_bgxx_cmr_tx_lmacs cvmx_bgxx_cmr_tx_lmacs_t;
1459
1460/**
1461 * cvmx_bgx#_gmp_gmi_prt#_cfg
1462 *
1463 * This register controls the configuration of the LMAC.
1464 *
1465 */
1466union cvmx_bgxx_gmp_gmi_prtx_cfg {
1467        u64 u64;
1468        struct cvmx_bgxx_gmp_gmi_prtx_cfg_s {
1469                u64 reserved_14_63 : 50;
1470                u64 tx_idle : 1;
1471                u64 rx_idle : 1;
1472                u64 reserved_9_11 : 3;
1473                u64 speed_msb : 1;
1474                u64 reserved_4_7 : 4;
1475                u64 slottime : 1;
1476                u64 duplex : 1;
1477                u64 speed : 1;
1478                u64 reserved_0_0 : 1;
1479        } s;
1480        struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cn73xx;
1481        struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cn78xx;
1482        struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cn78xxp1;
1483        struct cvmx_bgxx_gmp_gmi_prtx_cfg_s cnf75xx;
1484};
1485
1486typedef union cvmx_bgxx_gmp_gmi_prtx_cfg cvmx_bgxx_gmp_gmi_prtx_cfg_t;
1487
1488/**
1489 * cvmx_bgx#_gmp_gmi_rx#_decision
1490 *
1491 * This register specifies the byte count used to determine when to accept or to filter a packet.
1492 * As each byte in a packet is received by GMI, the L2 byte count is compared against
1493 * [CNT]. In normal operation, the L2 header begins after the
1494 * PREAMBLE + SFD (BGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] = 1) and any optional UDD skip
1495 * data (BGX()_GMP_GMI_RX()_UDD_SKP[LEN]).
1496 */
1497union cvmx_bgxx_gmp_gmi_rxx_decision {
1498        u64 u64;
1499        struct cvmx_bgxx_gmp_gmi_rxx_decision_s {
1500                u64 reserved_5_63 : 59;
1501                u64 cnt : 5;
1502        } s;
1503        struct cvmx_bgxx_gmp_gmi_rxx_decision_s cn73xx;
1504        struct cvmx_bgxx_gmp_gmi_rxx_decision_s cn78xx;
1505        struct cvmx_bgxx_gmp_gmi_rxx_decision_s cn78xxp1;
1506        struct cvmx_bgxx_gmp_gmi_rxx_decision_s cnf75xx;
1507};
1508
1509typedef union cvmx_bgxx_gmp_gmi_rxx_decision cvmx_bgxx_gmp_gmi_rxx_decision_t;
1510
1511/**
1512 * cvmx_bgx#_gmp_gmi_rx#_frm_chk
1513 */
1514union cvmx_bgxx_gmp_gmi_rxx_frm_chk {
1515        u64 u64;
1516        struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s {
1517                u64 reserved_9_63 : 55;
1518                u64 skperr : 1;
1519                u64 rcverr : 1;
1520                u64 reserved_5_6 : 2;
1521                u64 fcserr : 1;
1522                u64 jabber : 1;
1523                u64 reserved_2_2 : 1;
1524                u64 carext : 1;
1525                u64 minerr : 1;
1526        } s;
1527        struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cn73xx;
1528        struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cn78xx;
1529        struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cn78xxp1;
1530        struct cvmx_bgxx_gmp_gmi_rxx_frm_chk_s cnf75xx;
1531};
1532
1533typedef union cvmx_bgxx_gmp_gmi_rxx_frm_chk cvmx_bgxx_gmp_gmi_rxx_frm_chk_t;
1534
1535/**
1536 * cvmx_bgx#_gmp_gmi_rx#_frm_ctl
1537 *
1538 * This register controls the handling of the frames.
1539 * The [CTL_BCK] and [CTL_DRP] bits control how the hardware handles incoming PAUSE packets. The
1540 * most
1541 * common modes of operation:
1542 * _ [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything.
1543 * _ [CTL_BCK] = 0, [CTL_DRP] = 0: software sees all PAUSE frames.
1544 * _ [CTL_BCK] = 0, [CTL_DRP] = 1: all PAUSE frames are completely ignored.
1545 *
1546 * These control bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in half-duplex mode. Since
1547 * PAUSE
1548 * packets only apply to full duplex operation, any PAUSE packet would constitute an exception
1549 * which should be handled by the processing cores. PAUSE packets should not be forwarded.
1550 */
1551union cvmx_bgxx_gmp_gmi_rxx_frm_ctl {
1552        u64 u64;
1553        struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s {
1554                u64 reserved_13_63 : 51;
1555                u64 ptp_mode : 1;
1556                u64 reserved_11_11 : 1;
1557                u64 null_dis : 1;
1558                u64 pre_align : 1;
1559                u64 reserved_7_8 : 2;
1560                u64 pre_free : 1;
1561                u64 ctl_smac : 1;
1562                u64 ctl_mcst : 1;
1563                u64 ctl_bck : 1;
1564                u64 ctl_drp : 1;
1565                u64 pre_strp : 1;
1566                u64 pre_chk : 1;
1567        } s;
1568        struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cn73xx;
1569        struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cn78xx;
1570        struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cn78xxp1;
1571        struct cvmx_bgxx_gmp_gmi_rxx_frm_ctl_s cnf75xx;
1572};
1573
1574typedef union cvmx_bgxx_gmp_gmi_rxx_frm_ctl cvmx_bgxx_gmp_gmi_rxx_frm_ctl_t;
1575
1576/**
1577 * cvmx_bgx#_gmp_gmi_rx#_ifg
1578 *
1579 * This register specifies the minimum number of interframe-gap (IFG) cycles between packets.
1580 *
1581 */
1582union cvmx_bgxx_gmp_gmi_rxx_ifg {
1583        u64 u64;
1584        struct cvmx_bgxx_gmp_gmi_rxx_ifg_s {
1585                u64 reserved_4_63 : 60;
1586                u64 ifg : 4;
1587        } s;
1588        struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cn73xx;
1589        struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cn78xx;
1590        struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cn78xxp1;
1591        struct cvmx_bgxx_gmp_gmi_rxx_ifg_s cnf75xx;
1592};
1593
1594typedef union cvmx_bgxx_gmp_gmi_rxx_ifg cvmx_bgxx_gmp_gmi_rxx_ifg_t;
1595
1596/**
1597 * cvmx_bgx#_gmp_gmi_rx#_int
1598 *
1599 * '"These registers allow interrupts to be sent to the control processor.
1600 * * Exception conditions <10:0> can also set the rcv/opcode in the received packet's work-queue
1601 * entry. BGX()_GMP_GMI_RX()_FRM_CHK provides a bit mask for configuring which conditions
1602 * set the error.
1603 * In half duplex operation, the expectation is that collisions will appear as either MINERR or
1604 * CAREXT errors.'
1605 */
1606union cvmx_bgxx_gmp_gmi_rxx_int {
1607        u64 u64;
1608        struct cvmx_bgxx_gmp_gmi_rxx_int_s {
1609                u64 reserved_12_63 : 52;
1610                u64 ifgerr : 1;
1611                u64 coldet : 1;
1612                u64 falerr : 1;
1613                u64 rsverr : 1;
1614                u64 pcterr : 1;
1615                u64 ovrerr : 1;
1616                u64 skperr : 1;
1617                u64 rcverr : 1;
1618                u64 fcserr : 1;
1619                u64 jabber : 1;
1620                u64 carext : 1;
1621                u64 minerr : 1;
1622        } s;
1623        struct cvmx_bgxx_gmp_gmi_rxx_int_s cn73xx;
1624        struct cvmx_bgxx_gmp_gmi_rxx_int_s cn78xx;
1625        struct cvmx_bgxx_gmp_gmi_rxx_int_s cn78xxp1;
1626        struct cvmx_bgxx_gmp_gmi_rxx_int_s cnf75xx;
1627};
1628
1629typedef union cvmx_bgxx_gmp_gmi_rxx_int cvmx_bgxx_gmp_gmi_rxx_int_t;
1630
1631/**
1632 * cvmx_bgx#_gmp_gmi_rx#_jabber
1633 *
1634 * This register specifies the maximum size for packets, beyond which the GMI truncates.
1635 *
1636 */
1637union cvmx_bgxx_gmp_gmi_rxx_jabber {
1638        u64 u64;
1639        struct cvmx_bgxx_gmp_gmi_rxx_jabber_s {
1640                u64 reserved_16_63 : 48;
1641                u64 cnt : 16;
1642        } s;
1643        struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cn73xx;
1644        struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cn78xx;
1645        struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cn78xxp1;
1646        struct cvmx_bgxx_gmp_gmi_rxx_jabber_s cnf75xx;
1647};
1648
1649typedef union cvmx_bgxx_gmp_gmi_rxx_jabber cvmx_bgxx_gmp_gmi_rxx_jabber_t;
1650
1651/**
1652 * cvmx_bgx#_gmp_gmi_rx#_udd_skp
1653 *
1654 * This register specifies the amount of user-defined data (UDD) added before the start of the
1655 * L2C data.
1656 */
1657union cvmx_bgxx_gmp_gmi_rxx_udd_skp {
1658        u64 u64;
1659        struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s {
1660                u64 reserved_9_63 : 55;
1661                u64 fcssel : 1;
1662                u64 reserved_7_7 : 1;
1663                u64 len : 7;
1664        } s;
1665        struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cn73xx;
1666        struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cn78xx;
1667        struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cn78xxp1;
1668        struct cvmx_bgxx_gmp_gmi_rxx_udd_skp_s cnf75xx;
1669};
1670
1671typedef union cvmx_bgxx_gmp_gmi_rxx_udd_skp cvmx_bgxx_gmp_gmi_rxx_udd_skp_t;
1672
1673/**
1674 * cvmx_bgx#_gmp_gmi_smac#
1675 */
1676union cvmx_bgxx_gmp_gmi_smacx {
1677        u64 u64;
1678        struct cvmx_bgxx_gmp_gmi_smacx_s {
1679                u64 reserved_48_63 : 16;
1680                u64 smac : 48;
1681        } s;
1682        struct cvmx_bgxx_gmp_gmi_smacx_s cn73xx;
1683        struct cvmx_bgxx_gmp_gmi_smacx_s cn78xx;
1684        struct cvmx_bgxx_gmp_gmi_smacx_s cn78xxp1;
1685        struct cvmx_bgxx_gmp_gmi_smacx_s cnf75xx;
1686};
1687
1688typedef union cvmx_bgxx_gmp_gmi_smacx cvmx_bgxx_gmp_gmi_smacx_t;
1689
1690/**
1691 * cvmx_bgx#_gmp_gmi_tx#_append
1692 */
1693union cvmx_bgxx_gmp_gmi_txx_append {
1694        u64 u64;
1695        struct cvmx_bgxx_gmp_gmi_txx_append_s {
1696                u64 reserved_4_63 : 60;
1697                u64 force_fcs : 1;
1698                u64 fcs : 1;
1699                u64 pad : 1;
1700                u64 preamble : 1;
1701        } s;
1702        struct cvmx_bgxx_gmp_gmi_txx_append_s cn73xx;
1703        struct cvmx_bgxx_gmp_gmi_txx_append_s cn78xx;
1704        struct cvmx_bgxx_gmp_gmi_txx_append_s cn78xxp1;
1705        struct cvmx_bgxx_gmp_gmi_txx_append_s cnf75xx;
1706};
1707
1708typedef union cvmx_bgxx_gmp_gmi_txx_append cvmx_bgxx_gmp_gmi_txx_append_t;
1709
1710/**
1711 * cvmx_bgx#_gmp_gmi_tx#_burst
1712 */
1713union cvmx_bgxx_gmp_gmi_txx_burst {
1714        u64 u64;
1715        struct cvmx_bgxx_gmp_gmi_txx_burst_s {
1716                u64 reserved_16_63 : 48;
1717                u64 burst : 16;
1718        } s;
1719        struct cvmx_bgxx_gmp_gmi_txx_burst_s cn73xx;
1720        struct cvmx_bgxx_gmp_gmi_txx_burst_s cn78xx;
1721        struct cvmx_bgxx_gmp_gmi_txx_burst_s cn78xxp1;
1722        struct cvmx_bgxx_gmp_gmi_txx_burst_s cnf75xx;
1723};
1724
1725typedef union cvmx_bgxx_gmp_gmi_txx_burst cvmx_bgxx_gmp_gmi_txx_burst_t;
1726
1727/**
1728 * cvmx_bgx#_gmp_gmi_tx#_ctl
1729 */
1730union cvmx_bgxx_gmp_gmi_txx_ctl {
1731        u64 u64;
1732        struct cvmx_bgxx_gmp_gmi_txx_ctl_s {
1733                u64 reserved_2_63 : 62;
1734                u64 xsdef_en : 1;
1735                u64 xscol_en : 1;
1736        } s;
1737        struct cvmx_bgxx_gmp_gmi_txx_ctl_s cn73xx;
1738        struct cvmx_bgxx_gmp_gmi_txx_ctl_s cn78xx;
1739        struct cvmx_bgxx_gmp_gmi_txx_ctl_s cn78xxp1;
1740        struct cvmx_bgxx_gmp_gmi_txx_ctl_s cnf75xx;
1741};
1742
1743typedef union cvmx_bgxx_gmp_gmi_txx_ctl cvmx_bgxx_gmp_gmi_txx_ctl_t;
1744
1745/**
1746 * cvmx_bgx#_gmp_gmi_tx#_int
1747 */
1748union cvmx_bgxx_gmp_gmi_txx_int {
1749        u64 u64;
1750        struct cvmx_bgxx_gmp_gmi_txx_int_s {
1751                u64 reserved_5_63 : 59;
1752                u64 ptp_lost : 1;
1753                u64 late_col : 1;
1754                u64 xsdef : 1;
1755                u64 xscol : 1;
1756                u64 undflw : 1;
1757        } s;
1758        struct cvmx_bgxx_gmp_gmi_txx_int_s cn73xx;
1759        struct cvmx_bgxx_gmp_gmi_txx_int_s cn78xx;
1760        struct cvmx_bgxx_gmp_gmi_txx_int_s cn78xxp1;
1761        struct cvmx_bgxx_gmp_gmi_txx_int_s cnf75xx;
1762};
1763
1764typedef union cvmx_bgxx_gmp_gmi_txx_int cvmx_bgxx_gmp_gmi_txx_int_t;
1765
1766/**
1767 * cvmx_bgx#_gmp_gmi_tx#_min_pkt
1768 */
1769union cvmx_bgxx_gmp_gmi_txx_min_pkt {
1770        u64 u64;
1771        struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s {
1772                u64 reserved_8_63 : 56;
1773                u64 min_size : 8;
1774        } s;
1775        struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cn73xx;
1776        struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cn78xx;
1777        struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cn78xxp1;
1778        struct cvmx_bgxx_gmp_gmi_txx_min_pkt_s cnf75xx;
1779};
1780
1781typedef union cvmx_bgxx_gmp_gmi_txx_min_pkt cvmx_bgxx_gmp_gmi_txx_min_pkt_t;
1782
1783/**
1784 * cvmx_bgx#_gmp_gmi_tx#_pause_pkt_interval
1785 *
1786 * This register specifies how often PAUSE packets are sent.
1787 *
1788 */
1789union cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval {
1790        u64 u64;
1791        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s {
1792                u64 reserved_16_63 : 48;
1793                u64 interval : 16;
1794        } s;
1795        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn73xx;
1796        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn78xx;
1797        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cn78xxp1;
1798        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_s cnf75xx;
1799};
1800
1801typedef union cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval cvmx_bgxx_gmp_gmi_txx_pause_pkt_interval_t;
1802
1803/**
1804 * cvmx_bgx#_gmp_gmi_tx#_pause_pkt_time
1805 */
1806union cvmx_bgxx_gmp_gmi_txx_pause_pkt_time {
1807        u64 u64;
1808        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s {
1809                u64 reserved_16_63 : 48;
1810                u64 ptime : 16;
1811        } s;
1812        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cn73xx;
1813        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cn78xx;
1814        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cn78xxp1;
1815        struct cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_s cnf75xx;
1816};
1817
1818typedef union cvmx_bgxx_gmp_gmi_txx_pause_pkt_time cvmx_bgxx_gmp_gmi_txx_pause_pkt_time_t;
1819
1820/**
1821 * cvmx_bgx#_gmp_gmi_tx#_pause_togo
1822 */
1823union cvmx_bgxx_gmp_gmi_txx_pause_togo {
1824        u64 u64;
1825        struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s {
1826                u64 reserved_16_63 : 48;
1827                u64 ptime : 16;
1828        } s;
1829        struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cn73xx;
1830        struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cn78xx;
1831        struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cn78xxp1;
1832        struct cvmx_bgxx_gmp_gmi_txx_pause_togo_s cnf75xx;
1833};
1834
1835typedef union cvmx_bgxx_gmp_gmi_txx_pause_togo cvmx_bgxx_gmp_gmi_txx_pause_togo_t;
1836
1837/**
1838 * cvmx_bgx#_gmp_gmi_tx#_pause_zero
1839 */
1840union cvmx_bgxx_gmp_gmi_txx_pause_zero {
1841        u64 u64;
1842        struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s {
1843                u64 reserved_1_63 : 63;
1844                u64 send : 1;
1845        } s;
1846        struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cn73xx;
1847        struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cn78xx;
1848        struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cn78xxp1;
1849        struct cvmx_bgxx_gmp_gmi_txx_pause_zero_s cnf75xx;
1850};
1851
1852typedef union cvmx_bgxx_gmp_gmi_txx_pause_zero cvmx_bgxx_gmp_gmi_txx_pause_zero_t;
1853
1854/**
1855 * cvmx_bgx#_gmp_gmi_tx#_sgmii_ctl
1856 */
1857union cvmx_bgxx_gmp_gmi_txx_sgmii_ctl {
1858        u64 u64;
1859        struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s {
1860                u64 reserved_1_63 : 63;
1861                u64 align : 1;
1862        } s;
1863        struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cn73xx;
1864        struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cn78xx;
1865        struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cn78xxp1;
1866        struct cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_s cnf75xx;
1867};
1868
1869typedef union cvmx_bgxx_gmp_gmi_txx_sgmii_ctl cvmx_bgxx_gmp_gmi_txx_sgmii_ctl_t;
1870
1871/**
1872 * cvmx_bgx#_gmp_gmi_tx#_slot
1873 */
1874union cvmx_bgxx_gmp_gmi_txx_slot {
1875        u64 u64;
1876        struct cvmx_bgxx_gmp_gmi_txx_slot_s {
1877                u64 reserved_10_63 : 54;
1878                u64 slot : 10;
1879        } s;
1880        struct cvmx_bgxx_gmp_gmi_txx_slot_s cn73xx;
1881        struct cvmx_bgxx_gmp_gmi_txx_slot_s cn78xx;
1882        struct cvmx_bgxx_gmp_gmi_txx_slot_s cn78xxp1;
1883        struct cvmx_bgxx_gmp_gmi_txx_slot_s cnf75xx;
1884};
1885
1886typedef union cvmx_bgxx_gmp_gmi_txx_slot cvmx_bgxx_gmp_gmi_txx_slot_t;
1887
1888/**
1889 * cvmx_bgx#_gmp_gmi_tx#_soft_pause
1890 */
1891union cvmx_bgxx_gmp_gmi_txx_soft_pause {
1892        u64 u64;
1893        struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s {
1894                u64 reserved_16_63 : 48;
1895                u64 ptime : 16;
1896        } s;
1897        struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cn73xx;
1898        struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cn78xx;
1899        struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cn78xxp1;
1900        struct cvmx_bgxx_gmp_gmi_txx_soft_pause_s cnf75xx;
1901};
1902
1903typedef union cvmx_bgxx_gmp_gmi_txx_soft_pause cvmx_bgxx_gmp_gmi_txx_soft_pause_t;
1904
1905/**
1906 * cvmx_bgx#_gmp_gmi_tx#_thresh
1907 */
1908union cvmx_bgxx_gmp_gmi_txx_thresh {
1909        u64 u64;
1910        struct cvmx_bgxx_gmp_gmi_txx_thresh_s {
1911                u64 reserved_11_63 : 53;
1912                u64 cnt : 11;
1913        } s;
1914        struct cvmx_bgxx_gmp_gmi_txx_thresh_s cn73xx;
1915        struct cvmx_bgxx_gmp_gmi_txx_thresh_s cn78xx;
1916        struct cvmx_bgxx_gmp_gmi_txx_thresh_s cn78xxp1;
1917        struct cvmx_bgxx_gmp_gmi_txx_thresh_s cnf75xx;
1918};
1919
1920typedef union cvmx_bgxx_gmp_gmi_txx_thresh cvmx_bgxx_gmp_gmi_txx_thresh_t;
1921
1922/**
1923 * cvmx_bgx#_gmp_gmi_tx_col_attempt
1924 */
1925union cvmx_bgxx_gmp_gmi_tx_col_attempt {
1926        u64 u64;
1927        struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s {
1928                u64 reserved_5_63 : 59;
1929                u64 limit : 5;
1930        } s;
1931        struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cn73xx;
1932        struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cn78xx;
1933        struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cn78xxp1;
1934        struct cvmx_bgxx_gmp_gmi_tx_col_attempt_s cnf75xx;
1935};
1936
1937typedef union cvmx_bgxx_gmp_gmi_tx_col_attempt cvmx_bgxx_gmp_gmi_tx_col_attempt_t;
1938
1939/**
1940 * cvmx_bgx#_gmp_gmi_tx_ifg
1941 *
1942 * Consider the following when programming IFG1 and IFG2:
1943 * * For 10/100/1000 Mb/s half-duplex systems that require IEEE 802.3 compatibility, IFG1 must be
1944 * in the range of 1-8, IFG2 must be in the range of 4-12, and the IFG1 + IFG2 sum must be 12.
1945 * * For 10/100/1000 Mb/s full-duplex systems that require IEEE 802.3 compatibility, IFG1 must be
1946 * in the range of 1-11, IFG2 must be in the range of 1-11, and the IFG1 + IFG2 sum must be 12.
1947 * For all other systems, IFG1 and IFG2 can be any value in the range of 1-15, allowing for a
1948 * total possible IFG sum of 2-30.
1949 */
1950union cvmx_bgxx_gmp_gmi_tx_ifg {
1951        u64 u64;
1952        struct cvmx_bgxx_gmp_gmi_tx_ifg_s {
1953                u64 reserved_8_63 : 56;
1954                u64 ifg2 : 4;
1955                u64 ifg1 : 4;
1956        } s;
1957        struct cvmx_bgxx_gmp_gmi_tx_ifg_s cn73xx;
1958        struct cvmx_bgxx_gmp_gmi_tx_ifg_s cn78xx;
1959        struct cvmx_bgxx_gmp_gmi_tx_ifg_s cn78xxp1;
1960        struct cvmx_bgxx_gmp_gmi_tx_ifg_s cnf75xx;
1961};
1962
1963typedef union cvmx_bgxx_gmp_gmi_tx_ifg cvmx_bgxx_gmp_gmi_tx_ifg_t;
1964
1965/**
1966 * cvmx_bgx#_gmp_gmi_tx_jam
1967 *
1968 * This register provides the pattern used in JAM bytes.
1969 *
1970 */
1971union cvmx_bgxx_gmp_gmi_tx_jam {
1972        u64 u64;
1973        struct cvmx_bgxx_gmp_gmi_tx_jam_s {
1974                u64 reserved_8_63 : 56;
1975                u64 jam : 8;
1976        } s;
1977        struct cvmx_bgxx_gmp_gmi_tx_jam_s cn73xx;
1978        struct cvmx_bgxx_gmp_gmi_tx_jam_s cn78xx;
1979        struct cvmx_bgxx_gmp_gmi_tx_jam_s cn78xxp1;
1980        struct cvmx_bgxx_gmp_gmi_tx_jam_s cnf75xx;
1981};
1982
1983typedef union cvmx_bgxx_gmp_gmi_tx_jam cvmx_bgxx_gmp_gmi_tx_jam_t;
1984
1985/**
1986 * cvmx_bgx#_gmp_gmi_tx_lfsr
1987 *
1988 * This register shows the contents of the linear feedback shift register (LFSR), which is used
1989 * to implement truncated binary exponential backoff.
1990 */
1991union cvmx_bgxx_gmp_gmi_tx_lfsr {
1992        u64 u64;
1993        struct cvmx_bgxx_gmp_gmi_tx_lfsr_s {
1994                u64 reserved_16_63 : 48;
1995                u64 lfsr : 16;
1996        } s;
1997        struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cn73xx;
1998        struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cn78xx;
1999        struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cn78xxp1;
2000        struct cvmx_bgxx_gmp_gmi_tx_lfsr_s cnf75xx;
2001};
2002
2003typedef union cvmx_bgxx_gmp_gmi_tx_lfsr cvmx_bgxx_gmp_gmi_tx_lfsr_t;
2004
2005/**
2006 * cvmx_bgx#_gmp_gmi_tx_pause_pkt_dmac
2007 */
2008union cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac {
2009        u64 u64;
2010        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s {
2011                u64 reserved_48_63 : 16;
2012                u64 dmac : 48;
2013        } s;
2014        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cn73xx;
2015        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cn78xx;
2016        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cn78xxp1;
2017        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_s cnf75xx;
2018};
2019
2020typedef union cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac cvmx_bgxx_gmp_gmi_tx_pause_pkt_dmac_t;
2021
2022/**
2023 * cvmx_bgx#_gmp_gmi_tx_pause_pkt_type
2024 *
2025 * This register provides the PTYPE field that is placed in outbound PAUSE packets.
2026 *
2027 */
2028union cvmx_bgxx_gmp_gmi_tx_pause_pkt_type {
2029        u64 u64;
2030        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s {
2031                u64 reserved_16_63 : 48;
2032                u64 ptype : 16;
2033        } s;
2034        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cn73xx;
2035        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cn78xx;
2036        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cn78xxp1;
2037        struct cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_s cnf75xx;
2038};
2039
2040typedef union cvmx_bgxx_gmp_gmi_tx_pause_pkt_type cvmx_bgxx_gmp_gmi_tx_pause_pkt_type_t;
2041
2042/**
2043 * cvmx_bgx#_gmp_pcs_an#_adv
2044 */
2045union cvmx_bgxx_gmp_pcs_anx_adv {
2046        u64 u64;
2047        struct cvmx_bgxx_gmp_pcs_anx_adv_s {
2048                u64 reserved_16_63 : 48;
2049                u64 np : 1;
2050                u64 reserved_14_14 : 1;
2051                u64 rem_flt : 2;
2052                u64 reserved_9_11 : 3;
2053                u64 pause : 2;
2054                u64 hfd : 1;
2055                u64 fd : 1;
2056                u64 reserved_0_4 : 5;
2057        } s;
2058        struct cvmx_bgxx_gmp_pcs_anx_adv_s cn73xx;
2059        struct cvmx_bgxx_gmp_pcs_anx_adv_s cn78xx;
2060        struct cvmx_bgxx_gmp_pcs_anx_adv_s cn78xxp1;
2061        struct cvmx_bgxx_gmp_pcs_anx_adv_s cnf75xx;
2062};
2063
2064typedef union cvmx_bgxx_gmp_pcs_anx_adv cvmx_bgxx_gmp_pcs_anx_adv_t;
2065
2066/**
2067 * cvmx_bgx#_gmp_pcs_an#_ext_st
2068 */
2069union cvmx_bgxx_gmp_pcs_anx_ext_st {
2070        u64 u64;
2071        struct cvmx_bgxx_gmp_pcs_anx_ext_st_s {
2072                u64 reserved_16_63 : 48;
2073                u64 thou_xfd : 1;
2074                u64 thou_xhd : 1;
2075                u64 thou_tfd : 1;
2076                u64 thou_thd : 1;
2077                u64 reserved_0_11 : 12;
2078        } s;
2079        struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cn73xx;
2080        struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cn78xx;
2081        struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cn78xxp1;
2082        struct cvmx_bgxx_gmp_pcs_anx_ext_st_s cnf75xx;
2083};
2084
2085typedef union cvmx_bgxx_gmp_pcs_anx_ext_st cvmx_bgxx_gmp_pcs_anx_ext_st_t;
2086
2087/**
2088 * cvmx_bgx#_gmp_pcs_an#_lp_abil
2089 *
2090 * This is the autonegotiation link partner ability register 5 as per IEEE 802.3, Clause 37.
2091 *
2092 */
2093union cvmx_bgxx_gmp_pcs_anx_lp_abil {
2094        u64 u64;
2095        struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s {
2096                u64 reserved_16_63 : 48;
2097                u64 np : 1;
2098                u64 ack : 1;
2099                u64 rem_flt : 2;
2100                u64 reserved_9_11 : 3;
2101                u64 pause : 2;
2102                u64 hfd : 1;
2103                u64 fd : 1;
2104                u64 reserved_0_4 : 5;
2105        } s;
2106        struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cn73xx;
2107        struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cn78xx;
2108        struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cn78xxp1;
2109        struct cvmx_bgxx_gmp_pcs_anx_lp_abil_s cnf75xx;
2110};
2111
2112typedef union cvmx_bgxx_gmp_pcs_anx_lp_abil cvmx_bgxx_gmp_pcs_anx_lp_abil_t;
2113
2114/**
2115 * cvmx_bgx#_gmp_pcs_an#_results
2116 *
2117 * This register is not valid when BGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 1. If
2118 * BGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 0 and
2119 * BGX()_GMP_PCS_AN()_RESULTS[AN_CPT] is set to 1, this register is valid.
2120 */
2121union cvmx_bgxx_gmp_pcs_anx_results {
2122        u64 u64;
2123        struct cvmx_bgxx_gmp_pcs_anx_results_s {
2124                u64 reserved_7_63 : 57;
2125                u64 pause : 2;
2126                u64 spd : 2;
2127                u64 an_cpt : 1;
2128                u64 dup : 1;
2129                u64 link_ok : 1;
2130        } s;
2131        struct cvmx_bgxx_gmp_pcs_anx_results_s cn73xx;
2132        struct cvmx_bgxx_gmp_pcs_anx_results_s cn78xx;
2133        struct cvmx_bgxx_gmp_pcs_anx_results_s cn78xxp1;
2134        struct cvmx_bgxx_gmp_pcs_anx_results_s cnf75xx;
2135};
2136
2137typedef union cvmx_bgxx_gmp_pcs_anx_results cvmx_bgxx_gmp_pcs_anx_results_t;
2138
2139/**
2140 * cvmx_bgx#_gmp_pcs_int#
2141 */
2142union cvmx_bgxx_gmp_pcs_intx {
2143        u64 u64;
2144        struct cvmx_bgxx_gmp_pcs_intx_s {
2145                u64 reserved_13_63 : 51;
2146                u64 dbg_sync : 1;
2147                u64 dup : 1;
2148                u64 sync_bad : 1;
2149                u64 an_bad : 1;
2150                u64 rxlock : 1;
2151                u64 rxbad : 1;
2152                u64 rxerr : 1;
2153                u64 txbad : 1;
2154                u64 txfifo : 1;
2155                u64 txfifu : 1;
2156                u64 an_err : 1;
2157                u64 xmit : 1;
2158                u64 lnkspd : 1;
2159        } s;
2160        struct cvmx_bgxx_gmp_pcs_intx_s cn73xx;
2161        struct cvmx_bgxx_gmp_pcs_intx_s cn78xx;
2162        struct cvmx_bgxx_gmp_pcs_intx_s cn78xxp1;
2163        struct cvmx_bgxx_gmp_pcs_intx_s cnf75xx;
2164};
2165
2166typedef union cvmx_bgxx_gmp_pcs_intx cvmx_bgxx_gmp_pcs_intx_t;
2167
2168/**
2169 * cvmx_bgx#_gmp_pcs_link#_timer
2170 *
2171 * This is the 1.6 ms nominal link timer register.
2172 *
2173 */
2174union cvmx_bgxx_gmp_pcs_linkx_timer {
2175        u64 u64;
2176        struct cvmx_bgxx_gmp_pcs_linkx_timer_s {
2177                u64 reserved_16_63 : 48;
2178                u64 count : 16;
2179        } s;
2180        struct cvmx_bgxx_gmp_pcs_linkx_timer_s cn73xx;
2181        struct cvmx_bgxx_gmp_pcs_linkx_timer_s cn78xx;
2182        struct cvmx_bgxx_gmp_pcs_linkx_timer_s cn78xxp1;
2183        struct cvmx_bgxx_gmp_pcs_linkx_timer_s cnf75xx;
2184};
2185
2186typedef union cvmx_bgxx_gmp_pcs_linkx_timer cvmx_bgxx_gmp_pcs_linkx_timer_t;
2187
2188/**
2189 * cvmx_bgx#_gmp_pcs_misc#_ctl
2190 */
2191union cvmx_bgxx_gmp_pcs_miscx_ctl {
2192        u64 u64;
2193        struct cvmx_bgxx_gmp_pcs_miscx_ctl_s {
2194                u64 reserved_13_63 : 51;
2195                u64 sgmii : 1;
2196                u64 gmxeno : 1;
2197                u64 loopbck2 : 1;
2198                u64 mac_phy : 1;
2199                u64 mode : 1;
2200                u64 an_ovrd : 1;
2201                u64 samp_pt : 7;
2202        } s;
2203        struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cn73xx;
2204        struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cn78xx;
2205        struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cn78xxp1;
2206        struct cvmx_bgxx_gmp_pcs_miscx_ctl_s cnf75xx;
2207};
2208
2209typedef union cvmx_bgxx_gmp_pcs_miscx_ctl cvmx_bgxx_gmp_pcs_miscx_ctl_t;
2210
2211/**
2212 * cvmx_bgx#_gmp_pcs_mr#_control
2213 */
2214union cvmx_bgxx_gmp_pcs_mrx_control {
2215        u64 u64;
2216        struct cvmx_bgxx_gmp_pcs_mrx_control_s {
2217                u64 reserved_16_63 : 48;
2218                u64 reset : 1;
2219                u64 loopbck1 : 1;
2220                u64 spdlsb : 1;
2221                u64 an_en : 1;
2222                u64 pwr_dn : 1;
2223                u64 reserved_10_10 : 1;
2224                u64 rst_an : 1;
2225                u64 dup : 1;
2226                u64 coltst : 1;
2227                u64 spdmsb : 1;
2228                u64 uni : 1;
2229                u64 reserved_0_4 : 5;
2230        } s;
2231        struct cvmx_bgxx_gmp_pcs_mrx_control_s cn73xx;
2232        struct cvmx_bgxx_gmp_pcs_mrx_control_s cn78xx;
2233        struct cvmx_bgxx_gmp_pcs_mrx_control_s cn78xxp1;
2234        struct cvmx_bgxx_gmp_pcs_mrx_control_s cnf75xx;
2235};
2236
2237typedef union cvmx_bgxx_gmp_pcs_mrx_control cvmx_bgxx_gmp_pcs_mrx_control_t;
2238
2239/**
2240 * cvmx_bgx#_gmp_pcs_mr#_status
2241 *
2242 * Bits <15:9> in this register indicate the ability to operate when
2243 * BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set to MAC mode. Bits <15:9> are always read as
2244 * 0, indicating that the chip cannot operate in the corresponding modes. The field [RM_FLT] is a
2245 * 'don't care' when the selected mode is SGMII.
2246 */
2247union cvmx_bgxx_gmp_pcs_mrx_status {
2248        u64 u64;
2249        struct cvmx_bgxx_gmp_pcs_mrx_status_s {
2250                u64 reserved_16_63 : 48;
2251                u64 hun_t4 : 1;
2252                u64 hun_xfd : 1;
2253                u64 hun_xhd : 1;
2254                u64 ten_fd : 1;
2255                u64 ten_hd : 1;
2256                u64 hun_t2fd : 1;
2257                u64 hun_t2hd : 1;
2258                u64 ext_st : 1;
2259                u64 reserved_7_7 : 1;
2260                u64 prb_sup : 1;
2261                u64 an_cpt : 1;
2262                u64 rm_flt : 1;
2263                u64 an_abil : 1;
2264                u64 lnk_st : 1;
2265                u64 reserved_1_1 : 1;
2266                u64 extnd : 1;
2267        } s;
2268        struct cvmx_bgxx_gmp_pcs_mrx_status_s cn73xx;
2269        struct cvmx_bgxx_gmp_pcs_mrx_status_s cn78xx;
2270        struct cvmx_bgxx_gmp_pcs_mrx_status_s cn78xxp1;
2271        struct cvmx_bgxx_gmp_pcs_mrx_status_s cnf75xx;
2272};
2273
2274typedef union cvmx_bgxx_gmp_pcs_mrx_status cvmx_bgxx_gmp_pcs_mrx_status_t;
2275
2276/**
2277 * cvmx_bgx#_gmp_pcs_rx#_states
2278 */
2279union cvmx_bgxx_gmp_pcs_rxx_states {
2280        u64 u64;
2281        struct cvmx_bgxx_gmp_pcs_rxx_states_s {
2282                u64 reserved_16_63 : 48;
2283                u64 rx_bad : 1;
2284                u64 rx_st : 5;
2285                u64 sync_bad : 1;
2286                u64 sync : 4;
2287                u64 an_bad : 1;
2288                u64 an_st : 4;
2289        } s;
2290        struct cvmx_bgxx_gmp_pcs_rxx_states_s cn73xx;
2291        struct cvmx_bgxx_gmp_pcs_rxx_states_s cn78xx;
2292        struct cvmx_bgxx_gmp_pcs_rxx_states_s cn78xxp1;
2293        struct cvmx_bgxx_gmp_pcs_rxx_states_s cnf75xx;
2294};
2295
2296typedef union cvmx_bgxx_gmp_pcs_rxx_states cvmx_bgxx_gmp_pcs_rxx_states_t;
2297
2298/**
2299 * cvmx_bgx#_gmp_pcs_rx#_sync
2300 */
2301union cvmx_bgxx_gmp_pcs_rxx_sync {
2302        u64 u64;
2303        struct cvmx_bgxx_gmp_pcs_rxx_sync_s {
2304                u64 reserved_2_63 : 62;
2305                u64 sync : 1;
2306                u64 bit_lock : 1;
2307        } s;
2308        struct cvmx_bgxx_gmp_pcs_rxx_sync_s cn73xx;
2309        struct cvmx_bgxx_gmp_pcs_rxx_sync_s cn78xx;
2310        struct cvmx_bgxx_gmp_pcs_rxx_sync_s cn78xxp1;
2311        struct cvmx_bgxx_gmp_pcs_rxx_sync_s cnf75xx;
2312};
2313
2314typedef union cvmx_bgxx_gmp_pcs_rxx_sync cvmx_bgxx_gmp_pcs_rxx_sync_t;
2315
2316/**
2317 * cvmx_bgx#_gmp_pcs_sgm#_an_adv
2318 *
2319 * This is the SGMII autonegotiation advertisement register (sent out as tx_Config_Reg<15:0> as
2320 * defined in IEEE 802.3 clause 37). This register is sent during autonegotiation if
2321 * BGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set (1 = PHY mode). If the bit is not set (0 =
2322 * MAC mode), then tx_Config_Reg<14> becomes ACK bit and tx_Config_Reg<0> is always 1. All other
2323 * bits in tx_Config_Reg sent will be 0. The PHY dictates the autonegotiation results.
2324 */
2325union cvmx_bgxx_gmp_pcs_sgmx_an_adv {
2326        u64 u64;
2327        struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s {
2328                u64 reserved_16_63 : 48;
2329                u64 link : 1;
2330                u64 ack : 1;
2331                u64 reserved_13_13 : 1;
2332                u64 dup : 1;
2333                u64 speed : 2;
2334                u64 reserved_1_9 : 9;
2335                u64 one : 1;
2336        } s;
2337        struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cn73xx;
2338        struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cn78xx;
2339        struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cn78xxp1;
2340        struct cvmx_bgxx_gmp_pcs_sgmx_an_adv_s cnf75xx;
2341};
2342
2343typedef union cvmx_bgxx_gmp_pcs_sgmx_an_adv cvmx_bgxx_gmp_pcs_sgmx_an_adv_t;
2344
2345/**
2346 * cvmx_bgx#_gmp_pcs_sgm#_lp_adv
2347 *
2348 * This is the SGMII link partner advertisement register (received as rx_Config_Reg<15:0> as
2349 * defined in IEEE 802.3 clause 37).
2350 */
2351union cvmx_bgxx_gmp_pcs_sgmx_lp_adv {
2352        u64 u64;
2353        struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s {
2354                u64 reserved_16_63 : 48;
2355                u64 link : 1;
2356                u64 reserved_13_14 : 2;
2357                u64 dup : 1;
2358                u64 speed : 2;
2359                u64 reserved_1_9 : 9;
2360                u64 one : 1;
2361        } s;
2362        struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cn73xx;
2363        struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cn78xx;
2364        struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cn78xxp1;
2365        struct cvmx_bgxx_gmp_pcs_sgmx_lp_adv_s cnf75xx;
2366};
2367
2368typedef union cvmx_bgxx_gmp_pcs_sgmx_lp_adv cvmx_bgxx_gmp_pcs_sgmx_lp_adv_t;
2369
2370/**
2371 * cvmx_bgx#_gmp_pcs_tx#_states
2372 */
2373union cvmx_bgxx_gmp_pcs_txx_states {
2374        u64 u64;
2375        struct cvmx_bgxx_gmp_pcs_txx_states_s {
2376                u64 reserved_7_63 : 57;
2377                u64 xmit : 2;
2378                u64 tx_bad : 1;
2379                u64 ord_st : 4;
2380        } s;
2381        struct cvmx_bgxx_gmp_pcs_txx_states_s cn73xx;
2382        struct cvmx_bgxx_gmp_pcs_txx_states_s cn78xx;
2383        struct cvmx_bgxx_gmp_pcs_txx_states_s cn78xxp1;
2384        struct cvmx_bgxx_gmp_pcs_txx_states_s cnf75xx;
2385};
2386
2387typedef union cvmx_bgxx_gmp_pcs_txx_states cvmx_bgxx_gmp_pcs_txx_states_t;
2388
2389/**
2390 * cvmx_bgx#_gmp_pcs_tx_rx#_polarity
2391 *
2392 * BGX()_GMP_PCS_TX_RX()_POLARITY[AUTORXPL] shows correct polarity needed on the link
2393 * receive path after code group synchronization is achieved.
2394 */
2395union cvmx_bgxx_gmp_pcs_tx_rxx_polarity {
2396        u64 u64;
2397        struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s {
2398                u64 reserved_4_63 : 60;
2399                u64 rxovrd : 1;
2400                u64 autorxpl : 1;
2401                u64 rxplrt : 1;
2402                u64 txplrt : 1;
2403        } s;
2404        struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cn73xx;
2405        struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cn78xx;
2406        struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cn78xxp1;
2407        struct cvmx_bgxx_gmp_pcs_tx_rxx_polarity_s cnf75xx;
2408};
2409
2410typedef union cvmx_bgxx_gmp_pcs_tx_rxx_polarity cvmx_bgxx_gmp_pcs_tx_rxx_polarity_t;
2411
2412/**
2413 * cvmx_bgx#_smu#_cbfc_ctl
2414 */
2415union cvmx_bgxx_smux_cbfc_ctl {
2416        u64 u64;
2417        struct cvmx_bgxx_smux_cbfc_ctl_s {
2418                u64 phys_en : 16;
2419                u64 logl_en : 16;
2420                u64 reserved_4_31 : 28;
2421                u64 bck_en : 1;
2422                u64 drp_en : 1;
2423                u64 tx_en : 1;
2424                u64 rx_en : 1;
2425        } s;
2426        struct cvmx_bgxx_smux_cbfc_ctl_s cn73xx;
2427        struct cvmx_bgxx_smux_cbfc_ctl_s cn78xx;
2428        struct cvmx_bgxx_smux_cbfc_ctl_s cn78xxp1;
2429        struct cvmx_bgxx_smux_cbfc_ctl_s cnf75xx;
2430};
2431
2432typedef union cvmx_bgxx_smux_cbfc_ctl cvmx_bgxx_smux_cbfc_ctl_t;
2433
2434/**
2435 * cvmx_bgx#_smu#_ctrl
2436 */
2437union cvmx_bgxx_smux_ctrl {
2438        u64 u64;
2439        struct cvmx_bgxx_smux_ctrl_s {
2440                u64 reserved_2_63 : 62;
2441                u64 tx_idle : 1;
2442                u64 rx_idle : 1;
2443        } s;
2444        struct cvmx_bgxx_smux_ctrl_s cn73xx;
2445        struct cvmx_bgxx_smux_ctrl_s cn78xx;
2446        struct cvmx_bgxx_smux_ctrl_s cn78xxp1;
2447        struct cvmx_bgxx_smux_ctrl_s cnf75xx;
2448};
2449
2450typedef union cvmx_bgxx_smux_ctrl cvmx_bgxx_smux_ctrl_t;
2451
2452/**
2453 * cvmx_bgx#_smu#_ext_loopback
2454 *
2455 * In loopback mode, the IFG1+IFG2 of local and remote parties must match exactly; otherwise one
2456 * of the two sides' loopback FIFO will overrun: BGX()_SMU()_TX_INT[LB_OVRFLW].
2457 */
2458union cvmx_bgxx_smux_ext_loopback {
2459        u64 u64;
2460        struct cvmx_bgxx_smux_ext_loopback_s {
2461                u64 reserved_5_63 : 59;
2462                u64 en : 1;
2463                u64 thresh : 4;
2464        } s;
2465        struct cvmx_bgxx_smux_ext_loopback_s cn73xx;
2466        struct cvmx_bgxx_smux_ext_loopback_s cn78xx;
2467        struct cvmx_bgxx_smux_ext_loopback_s cn78xxp1;
2468        struct cvmx_bgxx_smux_ext_loopback_s cnf75xx;
2469};
2470
2471typedef union cvmx_bgxx_smux_ext_loopback cvmx_bgxx_smux_ext_loopback_t;
2472
2473/**
2474 * cvmx_bgx#_smu#_hg2_control
2475 *
2476 * HiGig2 TX- and RX-enable are normally set together for HiGig2 messaging. Setting just the TX
2477 * or RX bit results in only the HG2 message transmit or receive capability.
2478 *
2479 * Setting [PHYS_EN] and [LOGL_EN] to 1 allows link PAUSE or backpressure to PKO as per the
2480 * received HiGig2 message. Setting these fields to 0 disables link PAUSE and backpressure to PKO
2481 * in response to received messages.
2482 *
2483 * BGX()_SMU()_TX_CTL[HG_EN] must be set (to enable HiGig) whenever either [HG2TX_EN] or
2484 * [HG2RX_EN] are set. BGX()_SMU()_RX_UDD_SKP[LEN] must be set to 16 (to select HiGig2)
2485 * whenever either [HG2TX_EN] or [HG2RX_EN] are set.
2486 *
2487 * BGX()_CMR_RX_OVR_BP[EN]<0> must be set and BGX()_CMR_RX_OVR_BP[BP]<0> must be cleared
2488 * to 0 (to forcibly disable hardware-automatic 802.3 PAUSE packet generation) with the HiGig2
2489 * Protocol when [HG2TX_EN] = 0. (The HiGig2 protocol is indicated
2490 * by BGX()_SMU()_TX_CTL[HG_EN] = 1 and BGX()_SMU()_RX_UDD_SKP[LEN]=16.) Hardware
2491 * can only autogenerate backpressure via HiGig2 messages (optionally, when [HG2TX_EN] = 1) with
2492 * the HiGig2 protocol.
2493 */
2494union cvmx_bgxx_smux_hg2_control {
2495        u64 u64;
2496        struct cvmx_bgxx_smux_hg2_control_s {
2497                u64 reserved_19_63 : 45;
2498                u64 hg2tx_en : 1;
2499                u64 hg2rx_en : 1;
2500                u64 phys_en : 1;
2501                u64 logl_en : 16;
2502        } s;
2503        struct cvmx_bgxx_smux_hg2_control_s cn73xx;
2504        struct cvmx_bgxx_smux_hg2_control_s cn78xx;
2505        struct cvmx_bgxx_smux_hg2_control_s cn78xxp1;
2506        struct cvmx_bgxx_smux_hg2_control_s cnf75xx;
2507};
2508
2509typedef union cvmx_bgxx_smux_hg2_control cvmx_bgxx_smux_hg2_control_t;
2510
2511/**
2512 * cvmx_bgx#_smu#_rx_bad_col_hi
2513 */
2514union cvmx_bgxx_smux_rx_bad_col_hi {
2515        u64 u64;
2516        struct cvmx_bgxx_smux_rx_bad_col_hi_s {
2517                u64 reserved_17_63 : 47;
2518                u64 val : 1;
2519                u64 state : 8;
2520                u64 lane_rxc : 8;
2521        } s;
2522        struct cvmx_bgxx_smux_rx_bad_col_hi_s cn73xx;
2523        struct cvmx_bgxx_smux_rx_bad_col_hi_s cn78xx;
2524        struct cvmx_bgxx_smux_rx_bad_col_hi_s cn78xxp1;
2525        struct cvmx_bgxx_smux_rx_bad_col_hi_s cnf75xx;
2526};
2527
2528typedef union cvmx_bgxx_smux_rx_bad_col_hi cvmx_bgxx_smux_rx_bad_col_hi_t;
2529
2530/**
2531 * cvmx_bgx#_smu#_rx_bad_col_lo
2532 */
2533union cvmx_bgxx_smux_rx_bad_col_lo {
2534        u64 u64;
2535        struct cvmx_bgxx_smux_rx_bad_col_lo_s {
2536                u64 lane_rxd : 64;
2537        } s;
2538        struct cvmx_bgxx_smux_rx_bad_col_lo_s cn73xx;
2539        struct cvmx_bgxx_smux_rx_bad_col_lo_s cn78xx;
2540        struct cvmx_bgxx_smux_rx_bad_col_lo_s cn78xxp1;
2541        struct cvmx_bgxx_smux_rx_bad_col_lo_s cnf75xx;
2542};
2543
2544typedef union cvmx_bgxx_smux_rx_bad_col_lo cvmx_bgxx_smux_rx_bad_col_lo_t;
2545
2546/**
2547 * cvmx_bgx#_smu#_rx_ctl
2548 */
2549union cvmx_bgxx_smux_rx_ctl {
2550        u64 u64;
2551        struct cvmx_bgxx_smux_rx_ctl_s {
2552                u64 reserved_2_63 : 62;
2553                u64 status : 2;
2554        } s;
2555        struct cvmx_bgxx_smux_rx_ctl_s cn73xx;
2556        struct cvmx_bgxx_smux_rx_ctl_s cn78xx;
2557        struct cvmx_bgxx_smux_rx_ctl_s cn78xxp1;
2558        struct cvmx_bgxx_smux_rx_ctl_s cnf75xx;
2559};
2560
2561typedef union cvmx_bgxx_smux_rx_ctl cvmx_bgxx_smux_rx_ctl_t;
2562
2563/**
2564 * cvmx_bgx#_smu#_rx_decision
2565 *
2566 * This register specifies the byte count used to determine when to accept or to filter a packet.
2567 * As each byte in a packet is received by BGX, the L2 byte count (i.e. the number of bytes from
2568 * the beginning of the L2 header (DMAC)) is compared against CNT. In normal operation, the L2
2569 * header begins after the PREAMBLE + SFD (BGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 1) and any
2570 * optional UDD skip data (BGX()_SMU()_RX_UDD_SKP[LEN]).
2571 */
2572union cvmx_bgxx_smux_rx_decision {
2573        u64 u64;
2574        struct cvmx_bgxx_smux_rx_decision_s {
2575                u64 reserved_5_63 : 59;
2576                u64 cnt : 5;
2577        } s;
2578        struct cvmx_bgxx_smux_rx_decision_s cn73xx;
2579        struct cvmx_bgxx_smux_rx_decision_s cn78xx;
2580        struct cvmx_bgxx_smux_rx_decision_s cn78xxp1;
2581        struct cvmx_bgxx_smux_rx_decision_s cnf75xx;
2582};
2583
2584typedef union cvmx_bgxx_smux_rx_decision cvmx_bgxx_smux_rx_decision_t;
2585
2586/**
2587 * cvmx_bgx#_smu#_rx_frm_chk
2588 *
2589 * The CSRs provide the enable bits for a subset of errors passed to CMR encoded.
2590 *
2591 */
2592union cvmx_bgxx_smux_rx_frm_chk {
2593        u64 u64;
2594        struct cvmx_bgxx_smux_rx_frm_chk_s {
2595                u64 reserved_9_63 : 55;
2596                u64 skperr : 1;
2597                u64 rcverr : 1;
2598                u64 reserved_6_6 : 1;
2599                u64 fcserr_c : 1;
2600                u64 fcserr_d : 1;
2601                u64 jabber : 1;
2602                u64 reserved_0_2 : 3;
2603        } s;
2604        struct cvmx_bgxx_smux_rx_frm_chk_s cn73xx;
2605        struct cvmx_bgxx_smux_rx_frm_chk_s cn78xx;
2606        struct cvmx_bgxx_smux_rx_frm_chk_s cn78xxp1;
2607        struct cvmx_bgxx_smux_rx_frm_chk_s cnf75xx;
2608};
2609
2610typedef union cvmx_bgxx_smux_rx_frm_chk cvmx_bgxx_smux_rx_frm_chk_t;
2611
2612/**
2613 * cvmx_bgx#_smu#_rx_frm_ctl
2614 *
2615 * This register controls the handling of the frames.
2616 * The [CTL_BCK] and [CTL_DRP] bits control how the hardware handles incoming PAUSE packets. The
2617 * most
2618 * common modes of operation:
2619 * _ [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything
2620 * _ [CTL_BCK] = 0, [CTL_DRP] = 0: software sees all PAUSE frames
2621 * _ [CTL_BCK] = 0, [CTL_DRP] = 1: all PAUSE frames are completely ignored
2622 *
2623 * These control bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in half-duplex mode. Since
2624 * PAUSE
2625 * packets only apply to full duplex operation, any PAUSE packet would constitute an exception
2626 * which should be handled by the processing cores. PAUSE packets should not be forwarded.
2627 */
2628union cvmx_bgxx_smux_rx_frm_ctl {
2629        u64 u64;
2630        struct cvmx_bgxx_smux_rx_frm_ctl_s {
2631                u64 reserved_13_63 : 51;
2632                u64 ptp_mode : 1;
2633                u64 reserved_6_11 : 6;
2634                u64 ctl_smac : 1;
2635                u64 ctl_mcst : 1;
2636                u64 ctl_bck : 1;
2637                u64 ctl_drp : 1;
2638                u64 pre_strp : 1;
2639                u64 pre_chk : 1;
2640        } s;
2641        struct cvmx_bgxx_smux_rx_frm_ctl_s cn73xx;
2642        struct cvmx_bgxx_smux_rx_frm_ctl_s cn78xx;
2643        struct cvmx_bgxx_smux_rx_frm_ctl_s cn78xxp1;
2644        struct cvmx_bgxx_smux_rx_frm_ctl_s cnf75xx;
2645};
2646
2647typedef union cvmx_bgxx_smux_rx_frm_ctl cvmx_bgxx_smux_rx_frm_ctl_t;
2648
2649/**
2650 * cvmx_bgx#_smu#_rx_int
2651 *
2652 * SMU Interrupt Register.
2653 *
2654 */
2655union cvmx_bgxx_smux_rx_int {
2656        u64 u64;
2657        struct cvmx_bgxx_smux_rx_int_s {
2658                u64 reserved_12_63 : 52;
2659                u64 hg2cc : 1;
2660                u64 hg2fld : 1;
2661                u64 bad_term : 1;
2662                u64 bad_seq : 1;
2663                u64 rem_fault : 1;
2664                u64 loc_fault : 1;
2665                u64 rsverr : 1;
2666                u64 pcterr : 1;
2667                u64 skperr : 1;
2668                u64 rcverr : 1;
2669                u64 fcserr : 1;
2670                u64 jabber : 1;
2671        } s;
2672        struct cvmx_bgxx_smux_rx_int_s cn73xx;
2673        struct cvmx_bgxx_smux_rx_int_s cn78xx;
2674        struct cvmx_bgxx_smux_rx_int_s cn78xxp1;
2675        struct cvmx_bgxx_smux_rx_int_s cnf75xx;
2676};
2677
2678typedef union cvmx_bgxx_smux_rx_int cvmx_bgxx_smux_rx_int_t;
2679
2680/**
2681 * cvmx_bgx#_smu#_rx_jabber
2682 *
2683 * This register specifies the maximum size for packets, beyond which the SMU truncates. In
2684 * XAUI/RXAUI mode, port 0 is used for checking.
2685 */
2686union cvmx_bgxx_smux_rx_jabber {
2687        u64 u64;
2688        struct cvmx_bgxx_smux_rx_jabber_s {
2689                u64 reserved_16_63 : 48;
2690                u64 cnt : 16;
2691        } s;
2692        struct cvmx_bgxx_smux_rx_jabber_s cn73xx;
2693        struct cvmx_bgxx_smux_rx_jabber_s cn78xx;
2694        struct cvmx_bgxx_smux_rx_jabber_s cn78xxp1;
2695        struct cvmx_bgxx_smux_rx_jabber_s cnf75xx;
2696};
2697
2698typedef union cvmx_bgxx_smux_rx_jabber cvmx_bgxx_smux_rx_jabber_t;
2699
2700/**
2701 * cvmx_bgx#_smu#_rx_udd_skp
2702 *
2703 * This register specifies the amount of user-defined data (UDD) added before the start of the
2704 * L2C data.
2705 */
2706union cvmx_bgxx_smux_rx_udd_skp {
2707        u64 u64;
2708        struct cvmx_bgxx_smux_rx_udd_skp_s {
2709                u64 reserved_9_63 : 55;
2710                u64 fcssel : 1;
2711                u64 reserved_7_7 : 1;
2712                u64 len : 7;
2713        } s;
2714        struct cvmx_bgxx_smux_rx_udd_skp_s cn73xx;
2715        struct cvmx_bgxx_smux_rx_udd_skp_s cn78xx;
2716        struct cvmx_bgxx_smux_rx_udd_skp_s cn78xxp1;
2717        struct cvmx_bgxx_smux_rx_udd_skp_s cnf75xx;
2718};
2719
2720typedef union cvmx_bgxx_smux_rx_udd_skp cvmx_bgxx_smux_rx_udd_skp_t;
2721
2722/**
2723 * cvmx_bgx#_smu#_smac
2724 */
2725union cvmx_bgxx_smux_smac {
2726        u64 u64;
2727        struct cvmx_bgxx_smux_smac_s {
2728                u64 reserved_48_63 : 16;
2729                u64 smac : 48;
2730        } s;
2731        struct cvmx_bgxx_smux_smac_s cn73xx;
2732        struct cvmx_bgxx_smux_smac_s cn78xx;
2733        struct cvmx_bgxx_smux_smac_s cn78xxp1;
2734        struct cvmx_bgxx_smux_smac_s cnf75xx;
2735};
2736
2737typedef union cvmx_bgxx_smux_smac cvmx_bgxx_smux_smac_t;
2738
2739/**
2740 * cvmx_bgx#_smu#_tx_append
2741 *
2742 * For more details on the interactions between FCS and PAD, see also the description of
2743 * BGX()_SMU()_TX_MIN_PKT[MIN_SIZE].
2744 */
2745union cvmx_bgxx_smux_tx_append {
2746        u64 u64;
2747        struct cvmx_bgxx_smux_tx_append_s {
2748                u64 reserved_4_63 : 60;
2749                u64 fcs_c : 1;
2750                u64 fcs_d : 1;
2751                u64 pad : 1;
2752                u64 preamble : 1;
2753        } s;
2754        struct cvmx_bgxx_smux_tx_append_s cn73xx;
2755        struct cvmx_bgxx_smux_tx_append_s cn78xx;
2756        struct cvmx_bgxx_smux_tx_append_s cn78xxp1;
2757        struct cvmx_bgxx_smux_tx_append_s cnf75xx;
2758};
2759
2760typedef union cvmx_bgxx_smux_tx_append cvmx_bgxx_smux_tx_append_t;
2761
2762/**
2763 * cvmx_bgx#_smu#_tx_ctl
2764 */
2765union cvmx_bgxx_smux_tx_ctl {
2766        u64 u64;
2767        struct cvmx_bgxx_smux_tx_ctl_s {
2768                u64 reserved_31_63 : 33;
2769                u64 spu_mrk_cnt : 20;
2770                u64 hg_pause_hgi : 2;
2771                u64 hg_en : 1;
2772                u64 l2p_bp_conv : 1;
2773                u64 ls_byp : 1;
2774                u64 ls : 2;
2775                u64 reserved_3_3 : 1;
2776                u64 x4a_dis : 1;
2777                u64 uni_en : 1;
2778                u64 dic_en : 1;
2779        } s;
2780        struct cvmx_bgxx_smux_tx_ctl_s cn73xx;
2781        struct cvmx_bgxx_smux_tx_ctl_s cn78xx;
2782        struct cvmx_bgxx_smux_tx_ctl_s cn78xxp1;
2783        struct cvmx_bgxx_smux_tx_ctl_s cnf75xx;
2784};
2785
2786typedef union cvmx_bgxx_smux_tx_ctl cvmx_bgxx_smux_tx_ctl_t;
2787
2788/**
2789 * cvmx_bgx#_smu#_tx_ifg
2790 *
2791 * Programming IFG1 and IFG2:
2792 * * For XAUI/RXAUI/10Gbs/40Gbs systems that require IEEE 802.3 compatibility, the IFG1+IFG2 sum
2793 * must be 12.
2794 * * In loopback mode, the IFG1+IFG2 of local and remote parties must match exactly; otherwise
2795 * one of the two sides' loopback FIFO will overrun: BGX()_SMU()_TX_INT[LB_OVRFLW].
2796 */
2797union cvmx_bgxx_smux_tx_ifg {
2798        u64 u64;
2799        struct cvmx_bgxx_smux_tx_ifg_s {
2800                u64 reserved_8_63 : 56;
2801                u64 ifg2 : 4;
2802                u64 ifg1 : 4;
2803        } s;
2804        struct cvmx_bgxx_smux_tx_ifg_s cn73xx;
2805        struct cvmx_bgxx_smux_tx_ifg_s cn78xx;
2806        struct cvmx_bgxx_smux_tx_ifg_s cn78xxp1;
2807        struct cvmx_bgxx_smux_tx_ifg_s cnf75xx;
2808};
2809
2810typedef union cvmx_bgxx_smux_tx_ifg cvmx_bgxx_smux_tx_ifg_t;
2811
2812/**
2813 * cvmx_bgx#_smu#_tx_int
2814 */
2815union cvmx_bgxx_smux_tx_int {
2816        u64 u64;
2817        struct cvmx_bgxx_smux_tx_int_s {
2818                u64 reserved_5_63 : 59;
2819                u64 lb_ovrflw : 1;
2820                u64 lb_undflw : 1;
2821                u64 fake_commit : 1;
2822                u64 xchange : 1;
2823                u64 undflw : 1;
2824        } s;
2825        struct cvmx_bgxx_smux_tx_int_s cn73xx;
2826        struct cvmx_bgxx_smux_tx_int_s cn78xx;
2827        struct cvmx_bgxx_smux_tx_int_s cn78xxp1;
2828        struct cvmx_bgxx_smux_tx_int_s cnf75xx;
2829};
2830
2831typedef union cvmx_bgxx_smux_tx_int cvmx_bgxx_smux_tx_int_t;
2832
2833/**
2834 * cvmx_bgx#_smu#_tx_min_pkt
2835 */
2836union cvmx_bgxx_smux_tx_min_pkt {
2837        u64 u64;
2838        struct cvmx_bgxx_smux_tx_min_pkt_s {
2839                u64 reserved_8_63 : 56;
2840                u64 min_size : 8;
2841        } s;
2842        struct cvmx_bgxx_smux_tx_min_pkt_s cn73xx;
2843        struct cvmx_bgxx_smux_tx_min_pkt_s cn78xx;
2844        struct cvmx_bgxx_smux_tx_min_pkt_s cn78xxp1;
2845        struct cvmx_bgxx_smux_tx_min_pkt_s cnf75xx;
2846};
2847
2848typedef union cvmx_bgxx_smux_tx_min_pkt cvmx_bgxx_smux_tx_min_pkt_t;
2849
2850/**
2851 * cvmx_bgx#_smu#_tx_pause_pkt_dmac
2852 *
2853 * This register provides the DMAC value that is placed in outbound PAUSE packets.
2854 *
2855 */
2856union cvmx_bgxx_smux_tx_pause_pkt_dmac {
2857        u64 u64;
2858        struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s {
2859                u64 reserved_48_63 : 16;
2860                u64 dmac : 48;
2861        } s;
2862        struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cn73xx;
2863        struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cn78xx;
2864        struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cn78xxp1;
2865        struct cvmx_bgxx_smux_tx_pause_pkt_dmac_s cnf75xx;
2866};
2867
2868typedef union cvmx_bgxx_smux_tx_pause_pkt_dmac cvmx_bgxx_smux_tx_pause_pkt_dmac_t;
2869
2870/**
2871 * cvmx_bgx#_smu#_tx_pause_pkt_interval
2872 *
2873 * This register specifies how often PAUSE packets are sent.
2874 *
2875 */
2876union cvmx_bgxx_smux_tx_pause_pkt_interval {
2877        u64 u64;
2878        struct cvmx_bgxx_smux_tx_pause_pkt_interval_s {
2879                u64 reserved_33_63 : 31;
2880                u64 hg2_intra_en : 1;
2881                u64 hg2_intra_interval : 16;
2882                u64 interval : 16;
2883        } s;
2884        struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cn73xx;
2885        struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cn78xx;
2886        struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cn78xxp1;
2887        struct cvmx_bgxx_smux_tx_pause_pkt_interval_s cnf75xx;
2888};
2889
2890typedef union cvmx_bgxx_smux_tx_pause_pkt_interval cvmx_bgxx_smux_tx_pause_pkt_interval_t;
2891
2892/**
2893 * cvmx_bgx#_smu#_tx_pause_pkt_time
2894 */
2895union cvmx_bgxx_smux_tx_pause_pkt_time {
2896        u64 u64;
2897        struct cvmx_bgxx_smux_tx_pause_pkt_time_s {
2898                u64 reserved_16_63 : 48;
2899                u64 p_time : 16;
2900        } s;
2901        struct cvmx_bgxx_smux_tx_pause_pkt_time_s cn73xx;
2902        struct cvmx_bgxx_smux_tx_pause_pkt_time_s cn78xx;
2903        struct cvmx_bgxx_smux_tx_pause_pkt_time_s cn78xxp1;
2904        struct cvmx_bgxx_smux_tx_pause_pkt_time_s cnf75xx;
2905};
2906
2907typedef union cvmx_bgxx_smux_tx_pause_pkt_time cvmx_bgxx_smux_tx_pause_pkt_time_t;
2908
2909/**
2910 * cvmx_bgx#_smu#_tx_pause_pkt_type
2911 *
2912 * This register provides the P_TYPE field that is placed in outbound PAUSE packets.
2913 *
2914 */
2915union cvmx_bgxx_smux_tx_pause_pkt_type {
2916        u64 u64;
2917        struct cvmx_bgxx_smux_tx_pause_pkt_type_s {
2918                u64 reserved_16_63 : 48;
2919                u64 p_type : 16;
2920        } s;
2921        struct cvmx_bgxx_smux_tx_pause_pkt_type_s cn73xx;
2922        struct cvmx_bgxx_smux_tx_pause_pkt_type_s cn78xx;
2923        struct cvmx_bgxx_smux_tx_pause_pkt_type_s cn78xxp1;
2924        struct cvmx_bgxx_smux_tx_pause_pkt_type_s cnf75xx;
2925};
2926
2927typedef union cvmx_bgxx_smux_tx_pause_pkt_type cvmx_bgxx_smux_tx_pause_pkt_type_t;
2928
2929/**
2930 * cvmx_bgx#_smu#_tx_pause_togo
2931 */
2932union cvmx_bgxx_smux_tx_pause_togo {
2933        u64 u64;
2934        struct cvmx_bgxx_smux_tx_pause_togo_s {
2935                u64 reserved_32_63 : 32;
2936                u64 msg_time : 16;
2937                u64 p_time : 16;
2938        } s;
2939        struct cvmx_bgxx_smux_tx_pause_togo_s cn73xx;
2940        struct cvmx_bgxx_smux_tx_pause_togo_s cn78xx;
2941        struct cvmx_bgxx_smux_tx_pause_togo_s cn78xxp1;
2942        struct cvmx_bgxx_smux_tx_pause_togo_s cnf75xx;
2943};
2944
2945typedef union cvmx_bgxx_smux_tx_pause_togo cvmx_bgxx_smux_tx_pause_togo_t;
2946
2947/**
2948 * cvmx_bgx#_smu#_tx_pause_zero
2949 */
2950union cvmx_bgxx_smux_tx_pause_zero {
2951        u64 u64;
2952        struct cvmx_bgxx_smux_tx_pause_zero_s {
2953                u64 reserved_1_63 : 63;
2954                u64 send : 1;
2955        } s;
2956        struct cvmx_bgxx_smux_tx_pause_zero_s cn73xx;
2957        struct cvmx_bgxx_smux_tx_pause_zero_s cn78xx;
2958        struct cvmx_bgxx_smux_tx_pause_zero_s cn78xxp1;
2959        struct cvmx_bgxx_smux_tx_pause_zero_s cnf75xx;
2960};
2961
2962typedef union cvmx_bgxx_smux_tx_pause_zero cvmx_bgxx_smux_tx_pause_zero_t;
2963
2964/**
2965 * cvmx_bgx#_smu#_tx_soft_pause
2966 */
2967union cvmx_bgxx_smux_tx_soft_pause {
2968        u64 u64;
2969        struct cvmx_bgxx_smux_tx_soft_pause_s {
2970                u64 reserved_16_63 : 48;
2971                u64 p_time : 16;
2972        } s;
2973        struct cvmx_bgxx_smux_tx_soft_pause_s cn73xx;
2974        struct cvmx_bgxx_smux_tx_soft_pause_s cn78xx;
2975        struct cvmx_bgxx_smux_tx_soft_pause_s cn78xxp1;
2976        struct cvmx_bgxx_smux_tx_soft_pause_s cnf75xx;
2977};
2978
2979typedef union cvmx_bgxx_smux_tx_soft_pause cvmx_bgxx_smux_tx_soft_pause_t;
2980
2981/**
2982 * cvmx_bgx#_smu#_tx_thresh
2983 */
2984union cvmx_bgxx_smux_tx_thresh {
2985        u64 u64;
2986        struct cvmx_bgxx_smux_tx_thresh_s {
2987                u64 reserved_11_63 : 53;
2988                u64 cnt : 11;
2989        } s;
2990        struct cvmx_bgxx_smux_tx_thresh_s cn73xx;
2991        struct cvmx_bgxx_smux_tx_thresh_s cn78xx;
2992        struct cvmx_bgxx_smux_tx_thresh_s cn78xxp1;
2993        struct cvmx_bgxx_smux_tx_thresh_s cnf75xx;
2994};
2995
2996typedef union cvmx_bgxx_smux_tx_thresh cvmx_bgxx_smux_tx_thresh_t;
2997
2998/**
2999 * cvmx_bgx#_spu#_an_adv
3000 *
3001 * Software programs this register with the contents of the AN-link code word base page to be
3002 * transmitted during autonegotiation. (See IEEE 802.3 section 73.6 for details.) Any write
3003 * operations to this register prior to completion of autonegotiation, as indicated by
3004 * BGX()_SPU()_AN_STATUS[AN_COMPLETE], should be followed by a renegotiation in order for
3005 * the new values to take effect. Renegotiation is initiated by setting
3006 * BGX()_SPU()_AN_CONTROL[AN_RESTART]. Once autonegotiation has completed, software can
3007 * examine this register along with BGX()_SPU()_AN_LP_BASE to determine the highest
3008 * common denominator technology.
3009 */
3010union cvmx_bgxx_spux_an_adv {
3011        u64 u64;
3012        struct cvmx_bgxx_spux_an_adv_s {
3013                u64 reserved_48_63 : 16;
3014                u64 fec_req : 1;
3015                u64 fec_able : 1;
3016                u64 arsv : 19;
3017                u64 a100g_cr10 : 1;
3018                u64 a40g_cr4 : 1;
3019                u64 a40g_kr4 : 1;
3020                u64 a10g_kr : 1;
3021                u64 a10g_kx4 : 1;
3022                u64 a1g_kx : 1;
3023                u64 t : 5;
3024                u64 np : 1;
3025                u64 ack : 1;
3026                u64 rf : 1;
3027                u64 xnp_able : 1;
3028                u64 asm_dir : 1;
3029                u64 pause : 1;
3030                u64 e : 5;
3031                u64 s : 5;
3032        } s;
3033        struct cvmx_bgxx_spux_an_adv_s cn73xx;
3034        struct cvmx_bgxx_spux_an_adv_s cn78xx;
3035        struct cvmx_bgxx_spux_an_adv_s cn78xxp1;
3036        struct cvmx_bgxx_spux_an_adv_s cnf75xx;
3037};
3038
3039typedef union cvmx_bgxx_spux_an_adv cvmx_bgxx_spux_an_adv_t;
3040
3041/**
3042 * cvmx_bgx#_spu#_an_bp_status
3043 *
3044 * The contents of this register are updated
3045 * during autonegotiation and are valid when BGX()_SPU()_AN_STATUS[AN_COMPLETE] is set.
3046 * At that time, one of the port type bits ([N100G_CR10], [N40G_CR4], [N40G_KR4], [N10G_KR],
3047 * [N10G_KX4],
3048 * [N1G_KX]) will be set depending on the AN priority resolution. If a BASE-R type is negotiated,
3049 * then [FEC] will be set to indicate that FEC operation has been negotiated, and will be
3050 * clear otherwise.
3051 */
3052union cvmx_bgxx_spux_an_bp_status {
3053        u64 u64;
3054        struct cvmx_bgxx_spux_an_bp_status_s {
3055                u64 reserved_9_63 : 55;
3056                u64 n100g_cr10 : 1;
3057                u64 reserved_7_7 : 1;
3058                u64 n40g_cr4 : 1;
3059                u64 n40g_kr4 : 1;
3060                u64 fec : 1;
3061                u64 n10g_kr : 1;
3062                u64 n10g_kx4 : 1;
3063                u64 n1g_kx : 1;
3064                u64 bp_an_able : 1;
3065        } s;
3066        struct cvmx_bgxx_spux_an_bp_status_s cn73xx;
3067        struct cvmx_bgxx_spux_an_bp_status_s cn78xx;
3068        struct cvmx_bgxx_spux_an_bp_status_s cn78xxp1;
3069        struct cvmx_bgxx_spux_an_bp_status_s cnf75xx;
3070};
3071
3072typedef union cvmx_bgxx_spux_an_bp_status cvmx_bgxx_spux_an_bp_status_t;
3073
3074/**
3075 * cvmx_bgx#_spu#_an_control
3076 */
3077union cvmx_bgxx_spux_an_control {
3078        u64 u64;
3079        struct cvmx_bgxx_spux_an_control_s {
3080                u64 reserved_16_63 : 48;
3081                u64 an_reset : 1;
3082                u64 reserved_14_14 : 1;
3083                u64 xnp_en : 1;
3084                u64 an_en : 1;
3085                u64 reserved_10_11 : 2;
3086                u64 an_restart : 1;
3087                u64 reserved_0_8 : 9;
3088        } s;
3089        struct cvmx_bgxx_spux_an_control_s cn73xx;
3090        struct cvmx_bgxx_spux_an_control_s cn78xx;
3091        struct cvmx_bgxx_spux_an_control_s cn78xxp1;
3092        struct cvmx_bgxx_spux_an_control_s cnf75xx;
3093};
3094
3095typedef union cvmx_bgxx_spux_an_control cvmx_bgxx_spux_an_control_t;
3096
3097/**
3098 * cvmx_bgx#_spu#_an_lp_base
3099 *
3100 * This register captures the contents of the latest AN link code word base page received from
3101 * the link partner during autonegotiation. (See IEEE 802.3 section 73.6 for details.)
3102 * BGX()_SPU()_AN_STATUS[PAGE_RX] is set when this register is updated by hardware.
3103 */
3104union cvmx_bgxx_spux_an_lp_base {
3105        u64 u64;
3106        struct cvmx_bgxx_spux_an_lp_base_s {
3107                u64 reserved_48_63 : 16;
3108                u64 fec_req : 1;
3109                u64 fec_able : 1;
3110                u64 arsv : 19;
3111                u64 a100g_cr10 : 1;
3112                u64 a40g_cr4 : 1;
3113                u64 a40g_kr4 : 1;
3114                u64 a10g_kr : 1;
3115                u64 a10g_kx4 : 1;
3116                u64 a1g_kx : 1;
3117                u64 t : 5;
3118                u64 np : 1;
3119                u64 ack : 1;
3120                u64 rf : 1;
3121                u64 xnp_able : 1;
3122                u64 asm_dir : 1;
3123                u64 pause : 1;
3124                u64 e : 5;
3125                u64 s : 5;
3126        } s;
3127        struct cvmx_bgxx_spux_an_lp_base_s cn73xx;
3128        struct cvmx_bgxx_spux_an_lp_base_s cn78xx;
3129        struct cvmx_bgxx_spux_an_lp_base_s cn78xxp1;
3130        struct cvmx_bgxx_spux_an_lp_base_s cnf75xx;
3131};
3132
3133typedef union cvmx_bgxx_spux_an_lp_base cvmx_bgxx_spux_an_lp_base_t;
3134
3135/**
3136 * cvmx_bgx#_spu#_an_lp_xnp
3137 *
3138 * This register captures the contents of the latest next page code word received from the link
3139 * partner during autonegotiation, if any. See section 802.3 section 73.7.7 for details.
3140 */
3141union cvmx_bgxx_spux_an_lp_xnp {
3142        u64 u64;
3143        struct cvmx_bgxx_spux_an_lp_xnp_s {
3144                u64 reserved_48_63 : 16;
3145                u64 u : 32;
3146                u64 np : 1;
3147                u64 ack : 1;
3148                u64 mp : 1;
3149                u64 ack2 : 1;
3150                u64 toggle : 1;
3151                u64 m_u : 11;
3152        } s;
3153        struct cvmx_bgxx_spux_an_lp_xnp_s cn73xx;
3154        struct cvmx_bgxx_spux_an_lp_xnp_s cn78xx;
3155        struct cvmx_bgxx_spux_an_lp_xnp_s cn78xxp1;
3156        struct cvmx_bgxx_spux_an_lp_xnp_s cnf75xx;
3157};
3158
3159typedef union cvmx_bgxx_spux_an_lp_xnp cvmx_bgxx_spux_an_lp_xnp_t;
3160
3161/**
3162 * cvmx_bgx#_spu#_an_status
3163 */
3164union cvmx_bgxx_spux_an_status {
3165        u64 u64;
3166        struct cvmx_bgxx_spux_an_status_s {
3167                u64 reserved_10_63 : 54;
3168                u64 prl_flt : 1;
3169                u64 reserved_8_8 : 1;
3170                u64 xnp_stat : 1;
3171                u64 page_rx : 1;
3172                u64 an_complete : 1;
3173                u64 rmt_flt : 1;
3174                u64 an_able : 1;
3175                u64 link_status : 1;
3176                u64 reserved_1_1 : 1;
3177                u64 lp_an_able : 1;
3178        } s;
3179        struct cvmx_bgxx_spux_an_status_s cn73xx;
3180        struct cvmx_bgxx_spux_an_status_s cn78xx;
3181        struct cvmx_bgxx_spux_an_status_s cn78xxp1;
3182        struct cvmx_bgxx_spux_an_status_s cnf75xx;
3183};
3184
3185typedef union cvmx_bgxx_spux_an_status cvmx_bgxx_spux_an_status_t;
3186
3187/**
3188 * cvmx_bgx#_spu#_an_xnp_tx
3189 *
3190 * Software programs this register with the contents of the AN message next page or unformatted
3191 * next page link code word to be transmitted during autonegotiation. Next page exchange occurs
3192 * after the base link code words have been exchanged if either end of the link segment sets the
3193 * NP bit to 1, indicating that it has at least one next page to send. Once initiated, next page
3194 * exchange continues until both ends of the link segment set their NP bits to 0. See section
3195 * 802.3 section 73.7.7 for details.
3196 */
3197union cvmx_bgxx_spux_an_xnp_tx {
3198        u64 u64;
3199        struct cvmx_bgxx_spux_an_xnp_tx_s {
3200                u64 reserved_48_63 : 16;
3201                u64 u : 32;
3202                u64 np : 1;
3203                u64 ack : 1;
3204                u64 mp : 1;
3205                u64 ack2 : 1;
3206                u64 toggle : 1;
3207                u64 m_u : 11;
3208        } s;
3209        struct cvmx_bgxx_spux_an_xnp_tx_s cn73xx;
3210        struct cvmx_bgxx_spux_an_xnp_tx_s cn78xx;
3211        struct cvmx_bgxx_spux_an_xnp_tx_s cn78xxp1;
3212        struct cvmx_bgxx_spux_an_xnp_tx_s cnf75xx;
3213};
3214
3215typedef union cvmx_bgxx_spux_an_xnp_tx cvmx_bgxx_spux_an_xnp_tx_t;
3216
3217/**
3218 * cvmx_bgx#_spu#_br_algn_status
3219 *
3220 * This register implements the IEEE 802.3 multilane BASE-R PCS alignment status 1-4 registers
3221 * (3.50-3.53). It is valid only when the LPCS type is 40GBASE-R
3222 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always returns 0x0 for all other LPCS
3223 * types. IEEE 802.3 bits that are not applicable to 40GBASE-R (e.g. status bits for PCS lanes
3224 * 19-4) are not implemented and marked as reserved. PCS lanes 3-0 are valid and are mapped to
3225 * physical SerDes lanes based on the programming of BGX()_CMR()_CONFIG[LANE_TO_SDS].
3226 */
3227union cvmx_bgxx_spux_br_algn_status {
3228        u64 u64;
3229        struct cvmx_bgxx_spux_br_algn_status_s {
3230                u64 reserved_36_63 : 28;
3231                u64 marker_lock : 4;
3232                u64 reserved_13_31 : 19;
3233                u64 alignd : 1;
3234                u64 reserved_4_11 : 8;
3235                u64 block_lock : 4;
3236        } s;
3237        struct cvmx_bgxx_spux_br_algn_status_s cn73xx;
3238        struct cvmx_bgxx_spux_br_algn_status_s cn78xx;
3239        struct cvmx_bgxx_spux_br_algn_status_s cn78xxp1;
3240        struct cvmx_bgxx_spux_br_algn_status_s cnf75xx;
3241};
3242
3243typedef union cvmx_bgxx_spux_br_algn_status cvmx_bgxx_spux_br_algn_status_t;
3244
3245/**
3246 * cvmx_bgx#_spu#_br_bip_err_cnt
3247 *
3248 * This register implements the IEEE 802.3 BIP error-counter registers for PCS lanes 0-3
3249 * (3.200-3.203). It is valid only when the LPCS type is 40GBASE-R
3250 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always returns 0x0 for all other LPCS
3251 * types. The counters are indexed by the RX PCS lane number based on the Alignment Marker
3252 * detected on each lane and captured in BGX()_SPU()_BR_LANE_MAP. Each counter counts the
3253 * BIP errors for its PCS lane, and is held at all ones in case of overflow. The counters are
3254 * reset to all 0s when this register is read by software.
3255 *
3256 * The reset operation takes precedence over the increment operation; if the register is read on
3257 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
3258 * increment operation is lost. The counters are writable for test purposes, rather than read-
3259 * only as specified in IEEE 802.3.
3260 */
3261union cvmx_bgxx_spux_br_bip_err_cnt {
3262        u64 u64;
3263        struct cvmx_bgxx_spux_br_bip_err_cnt_s {
3264                u64 bip_err_cnt_ln3 : 16;
3265                u64 bip_err_cnt_ln2 : 16;
3266                u64 bip_err_cnt_ln1 : 16;
3267                u64 bip_err_cnt_ln0 : 16;
3268        } s;
3269        struct cvmx_bgxx_spux_br_bip_err_cnt_s cn73xx;
3270        struct cvmx_bgxx_spux_br_bip_err_cnt_s cn78xx;
3271        struct cvmx_bgxx_spux_br_bip_err_cnt_s cn78xxp1;
3272        struct cvmx_bgxx_spux_br_bip_err_cnt_s cnf75xx;
3273};
3274
3275typedef union cvmx_bgxx_spux_br_bip_err_cnt cvmx_bgxx_spux_br_bip_err_cnt_t;
3276
3277/**
3278 * cvmx_bgx#_spu#_br_lane_map
3279 *
3280 * This register implements the IEEE 802.3 lane 0-3 mapping registers (3.400-3.403). It is valid
3281 * only when the LPCS type is 40GBASE-R (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4), and always
3282 * returns 0x0 for all other LPCS types. The LNx_MAPPING field for each programmed PCS lane
3283 * (called service interface in 802.3ba-2010) is valid when that lane has achieved alignment
3284 * marker lock on the receive side (i.e. the associated
3285 * BGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), and is invalid otherwise. When valid, it
3286 * returns the actual detected receive PCS lane number based on the received alignment marker
3287 * contents received on that service interface.
3288 *
3289 * The mapping is flexible because IEEE 802.3 allows multilane BASE-R receive lanes to be re-
3290 * ordered. Note that for the transmit side, each PCS lane is mapped to a physical SerDes lane
3291 * based on the programming of BGX()_CMR()_CONFIG[LANE_TO_SDS]. For the receive side,
3292 * BGX()_CMR()_CONFIG[LANE_TO_SDS] specifies the service interface to physical SerDes
3293 * lane mapping, and this register specifies the service interface to PCS lane mapping.
3294 */
3295union cvmx_bgxx_spux_br_lane_map {
3296        u64 u64;
3297        struct cvmx_bgxx_spux_br_lane_map_s {
3298                u64 reserved_54_63 : 10;
3299                u64 ln3_mapping : 6;
3300                u64 reserved_38_47 : 10;
3301                u64 ln2_mapping : 6;
3302                u64 reserved_22_31 : 10;
3303                u64 ln1_mapping : 6;
3304                u64 reserved_6_15 : 10;
3305                u64 ln0_mapping : 6;
3306        } s;
3307        struct cvmx_bgxx_spux_br_lane_map_s cn73xx;
3308        struct cvmx_bgxx_spux_br_lane_map_s cn78xx;
3309        struct cvmx_bgxx_spux_br_lane_map_s cn78xxp1;
3310        struct cvmx_bgxx_spux_br_lane_map_s cnf75xx;
3311};
3312
3313typedef union cvmx_bgxx_spux_br_lane_map cvmx_bgxx_spux_br_lane_map_t;
3314
3315/**
3316 * cvmx_bgx#_spu#_br_pmd_control
3317 */
3318union cvmx_bgxx_spux_br_pmd_control {
3319        u64 u64;
3320        struct cvmx_bgxx_spux_br_pmd_control_s {
3321                u64 reserved_2_63 : 62;
3322                u64 train_en : 1;
3323                u64 train_restart : 1;
3324        } s;
3325        struct cvmx_bgxx_spux_br_pmd_control_s cn73xx;
3326        struct cvmx_bgxx_spux_br_pmd_control_s cn78xx;
3327        struct cvmx_bgxx_spux_br_pmd_control_s cn78xxp1;
3328        struct cvmx_bgxx_spux_br_pmd_control_s cnf75xx;
3329};
3330
3331typedef union cvmx_bgxx_spux_br_pmd_control cvmx_bgxx_spux_br_pmd_control_t;
3332
3333/**
3334 * cvmx_bgx#_spu#_br_pmd_ld_cup
3335 *
3336 * This register implements 802.3 MDIO register 1.153 for 10GBASE-R (when
3337 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
3338 * and MDIO registers 1.1300-1.1303 for 40GBASE-R (when
3339 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
3340 * When link training
3341 * is in progress, each field reflects the contents of the coefficient update field in the
3342 * associated lane's outgoing training frame. The fields in this register are read/write even
3343 * though they are specified as read-only in 802.3.
3344 *
3345 * If BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register must be updated
3346 * by software during link training and hardware updates are disabled. If
3347 * BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear, this register is automatically
3348 * updated by hardware, and it should not be written by software. The lane fields in this
3349 * register are indexed by logical PCS lane ID.
3350 *
3351 * The lane 0 field (LN0_*) is valid for both
3352 * 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only valid for
3353 * 40GBASE-R.
3354 */
3355union cvmx_bgxx_spux_br_pmd_ld_cup {
3356        u64 u64;
3357        struct cvmx_bgxx_spux_br_pmd_ld_cup_s {
3358                u64 ln3_cup : 16;
3359                u64 ln2_cup : 16;
3360                u64 ln1_cup : 16;
3361                u64 ln0_cup : 16;
3362        } s;
3363        struct cvmx_bgxx_spux_br_pmd_ld_cup_s cn73xx;
3364        struct cvmx_bgxx_spux_br_pmd_ld_cup_s cn78xx;
3365        struct cvmx_bgxx_spux_br_pmd_ld_cup_s cn78xxp1;
3366        struct cvmx_bgxx_spux_br_pmd_ld_cup_s cnf75xx;
3367};
3368
3369typedef union cvmx_bgxx_spux_br_pmd_ld_cup cvmx_bgxx_spux_br_pmd_ld_cup_t;
3370
3371/**
3372 * cvmx_bgx#_spu#_br_pmd_ld_rep
3373 *
3374 * This register implements 802.3 MDIO register 1.154 for 10GBASE-R (when
3375 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R) and MDIO registers 1.1400-1.1403 for 40GBASE-R
3376 * (when BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of
3377 * training. Each field
3378 * reflects the contents of the status report field in the associated lane's outgoing training
3379 * frame. The fields in this register are read/write even though they are specified as read-only
3380 * in 802.3. If BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register must
3381 * be updated by software during link training and hardware updates are disabled. If
3382 * BGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear, this register is automatically
3383 * updated by hardware, and it should not be written by software. The lane fields in this
3384 * register are indexed by logical PCS lane ID.
3385 *
3386 * The lane 0 field (LN0_*) is valid for both
3387 * 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only valid for
3388 * 40GBASE-R.
3389 */
3390union cvmx_bgxx_spux_br_pmd_ld_rep {
3391        u64 u64;
3392        struct cvmx_bgxx_spux_br_pmd_ld_rep_s {
3393                u64 ln3_rep : 16;
3394                u64 ln2_rep : 16;
3395                u64 ln1_rep : 16;
3396                u64 ln0_rep : 16;
3397        } s;
3398        struct cvmx_bgxx_spux_br_pmd_ld_rep_s cn73xx;
3399        struct cvmx_bgxx_spux_br_pmd_ld_rep_s cn78xx;
3400        struct cvmx_bgxx_spux_br_pmd_ld_rep_s cn78xxp1;
3401        struct cvmx_bgxx_spux_br_pmd_ld_rep_s cnf75xx;
3402};
3403
3404typedef union cvmx_bgxx_spux_br_pmd_ld_rep cvmx_bgxx_spux_br_pmd_ld_rep_t;
3405
3406/**
3407 * cvmx_bgx#_spu#_br_pmd_lp_cup
3408 *
3409 * This register implements 802.3 MDIO register 1.152 for 10GBASE-R (when
3410 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
3411 * and MDIO registers 1.1100-1.1103 for 40GBASE-R (when
3412 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
3413 * Each field reflects
3414 * the contents of the coefficient update field in the lane's most recently received training
3415 * frame. This register should not be written when link training is enabled, i.e. when
3416 * BGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is set. The lane fields in this register are indexed by
3417 * logical PCS lane ID.
3418 *
3419 * The lane 0 field (LN0_*) is valid for both 10GBASE-R and 40GBASE-R. The remaining fields
3420 * (LN1_*, LN2_*, LN3_*) are only valid for 40GBASE-R.
3421 */
3422union cvmx_bgxx_spux_br_pmd_lp_cup {
3423        u64 u64;
3424        struct cvmx_bgxx_spux_br_pmd_lp_cup_s {
3425                u64 ln3_cup : 16;
3426                u64 ln2_cup : 16;
3427                u64 ln1_cup : 16;
3428                u64 ln0_cup : 16;
3429        } s;
3430        struct cvmx_bgxx_spux_br_pmd_lp_cup_s cn73xx;
3431        struct cvmx_bgxx_spux_br_pmd_lp_cup_s cn78xx;
3432        struct cvmx_bgxx_spux_br_pmd_lp_cup_s cn78xxp1;
3433        struct cvmx_bgxx_spux_br_pmd_lp_cup_s cnf75xx;
3434};
3435
3436typedef union cvmx_bgxx_spux_br_pmd_lp_cup cvmx_bgxx_spux_br_pmd_lp_cup_t;
3437
3438/**
3439 * cvmx_bgx#_spu#_br_pmd_lp_rep
3440 *
3441 * This register implements 802.3 MDIO register 1.153 for 10GBASE-R (when
3442 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 10G_R)
3443 * and MDIO registers 1.1200-1.1203 for 40GBASE-R (when
3444 * BGX()_CMR()_CONFIG[LMAC_TYPE] = 40G_R). It is automatically cleared at the start of training.
3445 * Each field reflects
3446 * the contents of the status report field in the associated lane's most recently received
3447 * training frame. The lane fields in this register are indexed by logical PCS lane ID.
3448 *
3449 * The lane
3450 * 0 field (LN0_*) is valid for both 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*,
3451 * LN3_*) are only valid for 40GBASE-R.
3452 */
3453union cvmx_bgxx_spux_br_pmd_lp_rep {
3454        u64 u64;
3455        struct cvmx_bgxx_spux_br_pmd_lp_rep_s {
3456                u64 ln3_rep : 16;
3457                u64 ln2_rep : 16;
3458                u64 ln1_rep : 16;
3459                u64 ln0_rep : 16;
3460        } s;
3461        struct cvmx_bgxx_spux_br_pmd_lp_rep_s cn73xx;
3462        struct cvmx_bgxx_spux_br_pmd_lp_rep_s cn78xx;
3463        struct cvmx_bgxx_spux_br_pmd_lp_rep_s cn78xxp1;
3464        struct cvmx_bgxx_spux_br_pmd_lp_rep_s cnf75xx;
3465};
3466
3467typedef union cvmx_bgxx_spux_br_pmd_lp_rep cvmx_bgxx_spux_br_pmd_lp_rep_t;
3468
3469/**
3470 * cvmx_bgx#_spu#_br_pmd_status
3471 *
3472 * The lane fields in this register are indexed by logical PCS lane ID. The lane 0 field (LN0_*)
3473 * is valid for both 10GBASE-R and 40GBASE-R. The remaining fields (LN1_*, LN2_*, LN3_*) are only
3474 * valid for 40GBASE-R.
3475 */
3476union cvmx_bgxx_spux_br_pmd_status {
3477        u64 u64;
3478        struct cvmx_bgxx_spux_br_pmd_status_s {
3479                u64 reserved_16_63 : 48;
3480                u64 ln3_train_status : 4;
3481                u64 ln2_train_status : 4;
3482                u64 ln1_train_status : 4;
3483                u64 ln0_train_status : 4;
3484        } s;
3485        struct cvmx_bgxx_spux_br_pmd_status_s cn73xx;
3486        struct cvmx_bgxx_spux_br_pmd_status_s cn78xx;
3487        struct cvmx_bgxx_spux_br_pmd_status_s cn78xxp1;
3488        struct cvmx_bgxx_spux_br_pmd_status_s cnf75xx;
3489};
3490
3491typedef union cvmx_bgxx_spux_br_pmd_status cvmx_bgxx_spux_br_pmd_status_t;
3492
3493/**
3494 * cvmx_bgx#_spu#_br_status1
3495 */
3496union cvmx_bgxx_spux_br_status1 {
3497        u64 u64;
3498        struct cvmx_bgxx_spux_br_status1_s {
3499                u64 reserved_13_63 : 51;
3500                u64 rcv_lnk : 1;
3501                u64 reserved_4_11 : 8;
3502                u64 prbs9 : 1;
3503                u64 prbs31 : 1;
3504                u64 hi_ber : 1;
3505                u64 blk_lock : 1;
3506        } s;
3507        struct cvmx_bgxx_spux_br_status1_s cn73xx;
3508        struct cvmx_bgxx_spux_br_status1_s cn78xx;
3509        struct cvmx_bgxx_spux_br_status1_s cn78xxp1;
3510        struct cvmx_bgxx_spux_br_status1_s cnf75xx;
3511};
3512
3513typedef union cvmx_bgxx_spux_br_status1 cvmx_bgxx_spux_br_status1_t;
3514
3515/**
3516 * cvmx_bgx#_spu#_br_status2
3517 *
3518 * This register implements a combination of the following IEEE 802.3 registers:
3519 * * BASE-R PCS status 2 (MDIO address 3.33).
3520 * * BASE-R BER high-order counter (MDIO address 3.44).
3521 * * Errored-blocks high-order counter (MDIO address 3.45).
3522 *
3523 * Note that the relative locations of some fields have been moved from IEEE 802.3 in order to
3524 * make the register layout more software friendly: the BER counter high-order and low-order bits
3525 * from sections 3.44 and 3.33 have been combined into the contiguous, 22-bit [BER_CNT] field;
3526 * likewise, the errored-blocks counter high-order and low-order bits from section 3.45 have been
3527 * combined into the contiguous, 22-bit [ERR_BLKS] field.
3528 */
3529union cvmx_bgxx_spux_br_status2 {
3530        u64 u64;
3531        struct cvmx_bgxx_spux_br_status2_s {
3532                u64 reserved_62_63 : 2;
3533                u64 err_blks : 22;
3534                u64 reserved_38_39 : 2;
3535                u64 ber_cnt : 22;
3536                u64 latched_lock : 1;
3537                u64 latched_ber : 1;
3538                u64 reserved_0_13 : 14;
3539        } s;
3540        struct cvmx_bgxx_spux_br_status2_s cn73xx;
3541        struct cvmx_bgxx_spux_br_status2_s cn78xx;
3542        struct cvmx_bgxx_spux_br_status2_s cn78xxp1;
3543        struct cvmx_bgxx_spux_br_status2_s cnf75xx;
3544};
3545
3546typedef union cvmx_bgxx_spux_br_status2 cvmx_bgxx_spux_br_status2_t;
3547
3548/**
3549 * cvmx_bgx#_spu#_br_tp_control
3550 *
3551 * Refer to the test pattern methodology described in 802.3 sections 49.2.8 and 82.2.10.
3552 *
3553 */
3554union cvmx_bgxx_spux_br_tp_control {
3555        u64 u64;
3556        struct cvmx_bgxx_spux_br_tp_control_s {
3557                u64 reserved_8_63 : 56;
3558                u64 scramble_tp : 1;
3559                u64 prbs9_tx : 1;
3560                u64 prbs31_rx : 1;
3561                u64 prbs31_tx : 1;
3562                u64 tx_tp_en : 1;
3563                u64 rx_tp_en : 1;
3564                u64 tp_sel : 1;
3565                u64 dp_sel : 1;
3566        } s;
3567        struct cvmx_bgxx_spux_br_tp_control_s cn73xx;
3568        struct cvmx_bgxx_spux_br_tp_control_s cn78xx;
3569        struct cvmx_bgxx_spux_br_tp_control_s cn78xxp1;
3570        struct cvmx_bgxx_spux_br_tp_control_s cnf75xx;
3571};
3572
3573typedef union cvmx_bgxx_spux_br_tp_control cvmx_bgxx_spux_br_tp_control_t;
3574
3575/**
3576 * cvmx_bgx#_spu#_br_tp_err_cnt
3577 *
3578 * This register provides the BASE-R PCS test-pattern error counter.
3579 *
3580 */
3581union cvmx_bgxx_spux_br_tp_err_cnt {
3582        u64 u64;
3583        struct cvmx_bgxx_spux_br_tp_err_cnt_s {
3584                u64 reserved_16_63 : 48;
3585                u64 err_cnt : 16;
3586        } s;
3587        struct cvmx_bgxx_spux_br_tp_err_cnt_s cn73xx;
3588        struct cvmx_bgxx_spux_br_tp_err_cnt_s cn78xx;
3589        struct cvmx_bgxx_spux_br_tp_err_cnt_s cn78xxp1;
3590        struct cvmx_bgxx_spux_br_tp_err_cnt_s cnf75xx;
3591};
3592
3593typedef union cvmx_bgxx_spux_br_tp_err_cnt cvmx_bgxx_spux_br_tp_err_cnt_t;
3594
3595/**
3596 * cvmx_bgx#_spu#_bx_status
3597 */
3598union cvmx_bgxx_spux_bx_status {
3599        u64 u64;
3600        struct cvmx_bgxx_spux_bx_status_s {
3601                u64 reserved_13_63 : 51;
3602                u64 alignd : 1;
3603                u64 pattst : 1;
3604                u64 reserved_4_10 : 7;
3605                u64 lsync : 4;
3606        } s;
3607        struct cvmx_bgxx_spux_bx_status_s cn73xx;
3608        struct cvmx_bgxx_spux_bx_status_s cn78xx;
3609        struct cvmx_bgxx_spux_bx_status_s cn78xxp1;
3610        struct cvmx_bgxx_spux_bx_status_s cnf75xx;
3611};
3612
3613typedef union cvmx_bgxx_spux_bx_status cvmx_bgxx_spux_bx_status_t;
3614
3615/**
3616 * cvmx_bgx#_spu#_control1
3617 */
3618union cvmx_bgxx_spux_control1 {
3619        u64 u64;
3620        struct cvmx_bgxx_spux_control1_s {
3621                u64 reserved_16_63 : 48;
3622                u64 reset : 1;
3623                u64 loopbck : 1;
3624                u64 spdsel1 : 1;
3625                u64 reserved_12_12 : 1;
3626                u64 lo_pwr : 1;
3627                u64 reserved_7_10 : 4;
3628                u64 spdsel0 : 1;
3629                u64 spd : 4;
3630                u64 reserved_0_1 : 2;
3631        } s;
3632        struct cvmx_bgxx_spux_control1_s cn73xx;
3633        struct cvmx_bgxx_spux_control1_s cn78xx;
3634        struct cvmx_bgxx_spux_control1_s cn78xxp1;
3635        struct cvmx_bgxx_spux_control1_s cnf75xx;
3636};
3637
3638typedef union cvmx_bgxx_spux_control1 cvmx_bgxx_spux_control1_t;
3639
3640/**
3641 * cvmx_bgx#_spu#_control2
3642 */
3643union cvmx_bgxx_spux_control2 {
3644        u64 u64;
3645        struct cvmx_bgxx_spux_control2_s {
3646                u64 reserved_3_63 : 61;
3647                u64 pcs_type : 3;
3648        } s;
3649        struct cvmx_bgxx_spux_control2_s cn73xx;
3650        struct cvmx_bgxx_spux_control2_s cn78xx;
3651        struct cvmx_bgxx_spux_control2_s cn78xxp1;
3652        struct cvmx_bgxx_spux_control2_s cnf75xx;
3653};
3654
3655typedef union cvmx_bgxx_spux_control2 cvmx_bgxx_spux_control2_t;
3656
3657/**
3658 * cvmx_bgx#_spu#_fec_abil
3659 */
3660union cvmx_bgxx_spux_fec_abil {
3661        u64 u64;
3662        struct cvmx_bgxx_spux_fec_abil_s {
3663                u64 reserved_2_63 : 62;
3664                u64 err_abil : 1;
3665                u64 fec_abil : 1;
3666        } s;
3667        struct cvmx_bgxx_spux_fec_abil_s cn73xx;
3668        struct cvmx_bgxx_spux_fec_abil_s cn78xx;
3669        struct cvmx_bgxx_spux_fec_abil_s cn78xxp1;
3670        struct cvmx_bgxx_spux_fec_abil_s cnf75xx;
3671};
3672
3673typedef union cvmx_bgxx_spux_fec_abil cvmx_bgxx_spux_fec_abil_t;
3674
3675/**
3676 * cvmx_bgx#_spu#_fec_control
3677 */
3678union cvmx_bgxx_spux_fec_control {
3679        u64 u64;
3680        struct cvmx_bgxx_spux_fec_control_s {
3681                u64 reserved_2_63 : 62;
3682                u64 err_en : 1;
3683                u64 fec_en : 1;
3684        } s;
3685        struct cvmx_bgxx_spux_fec_control_s cn73xx;
3686        struct cvmx_bgxx_spux_fec_control_s cn78xx;
3687        struct cvmx_bgxx_spux_fec_control_s cn78xxp1;
3688        struct cvmx_bgxx_spux_fec_control_s cnf75xx;
3689};
3690
3691typedef union cvmx_bgxx_spux_fec_control cvmx_bgxx_spux_fec_control_t;
3692
3693/**
3694 * cvmx_bgx#_spu#_fec_corr_blks01
3695 *
3696 * This register is valid only when the LPCS type is BASE-R
3697 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4). The FEC corrected-block counters are
3698 * defined in IEEE 802.3 section 74.8.4.1. Each corrected-blocks counter increments by 1 for a
3699 * corrected FEC block, i.e. an FEC block that has been received with invalid parity on the
3700 * associated PCS lane and has been corrected by the FEC decoder. The counter is reset to all 0s
3701 * when the register is read, and held at all 1s in case of overflow.
3702 *
3703 * The reset operation takes precedence over the increment operation; if the register is read on
3704 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
3705 * increment operation is lost. The counters are writable for test purposes, rather than read-
3706 * only as specified in IEEE 802.3.
3707 */
3708union cvmx_bgxx_spux_fec_corr_blks01 {
3709        u64 u64;
3710        struct cvmx_bgxx_spux_fec_corr_blks01_s {
3711                u64 ln1_corr_blks : 32;
3712                u64 ln0_corr_blks : 32;
3713        } s;
3714        struct cvmx_bgxx_spux_fec_corr_blks01_s cn73xx;
3715        struct cvmx_bgxx_spux_fec_corr_blks01_s cn78xx;
3716        struct cvmx_bgxx_spux_fec_corr_blks01_s cn78xxp1;
3717        struct cvmx_bgxx_spux_fec_corr_blks01_s cnf75xx;
3718};
3719
3720typedef union cvmx_bgxx_spux_fec_corr_blks01 cvmx_bgxx_spux_fec_corr_blks01_t;
3721
3722/**
3723 * cvmx_bgx#_spu#_fec_corr_blks23
3724 *
3725 * This register is valid only when the LPCS type is 40GBASE-R
3726 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4). The FEC corrected-block counters are defined in
3727 * IEEE 802.3 section 74.8.4.1. Each corrected-blocks counter increments by 1 for a corrected FEC
3728 * block, i.e. an FEC block that has been received with invalid parity on the associated PCS lane
3729 * and has been corrected by the FEC decoder. The counter is reset to all 0s when the register is
3730 * read, and held at all 1s in case of overflow.
3731 *
3732 * The reset operation takes precedence over the increment operation; if the register is read on
3733 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
3734 * increment operation is lost. The counters are writable for test purposes, rather than read-
3735 * only as specified in IEEE 802.3.
3736 */
3737union cvmx_bgxx_spux_fec_corr_blks23 {
3738        u64 u64;
3739        struct cvmx_bgxx_spux_fec_corr_blks23_s {
3740                u64 ln3_corr_blks : 32;
3741                u64 ln2_corr_blks : 32;
3742        } s;
3743        struct cvmx_bgxx_spux_fec_corr_blks23_s cn73xx;
3744        struct cvmx_bgxx_spux_fec_corr_blks23_s cn78xx;
3745        struct cvmx_bgxx_spux_fec_corr_blks23_s cn78xxp1;
3746        struct cvmx_bgxx_spux_fec_corr_blks23_s cnf75xx;
3747};
3748
3749typedef union cvmx_bgxx_spux_fec_corr_blks23 cvmx_bgxx_spux_fec_corr_blks23_t;
3750
3751/**
3752 * cvmx_bgx#_spu#_fec_uncorr_blks01
3753 *
3754 * This register is valid only when the LPCS type is BASE-R
3755 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x3 or 0x4). The FEC corrected-block counters are
3756 * defined in IEEE 802.3 section 74.8.4.2. Each uncorrected-blocks counter increments by 1 for an
3757 * uncorrected FEC block, i.e. an FEC block that has been received with invalid parity on the
3758 * associated PCS lane and has not been corrected by the FEC decoder. The counter is reset to all
3759 * 0s when the register is read, and held at all 1s in case of overflow.
3760 *
3761 * The reset operation takes precedence over the increment operation; if the register is read on
3762 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
3763 * increment operation is lost. The counters are writable for test purposes, rather than read-
3764 * only as specified in IEEE 802.3.
3765 */
3766union cvmx_bgxx_spux_fec_uncorr_blks01 {
3767        u64 u64;
3768        struct cvmx_bgxx_spux_fec_uncorr_blks01_s {
3769                u64 ln1_uncorr_blks : 32;
3770                u64 ln0_uncorr_blks : 32;
3771        } s;
3772        struct cvmx_bgxx_spux_fec_uncorr_blks01_s cn73xx;
3773        struct cvmx_bgxx_spux_fec_uncorr_blks01_s cn78xx;
3774        struct cvmx_bgxx_spux_fec_uncorr_blks01_s cn78xxp1;
3775        struct cvmx_bgxx_spux_fec_uncorr_blks01_s cnf75xx;
3776};
3777
3778typedef union cvmx_bgxx_spux_fec_uncorr_blks01 cvmx_bgxx_spux_fec_uncorr_blks01_t;
3779
3780/**
3781 * cvmx_bgx#_spu#_fec_uncorr_blks23
3782 *
3783 * This register is valid only when the LPCS type is 40GBASE-R
3784 * (BGX()_CMR()_CONFIG[LMAC_TYPE] = 0x4). The FEC uncorrected-block counters are defined
3785 * in IEEE 802.3 section 74.8.4.2. Each corrected-blocks counter increments by 1 for an
3786 * uncorrected FEC block, i.e. an FEC block that has been received with invalid parity on the
3787 * associated PCS lane and has not been corrected by the FEC decoder. The counter is reset to all
3788 * 0s when the register is read, and held at all 1s in case of overflow.
3789 *
3790 * The reset operation takes precedence over the increment operation; if the register is read on
3791 * the same clock cycle as an increment operation, the counter is reset to all 0s and the
3792 * increment operation is lost. The counters are writable for test purposes, rather than read-
3793 * only as specified in IEEE 802.3.
3794 */
3795union cvmx_bgxx_spux_fec_uncorr_blks23 {
3796        u64 u64;
3797        struct cvmx_bgxx_spux_fec_uncorr_blks23_s {
3798                u64 ln3_uncorr_blks : 32;
3799                u64 ln2_uncorr_blks : 32;
3800        } s;
3801        struct cvmx_bgxx_spux_fec_uncorr_blks23_s cn73xx;
3802        struct cvmx_bgxx_spux_fec_uncorr_blks23_s cn78xx;
3803        struct cvmx_bgxx_spux_fec_uncorr_blks23_s cn78xxp1;
3804        struct cvmx_bgxx_spux_fec_uncorr_blks23_s cnf75xx;
3805};
3806
3807typedef union cvmx_bgxx_spux_fec_uncorr_blks23 cvmx_bgxx_spux_fec_uncorr_blks23_t;
3808
3809/**
3810 * cvmx_bgx#_spu#_int
3811 */
3812union cvmx_bgxx_spux_int {
3813        u64 u64;
3814        struct cvmx_bgxx_spux_int_s {
3815                u64 reserved_15_63 : 49;
3816                u64 training_failure : 1;
3817                u64 training_done : 1;
3818                u64 an_complete : 1;
3819                u64 an_link_good : 1;
3820                u64 an_page_rx : 1;
3821                u64 fec_uncorr : 1;
3822                u64 fec_corr : 1;
3823                u64 bip_err : 1;
3824                u64 dbg_sync : 1;
3825                u64 algnlos : 1;
3826                u64 synlos : 1;
3827                u64 bitlckls : 1;
3828                u64 err_blk : 1;
3829                u64 rx_link_down : 1;
3830                u64 rx_link_up : 1;
3831        } s;
3832        struct cvmx_bgxx_spux_int_s cn73xx;
3833        struct cvmx_bgxx_spux_int_s cn78xx;
3834        struct cvmx_bgxx_spux_int_s cn78xxp1;
3835        struct cvmx_bgxx_spux_int_s cnf75xx;
3836};
3837
3838typedef union cvmx_bgxx_spux_int cvmx_bgxx_spux_int_t;
3839
3840/**
3841 * cvmx_bgx#_spu#_lpcs_states
3842 */
3843union cvmx_bgxx_spux_lpcs_states {
3844        u64 u64;
3845        struct cvmx_bgxx_spux_lpcs_states_s {
3846                u64 reserved_15_63 : 49;
3847                u64 br_rx_sm : 3;
3848                u64 reserved_10_11 : 2;
3849                u64 bx_rx_sm : 2;
3850                u64 deskew_am_found : 4;
3851                u64 reserved_3_3 : 1;
3852                u64 deskew_sm : 3;
3853        } s;
3854        struct cvmx_bgxx_spux_lpcs_states_s cn73xx;
3855        struct cvmx_bgxx_spux_lpcs_states_s cn78xx;
3856        struct cvmx_bgxx_spux_lpcs_states_s cn78xxp1;
3857        struct cvmx_bgxx_spux_lpcs_states_s cnf75xx;
3858};
3859
3860typedef union cvmx_bgxx_spux_lpcs_states cvmx_bgxx_spux_lpcs_states_t;
3861
3862/**
3863 * cvmx_bgx#_spu#_misc_control
3864 *
3865 * "* RX logical PCS lane polarity vector <3:0> = [XOR_RXPLRT]<3:0> ^ [4[[RXPLRT]]].
3866 *  * TX logical PCS lane polarity vector <3:0> = [XOR_TXPLRT]<3:0> ^ [4[[TXPLRT]]].
3867 *
3868 *  In short, keep [RXPLRT] and [TXPLRT] cleared, and use [XOR_RXPLRT] and [XOR_TXPLRT] fields to
3869 *  define
3870 *  the polarity per logical PCS lane. Only bit 0 of vector is used for 10GBASE-R, and only bits
3871 * - 1:0 of vector are used for RXAUI."
3872 */
3873union cvmx_bgxx_spux_misc_control {
3874        u64 u64;
3875        struct cvmx_bgxx_spux_misc_control_s {
3876                u64 reserved_13_63 : 51;
3877                u64 rx_packet_dis : 1;
3878                u64 skip_after_term : 1;
3879                u64 intlv_rdisp : 1;
3880                u64 xor_rxplrt : 4;
3881                u64 xor_txplrt : 4;
3882                u64 rxplrt : 1;
3883                u64 txplrt : 1;
3884        } s;
3885        struct cvmx_bgxx_spux_misc_control_s cn73xx;
3886        struct cvmx_bgxx_spux_misc_control_s cn78xx;
3887        struct cvmx_bgxx_spux_misc_control_s cn78xxp1;
3888        struct cvmx_bgxx_spux_misc_control_s cnf75xx;
3889};
3890
3891typedef union cvmx_bgxx_spux_misc_control cvmx_bgxx_spux_misc_control_t;
3892
3893/**
3894 * cvmx_bgx#_spu#_spd_abil
3895 */
3896union cvmx_bgxx_spux_spd_abil {
3897        u64 u64;
3898        struct cvmx_bgxx_spux_spd_abil_s {
3899                u64 reserved_4_63 : 60;
3900                u64 hundredgb : 1;
3901                u64 fortygb : 1;
3902                u64 tenpasst : 1;
3903                u64 tengb : 1;
3904        } s;
3905        struct cvmx_bgxx_spux_spd_abil_s cn73xx;
3906        struct cvmx_bgxx_spux_spd_abil_s cn78xx;
3907        struct cvmx_bgxx_spux_spd_abil_s cn78xxp1;
3908        struct cvmx_bgxx_spux_spd_abil_s cnf75xx;
3909};
3910
3911typedef union cvmx_bgxx_spux_spd_abil cvmx_bgxx_spux_spd_abil_t;
3912
3913/**
3914 * cvmx_bgx#_spu#_status1
3915 */
3916union cvmx_bgxx_spux_status1 {
3917        u64 u64;
3918        struct cvmx_bgxx_spux_status1_s {
3919                u64 reserved_8_63 : 56;
3920                u64 flt : 1;
3921                u64 reserved_3_6 : 4;
3922                u64 rcv_lnk : 1;
3923                u64 lpable : 1;
3924                u64 reserved_0_0 : 1;
3925        } s;
3926        struct cvmx_bgxx_spux_status1_s cn73xx;
3927        struct cvmx_bgxx_spux_status1_s cn78xx;
3928        struct cvmx_bgxx_spux_status1_s cn78xxp1;
3929        struct cvmx_bgxx_spux_status1_s cnf75xx;
3930};
3931
3932typedef union cvmx_bgxx_spux_status1 cvmx_bgxx_spux_status1_t;
3933
3934/**
3935 * cvmx_bgx#_spu#_status2
3936 */
3937union cvmx_bgxx_spux_status2 {
3938        u64 u64;
3939        struct cvmx_bgxx_spux_status2_s {
3940                u64 reserved_16_63 : 48;
3941                u64 dev : 2;
3942                u64 reserved_12_13 : 2;
3943                u64 xmtflt : 1;
3944                u64 rcvflt : 1;
3945                u64 reserved_6_9 : 4;
3946                u64 hundredgb_r : 1;
3947                u64 fortygb_r : 1;
3948                u64 tengb_t : 1;
3949                u64 tengb_w : 1;
3950                u64 tengb_x : 1;
3951                u64 tengb_r : 1;
3952        } s;
3953        struct cvmx_bgxx_spux_status2_s cn73xx;
3954        struct cvmx_bgxx_spux_status2_s cn78xx;
3955        struct cvmx_bgxx_spux_status2_s cn78xxp1;
3956        struct cvmx_bgxx_spux_status2_s cnf75xx;
3957};
3958
3959typedef union cvmx_bgxx_spux_status2 cvmx_bgxx_spux_status2_t;
3960
3961/**
3962 * cvmx_bgx#_spu_bist_status
3963 *
3964 * This register provides memory BIST status from the SPU receive buffer lane FIFOs.
3965 *
3966 */
3967union cvmx_bgxx_spu_bist_status {
3968        u64 u64;
3969        struct cvmx_bgxx_spu_bist_status_s {
3970                u64 reserved_4_63 : 60;
3971                u64 rx_buf_bist_status : 4;
3972        } s;
3973        struct cvmx_bgxx_spu_bist_status_s cn73xx;
3974        struct cvmx_bgxx_spu_bist_status_s cn78xx;
3975        struct cvmx_bgxx_spu_bist_status_s cn78xxp1;
3976        struct cvmx_bgxx_spu_bist_status_s cnf75xx;
3977};
3978
3979typedef union cvmx_bgxx_spu_bist_status cvmx_bgxx_spu_bist_status_t;
3980
3981/**
3982 * cvmx_bgx#_spu_dbg_control
3983 */
3984union cvmx_bgxx_spu_dbg_control {
3985        u64 u64;
3986        struct cvmx_bgxx_spu_dbg_control_s {
3987                u64 reserved_56_63 : 8;
3988                u64 ms_clk_period : 12;
3989                u64 us_clk_period : 12;
3990                u64 reserved_31_31 : 1;
3991                u64 br_ber_mon_dis : 1;
3992                u64 an_nonce_match_dis : 1;
3993                u64 timestamp_norm_dis : 1;
3994                u64 rx_buf_flip_synd : 8;
3995                u64 br_pmd_train_soft_en : 1;
3996                u64 an_arb_link_chk_en : 1;
3997                u64 rx_buf_cor_dis : 1;
3998                u64 scramble_dis : 1;
3999                u64 reserved_15_15 : 1;
4000                u64 marker_rxp : 15;
4001        } s;
4002        struct cvmx_bgxx_spu_dbg_control_s cn73xx;
4003        struct cvmx_bgxx_spu_dbg_control_s cn78xx;
4004        struct cvmx_bgxx_spu_dbg_control_s cn78xxp1;
4005        struct cvmx_bgxx_spu_dbg_control_s cnf75xx;
4006};
4007
4008typedef union cvmx_bgxx_spu_dbg_control cvmx_bgxx_spu_dbg_control_t;
4009
4010/**
4011 * cvmx_bgx#_spu_mem_int
4012 */
4013union cvmx_bgxx_spu_mem_int {
4014        u64 u64;
4015        struct cvmx_bgxx_spu_mem_int_s {
4016                u64 reserved_8_63 : 56;
4017                u64 rx_buf_sbe : 4;
4018                u64 rx_buf_dbe : 4;
4019        } s;
4020        struct cvmx_bgxx_spu_mem_int_s cn73xx;
4021        struct cvmx_bgxx_spu_mem_int_s cn78xx;
4022        struct cvmx_bgxx_spu_mem_int_s cn78xxp1;
4023        struct cvmx_bgxx_spu_mem_int_s cnf75xx;
4024};
4025
4026typedef union cvmx_bgxx_spu_mem_int cvmx_bgxx_spu_mem_int_t;
4027
4028/**
4029 * cvmx_bgx#_spu_mem_status
4030 *
4031 * This register provides memory ECC status from the SPU receive buffer lane FIFOs.
4032 *
4033 */
4034union cvmx_bgxx_spu_mem_status {
4035        u64 u64;
4036        struct cvmx_bgxx_spu_mem_status_s {
4037                u64 reserved_32_63 : 32;
4038                u64 rx_buf_ecc_synd : 32;
4039        } s;
4040        struct cvmx_bgxx_spu_mem_status_s cn73xx;
4041        struct cvmx_bgxx_spu_mem_status_s cn78xx;
4042        struct cvmx_bgxx_spu_mem_status_s cn78xxp1;
4043        struct cvmx_bgxx_spu_mem_status_s cnf75xx;
4044};
4045
4046typedef union cvmx_bgxx_spu_mem_status cvmx_bgxx_spu_mem_status_t;
4047
4048/**
4049 * cvmx_bgx#_spu_sds#_skew_status
4050 *
4051 * This register provides SerDes lane skew status. One register per physical SerDes lane.
4052 *
4053 */
4054union cvmx_bgxx_spu_sdsx_skew_status {
4055        u64 u64;
4056        struct cvmx_bgxx_spu_sdsx_skew_status_s {
4057                u64 reserved_32_63 : 32;
4058                u64 skew_status : 32;
4059        } s;
4060        struct cvmx_bgxx_spu_sdsx_skew_status_s cn73xx;
4061        struct cvmx_bgxx_spu_sdsx_skew_status_s cn78xx;
4062        struct cvmx_bgxx_spu_sdsx_skew_status_s cn78xxp1;
4063        struct cvmx_bgxx_spu_sdsx_skew_status_s cnf75xx;
4064};
4065
4066typedef union cvmx_bgxx_spu_sdsx_skew_status cvmx_bgxx_spu_sdsx_skew_status_t;
4067
4068/**
4069 * cvmx_bgx#_spu_sds#_states
4070 *
4071 * This register provides SerDes lane states. One register per physical SerDes lane.
4072 *
4073 */
4074union cvmx_bgxx_spu_sdsx_states {
4075        u64 u64;
4076        struct cvmx_bgxx_spu_sdsx_states_s {
4077                u64 reserved_52_63 : 12;
4078                u64 am_lock_invld_cnt : 2;
4079                u64 am_lock_sm : 2;
4080                u64 reserved_45_47 : 3;
4081                u64 train_sm : 3;
4082                u64 train_code_viol : 1;
4083                u64 train_frame_lock : 1;
4084                u64 train_lock_found_1st_marker : 1;
4085                u64 train_lock_bad_markers : 3;
4086                u64 reserved_35_35 : 1;
4087                u64 an_arb_sm : 3;
4088                u64 an_rx_sm : 2;
4089                u64 reserved_29_29 : 1;
4090                u64 fec_block_sync : 1;
4091                u64 fec_sync_cnt : 4;
4092                u64 reserved_23_23 : 1;
4093                u64 br_sh_invld_cnt : 7;
4094                u64 br_block_lock : 1;
4095                u64 br_sh_cnt : 11;
4096                u64 bx_sync_sm : 4;
4097        } s;
4098        struct cvmx_bgxx_spu_sdsx_states_s cn73xx;
4099        struct cvmx_bgxx_spu_sdsx_states_s cn78xx;
4100        struct cvmx_bgxx_spu_sdsx_states_s cn78xxp1;
4101        struct cvmx_bgxx_spu_sdsx_states_s cnf75xx;
4102};
4103
4104typedef union cvmx_bgxx_spu_sdsx_states cvmx_bgxx_spu_sdsx_states_t;
4105
4106#endif
4107