mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 12:08:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			7852 lines
		
	
	
		
			231 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			7852 lines
		
	
	
		
			231 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier:    GPL-2.0
 | |
|  *
 | |
|  * Copyright (C) 2020 Marvell International Ltd.
 | |
|  *
 | |
|  * https://spdx.org/licenses
 | |
|  */
 | |
| #ifndef __CSRS_CGX_H__
 | |
| #define __CSRS_CGX_H__
 | |
| 
 | |
| /**
 | |
|  * @file
 | |
|  *
 | |
|  * Configuration and status register (CSR) address and type definitions for
 | |
|  * CGX.
 | |
|  *
 | |
|  * This file is auto generated.  Do not edit.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_bar_e
 | |
|  *
 | |
|  * CGX Base Address Register Enumeration Enumerates the base address
 | |
|  * registers.
 | |
|  */
 | |
| #define CGX_BAR_E_CGXX_PF_BAR0(a) (0x87e0e0000000ll + 0x1000000ll * (a))
 | |
| #define CGX_BAR_E_CGXX_PF_BAR0_SIZE 0x100000ull
 | |
| #define CGX_BAR_E_CGXX_PF_BAR4(a) (0x87e0e0400000ll + 0x1000000ll * (a))
 | |
| #define CGX_BAR_E_CGXX_PF_BAR4_SIZE 0x100000ull
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_int_vec_e
 | |
|  *
 | |
|  * CGX MSI-X Vector Enumeration Enumeration the MSI-X interrupt vectors.
 | |
|  */
 | |
| #define CGX_INT_VEC_E_CMRX_INT(a) (0 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_CMRX_SW(a) (0x26 + (a))
 | |
| #define CGX_INT_VEC_E_CMR_MEM_INT (0x24)
 | |
| #define CGX_INT_VEC_E_GMPX_GMI_RX_INT(a) (5 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_GMPX_GMI_TX_INT(a) (6 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_GMPX_GMI_WOL_INT(a) (7 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_GMPX_PCS_INT(a) (4 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_SMUX_RX_INT(a) (2 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_SMUX_RX_WOL_INT(a) (8 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_SMUX_TX_INT(a) (3 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_SPUX_INT(a) (1 + 9 * (a))
 | |
| #define CGX_INT_VEC_E_SW (0x25)
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_lmac_types_e
 | |
|  *
 | |
|  * CGX LMAC Type Enumeration Enumerates the LMAC Types that CGX supports.
 | |
|  */
 | |
| #define CGX_LMAC_TYPES_E_FIFTYG_R (8)
 | |
| #define CGX_LMAC_TYPES_E_FORTYG_R (4)
 | |
| #define CGX_LMAC_TYPES_E_HUNDREDG_R (9)
 | |
| #define CGX_LMAC_TYPES_E_QSGMII (6)
 | |
| #define CGX_LMAC_TYPES_E_RGMII (5)
 | |
| #define CGX_LMAC_TYPES_E_RXAUI (2)
 | |
| #define CGX_LMAC_TYPES_E_SGMII (0)
 | |
| #define CGX_LMAC_TYPES_E_TENG_R (3)
 | |
| #define CGX_LMAC_TYPES_E_TWENTYFIVEG_R (7)
 | |
| #define CGX_LMAC_TYPES_E_USXGMII (0xa)
 | |
| #define CGX_LMAC_TYPES_E_XAUI (1)
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_opcode_e
 | |
|  *
 | |
|  * INTERNAL: CGX Error Opcode Enumeration  Enumerates the error opcodes
 | |
|  * created by CGX and presented to NCSI/NIX.
 | |
|  */
 | |
| #define CGX_OPCODE_E_RE_FCS (7)
 | |
| #define CGX_OPCODE_E_RE_FCS_RCV (8)
 | |
| #define CGX_OPCODE_E_RE_JABBER (2)
 | |
| #define CGX_OPCODE_E_RE_NONE (0)
 | |
| #define CGX_OPCODE_E_RE_PARTIAL (1)
 | |
| #define CGX_OPCODE_E_RE_RX_CTL (0xb)
 | |
| #define CGX_OPCODE_E_RE_SKIP (0xc)
 | |
| #define CGX_OPCODE_E_RE_TERMINATE (9)
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_spu_br_train_cst_e
 | |
|  *
 | |
|  * INTERNAL: CGX Training Coefficient Status Enumeration  2-bit status
 | |
|  * for each coefficient as defined in IEEE 802.3, Table 72-5.
 | |
|  */
 | |
| #define CGX_SPU_BR_TRAIN_CST_E_MAXIMUM (3)
 | |
| #define CGX_SPU_BR_TRAIN_CST_E_MINIMUM (2)
 | |
| #define CGX_SPU_BR_TRAIN_CST_E_NOT_UPDATED (0)
 | |
| #define CGX_SPU_BR_TRAIN_CST_E_UPDATED (1)
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_spu_br_train_cup_e
 | |
|  *
 | |
|  * INTERNAL:CGX Training Coefficient Enumeration  2-bit command for each
 | |
|  * coefficient as defined in IEEE 802.3, Table 72-4.
 | |
|  */
 | |
| #define CGX_SPU_BR_TRAIN_CUP_E_DECREMENT (1)
 | |
| #define CGX_SPU_BR_TRAIN_CUP_E_HOLD (0)
 | |
| #define CGX_SPU_BR_TRAIN_CUP_E_INCREMENT (2)
 | |
| #define CGX_SPU_BR_TRAIN_CUP_E_RSV_CMD (3)
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_usxgmii_rate_e
 | |
|  *
 | |
|  * CGX USXGMII Rate Enumeration Enumerates the USXGMII sub-port type
 | |
|  * rate, CGX()_SPU()_CONTROL1[USXGMII_RATE].  Selecting a rate higher
 | |
|  * than the maximum allowed for a given port sub-type (specified by
 | |
|  * CGX()_SPU()_CONTROL1[USXGMII_TYPE]), e.g., selecting ::RATE_2HG (2.5
 | |
|  * Gbps) for CGX_USXGMII_TYPE_E::SXGMII_2G, will cause unpredictable
 | |
|  * behavior. USXGMII hardware-based autonegotiation may change this
 | |
|  * setting.
 | |
|  */
 | |
| #define CGX_USXGMII_RATE_E_RATE_100M (1)
 | |
| #define CGX_USXGMII_RATE_E_RATE_10G (5)
 | |
| #define CGX_USXGMII_RATE_E_RATE_10M (0)
 | |
| #define CGX_USXGMII_RATE_E_RATE_1G (2)
 | |
| #define CGX_USXGMII_RATE_E_RATE_20G (6)
 | |
| #define CGX_USXGMII_RATE_E_RATE_2HG (3)
 | |
| #define CGX_USXGMII_RATE_E_RATE_5G (4)
 | |
| #define CGX_USXGMII_RATE_E_RSV_RATE (7)
 | |
| 
 | |
| /**
 | |
|  * Enumeration cgx_usxgmii_type_e
 | |
|  *
 | |
|  * CGX USXGMII Port Sub-Type Enumeration Enumerates the USXGMII sub-port
 | |
|  * type, CGX()_SPU()_CONTROL1[USXGMII_TYPE].  The description indicates
 | |
|  * the maximum rate and the maximum number of ports (LMACs) for each sub-
 | |
|  * type. The minimum rate for any port is 10M. The rate selection for
 | |
|  * each LMAC is made using CGX()_SPU()_CONTROL1[USXGMII_RATE] and the
 | |
|  * number of active ports/LMACs is implicitly determined by the value
 | |
|  * given to CGX()_CMR()_CONFIG[ENABLE] for each LMAC.  Selecting a rate
 | |
|  * higher than the maximum allowed for a given port sub-type or enabling
 | |
|  * more LMACs than the maximum allowed for a given port sub-type will
 | |
|  * cause unpredictable behavior.
 | |
|  */
 | |
| #define CGX_USXGMII_TYPE_E_DXGMII_10G (3)
 | |
| #define CGX_USXGMII_TYPE_E_DXGMII_20G (5)
 | |
| #define CGX_USXGMII_TYPE_E_DXGMII_5G (4)
 | |
| #define CGX_USXGMII_TYPE_E_QXGMII_10G (7)
 | |
| #define CGX_USXGMII_TYPE_E_QXGMII_20G (6)
 | |
| #define CGX_USXGMII_TYPE_E_SXGMII_10G (0)
 | |
| #define CGX_USXGMII_TYPE_E_SXGMII_2G (2)
 | |
| #define CGX_USXGMII_TYPE_E_SXGMII_5G (1)
 | |
| 
 | |
| /**
 | |
|  * Structure cgx_spu_br_lane_train_status_s
 | |
|  *
 | |
|  * INTERNAL:CGX Lane Training Status Structure  This is the group of lane
 | |
|  * status bits for a single lane in the BASE-R PMD status register (MDIO
 | |
|  * address 1.151) as defined in IEEE 802.3ba-2010, Table 45-55.
 | |
|  */
 | |
| union cgx_spu_br_lane_train_status_s {
 | |
| 	u32 u;
 | |
| 	struct cgx_spu_br_lane_train_status_s_s {
 | |
| 		u32 rx_trained                       : 1;
 | |
| 		u32 frame_lock                       : 1;
 | |
| 		u32 training                         : 1;
 | |
| 		u32 training_failure                 : 1;
 | |
| 		u32 reserved_4_31                    : 28;
 | |
| 	} s;
 | |
| 	/* struct cgx_spu_br_lane_train_status_s_s cn; */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Structure cgx_spu_br_train_cup_s
 | |
|  *
 | |
|  * INTERNAL:CGX Lane Training Coefficient Structure  This is the
 | |
|  * coefficient update field of the BASE-R link training packet as defined
 | |
|  * in IEEE 802.3, Table 72-4.
 | |
|  */
 | |
| union cgx_spu_br_train_cup_s {
 | |
| 	u32 u;
 | |
| 	struct cgx_spu_br_train_cup_s_s {
 | |
| 		u32 pre_cup                          : 2;
 | |
| 		u32 main_cup                         : 2;
 | |
| 		u32 post_cup                         : 2;
 | |
| 		u32 reserved_6_11                    : 6;
 | |
| 		u32 init                             : 1;
 | |
| 		u32 preset                           : 1;
 | |
| 		u32 reserved_14_31                   : 18;
 | |
| 	} s;
 | |
| 	struct cgx_spu_br_train_cup_s_cn {
 | |
| 		u32 pre_cup                          : 2;
 | |
| 		u32 main_cup                         : 2;
 | |
| 		u32 post_cup                         : 2;
 | |
| 		u32 reserved_6_11                    : 6;
 | |
| 		u32 init                             : 1;
 | |
| 		u32 preset                           : 1;
 | |
| 		u32 reserved_14_15                   : 2;
 | |
| 		u32 reserved_16_31                   : 16;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Structure cgx_spu_br_train_rep_s
 | |
|  *
 | |
|  * INTERNAL:CGX Training Report Structure  This is the status report
 | |
|  * field of the BASE-R link training packet as defined in IEEE 802.3,
 | |
|  * Table 72-5.
 | |
|  */
 | |
| union cgx_spu_br_train_rep_s {
 | |
| 	u32 u;
 | |
| 	struct cgx_spu_br_train_rep_s_s {
 | |
| 		u32 pre_cst                          : 2;
 | |
| 		u32 main_cst                         : 2;
 | |
| 		u32 post_cst                         : 2;
 | |
| 		u32 reserved_6_14                    : 9;
 | |
| 		u32 rx_ready                         : 1;
 | |
| 		u32 reserved_16_31                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgx_spu_br_train_rep_s_s cn; */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Structure cgx_spu_sds_cu_s
 | |
|  *
 | |
|  * INTERNAL: CGX Training Coeffiecient Structure  This structure is
 | |
|  * similar to CGX_SPU_BR_TRAIN_CUP_S format, but with reserved fields
 | |
|  * removed and [RCVR_READY] field added.
 | |
|  */
 | |
| union cgx_spu_sds_cu_s {
 | |
| 	u32 u;
 | |
| 	struct cgx_spu_sds_cu_s_s {
 | |
| 		u32 pre_cu                           : 2;
 | |
| 		u32 main_cu                          : 2;
 | |
| 		u32 post_cu                          : 2;
 | |
| 		u32 initialize                       : 1;
 | |
| 		u32 preset                           : 1;
 | |
| 		u32 rcvr_ready                       : 1;
 | |
| 		u32 reserved_9_31                    : 23;
 | |
| 	} s;
 | |
| 	/* struct cgx_spu_sds_cu_s_s cn; */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Structure cgx_spu_sds_skew_status_s
 | |
|  *
 | |
|  * CGX Skew Status Structure Provides receive skew information detected
 | |
|  * for a physical SerDes lane when it is assigned to a multilane
 | |
|  * LMAC/LPCS. Contents are valid when RX deskew is done for the
 | |
|  * associated LMAC/LPCS.
 | |
|  */
 | |
| union cgx_spu_sds_skew_status_s {
 | |
| 	u32 u;
 | |
| 	struct cgx_spu_sds_skew_status_s_s {
 | |
| 		u32 am_timestamp                     : 12;
 | |
| 		u32 reserved_12_15                   : 4;
 | |
| 		u32 am_lane_id                       : 5;
 | |
| 		u32 reserved_21_22                   : 2;
 | |
| 		u32 lane_skew                        : 7;
 | |
| 		u32 reserved_30_31                   : 2;
 | |
| 	} s;
 | |
| 	/* struct cgx_spu_sds_skew_status_s_s cn; */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Structure cgx_spu_sds_sr_s
 | |
|  *
 | |
|  * INTERNAL: CGX Lane Training Coefficient Structure  Similar to
 | |
|  * CGX_SPU_BR_TRAIN_REP_S format, but with reserved and RX ready fields
 | |
|  * removed.
 | |
|  */
 | |
| union cgx_spu_sds_sr_s {
 | |
| 	u32 u;
 | |
| 	struct cgx_spu_sds_sr_s_s {
 | |
| 		u32 pre_status                       : 2;
 | |
| 		u32 main_status                      : 2;
 | |
| 		u32 post_status                      : 2;
 | |
| 		u32 reserved_6_31                    : 26;
 | |
| 	} s;
 | |
| 	/* struct cgx_spu_sds_sr_s_s cn; */
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_active_pc
 | |
|  *
 | |
|  * CGX ACTIVE PC Register This register counts the conditional clocks for
 | |
|  * power management.
 | |
|  */
 | |
| union cgxx_active_pc {
 | |
| 	u64 u;
 | |
| 	struct cgxx_active_pc_s {
 | |
| 		u64 cnt                              : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_active_pc_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_ACTIVE_PC(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_ACTIVE_PC(void)
 | |
| {
 | |
| 	return 0x2010;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_activity
 | |
|  *
 | |
|  * CGX CMR Activity Registers
 | |
|  */
 | |
| union cgxx_cmrx_activity {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_activity_s {
 | |
| 		u64 act_tx_lo                        : 1;
 | |
| 		u64 act_tx_hi                        : 1;
 | |
| 		u64 pause_tx                         : 1;
 | |
| 		u64 act_rx_lo                        : 1;
 | |
| 		u64 act_rx_hi                        : 1;
 | |
| 		u64 pause_rx                         : 1;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_activity_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_ACTIVITY(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_ACTIVITY(u64 a)
 | |
| {
 | |
| 	return 0x5f8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_config
 | |
|  *
 | |
|  * CGX CMR Configuration Registers Logical MAC/PCS configuration
 | |
|  * registers; one per LMAC. The maximum number of LMACs (and maximum LMAC
 | |
|  * ID) that can be enabled by these registers is limited by
 | |
|  * CGX()_CMR_RX_LMACS[LMACS] and CGX()_CMR_TX_LMACS[LMACS].  Internal:
 | |
|  * \<pre\> Example configurations:   ------------------------------------
 | |
|  * ---------------------------------------   Configuration
 | |
|  * LMACS  Register             [ENABLE]    [LMAC_TYPE]   ----------------
 | |
|  * -----------------------------------------------------------
 | |
|  * 1x50G+1x25G+1xSGMII     4      CGXn_CMR0_CONFIG     1           8
 | |
|  * CGXn_CMR1_CONFIG     0           --
 | |
|  * CGXn_CMR2_CONFIG     1           7
 | |
|  * CGXn_CMR3_CONFIG     1           0   ---------------------------------
 | |
|  * ------------------------------------------   USXGMII
 | |
|  * 1-4    CGXn_CMR0_CONFIG     1           a
 | |
|  * CGXn_CMR1_CONFIG     1           a
 | |
|  * CGXn_CMR2_CONFIG     1           a
 | |
|  * CGXn_CMR3_CONFIG     1           a   ---------------------------------
 | |
|  * ------------------------------------------   1x100GBASE-R4           1
 | |
|  * CGXn_CMR0_CONFIG     1           9
 | |
|  * CGXn_CMR1_CONFIG     0           --
 | |
|  * CGXn_CMR2_CONFIG     0           --
 | |
|  * CGXn_CMR3_CONFIG     0           --   --------------------------------
 | |
|  * -------------------------------------------   2x50GBASE-R2
 | |
|  * 2      CGXn_CMR0_CONFIG     1           8
 | |
|  * CGXn_CMR1_CONFIG     1           8
 | |
|  * CGXn_CMR2_CONFIG     0           --
 | |
|  * CGXn_CMR3_CONFIG     0           --   --------------------------------
 | |
|  * -------------------------------------------   4x25GBASE-R
 | |
|  * 4      CGXn_CMR0_CONFIG     1           7
 | |
|  * CGXn_CMR1_CONFIG     1           7
 | |
|  * CGXn_CMR2_CONFIG     1           7
 | |
|  * CGXn_CMR3_CONFIG     1           7   ---------------------------------
 | |
|  * ------------------------------------------   QSGMII                  4
 | |
|  * CGXn_CMR0_CONFIG     1           6
 | |
|  * CGXn_CMR1_CONFIG     1           6
 | |
|  * CGXn_CMR2_CONFIG     1           6
 | |
|  * CGXn_CMR3_CONFIG     1           6   ---------------------------------
 | |
|  * ------------------------------------------   1x40GBASE-R4            1
 | |
|  * CGXn_CMR0_CONFIG     1           4
 | |
|  * CGXn_CMR1_CONFIG     0           --
 | |
|  * CGXn_CMR2_CONFIG     0           --
 | |
|  * CGXn_CMR3_CONFIG     0           --   --------------------------------
 | |
|  * -------------------------------------------   4x10GBASE-R
 | |
|  * 4      CGXn_CMR0_CONFIG     1           3
 | |
|  * CGXn_CMR1_CONFIG     1           3
 | |
|  * CGXn_CMR2_CONFIG     1           3
 | |
|  * CGXn_CMR3_CONFIG     1           3   ---------------------------------
 | |
|  * ------------------------------------------   2xRXAUI                 2
 | |
|  * CGXn_CMR0_CONFIG     1           2
 | |
|  * CGXn_CMR1_CONFIG     1           2
 | |
|  * CGXn_CMR2_CONFIG     0           --
 | |
|  * CGXn_CMR3_CONFIG     0           --   --------------------------------
 | |
|  * -------------------------------------------   1x10GBASE-X/XAUI/DXAUI
 | |
|  * 1      CGXn_CMR0_CONFIG     1           1
 | |
|  * CGXn_CMR1_CONFIG     0           --
 | |
|  * CGXn_CMR2_CONFIG     0           --
 | |
|  * CGXn_CMR3_CONFIG     0           --   --------------------------------
 | |
|  * -------------------------------------------   4xSGMII/1000BASE-X
 | |
|  * 4      CGXn_CMR0_CONFIG     1           0
 | |
|  * CGXn_CMR1_CONFIG     1           0
 | |
|  * CGXn_CMR2_CONFIG     1           0
 | |
|  * CGXn_CMR3_CONFIG     1           0   ---------------------------------
 | |
|  * ------------------------------------------ \</pre\>
 | |
|  */
 | |
| union cgxx_cmrx_config {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_config_s {
 | |
| 		u64 lane_to_sds                      : 8;
 | |
| 		u64 reserved_8_39                    : 32;
 | |
| 		u64 lmac_type                        : 4;
 | |
| 		u64 unused                           : 8;
 | |
| 		u64 int_beat_gen                     : 1;
 | |
| 		u64 data_pkt_tx_en                   : 1;
 | |
| 		u64 data_pkt_rx_en                   : 1;
 | |
| 		u64 enable                           : 1;
 | |
| 		u64 x2p_select                       : 3;
 | |
| 		u64 p2x_select                       : 3;
 | |
| 		u64 reserved_62_63                   : 2;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_config_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_CONFIG(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_CONFIG(u64 a)
 | |
| {
 | |
| 	return 0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_int
 | |
|  *
 | |
|  * CGX CMR Interrupt Register
 | |
|  */
 | |
| union cgxx_cmrx_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_int_s {
 | |
| 		u64 pause_drp                        : 1;
 | |
| 		u64 overflw                          : 1;
 | |
| 		u64 nic_nxc                          : 1;
 | |
| 		u64 nix0_nxc                         : 1;
 | |
| 		u64 nix1_nxc                         : 1;
 | |
| 		u64 nix0_e_nxc                       : 1;
 | |
| 		u64 nix1_e_nxc                       : 1;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_INT(u64 a)
 | |
| {
 | |
| 	return 0x40 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_int_ena_w1c
 | |
|  *
 | |
|  * CGX CMR Interrupt Enable Clear Register This register clears interrupt
 | |
|  * enable bits.
 | |
|  */
 | |
| union cgxx_cmrx_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_int_ena_w1c_s {
 | |
| 		u64 pause_drp                        : 1;
 | |
| 		u64 overflw                          : 1;
 | |
| 		u64 nic_nxc                          : 1;
 | |
| 		u64 nix0_nxc                         : 1;
 | |
| 		u64 nix1_nxc                         : 1;
 | |
| 		u64 nix0_e_nxc                       : 1;
 | |
| 		u64 nix1_e_nxc                       : 1;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x50 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_int_ena_w1s
 | |
|  *
 | |
|  * CGX CMR Interrupt Enable Set Register This register sets interrupt
 | |
|  * enable bits.
 | |
|  */
 | |
| union cgxx_cmrx_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_int_ena_w1s_s {
 | |
| 		u64 pause_drp                        : 1;
 | |
| 		u64 overflw                          : 1;
 | |
| 		u64 nic_nxc                          : 1;
 | |
| 		u64 nix0_nxc                         : 1;
 | |
| 		u64 nix1_nxc                         : 1;
 | |
| 		u64 nix0_e_nxc                       : 1;
 | |
| 		u64 nix1_e_nxc                       : 1;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x58 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_int_w1s
 | |
|  *
 | |
|  * CGX CMR Interrupt Set Register This register sets interrupt bits.
 | |
|  */
 | |
| union cgxx_cmrx_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_int_w1s_s {
 | |
| 		u64 pause_drp                        : 1;
 | |
| 		u64 overflw                          : 1;
 | |
| 		u64 nic_nxc                          : 1;
 | |
| 		u64 nix0_nxc                         : 1;
 | |
| 		u64 nix1_nxc                         : 1;
 | |
| 		u64 nix0_e_nxc                       : 1;
 | |
| 		u64 nix1_e_nxc                       : 1;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x48 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_led_timing
 | |
|  *
 | |
|  * CGX MAC LED Activity Timing Registers
 | |
|  */
 | |
| union cgxx_cmrx_led_timing {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_led_timing_s {
 | |
| 		u64 extension                        : 8;
 | |
| 		u64 reserved_8_63                    : 56;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_led_timing_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_LED_TIMING(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_LED_TIMING(u64 a)
 | |
| {
 | |
| 	return 0x5f0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_prt_cbfc_ctl
 | |
|  *
 | |
|  * CGX CMR LMAC PFC Control Registers See CGX()_CMR()_RX_LOGL_XOFF[XOFF].
 | |
|  */
 | |
| union cgxx_cmrx_prt_cbfc_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_prt_cbfc_ctl_s {
 | |
| 		u64 reserved_0_15                    : 16;
 | |
| 		u64 phys_bp                          : 16;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_prt_cbfc_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_PRT_CBFC_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_PRT_CBFC_CTL(u64 a)
 | |
| {
 | |
| 	return 0x608 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_bp_drop
 | |
|  *
 | |
|  * CGX Receive Backpressure Drop Register
 | |
|  */
 | |
| union cgxx_cmrx_rx_bp_drop {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_bp_drop_s {
 | |
| 		u64 mark                             : 7;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_bp_drop_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_BP_DROP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_BP_DROP(u64 a)
 | |
| {
 | |
| 	return 0xd8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_bp_off
 | |
|  *
 | |
|  * CGX Receive Backpressure Off Register
 | |
|  */
 | |
| union cgxx_cmrx_rx_bp_off {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_bp_off_s {
 | |
| 		u64 mark                             : 7;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_bp_off_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_BP_OFF(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_BP_OFF(u64 a)
 | |
| {
 | |
| 	return 0xe8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_bp_on
 | |
|  *
 | |
|  * CGX Receive Backpressure On Register
 | |
|  */
 | |
| union cgxx_cmrx_rx_bp_on {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_bp_on_s {
 | |
| 		u64 mark                             : 13;
 | |
| 		u64 reserved_13_63                   : 51;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_bp_on_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_BP_ON(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_BP_ON(u64 a)
 | |
| {
 | |
| 	return 0xe0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_bp_status
 | |
|  *
 | |
|  * CGX CMR Receive Backpressure Status Registers
 | |
|  */
 | |
| union cgxx_cmrx_rx_bp_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_bp_status_s {
 | |
| 		u64 bp                               : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_bp_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_BP_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_BP_STATUS(u64 a)
 | |
| {
 | |
| 	return 0xf0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_dmac_ctl0
 | |
|  *
 | |
|  * CGX CMR Receive DMAC Address-Control0 Register DMAC CAM control
 | |
|  * register for use by X2P/NIX bound traffic. Received packets are only
 | |
|  * passed to X2P/NIX when the DMAC0 filter result is ACCEPT and STEERING0
 | |
|  * filter result is PASS. See also CGX()_CMR_RX_DMAC()_CAM0 and
 | |
|  * CGX()_CMR_RX_STEERING0().  Internal: "* ALGORITHM Here is some pseudo
 | |
|  * code that represents the address filter behavior. \<pre\>
 | |
|  * dmac_addr_filter(uint8 prt, uint48 dmac) { for (lmac=0, lmac\<4,
 | |
|  * lmac++) {   if (is_bcst(dmac))                               //
 | |
|  * broadcast accept     return (CGX()_CMR(lmac)_RX_DMAC_CTL0[BCST_ACCEPT]
 | |
|  * ? ACCEPT : REJECT);   if (is_mcst(dmac) &&
 | |
|  * CGX()_CMR(lmac)_RX_DMAC_CTL0[MCST_MODE] == 0)   // multicast reject
 | |
|  * return REJECT;   if (is_mcst(dmac) &&
 | |
|  * CGX()_CMR(lmac)_RX_DMAC_CTL0[MCST_MODE] == 1)   // multicast accept
 | |
|  * return ACCEPT;   else        // DMAC CAM filter     cam_hit = 0;   for
 | |
|  * (i=0; i\<32; i++) {     cam = CGX()_CMR_RX_DMAC(i)_CAM0;     if
 | |
|  * (cam[EN] && cam[ID] == lmac && cam[ADR] == dmac) {       cam_hit = 1;
 | |
|  * break;     }   }   if (cam_hit) {     return
 | |
|  * (CGX()_CMR(lmac)_RX_DMAC_CTL0[CAM_ACCEPT] ? ACCEPT : REJECT);   else
 | |
|  * return (CGX()_CMR(lmac)_RX_DMAC_CTL0[CAM_ACCEPT] ? REJECT : ACCEPT);
 | |
|  * } } \</pre\>"
 | |
|  */
 | |
| union cgxx_cmrx_rx_dmac_ctl0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_dmac_ctl0_s {
 | |
| 		u64 bcst_accept                      : 1;
 | |
| 		u64 mcst_mode                        : 2;
 | |
| 		u64 cam_accept                       : 1;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_dmac_ctl0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_DMAC_CTL0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_DMAC_CTL0(u64 a)
 | |
| {
 | |
| 	return 0x1f8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_dmac_ctl1
 | |
|  *
 | |
|  * CGX CMR Receive DMAC Address-Control1 Register DMAC CAM control
 | |
|  * register for use by NCSI bound traffic. Received packets are only
 | |
|  * passed to NCSI when the DMAC1 filter result is ACCEPT and STEERING1
 | |
|  * filter result is PASS. See also CGX()_CMR_RX_DMAC()_CAM1 and
 | |
|  * CGX()_CMR_RX_STEERING1(). For use with the LMAC associated with NCSI;
 | |
|  * see CGX()_CMR_GLOBAL_CONFIG[NCSI_LMAC_ID].  Internal: ALGORITHM: See
 | |
|  * CGX()_CMR()_RX_DMAC_CTL0.
 | |
|  */
 | |
| union cgxx_cmrx_rx_dmac_ctl1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_dmac_ctl1_s {
 | |
| 		u64 bcst_accept                      : 1;
 | |
| 		u64 mcst_mode                        : 2;
 | |
| 		u64 cam_accept                       : 1;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_dmac_ctl1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_DMAC_CTL1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_DMAC_CTL1(u64 a)
 | |
| {
 | |
| 	return 0x3f8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_fifo_len
 | |
|  *
 | |
|  * CGX CMR Receive Fifo Length Registers
 | |
|  */
 | |
| union cgxx_cmrx_rx_fifo_len {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_fifo_len_s {
 | |
| 		u64 fifo_len                         : 14;
 | |
| 		u64 busy                             : 1;
 | |
| 		u64 fifo_len_e                       : 14;
 | |
| 		u64 busy_e                           : 1;
 | |
| 		u64 reserved_30_63                   : 34;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_fifo_len_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_FIFO_LEN(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_FIFO_LEN(u64 a)
 | |
| {
 | |
| 	return 0x108 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_id_map
 | |
|  *
 | |
|  * CGX CMR Receive ID Map Register These registers set the RX LMAC ID
 | |
|  * mapping for X2P/NIX.
 | |
|  */
 | |
| union cgxx_cmrx_rx_id_map {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_id_map_s {
 | |
| 		u64 pknd                             : 6;
 | |
| 		u64 unused                           : 2;
 | |
| 		u64 rid                              : 7;
 | |
| 		u64 reserved_15_63                   : 49;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_id_map_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_ID_MAP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_ID_MAP(u64 a)
 | |
| {
 | |
| 	return 0x60 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_logl_xoff
 | |
|  *
 | |
|  * CGX CMR Receive Logical XOFF Registers
 | |
|  */
 | |
| union cgxx_cmrx_rx_logl_xoff {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_logl_xoff_s {
 | |
| 		u64 xoff                             : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_logl_xoff_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_LOGL_XOFF(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_LOGL_XOFF(u64 a)
 | |
| {
 | |
| 	return 0xf8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_logl_xon
 | |
|  *
 | |
|  * CGX CMR Receive Logical XON Registers
 | |
|  */
 | |
| union cgxx_cmrx_rx_logl_xon {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_logl_xon_s {
 | |
| 		u64 xon                              : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_logl_xon_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_LOGL_XON(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_LOGL_XON(u64 a)
 | |
| {
 | |
| 	return 0x100 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_merge_stat0
 | |
|  *
 | |
|  * CGX RX Preemption Status Register 0
 | |
|  */
 | |
| union cgxx_cmrx_rx_merge_stat0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_merge_stat0_s {
 | |
| 		u64 fa_err_cnt                       : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_merge_stat0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT0(u64 a)
 | |
| {
 | |
| 	return 0x138 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_merge_stat1
 | |
|  *
 | |
|  * CGX RX Preemption Status Register 1
 | |
|  */
 | |
| union cgxx_cmrx_rx_merge_stat1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_merge_stat1_s {
 | |
| 		u64 fs_err_cnt                       : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_merge_stat1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT1(u64 a)
 | |
| {
 | |
| 	return 0x140 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_merge_stat2
 | |
|  *
 | |
|  * CGX RX Preemption Status Register 2
 | |
|  */
 | |
| union cgxx_cmrx_rx_merge_stat2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_merge_stat2_s {
 | |
| 		u64 fa_ok_cnt                        : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_merge_stat2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT2(u64 a)
 | |
| {
 | |
| 	return 0x148 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_merge_stat3
 | |
|  *
 | |
|  * CGX RX Preemption Status Register 3
 | |
|  */
 | |
| union cgxx_cmrx_rx_merge_stat3 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_merge_stat3_s {
 | |
| 		u64 ff_cnt                           : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_merge_stat3_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT3(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT3(u64 a)
 | |
| {
 | |
| 	return 0x150 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_merge_stat4
 | |
|  *
 | |
|  * CGX RX Preemption Status Register 4
 | |
|  */
 | |
| union cgxx_cmrx_rx_merge_stat4 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_merge_stat4_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_merge_stat4_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT4(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_MERGE_STAT4(u64 a)
 | |
| {
 | |
| 	return 0x158 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_pause_drop_time
 | |
|  *
 | |
|  * CGX CMR Receive Pause Drop-Time Register
 | |
|  */
 | |
| union cgxx_cmrx_rx_pause_drop_time {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_pause_drop_time_s {
 | |
| 		u64 pause_time                       : 16;
 | |
| 		u64 pause_time_e                     : 16;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_pause_drop_time_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_PAUSE_DROP_TIME(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_PAUSE_DROP_TIME(u64 a)
 | |
| {
 | |
| 	return 0x68 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat0
 | |
|  *
 | |
|  * CGX Receive Status Register 0 These registers provide a count of
 | |
|  * received packets that meet the following conditions: * are not
 | |
|  * recognized as ERROR packets(any OPCODE). * are not recognized as PAUSE
 | |
|  * packets. * are not dropped due FIFO full status. * are not dropped due
 | |
|  * DMAC0 or STEERING0 filtering.  Internal: "This pseudo code represents
 | |
|  * the RX STAT0 through STAT8 accounting: \<pre\> If (errored)   incr
 | |
|  * RX_STAT8 else if (ctrl packet, i.e. Pause/PFC)   incr RX_STAT2,3 else
 | |
|  * if (fifo full drop)   incr RX_STAT6,7 else if (DMAC0/VLAN0 filter
 | |
|  * drop)   incr RX_STAT4,5 if not a filter+decision else   incr
 | |
|  * RX_STAT0,1 end \</pre\>"
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat0_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT0(u64 a)
 | |
| {
 | |
| 	return 0x70 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat1
 | |
|  *
 | |
|  * CGX Receive Status Register 1 These registers provide a count of
 | |
|  * octets of received packets.
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat1_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT1(u64 a)
 | |
| {
 | |
| 	return 0x78 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat2
 | |
|  *
 | |
|  * CGX Receive Status Register 2 These registers provide a count of
 | |
|  * received packets that meet the following conditions: * are not
 | |
|  * recognized as ERROR packets(any OPCODE). * are recognized as PAUSE
 | |
|  * packets.  Pause packets can be optionally dropped or forwarded based
 | |
|  * on
 | |
|  * CGX()_SMU()_RX_FRM_CTL[CTL_DRP]/CGX()_GMP_GMI_RX()_FRM_CTL[CTL_DRP].
 | |
|  * This count increments regardless of whether the packet is dropped.
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat2_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT2(u64 a)
 | |
| {
 | |
| 	return 0x80 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat3
 | |
|  *
 | |
|  * CGX Receive Status Register 3 These registers provide a count of
 | |
|  * octets of received PAUSE and control packets.
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat3 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat3_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat3_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT3(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT3(u64 a)
 | |
| {
 | |
| 	return 0x88 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat4
 | |
|  *
 | |
|  * CGX Receive Status Register 4 These registers provide a count of
 | |
|  * received packets that meet the following conditions: * are not
 | |
|  * recognized as ERROR packets(any OPCODE). * are not recognized as PAUSE
 | |
|  * packets. * are not dropped due FIFO full status. * are dropped due
 | |
|  * DMAC0 or STEERING0 filtering.  16B packets or smaller (20B in case of
 | |
|  * FCS strip) as the result of truncation or other means are not dropped
 | |
|  * by CGX (unless filter and decision is also asserted) and will never
 | |
|  * appear in this count. Should the MAC signal to the CMR that the packet
 | |
|  * be filtered upon decision before the end of packet, then STAT4 and
 | |
|  * STAT5 will not be updated.
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat4 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat4_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat4_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT4(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT4(u64 a)
 | |
| {
 | |
| 	return 0x90 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat5
 | |
|  *
 | |
|  * CGX Receive Status Register 5 These registers provide a count of
 | |
|  * octets of filtered DMAC0 or VLAN STEERING0 packets.
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat5 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat5_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat5_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT5(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT5(u64 a)
 | |
| {
 | |
| 	return 0x98 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat6
 | |
|  *
 | |
|  * CGX Receive Status Register 6 These registers provide a count of
 | |
|  * received packets that meet the following conditions: * are not
 | |
|  * recognized as ERROR packets(any OPCODE). * are not recognized as PAUSE
 | |
|  * packets. * are dropped due FIFO full status.  They do not count any
 | |
|  * packet that is truncated at the point of overflow and sent on to the
 | |
|  * NIX. The truncated packet will be marked with error and increment
 | |
|  * STAT8. These registers count all entire packets dropped by the FIFO
 | |
|  * for a given LMAC.
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat6 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat6_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat6_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT6(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT6(u64 a)
 | |
| {
 | |
| 	return 0xa0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat7
 | |
|  *
 | |
|  * CGX Receive Status Register 7 These registers provide a count of
 | |
|  * octets of received packets that were dropped due to a full receive
 | |
|  * FIFO.
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat7 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat7_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat7_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT7(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT7(u64 a)
 | |
| {
 | |
| 	return 0xa8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat8
 | |
|  *
 | |
|  * CGX Receive Status Register 8 These registers provide a count of
 | |
|  * received packets that meet the following conditions:  * are recognized
 | |
|  * as ERROR packets(any OPCODE).
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat8 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat8_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat8_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT8(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT8(u64 a)
 | |
| {
 | |
| 	return 0xb0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_rx_stat_pri#_xoff
 | |
|  *
 | |
|  * CGX CMR RX XON to XOFF transition Registers
 | |
|  */
 | |
| union cgxx_cmrx_rx_stat_prix_xoff {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_rx_stat_prix_xoff_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_rx_stat_prix_xoff_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_RX_STAT_PRIX_XOFF(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_RX_STAT_PRIX_XOFF(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x7c0 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_scratch#
 | |
|  *
 | |
|  * CGX CMR Scratch Registers
 | |
|  */
 | |
| union cgxx_cmrx_scratchx {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_scratchx_s {
 | |
| 		u64 scratch                          : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_scratchx_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_SCRATCHX(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_SCRATCHX(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x1050 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_sw_int
 | |
|  *
 | |
|  * CGX CMR Interrupt Register
 | |
|  */
 | |
| union cgxx_cmrx_sw_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_sw_int_s {
 | |
| 		u64 sw_set                           : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_sw_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_SW_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_SW_INT(u64 a)
 | |
| {
 | |
| 	return 0x180 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_sw_int_ena_w1c
 | |
|  *
 | |
|  * CGX CMR Interrupt Enable Clear Register This register clears interrupt
 | |
|  * enable bits.
 | |
|  */
 | |
| union cgxx_cmrx_sw_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_sw_int_ena_w1c_s {
 | |
| 		u64 sw_set                           : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_sw_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_SW_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_SW_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x190 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_sw_int_ena_w1s
 | |
|  *
 | |
|  * CGX CMR Interrupt Enable Set Register This register sets interrupt
 | |
|  * enable bits.
 | |
|  */
 | |
| union cgxx_cmrx_sw_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_sw_int_ena_w1s_s {
 | |
| 		u64 sw_set                           : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_sw_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_SW_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_SW_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x198 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_sw_int_w1s
 | |
|  *
 | |
|  * CGX CMR Interrupt Set Register This register sets interrupt bits.
 | |
|  */
 | |
| union cgxx_cmrx_sw_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_sw_int_w1s_s {
 | |
| 		u64 sw_set                           : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_sw_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_SW_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_SW_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x188 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_channel
 | |
|  *
 | |
|  * CGX CMR Transmit-Channels Registers
 | |
|  */
 | |
| union cgxx_cmrx_tx_channel {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_channel_s {
 | |
| 		u64 msk                              : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_channel_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_CHANNEL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_CHANNEL(u64 a)
 | |
| {
 | |
| 	return 0x600 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_fifo_len
 | |
|  *
 | |
|  * CGX CMR Transmit Fifo Length Registers
 | |
|  */
 | |
| union cgxx_cmrx_tx_fifo_len {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_fifo_len_s {
 | |
| 		u64 fifo_len                         : 14;
 | |
| 		u64 lmac_idle                        : 1;
 | |
| 		u64 fifo_e_len                       : 14;
 | |
| 		u64 lmac_e_idle                      : 1;
 | |
| 		u64 reserved_30_63                   : 34;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_fifo_len_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_FIFO_LEN(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_FIFO_LEN(u64 a)
 | |
| {
 | |
| 	return 0x618 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_hg2_status
 | |
|  *
 | |
|  * CGX CMR Transmit HiGig2 Status Registers
 | |
|  */
 | |
| union cgxx_cmrx_tx_hg2_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_hg2_status_s {
 | |
| 		u64 lgtim2go                         : 16;
 | |
| 		u64 xof                              : 16;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_hg2_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_HG2_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_HG2_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x610 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_merge_stat0
 | |
|  *
 | |
|  * CGX TX Preemption Status Register 0
 | |
|  */
 | |
| union cgxx_cmrx_tx_merge_stat0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_merge_stat0_s {
 | |
| 		u64 ff_cnt                           : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_merge_stat0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_MERGE_STAT0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_MERGE_STAT0(u64 a)
 | |
| {
 | |
| 	return 0x160 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_ovr_bp
 | |
|  *
 | |
|  * CGX CMR Transmit-Channels Backpressure Override Registers
 | |
|  */
 | |
| union cgxx_cmrx_tx_ovr_bp {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_ovr_bp_s {
 | |
| 		u64 tx_chan_bp                       : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_ovr_bp_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_OVR_BP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_OVR_BP(u64 a)
 | |
| {
 | |
| 	return 0x620 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat0
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 0
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat0_s {
 | |
| 		u64 xscol                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT0(u64 a)
 | |
| {
 | |
| 	return 0x700 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat1
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 1
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat1_s {
 | |
| 		u64 xsdef                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT1(u64 a)
 | |
| {
 | |
| 	return 0x708 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat10
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 10
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat10 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat10_s {
 | |
| 		u64 hist4                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat10_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT10(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT10(u64 a)
 | |
| {
 | |
| 	return 0x750 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat11
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 11
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat11 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat11_s {
 | |
| 		u64 hist5                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat11_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT11(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT11(u64 a)
 | |
| {
 | |
| 	return 0x758 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat12
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 12
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat12 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat12_s {
 | |
| 		u64 hist6                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat12_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT12(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT12(u64 a)
 | |
| {
 | |
| 	return 0x760 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat13
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 13
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat13 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat13_s {
 | |
| 		u64 hist7                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat13_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT13(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT13(u64 a)
 | |
| {
 | |
| 	return 0x768 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat14
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 14
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat14 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat14_s {
 | |
| 		u64 bcst                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat14_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT14(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT14(u64 a)
 | |
| {
 | |
| 	return 0x770 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat15
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 15
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat15 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat15_s {
 | |
| 		u64 mcst                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat15_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT15(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT15(u64 a)
 | |
| {
 | |
| 	return 0x778 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat16
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 16
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat16 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat16_s {
 | |
| 		u64 undflw                           : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat16_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT16(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT16(u64 a)
 | |
| {
 | |
| 	return 0x780 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat17
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 17
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat17 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat17_s {
 | |
| 		u64 ctl                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat17_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT17(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT17(u64 a)
 | |
| {
 | |
| 	return 0x788 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat2
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 2
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat2_s {
 | |
| 		u64 mcol                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT2(u64 a)
 | |
| {
 | |
| 	return 0x710 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat3
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 3
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat3 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat3_s {
 | |
| 		u64 scol                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat3_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT3(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT3(u64 a)
 | |
| {
 | |
| 	return 0x718 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat4
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 4
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat4 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat4_s {
 | |
| 		u64 octs                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat4_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT4(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT4(u64 a)
 | |
| {
 | |
| 	return 0x720 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat5
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 5
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat5 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat5_s {
 | |
| 		u64 pkts                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat5_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT5(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT5(u64 a)
 | |
| {
 | |
| 	return 0x728 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat6
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 6
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat6 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat6_s {
 | |
| 		u64 hist0                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat6_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT6(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT6(u64 a)
 | |
| {
 | |
| 	return 0x730 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat7
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 7
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat7 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat7_s {
 | |
| 		u64 hist1                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat7_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT7(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT7(u64 a)
 | |
| {
 | |
| 	return 0x738 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat8
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 8
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat8 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat8_s {
 | |
| 		u64 hist2                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat8_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT8(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT8(u64 a)
 | |
| {
 | |
| 	return 0x740 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat9
 | |
|  *
 | |
|  * CGX CMR Transmit Statistics Registers 9
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat9 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat9_s {
 | |
| 		u64 hist3                            : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat9_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT9(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT9(u64 a)
 | |
| {
 | |
| 	return 0x748 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr#_tx_stat_pri#_xoff
 | |
|  *
 | |
|  * CGX CMR TX XON to XOFF transition Registers
 | |
|  */
 | |
| union cgxx_cmrx_tx_stat_prix_xoff {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmrx_tx_stat_prix_xoff_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmrx_tx_stat_prix_xoff_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMRX_TX_STAT_PRIX_XOFF(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMRX_TX_STAT_PRIX_XOFF(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x800 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_bad
 | |
|  *
 | |
|  * CGX CMR Bad Registers
 | |
|  */
 | |
| union cgxx_cmr_bad {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_bad_s {
 | |
| 		u64 rxb_nxl                          : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_bad_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_BAD(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_BAD(void)
 | |
| {
 | |
| 	return 0x1020;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_chan_msk_and
 | |
|  *
 | |
|  * CGX CMR Backpressure Channel Mask AND Registers
 | |
|  */
 | |
| union cgxx_cmr_chan_msk_and {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_chan_msk_and_s {
 | |
| 		u64 msk_and                          : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_chan_msk_and_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_CHAN_MSK_AND(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_CHAN_MSK_AND(void)
 | |
| {
 | |
| 	return 0x110;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_chan_msk_or
 | |
|  *
 | |
|  * CGX Backpressure Channel Mask OR Registers
 | |
|  */
 | |
| union cgxx_cmr_chan_msk_or {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_chan_msk_or_s {
 | |
| 		u64 msk_or                           : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_chan_msk_or_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_CHAN_MSK_OR(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_CHAN_MSK_OR(void)
 | |
| {
 | |
| 	return 0x118;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_eco
 | |
|  *
 | |
|  * INTERNAL: CGX ECO Registers
 | |
|  */
 | |
| union cgxx_cmr_eco {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_eco_s {
 | |
| 		u64 eco_rw                           : 32;
 | |
| 		u64 eco_ro                           : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_eco_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_ECO(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_ECO(void)
 | |
| {
 | |
| 	return 0x1028;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_global_config
 | |
|  *
 | |
|  * CGX CMR Global Configuration Register These registers configure the
 | |
|  * global CMR, PCS, and MAC.
 | |
|  */
 | |
| union cgxx_cmr_global_config {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_global_config_s {
 | |
| 		u64 pmux_sds_sel                     : 1;
 | |
| 		u64 cgx_clk_enable                   : 1;
 | |
| 		u64 cmr_x2p_reset                    : 3;
 | |
| 		u64 interleave_mode                  : 1;
 | |
| 		u64 fcs_strip                        : 1;
 | |
| 		u64 ncsi_lmac_id                     : 2;
 | |
| 		u64 cmr_ncsi_drop                    : 1;
 | |
| 		u64 cmr_ncsi_reset                   : 1;
 | |
| 		u64 cmr_ncsi_tag_cnt                 : 13;
 | |
| 		u64 cmr_clken_ovrd                   : 1;
 | |
| 		u64 reserved_25_63                   : 39;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_global_config_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_GLOBAL_CONFIG(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_GLOBAL_CONFIG(void)
 | |
| {
 | |
| 	return 8;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_mem_int
 | |
|  *
 | |
|  * CGX CMR Memory Interrupt Register
 | |
|  */
 | |
| union cgxx_cmr_mem_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_mem_int_s {
 | |
| 		u64 gmp_in_overfl                    : 1;
 | |
| 		u64 smu_in_overfl                    : 1;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_mem_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_MEM_INT(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_MEM_INT(void)
 | |
| {
 | |
| 	return 0x10;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_mem_int_ena_w1c
 | |
|  *
 | |
|  * CGX CMR Memory Interrupt Enable Clear Register This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_cmr_mem_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_mem_int_ena_w1c_s {
 | |
| 		u64 gmp_in_overfl                    : 1;
 | |
| 		u64 smu_in_overfl                    : 1;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_mem_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_MEM_INT_ENA_W1C(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_MEM_INT_ENA_W1C(void)
 | |
| {
 | |
| 	return 0x20;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_mem_int_ena_w1s
 | |
|  *
 | |
|  * CGX CMR Memory Interrupt Enable Set Register This register sets
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_cmr_mem_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_mem_int_ena_w1s_s {
 | |
| 		u64 gmp_in_overfl                    : 1;
 | |
| 		u64 smu_in_overfl                    : 1;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_mem_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_MEM_INT_ENA_W1S(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_MEM_INT_ENA_W1S(void)
 | |
| {
 | |
| 	return 0x28;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_mem_int_w1s
 | |
|  *
 | |
|  * CGX CMR Memory Interrupt Set Register This register sets interrupt
 | |
|  * bits.
 | |
|  */
 | |
| union cgxx_cmr_mem_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_mem_int_w1s_s {
 | |
| 		u64 gmp_in_overfl                    : 1;
 | |
| 		u64 smu_in_overfl                    : 1;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_mem_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_MEM_INT_W1S(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_MEM_INT_W1S(void)
 | |
| {
 | |
| 	return 0x18;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_nic_nxc_adr
 | |
|  *
 | |
|  * CGX CMR NIC NXC Exception Registers
 | |
|  */
 | |
| union cgxx_cmr_nic_nxc_adr {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_nic_nxc_adr_s {
 | |
| 		u64 channel                          : 12;
 | |
| 		u64 lmac_id                          : 4;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_nic_nxc_adr_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_NIC_NXC_ADR(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_NIC_NXC_ADR(void)
 | |
| {
 | |
| 	return 0x1030;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_nix0_nxc_adr
 | |
|  *
 | |
|  * CGX CMR NIX0 NXC Exception Registers
 | |
|  */
 | |
| union cgxx_cmr_nix0_nxc_adr {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_nix0_nxc_adr_s {
 | |
| 		u64 channel                          : 12;
 | |
| 		u64 lmac_id                          : 4;
 | |
| 		u64 channel_e                        : 12;
 | |
| 		u64 lmac_e_id                        : 4;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_nix0_nxc_adr_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_NIX0_NXC_ADR(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_NIX0_NXC_ADR(void)
 | |
| {
 | |
| 	return 0x1038;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_nix1_nxc_adr
 | |
|  *
 | |
|  * CGX CMR NIX1 NXC Exception Registers
 | |
|  */
 | |
| union cgxx_cmr_nix1_nxc_adr {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_nix1_nxc_adr_s {
 | |
| 		u64 channel                          : 12;
 | |
| 		u64 lmac_id                          : 4;
 | |
| 		u64 channel_e                        : 12;
 | |
| 		u64 lmac_e_id                        : 4;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_nix1_nxc_adr_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_NIX1_NXC_ADR(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_NIX1_NXC_ADR(void)
 | |
| {
 | |
| 	return 0x1040;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_p2x#_count
 | |
|  *
 | |
|  * CGX P2X Activity Register
 | |
|  */
 | |
| union cgxx_cmr_p2xx_count {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_p2xx_count_s {
 | |
| 		u64 p2x_cnt                          : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_p2xx_count_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_P2XX_COUNT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_P2XX_COUNT(u64 a)
 | |
| {
 | |
| 	return 0x168 + 0x1000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_dmac#_cam0
 | |
|  *
 | |
|  * CGX CMR Receive CAM Registers These registers provide access to the 32
 | |
|  * DMAC CAM0 entries in CGX, for use by X2P/NIX bound traffic.
 | |
|  */
 | |
| union cgxx_cmr_rx_dmacx_cam0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_dmacx_cam0_s {
 | |
| 		u64 adr                              : 48;
 | |
| 		u64 en                               : 1;
 | |
| 		u64 id                               : 2;
 | |
| 		u64 reserved_51_63                   : 13;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_dmacx_cam0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_DMACX_CAM0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_DMACX_CAM0(u64 a)
 | |
| {
 | |
| 	return 0x200 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_dmac#_cam1
 | |
|  *
 | |
|  * CGX CMR Receive CAM Registers These registers provide access to the 32
 | |
|  * DMAC CAM entries in CGX for use by NCSI bound traffic. See
 | |
|  * CGX()_CMR_GLOBAL_CONFIG[NCSI_LMAC_ID] and CGX()_CMR_RX_STEERING1()
 | |
|  * registers.
 | |
|  */
 | |
| union cgxx_cmr_rx_dmacx_cam1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_dmacx_cam1_s {
 | |
| 		u64 adr                              : 48;
 | |
| 		u64 en                               : 1;
 | |
| 		u64 id                               : 2;
 | |
| 		u64 reserved_51_63                   : 13;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_dmacx_cam1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_DMACX_CAM1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_DMACX_CAM1(u64 a)
 | |
| {
 | |
| 	return 0x400 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_lmacs
 | |
|  *
 | |
|  * CGX CMR Receive Logical MACs Registers
 | |
|  */
 | |
| union cgxx_cmr_rx_lmacs {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_lmacs_s {
 | |
| 		u64 lmacs                            : 3;
 | |
| 		u64 reserved_3_63                    : 61;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_lmacs_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_LMACS(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_LMACS(void)
 | |
| {
 | |
| 	return 0x128;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_ovr_bp
 | |
|  *
 | |
|  * CGX CMR Receive-Ports Backpressure Override Registers Per-LMAC
 | |
|  * backpressure override register. For SMU, CGX()_CMR_RX_OVR_BP[EN]\<0\>
 | |
|  * must be set to one and CGX()_CMR_RX_OVR_BP[BP]\<0\> must be cleared to
 | |
|  * zero (to forcibly disable hardware-automatic 802.3 PAUSE packet
 | |
|  * generation) with the HiGig2 Protocol when
 | |
|  * CGX()_SMU()_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is indicated
 | |
|  * by CGX()_SMU()_TX_CTL[HG_EN]=1 and CGX()_SMU()_RX_UDD_SKP[LEN]=16).
 | |
|  * Hardware can only auto-generate backpressure through HiGig2 messages
 | |
|  * (optionally, when CGX()_SMU()_HG2_CONTROL[HG2TX_EN]=1) with the HiGig2
 | |
|  * protocol.
 | |
|  */
 | |
| union cgxx_cmr_rx_ovr_bp {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_ovr_bp_s {
 | |
| 		u64 ign_fifo_bp                      : 4;
 | |
| 		u64 bp                               : 4;
 | |
| 		u64 en                               : 4;
 | |
| 		u64 reserved_12_63                   : 52;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_ovr_bp_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_OVR_BP(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_OVR_BP(void)
 | |
| {
 | |
| 	return 0x130;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_stat10
 | |
|  *
 | |
|  * CGX Receive Status Register 10 These registers provide a count of
 | |
|  * octets of filtered DMAC1 or VLAN STEERING1 packets.
 | |
|  */
 | |
| union cgxx_cmr_rx_stat10 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_stat10_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_stat10_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STAT10(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STAT10(void)
 | |
| {
 | |
| 	return 0xc0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_stat11
 | |
|  *
 | |
|  * CGX Receive Status Register 11 This registers provides a count of
 | |
|  * packets dropped at the NCSI interface. This includes drops due to
 | |
|  * CGX()_CMR_GLOBAL_CONFIG[CMR_NCSI_DROP] or NCSI FIFO full. The count of
 | |
|  * dropped NCSI packets is not accounted for in any other stats
 | |
|  * registers.
 | |
|  */
 | |
| union cgxx_cmr_rx_stat11 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_stat11_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_stat11_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STAT11(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STAT11(void)
 | |
| {
 | |
| 	return 0xc8;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_stat12
 | |
|  *
 | |
|  * CGX Receive Status Register 12 This register provide a count of octets
 | |
|  * of dropped at the NCSI interface.
 | |
|  */
 | |
| union cgxx_cmr_rx_stat12 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_stat12_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_stat12_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STAT12(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STAT12(void)
 | |
| {
 | |
| 	return 0xd0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_stat9
 | |
|  *
 | |
|  * CGX Receive Status Register 9 These registers provide a count of all
 | |
|  * received packets that were dropped by the DMAC1 or VLAN STEERING1
 | |
|  * filter. Packets that are dropped by the DMAC1 or VLAN STEERING1
 | |
|  * filters are counted here regardless of whether they were ERR packets,
 | |
|  * but does not include those reported in CGX()_CMR()_RX_STAT6. 16B
 | |
|  * packets or smaller (20B in case of FCS strip) as the result of
 | |
|  * truncation or other means are not dropped by CGX (unless filter and
 | |
|  * decision is also asserted) and will never appear in this count. Should
 | |
|  * the MAC signal to the CMR that the packet be filtered upon decision
 | |
|  * before the end of packet, then STAT9 and STAT10 will not be updated.
 | |
|  */
 | |
| union cgxx_cmr_rx_stat9 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_stat9_s {
 | |
| 		u64 cnt                              : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_stat9_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STAT9(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STAT9(void)
 | |
| {
 | |
| 	return 0xb8;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_steering0#
 | |
|  *
 | |
|  * CGX CMR Receive Steering0 Registers These registers, along with
 | |
|  * CGX()_CMR_RX_STEERING_VETYPE0(), provide eight filters for identifying
 | |
|  * and steering receive traffic to X2P/NIX. Received packets are only
 | |
|  * passed to X2P/NIX when the DMAC0 filter result is ACCEPT and STEERING0
 | |
|  * filter result is PASS. See also CGX()_CMR()_RX_DMAC_CTL0.  Internal:
 | |
|  * "* ALGORITHM \<pre\> rx_steering(uint48 pkt_dmac, uint16 pkt_etype,
 | |
|  * uint16 pkt_vlan_id) {    for (int i = 0; i \< 8; i++) {       steer =
 | |
|  * CGX()_CMR_RX_STEERING0(i);       vetype =
 | |
|  * CGX()_CMR_RX_STEERING_VETYPE0(i);       if (steer[MCST_EN] ||
 | |
|  * steer[DMAC_EN] || vetype[VLAN_EN] || vetype[VLAN_TAG_EN]) {
 | |
|  * // Filter is enabled.          if (   (!steer[MCST_EN] ||
 | |
|  * is_mcst(pkt_dmac))              && (!steer[DMAC_EN] || pkt_dmac ==
 | |
|  * steer[DMAC])              && (!vetype[VLAN_EN] || pkt_vlan_id ==
 | |
|  * vetype[VLAN_ID])              && (!vetype[VLAN_TAG_EN] || pkt_etype ==
 | |
|  * vetype[VLAN_ETYPE]) )          {             // Filter match (all
 | |
|  * enabled matching criteria are met).             return steer[PASS];
 | |
|  * }       }    }    return CGX()_CMR_RX_STEERING_DEFAULT0[PASS]; // No
 | |
|  * match } \</pre\>"
 | |
|  */
 | |
| union cgxx_cmr_rx_steering0x {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_steering0x_s {
 | |
| 		u64 dmac                             : 48;
 | |
| 		u64 dmac_en                          : 1;
 | |
| 		u64 mcst_en                          : 1;
 | |
| 		u64 pass                             : 1;
 | |
| 		u64 reserved_51_63                   : 13;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_steering0x_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STEERING0X(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STEERING0X(u64 a)
 | |
| {
 | |
| 	return 0x300 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_steering1#
 | |
|  *
 | |
|  * CGX CMR Receive Steering1 Registers These registers, along with
 | |
|  * CGX()_CMR_RX_STEERING_VETYPE1(), provide eight filters for identifying
 | |
|  * and steering NCSI receive traffic. Received packets are only passed to
 | |
|  * NCSI when the DMAC1 filter result is ACCEPT and STEERING1 filter
 | |
|  * result is PASS. See also CGX()_CMR_RX_DMAC()_CAM1 and
 | |
|  * CGX()_CMR_RX_STEERING1(). For use with the LMAC associated with NCSI.
 | |
|  * See CGX()_CMR_GLOBAL_CONFIG[NCSI_LMAC_ID].  Internal: ALGORITHM: See
 | |
|  * CGX()_CMR_RX_STEERING0().
 | |
|  */
 | |
| union cgxx_cmr_rx_steering1x {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_steering1x_s {
 | |
| 		u64 dmac                             : 48;
 | |
| 		u64 dmac_en                          : 1;
 | |
| 		u64 mcst_en                          : 1;
 | |
| 		u64 pass                             : 1;
 | |
| 		u64 reserved_51_63                   : 13;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_steering1x_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STEERING1X(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STEERING1X(u64 a)
 | |
| {
 | |
| 	return 0x500 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_steering_default0
 | |
|  *
 | |
|  * CGX CMR Receive Steering Default0 Destination Register For determining
 | |
|  * destination of traffic that does not meet matching algorithm described
 | |
|  * in registers CGX()_CMR_RX_STEERING0() and
 | |
|  * CGX()_CMR_RX_STEERING_VETYPE0(). All 16B packets or smaller (20B in
 | |
|  * case of FCS strip) as the result of truncation will steer to default
 | |
|  * destination
 | |
|  */
 | |
| union cgxx_cmr_rx_steering_default0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_steering_default0_s {
 | |
| 		u64 pass                             : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_steering_default0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STEERING_DEFAULT0(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STEERING_DEFAULT0(void)
 | |
| {
 | |
| 	return 0x3f0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_steering_default1
 | |
|  *
 | |
|  * CGX CMR Receive Steering Default1 Destination Register For use with
 | |
|  * the lmac_id associated with NCSI. See
 | |
|  * CGX()_CMR_GLOBAL_CONFIG[NCSI_LMAC_ID]. For determining destination of
 | |
|  * traffic that does not meet matching algorithm described in registers
 | |
|  * CGX()_CMR_RX_STEERING1() and CGX()_CMR_RX_STEERING_VETYPE1(). All 16B
 | |
|  * packets or smaller (20B in case of FCS strip) as the result of
 | |
|  * truncation will steer to default destination
 | |
|  */
 | |
| union cgxx_cmr_rx_steering_default1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_steering_default1_s {
 | |
| 		u64 pass                             : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_steering_default1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STEERING_DEFAULT1(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STEERING_DEFAULT1(void)
 | |
| {
 | |
| 	return 0x5e0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_steering_vetype0#
 | |
|  *
 | |
|  * CGX CMR Receive VLAN Ethertype1 Register These registers, along with
 | |
|  * CGX()_CMR_RX_STEERING0(), provide eight filters for identifying and
 | |
|  * steering X2P/NIX receive traffic.
 | |
|  */
 | |
| union cgxx_cmr_rx_steering_vetype0x {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_steering_vetype0x_s {
 | |
| 		u64 vlan_etype                       : 16;
 | |
| 		u64 vlan_tag_en                      : 1;
 | |
| 		u64 vlan_id                          : 12;
 | |
| 		u64 vlan_en                          : 1;
 | |
| 		u64 reserved_30_63                   : 34;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_steering_vetype0x_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STEERING_VETYPE0X(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STEERING_VETYPE0X(u64 a)
 | |
| {
 | |
| 	return 0x380 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_rx_steering_vetype1#
 | |
|  *
 | |
|  * CGX CMR Receive VLAN Ethertype1 Register For use with the lmac_id
 | |
|  * associated with NCSI. See CGX()_CMR_GLOBAL_CONFIG[NCSI_LMAC_ID]. These
 | |
|  * registers, along with CGX()_CMR_RX_STEERING1(), provide eight filters
 | |
|  * for identifying and steering NCSI receive traffic.
 | |
|  */
 | |
| union cgxx_cmr_rx_steering_vetype1x {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_rx_steering_vetype1x_s {
 | |
| 		u64 vlan_etype                       : 16;
 | |
| 		u64 vlan_tag_en                      : 1;
 | |
| 		u64 vlan_id                          : 12;
 | |
| 		u64 vlan_en                          : 1;
 | |
| 		u64 reserved_30_63                   : 34;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_rx_steering_vetype1x_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_RX_STEERING_VETYPE1X(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_RX_STEERING_VETYPE1X(u64 a)
 | |
| {
 | |
| 	return 0x580 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_tx_lmacs
 | |
|  *
 | |
|  * CGX CMR Transmit Logical MACs Registers This register sets the number
 | |
|  * of LMACs allowed on the TX interface. The value is important for
 | |
|  * defining the partitioning of the transmit FIFO.
 | |
|  */
 | |
| union cgxx_cmr_tx_lmacs {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_tx_lmacs_s {
 | |
| 		u64 lmacs                            : 3;
 | |
| 		u64 reserved_3_63                    : 61;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_tx_lmacs_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_TX_LMACS(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_TX_LMACS(void)
 | |
| {
 | |
| 	return 0x1000;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_cmr_x2p#_count
 | |
|  *
 | |
|  * CGX X2P Activity Register
 | |
|  */
 | |
| union cgxx_cmr_x2px_count {
 | |
| 	u64 u;
 | |
| 	struct cgxx_cmr_x2px_count_s {
 | |
| 		u64 x2p_cnt                          : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_cmr_x2px_count_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CMR_X2PX_COUNT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CMR_X2PX_COUNT(u64 a)
 | |
| {
 | |
| 	return 0x170 + 0x1000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_const
 | |
|  *
 | |
|  * CGX CONST Registers This register contains constants for software
 | |
|  * discovery.
 | |
|  */
 | |
| union cgxx_const {
 | |
| 	u64 u;
 | |
| 	struct cgxx_const_s {
 | |
| 		u64 tx_fifosz                        : 24;
 | |
| 		u64 lmacs                            : 8;
 | |
| 		u64 rx_fifosz                        : 24;
 | |
| 		u64 reserved_56_63                   : 8;
 | |
| 	} s;
 | |
| 	/* struct cgxx_const_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CONST(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CONST(void)
 | |
| {
 | |
| 	return 0x2000;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_const1
 | |
|  *
 | |
|  * CGX CONST1 Registers This register contains constants for software
 | |
|  * discovery.
 | |
|  */
 | |
| union cgxx_const1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_const1_s {
 | |
| 		u64 types                            : 11;
 | |
| 		u64 res_types                        : 21;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_const1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_CONST1(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_CONST1(void)
 | |
| {
 | |
| 	return 0x2008;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_rx_wol_ctrl0
 | |
|  *
 | |
|  * CGX GMP GMI RX Wake-on-LAN Control 0 Registers
 | |
|  */
 | |
| union cgxx_gmp_gmix_rx_wol_ctrl0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_rx_wol_ctrl0_s {
 | |
| 		u64 dmac                             : 48;
 | |
| 		u64 pswd_len                         : 4;
 | |
| 		u64 reserved_52_63                   : 12;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmix_rx_wol_ctrl0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_RX_WOL_CTRL0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_RX_WOL_CTRL0(u64 a)
 | |
| {
 | |
| 	return 0x38a00 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_rx_wol_ctrl1
 | |
|  *
 | |
|  * CGX GMP GMI RX Wake-on-LAN Control 1 Registers
 | |
|  */
 | |
| union cgxx_gmp_gmix_rx_wol_ctrl1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_rx_wol_ctrl1_s {
 | |
| 		u64 pswd                             : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmix_rx_wol_ctrl1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_RX_WOL_CTRL1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_RX_WOL_CTRL1(u64 a)
 | |
| {
 | |
| 	return 0x38a08 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_tx_eee
 | |
|  *
 | |
|  * INTERNAL: CGX GMP GMI TX EEE Configure Registers  Reserved. Internal:
 | |
|  * These registers control when GMP GMI TX requests to enter or exist
 | |
|  * LPI. Those registers take effect only when EEE is supported and
 | |
|  * enabled for a given LMAC.
 | |
|  */
 | |
| union cgxx_gmp_gmix_tx_eee {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_tx_eee_s {
 | |
| 		u64 idle_thresh                      : 28;
 | |
| 		u64 reserved_28                      : 1;
 | |
| 		u64 force_lpi                        : 1;
 | |
| 		u64 wakeup                           : 1;
 | |
| 		u64 auto_lpi                         : 1;
 | |
| 		u64 idle_cnt                         : 28;
 | |
| 		u64 tx_lpi                           : 1;
 | |
| 		u64 tx_lpi_wait                      : 1;
 | |
| 		u64 sync_status_lpi_enable           : 1;
 | |
| 		u64 reserved_63                      : 1;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmix_tx_eee_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_TX_EEE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_TX_EEE(u64 a)
 | |
| {
 | |
| 	return 0x38800 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_tx_eee_cfg1
 | |
|  *
 | |
|  * INTERNAL: CGX GMP GMI TX EEE Configure More Configuration Registers
 | |
|  * Reserved. Internal: Controls the GMP exiting of LPI and starting to
 | |
|  * send data.
 | |
|  */
 | |
| union cgxx_gmp_gmix_tx_eee_cfg1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_tx_eee_cfg1_s {
 | |
| 		u64 wake2data_time                   : 24;
 | |
| 		u64 reserved_24_35                   : 12;
 | |
| 		u64 tx_eee_enable                    : 1;
 | |
| 		u64 reserved_37_39                   : 3;
 | |
| 		u64 sync2lpi_time                    : 21;
 | |
| 		u64 reserved_61_63                   : 3;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmix_tx_eee_cfg1_cn {
 | |
| 		u64 wake2data_time                   : 24;
 | |
| 		u64 reserved_24_31                   : 8;
 | |
| 		u64 reserved_32_35                   : 4;
 | |
| 		u64 tx_eee_enable                    : 1;
 | |
| 		u64 reserved_37_39                   : 3;
 | |
| 		u64 sync2lpi_time                    : 21;
 | |
| 		u64 reserved_61_63                   : 3;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_TX_EEE_CFG1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_TX_EEE_CFG1(u64 a)
 | |
| {
 | |
| 	return 0x38808 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_wol_int
 | |
|  *
 | |
|  * CGX GMP GMI RX WOL Interrupt Registers These registers allow WOL
 | |
|  * interrupts to be sent to the control processor.
 | |
|  */
 | |
| union cgxx_gmp_gmix_wol_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_wol_int_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmix_wol_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT(u64 a)
 | |
| {
 | |
| 	return 0x38a80 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_wol_int_ena_w1c
 | |
|  *
 | |
|  * CGX GMP GMI RX WOL Interrupt Enable Clear Registers This register
 | |
|  * clears interrupt enable bits.
 | |
|  */
 | |
| union cgxx_gmp_gmix_wol_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_wol_int_ena_w1c_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmix_wol_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x38a90 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_wol_int_ena_w1s
 | |
|  *
 | |
|  * CGX GMP GMI RX WOL Interrupt Enable Set Registers This register sets
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_gmp_gmix_wol_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_wol_int_ena_w1s_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmix_wol_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x38a98 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi#_wol_int_w1s
 | |
|  *
 | |
|  * CGX GMP GMI RX WOL Interrupt Set Registers This register sets
 | |
|  * interrupt bits.
 | |
|  */
 | |
| union cgxx_gmp_gmix_wol_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmix_wol_int_w1s_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmix_wol_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMIX_WOL_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x38a88 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_prt#_cfg
 | |
|  *
 | |
|  * CGX GMP GMI LMAC Configuration Registers This register controls the
 | |
|  * configuration of the LMAC.
 | |
|  */
 | |
| union cgxx_gmp_gmi_prtx_cfg {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_prtx_cfg_s {
 | |
| 		u64 reserved_0                       : 1;
 | |
| 		u64 speed                            : 1;
 | |
| 		u64 duplex                           : 1;
 | |
| 		u64 slottime                         : 1;
 | |
| 		u64 reserved_4_7                     : 4;
 | |
| 		u64 speed_msb                        : 1;
 | |
| 		u64 reserved_9_11                    : 3;
 | |
| 		u64 rx_idle                          : 1;
 | |
| 		u64 tx_idle                          : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_prtx_cfg_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_PRTX_CFG(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_PRTX_CFG(u64 a)
 | |
| {
 | |
| 	return 0x38020 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_decision
 | |
|  *
 | |
|  * CGX GMP Packet-Decision Registers This register specifies the byte
 | |
|  * count used to determine when to accept or to filter a packet. As each
 | |
|  * byte in a packet is received by GMI, the L2 byte count is compared
 | |
|  * against [CNT]. In normal operation, the L2 header begins after the
 | |
|  * PREAMBLE + SFD (CGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] = 1) and any
 | |
|  * optional UDD skip data (CGX()_GMP_GMI_RX()_UDD_SKP[LEN]).  Internal:
 | |
|  * Notes: As each byte in a packet is received by GMI, the L2 byte count
 | |
|  * is compared against the [CNT].  The L2 byte count is the number of
 | |
|  * bytes from the beginning of the L2 header (DMAC).  In normal
 | |
|  * operation, the L2 header begins after the PREAMBLE+SFD
 | |
|  * (CGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK]=1) and any optional UDD skip data
 | |
|  * (CGX()_GMP_GMI_RX()_UDD_SKP[LEN]). When
 | |
|  * CGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are
 | |
|  * prepended to the packet and would require UDD skip length to account
 | |
|  * for them.  Full Duplex: _   L2 Size \<  [CNT] - Accept packet. No
 | |
|  * filtering is applied. _   L2 Size \>= [CNT] - Apply filter. Accept
 | |
|  * packet based on PAUSE packet filter.  Half Duplex: _   L2 Size \<
 | |
|  * [CNT] - Drop packet. Packet is unconditionally dropped. _   L2 Size
 | |
|  * \>= [CNT] - Accept packet.  where L2_size = MAX(0, total_packet_size -
 | |
|  * CGX()_GMP_GMI_RX()_UDD_SKP[LEN] -
 | |
|  * ((CGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK]==1)*8)).
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_decision {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_decision_s {
 | |
| 		u64 cnt                              : 5;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_rxx_decision_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_DECISION(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_DECISION(u64 a)
 | |
| {
 | |
| 	return 0x38040 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_frm_chk
 | |
|  *
 | |
|  * CGX GMP Frame Check Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_frm_chk {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_frm_chk_s {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 reserved_2                       : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 reserved_5_6                     : 2;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_rxx_frm_chk_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_FRM_CHK(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_FRM_CHK(u64 a)
 | |
| {
 | |
| 	return 0x38030 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_frm_ctl
 | |
|  *
 | |
|  * CGX GMP Frame Control Registers This register controls the handling of
 | |
|  * the frames. The [CTL_BCK] and [CTL_DRP] bits control how the hardware
 | |
|  * handles incoming PAUSE packets. The most common modes of operation: _
 | |
|  * [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything. _ [CTL_BCK]
 | |
|  * = 0, [CTL_DRP] = 0: software sees all PAUSE frames. _ [CTL_BCK] = 0,
 | |
|  * [CTL_DRP] = 1: all PAUSE frames are completely ignored.  These control
 | |
|  * bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in half-duplex
 | |
|  * mode. Since PAUSE packets only apply to full duplex operation, any
 | |
|  * PAUSE packet would constitute an exception which should be handled by
 | |
|  * the processing cores. PAUSE packets should not be forwarded.
 | |
|  * Internal: Notes: [PRE_STRP]: When [PRE_CHK] is set (indicating that
 | |
|  * the PREAMBLE will be sent), [PRE_STRP] determines if the PREAMBLE+SFD
 | |
|  * bytes are thrown away or sent to the Octane core as part of the
 | |
|  * packet. In either mode, the PREAMBLE+SFD bytes are not counted toward
 | |
|  * the packet size when checking against the MIN and MAX bounds.
 | |
|  * Furthermore, the bytes are skipped when locating the start of the L2
 | |
|  * header for DMAC and Control frame recognition.
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_frm_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_frm_ctl_s {
 | |
| 		u64 pre_chk                          : 1;
 | |
| 		u64 pre_strp                         : 1;
 | |
| 		u64 ctl_drp                          : 1;
 | |
| 		u64 ctl_bck                          : 1;
 | |
| 		u64 ctl_mcst                         : 1;
 | |
| 		u64 ctl_smac                         : 1;
 | |
| 		u64 pre_free                         : 1;
 | |
| 		u64 reserved_7_8                     : 2;
 | |
| 		u64 pre_align                        : 1;
 | |
| 		u64 null_dis                         : 1;
 | |
| 		u64 reserved_11                      : 1;
 | |
| 		u64 ptp_mode                         : 1;
 | |
| 		u64 rx_fc_type                       : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_rxx_frm_ctl_cn {
 | |
| 		u64 pre_chk                          : 1;
 | |
| 		u64 pre_strp                         : 1;
 | |
| 		u64 ctl_drp                          : 1;
 | |
| 		u64 ctl_bck                          : 1;
 | |
| 		u64 ctl_mcst                         : 1;
 | |
| 		u64 ctl_smac                         : 1;
 | |
| 		u64 pre_free                         : 1;
 | |
| 		u64 reserved_7                       : 1;
 | |
| 		u64 reserved_8                       : 1;
 | |
| 		u64 pre_align                        : 1;
 | |
| 		u64 null_dis                         : 1;
 | |
| 		u64 reserved_11                      : 1;
 | |
| 		u64 ptp_mode                         : 1;
 | |
| 		u64 rx_fc_type                       : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_FRM_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_FRM_CTL(u64 a)
 | |
| {
 | |
| 	return 0x38028 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_ifg
 | |
|  *
 | |
|  * CGX GMI Minimum Interframe-Gap Cycles Registers This register
 | |
|  * specifies the minimum number of interframe-gap (IFG) cycles between
 | |
|  * packets.
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_ifg {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_ifg_s {
 | |
| 		u64 ifg                              : 4;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_rxx_ifg_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_IFG(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_IFG(u64 a)
 | |
| {
 | |
| 	return 0x38058 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_int
 | |
|  *
 | |
|  * CGX GMP GMI RX Interrupt Registers These registers allow interrupts to
 | |
|  * be sent to the control processor. * Exception conditions \<10:0\> can
 | |
|  * also set the rcv/opcode in the received packet's work-queue entry.
 | |
|  * CGX()_GMP_GMI_RX()_FRM_CHK provides a bit mask for configuring which
 | |
|  * conditions set the error. In half duplex operation, the expectation is
 | |
|  * that collisions will appear as either MINERR or CAREXT errors.
 | |
|  * Internal: Notes: (1) exception conditions 10:0 can also set the
 | |
|  * rcv/opcode in the received packet's workQ entry.  The
 | |
|  * CGX()_GMP_GMI_RX()_FRM_CHK register provides a bit mask for
 | |
|  * configuring which conditions set the error.  (2) in half duplex
 | |
|  * operation, the expectation is that collisions will appear as either
 | |
|  * MINERR o r CAREXT errors.  (3) JABBER An RX jabber error indicates
 | |
|  * that a packet was received which is longer than the maximum allowed
 | |
|  * packet as defined by the system.  GMI will truncate the packet at the
 | |
|  * JABBER count. Failure to do so could lead to system instabilty.  (4)
 | |
|  * NIBERR This error is illegal at 1000Mbs speeds
 | |
|  * (CGX()_GMP_GMI_PRT()_CFG[SPEED]==0) and will never assert.  (5) MINERR
 | |
|  * total frame DA+SA+TL+DATA+PAD+FCS \< 64  (6) ALNERR Indicates that the
 | |
|  * packet received was not an integer number of bytes.  If FCS checking
 | |
|  * is enabled, ALNERR will only assert if the FCS is bad.  If FCS
 | |
|  * checking is disabled, ALNERR will assert in all non-integer frame
 | |
|  * cases.  (7) Collisions Collisions can only occur in half-duplex mode.
 | |
|  * A collision is assumed by the receiver when the slottime
 | |
|  * (CGX()_GMP_GMI_PRT()_CFG[SLOTTIME]) is not satisfied.  In 10/100 mode,
 | |
|  * this will result in a frame \< SLOTTIME.  In 1000 mode, it could
 | |
|  * result either in frame \< SLOTTIME or a carrier extend error with the
 | |
|  * SLOTTIME.  These conditions are visible by... . transfer ended before
 | |
|  * slottime COLDET . carrier extend error           CAREXT  (A) LENERR
 | |
|  * Length errors occur when the received packet does not match the length
 | |
|  * field.  LENERR is only checked for packets between 64 and 1500 bytes.
 | |
|  * For untagged frames, the length must exact match.  For tagged frames
 | |
|  * the length or length+4 must match.  (B) PCTERR checks that the frame
 | |
|  * begins with a valid PREAMBLE sequence. Does not check the number of
 | |
|  * PREAMBLE cycles.  (C) OVRERR *DON'T PUT IN HRM* OVRERR is an
 | |
|  * architectural assertion check internal to GMI to make sure no
 | |
|  * assumption was violated.  In a correctly operating system, this
 | |
|  * interrupt can never fire. GMI has an internal arbiter which selects
 | |
|  * which of four ports to buffer in the main RX FIFO.  If we normally
 | |
|  * buffer eight bytes, then each port will typically push a tick every
 | |
|  * eight cycles if the packet interface is going as fast as possible.  If
 | |
|  * there are four ports, they push every two cycles.  So that's the
 | |
|  * assumption.  That the inbound module will always be able to consume
 | |
|  * the tick before another is produced.  If that doesn't happen that's
 | |
|  * when OVRERR will assert."
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_s {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_63                   : 52;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_cn {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_15                   : 4;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT(u64 a)
 | |
| {
 | |
| 	return 0x38000 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_int_ena_w1c
 | |
|  *
 | |
|  * CGX GMP GMI RX Interrupt Enable Clear Registers This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_ena_w1c_s {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_63                   : 52;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_ena_w1c_cn {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_15                   : 4;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x38010 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_int_ena_w1s
 | |
|  *
 | |
|  * CGX GMP GMI RX Interrupt Enable Set Registers This register sets
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_ena_w1s_s {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_63                   : 52;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_ena_w1s_cn {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_15                   : 4;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x38018 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_int_w1s
 | |
|  *
 | |
|  * CGX GMP GMI RX Interrupt Set Registers This register sets interrupt
 | |
|  * bits.
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_w1s_s {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_63                   : 52;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_rxx_int_w1s_cn {
 | |
| 		u64 minerr                           : 1;
 | |
| 		u64 carext                           : 1;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 ovrerr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 falerr                           : 1;
 | |
| 		u64 coldet                           : 1;
 | |
| 		u64 ifgerr                           : 1;
 | |
| 		u64 reserved_12_15                   : 4;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x38008 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_jabber
 | |
|  *
 | |
|  * CGX GMP Maximum Packet-Size Registers This register specifies the
 | |
|  * maximum size for packets, beyond which the GMI truncates.
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_jabber {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_jabber_s {
 | |
| 		u64 cnt                              : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_rxx_jabber_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_JABBER(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_JABBER(u64 a)
 | |
| {
 | |
| 	return 0x38038 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_rx#_udd_skp
 | |
|  *
 | |
|  * CGX GMP GMI User-Defined Data Skip Registers This register specifies
 | |
|  * the amount of user-defined data (UDD) added before the start of the
 | |
|  * L2C data.  Internal: Notes: (1) The skip bytes are part of the packet
 | |
|  * and will be handled by NIX.  (2) The system can determine if the UDD
 | |
|  * bytes are included in the FCS check by using the FCSSEL field - if the
 | |
|  * FCS check is enabled.  (3) Assume that the preamble/sfd is always at
 | |
|  * the start of the frame - even before UDD bytes.  In most cases, there
 | |
|  * will be no preamble in these cases since it will be packet interface
 | |
|  * in direct communication to another packet interface (MAC to MAC)
 | |
|  * without a PHY involved.  (4) We can still do address filtering and
 | |
|  * control packet filtering is the user desires.  (5)
 | |
|  * CGX()_GMP_GMI_RX()_UDD_SKP[LEN] must be 0 in half-duplex operation
 | |
|  * unless CGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] is clear.  If
 | |
|  * CGX()_GMP_GMI_RX()_FRM_CTL[PRE_CHK] is clear, then
 | |
|  * CGX()_GMP_GMI_RX()_UDD_SKP[LEN] will normally be 8.  (6) In all cases,
 | |
|  * the UDD bytes will be sent down the packet interface as part of the
 | |
|  * packet.  The UDD bytes are never stripped from the actual packet.
 | |
|  */
 | |
| union cgxx_gmp_gmi_rxx_udd_skp {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_rxx_udd_skp_s {
 | |
| 		u64 len                              : 7;
 | |
| 		u64 reserved_7                       : 1;
 | |
| 		u64 fcssel                           : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_rxx_udd_skp_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_RXX_UDD_SKP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_RXX_UDD_SKP(u64 a)
 | |
| {
 | |
| 	return 0x38048 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_smac#
 | |
|  *
 | |
|  * CGX GMI SMAC Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_smacx {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_smacx_s {
 | |
| 		u64 smac                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_smacx_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_SMACX(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_SMACX(u64 a)
 | |
| {
 | |
| 	return 0x38230 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_append
 | |
|  *
 | |
|  * CGX GMI TX Append Control Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_append {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_append_s {
 | |
| 		u64 preamble                         : 1;
 | |
| 		u64 pad                              : 1;
 | |
| 		u64 fcs                              : 1;
 | |
| 		u64 force_fcs                        : 1;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_append_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_APPEND(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_APPEND(u64 a)
 | |
| {
 | |
| 	return 0x38218 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_burst
 | |
|  *
 | |
|  * CGX GMI TX Burst-Counter Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_burst {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_burst_s {
 | |
| 		u64 burst                            : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_burst_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_BURST(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_BURST(u64 a)
 | |
| {
 | |
| 	return 0x38228 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_ctl
 | |
|  *
 | |
|  * CGX GMI Transmit Control Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_ctl_s {
 | |
| 		u64 xscol_en                         : 1;
 | |
| 		u64 xsdef_en                         : 1;
 | |
| 		u64 tx_fc_type                       : 1;
 | |
| 		u64 link_drain                       : 1;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_CTL(u64 a)
 | |
| {
 | |
| 	return 0x38270 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_int
 | |
|  *
 | |
|  * CGX GMI TX Interrupt Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_int_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_txx_int_cn {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_7                     : 3;
 | |
| 		u64 reserved_8                       : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT(u64 a)
 | |
| {
 | |
| 	return 0x38500 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_int_ena_w1c
 | |
|  *
 | |
|  * CGX GMI TX Interrupt Enable Clear Registers This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_int_ena_w1c_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_txx_int_ena_w1c_cn {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_7                     : 3;
 | |
| 		u64 reserved_8                       : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x38510 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_int_ena_w1s
 | |
|  *
 | |
|  * CGX GMI TX Interrupt Enable Set Registers This register sets interrupt
 | |
|  * enable bits.
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_int_ena_w1s_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_txx_int_ena_w1s_cn {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_7                     : 3;
 | |
| 		u64 reserved_8                       : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x38518 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_int_w1s
 | |
|  *
 | |
|  * CGX GMI TX Interrupt Set Registers This register sets interrupt bits.
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_int_w1s_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_gmi_txx_int_w1s_cn {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xscol                            : 1;
 | |
| 		u64 xsdef                            : 1;
 | |
| 		u64 late_col                         : 1;
 | |
| 		u64 ptp_lost                         : 1;
 | |
| 		u64 reserved_5_7                     : 3;
 | |
| 		u64 reserved_8                       : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x38508 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_min_pkt
 | |
|  *
 | |
|  * CGX GMI TX Minimum-Size-Packet Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_min_pkt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_min_pkt_s {
 | |
| 		u64 min_size                         : 8;
 | |
| 		u64 reserved_8_63                    : 56;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_min_pkt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_MIN_PKT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_MIN_PKT(u64 a)
 | |
| {
 | |
| 	return 0x38240 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_pause_pkt_interval
 | |
|  *
 | |
|  * CGX GMI TX PAUSE-Packet Transmission-Interval Registers This register
 | |
|  * specifies how often PAUSE packets are sent. Internal: Notes: Choosing
 | |
|  * proper values of CGX()_GMP_GMI_TX()_PAUSE_PKT_TIME[PTIME] and
 | |
|  * CGX()_GMP_GMI_TX()_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to
 | |
|  * the system designer.  It is suggested that TIME be much greater than
 | |
|  * INTERVAL and CGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND] be set.  This allows
 | |
|  * a periodic refresh of the PAUSE count and then when the backpressure
 | |
|  * condition is lifted, a PAUSE packet with TIME==0 will be sent
 | |
|  * indicating that Octane is ready for additional data.  If the system
 | |
|  * chooses to not set CGX()_GMP_GMI_TX()_PAUSE_ZERO[SEND], then it is
 | |
|  * suggested that TIME and INTERVAL are programmed such that they
 | |
|  * satisify the following rule:  _ INTERVAL \<= TIME - (largest_pkt_size
 | |
|  * + IFG + pause_pkt_size)  where largest_pkt_size is that largest packet
 | |
|  * that the system can send (normally 1518B), IFG is the interframe gap
 | |
|  * and pause_pkt_size is the size of the PAUSE packet (normally 64B).
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_pause_pkt_interval {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_pause_pkt_interval_s {
 | |
| 		u64 interval                         : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_pause_pkt_interval_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_PKT_INTERVAL(u64 a)
 | |
| {
 | |
| 	return 0x38248 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_pause_pkt_time
 | |
|  *
 | |
|  * CGX GMI TX PAUSE Packet PAUSE-Time Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_pause_pkt_time {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_pause_pkt_time_s {
 | |
| 		u64 ptime                            : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_pause_pkt_time_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_PKT_TIME(u64 a)
 | |
| {
 | |
| 	return 0x38238 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_pause_togo
 | |
|  *
 | |
|  * CGX GMI TX Time-to-Backpressure Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_pause_togo {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_pause_togo_s {
 | |
| 		u64 ptime                            : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_pause_togo_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_TOGO(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_TOGO(u64 a)
 | |
| {
 | |
| 	return 0x38258 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_pause_zero
 | |
|  *
 | |
|  * CGX GMI TX PAUSE-Zero-Enable Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_pause_zero {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_pause_zero_s {
 | |
| 		u64 send                             : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_pause_zero_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_ZERO(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_PAUSE_ZERO(u64 a)
 | |
| {
 | |
| 	return 0x38260 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_sgmii_ctl
 | |
|  *
 | |
|  * CGX SGMII Control Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_sgmii_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_sgmii_ctl_s {
 | |
| 		u64 align                            : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_sgmii_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_SGMII_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_SGMII_CTL(u64 a)
 | |
| {
 | |
| 	return 0x38300 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_slot
 | |
|  *
 | |
|  * CGX GMI TX Slottime Counter Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_slot {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_slot_s {
 | |
| 		u64 slot                             : 10;
 | |
| 		u64 reserved_10_63                   : 54;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_slot_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_SLOT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_SLOT(u64 a)
 | |
| {
 | |
| 	return 0x38220 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_soft_pause
 | |
|  *
 | |
|  * CGX GMI TX Software PAUSE Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_soft_pause {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_soft_pause_s {
 | |
| 		u64 ptime                            : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_soft_pause_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_SOFT_PAUSE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_SOFT_PAUSE(u64 a)
 | |
| {
 | |
| 	return 0x38250 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx#_thresh
 | |
|  *
 | |
|  * CGX GMI TX Threshold Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_txx_thresh {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_txx_thresh_s {
 | |
| 		u64 cnt                              : 11;
 | |
| 		u64 reserved_11_63                   : 53;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_txx_thresh_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TXX_THRESH(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TXX_THRESH(u64 a)
 | |
| {
 | |
| 	return 0x38210 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx_col_attempt
 | |
|  *
 | |
|  * CGX TX Collision Attempts Before Dropping Frame Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_tx_col_attempt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_tx_col_attempt_s {
 | |
| 		u64 limit                            : 5;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_tx_col_attempt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TX_COL_ATTEMPT(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TX_COL_ATTEMPT(void)
 | |
| {
 | |
| 	return 0x39010;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx_ifg
 | |
|  *
 | |
|  * CGX GMI TX Interframe-Gap Cycles Registers Consider the following when
 | |
|  * programming IFG1 and IFG2: * For 10/100/1000 Mb/s half-duplex systems
 | |
|  * that require IEEE 802.3 compatibility, IFG1 must be in the range of
 | |
|  * 1-8, [IFG2] must be in the range of 4-12, and the [IFG1] + [IFG2] sum
 | |
|  * must be 12. * For 10/100/1000 Mb/s full-duplex systems that require
 | |
|  * IEEE 802.3 compatibility, IFG1 must be in the range of 1-11, [IFG2]
 | |
|  * must be in the range of 1-11, and the [IFG1] + [IFG2] sum must be 12.
 | |
|  * For all other systems, IFG1 and IFG2 can be any value in the range of
 | |
|  * 1-15, allowing for a total possible IFG sum of 2-30.
 | |
|  */
 | |
| union cgxx_gmp_gmi_tx_ifg {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_tx_ifg_s {
 | |
| 		u64 ifg1                             : 4;
 | |
| 		u64 ifg2                             : 4;
 | |
| 		u64 reserved_8_63                    : 56;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_tx_ifg_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TX_IFG(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TX_IFG(void)
 | |
| {
 | |
| 	return 0x39000;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx_jam
 | |
|  *
 | |
|  * CGX GMI TX JAM Pattern Registers This register provides the pattern
 | |
|  * used in JAM bytes.
 | |
|  */
 | |
| union cgxx_gmp_gmi_tx_jam {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_tx_jam_s {
 | |
| 		u64 jam                              : 8;
 | |
| 		u64 reserved_8_63                    : 56;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_tx_jam_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TX_JAM(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TX_JAM(void)
 | |
| {
 | |
| 	return 0x39008;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx_lfsr
 | |
|  *
 | |
|  * CGX GMI TX LFSR Registers This register shows the contents of the
 | |
|  * linear feedback shift register (LFSR), which is used to implement
 | |
|  * truncated binary exponential backoff.
 | |
|  */
 | |
| union cgxx_gmp_gmi_tx_lfsr {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_tx_lfsr_s {
 | |
| 		u64 lfsr                             : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_tx_lfsr_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TX_LFSR(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TX_LFSR(void)
 | |
| {
 | |
| 	return 0x39028;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx_pause_pkt_dmac
 | |
|  *
 | |
|  * CGX TX PAUSE-Packet DMAC-Field Registers
 | |
|  */
 | |
| union cgxx_gmp_gmi_tx_pause_pkt_dmac {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_tx_pause_pkt_dmac_s {
 | |
| 		u64 dmac                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_tx_pause_pkt_dmac_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TX_PAUSE_PKT_DMAC(void)
 | |
| {
 | |
| 	return 0x39018;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_gmi_tx_pause_pkt_type
 | |
|  *
 | |
|  * CGX GMI TX PAUSE-Packet-PTYPE Field Registers This register provides
 | |
|  * the PTYPE field that is placed in outbound PAUSE packets.
 | |
|  */
 | |
| union cgxx_gmp_gmi_tx_pause_pkt_type {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_gmi_tx_pause_pkt_type_s {
 | |
| 		u64 ptype                            : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_gmi_tx_pause_pkt_type_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_GMI_TX_PAUSE_PKT_TYPE(void)
 | |
| {
 | |
| 	return 0x39020;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_misc#_cfg
 | |
|  *
 | |
|  * CGX GMP PCS Miscellaneous Control Registers This register contains
 | |
|  * general configuration that should not need to be changed from reset
 | |
|  * settings.  Internal: Per lmac diagnostic and chicken bits.
 | |
|  */
 | |
| union cgxx_gmp_miscx_cfg {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_miscx_cfg_s {
 | |
| 		u64 tx_eee_quiet_credit_mode         : 1;
 | |
| 		u64 tx_eee_wait_gmi_fast_idle        : 1;
 | |
| 		u64 tx_qsgmii_port0_init             : 1;
 | |
| 		u64 tx_eee_rx_sync_status_enable     : 1;
 | |
| 		u64 pcs_alt_an                       : 1;
 | |
| 		u64 reserved_5_7                     : 3;
 | |
| 		u64 rx_pcs_sync_signal_detect        : 1;
 | |
| 		u64 rx_pcs_sync_timeout              : 1;
 | |
| 		u64 rx_pcs_eee_mode_enable           : 1;
 | |
| 		u64 rx_pcs_lpi_enable                : 1;
 | |
| 		u64 rx_pcs_802_rx_k                  : 1;
 | |
| 		u64 rx_pcs_alt_qlb2i                 : 1;
 | |
| 		u64 reserved_14_15                   : 2;
 | |
| 		u64 rx_cgp_gser_throttle             : 1;
 | |
| 		u64 rx_cgp_edet_filter               : 1;
 | |
| 		u64 rx_cgp_edet_qlm_val              : 1;
 | |
| 		u64 reserved_19_63                   : 45;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_miscx_cfg_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_MISCX_CFG(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_MISCX_CFG(u64 a)
 | |
| {
 | |
| 	return 0x34000 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_an_expansion
 | |
|  *
 | |
|  * CGX GMP PCS AN Expansion register Register 6 AN status
 | |
|  */
 | |
| union cgxx_gmp_pcsx_an_expansion {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_an_expansion_s {
 | |
| 		u64 reserved_0                       : 1;
 | |
| 		u64 page_received                    : 1;
 | |
| 		u64 next_page_able                   : 1;
 | |
| 		u64 reserved_3_63                    : 61;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_an_expansion_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_AN_EXPANSION(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_AN_EXPANSION(u64 a)
 | |
| {
 | |
| 	return 0x30a60 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_an_lp_abil_np
 | |
|  *
 | |
|  * CGX GMP PCS AN Link Partner Ability Next Page Register 8 This register
 | |
|  * contains the advertised ability of the link partners Next Page. The
 | |
|  * definition for this register is provided in 32.5.4.2 for changes to
 | |
|  * 28.2.4.1.4.
 | |
|  */
 | |
| union cgxx_gmp_pcsx_an_lp_abil_np {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_an_lp_abil_np_s {
 | |
| 		u64 m_u                              : 11;
 | |
| 		u64 toggle                           : 1;
 | |
| 		u64 ack2                             : 1;
 | |
| 		u64 mp                               : 1;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_an_lp_abil_np_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_AN_LP_ABIL_NP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_AN_LP_ABIL_NP(u64 a)
 | |
| {
 | |
| 	return 0x30a80 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_an_np_tx
 | |
|  *
 | |
|  * CGX GMP PCS AN Next Page Transmit Register 7 Software programs this
 | |
|  * register with the contents of the AN message next page or unformatted
 | |
|  * next page link code word to be transmitted during autonegotiation.
 | |
|  * Next page exchange occurs after the base link code words have been
 | |
|  * exchanged if either end of the link segment sets the NP bit to 1,
 | |
|  * indicating that it has at least one next page to send. Once initiated,
 | |
|  * next page exchange continues until both ends of the link segment set
 | |
|  * their NP bits to 0. Both sides must be NP capable to use NP exchanges.
 | |
|  */
 | |
| union cgxx_gmp_pcsx_an_np_tx {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_an_np_tx_s {
 | |
| 		u64 m_u                              : 11;
 | |
| 		u64 toggle                           : 1;
 | |
| 		u64 ack2                             : 1;
 | |
| 		u64 mp                               : 1;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_an_np_tx_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_AN_NP_TX(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_AN_NP_TX(u64 a)
 | |
| {
 | |
| 	return 0x30a70 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_dbg_control
 | |
|  *
 | |
|  * CGX PCS Debug Control Registers
 | |
|  */
 | |
| union cgxx_gmp_pcsx_dbg_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_dbg_control_s {
 | |
| 		u64 us_clk_period                    : 7;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_dbg_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_DBG_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_DBG_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x31000 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_rx_eee_wake
 | |
|  *
 | |
|  * INTERNAL: CGX GMP PCS  RX EEE Wake Error Counter  Registers  Reserved.
 | |
|  * Internal: This register is used by PHY types that support EEE to count
 | |
|  * wake time faults where the PHY fails to complete its normal wake
 | |
|  * sequence within the time required for the specific PHY type. The
 | |
|  * definition of the fault event to be counted is defined for each PHY
 | |
|  * and may occur during a refresh or a wake-up as defined by the PHY.
 | |
|  * This 16-bit counter shall be reset to all zeros upon execution of the
 | |
|  * PCS reset. This counter shall be held at all ones in the case of
 | |
|  * overflow.
 | |
|  */
 | |
| union cgxx_gmp_pcsx_rx_eee_wake {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_rx_eee_wake_s {
 | |
| 		u64 error_counter                    : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_rx_eee_wake_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_RX_EEE_WAKE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_RX_EEE_WAKE(u64 a)
 | |
| {
 | |
| 	return 0x30910 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_rx_lpi_timing
 | |
|  *
 | |
|  * INTERNAL: CGX GMP PCS  RX EEE LPI Timing Parameters Registers
 | |
|  * Reserved. Internal: Receiver LPI timing parameters Tqr, Twr and Twtf.
 | |
|  */
 | |
| union cgxx_gmp_pcsx_rx_lpi_timing {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_rx_lpi_timing_s {
 | |
| 		u64 twtf                             : 18;
 | |
| 		u64 reserved_18_19                   : 2;
 | |
| 		u64 twr                              : 12;
 | |
| 		u64 tqr                              : 20;
 | |
| 		u64 reserved_52_63                   : 12;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_rx_lpi_timing_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_RX_LPI_TIMING(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_RX_LPI_TIMING(u64 a)
 | |
| {
 | |
| 	return 0x30900 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_status1
 | |
|  *
 | |
|  * CGX GMP PCS Status 1 Register PCS LPI Status, Link OK.  Register 3.1
 | |
|  */
 | |
| union cgxx_gmp_pcsx_status1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_status1_s {
 | |
| 		u64 reserved_0_1                     : 2;
 | |
| 		u64 receive_link_status              : 1;
 | |
| 		u64 reserved_3_7                     : 5;
 | |
| 		u64 rx_lpi_indication                : 1;
 | |
| 		u64 tx_lpi_indication                : 1;
 | |
| 		u64 rx_lpi_received                  : 1;
 | |
| 		u64 tx_lpi_received                  : 1;
 | |
| 		u64 reserved_12_63                   : 52;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_status1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_STATUS1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_STATUS1(u64 a)
 | |
| {
 | |
| 	return 0x30880 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs#_tx_lpi_timing
 | |
|  *
 | |
|  * INTERNAL: CGX GMP GMI  TX EEE LPI Timing Parameters Registers
 | |
|  * Reserved. Internal: Transmitter LPI timing parameters Tsl, Tql and
 | |
|  * Tul.
 | |
|  */
 | |
| union cgxx_gmp_pcsx_tx_lpi_timing {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcsx_tx_lpi_timing_s {
 | |
| 		u64 tql                              : 19;
 | |
| 		u64 reserved_19_31                   : 13;
 | |
| 		u64 tul                              : 12;
 | |
| 		u64 reserved_44_47                   : 4;
 | |
| 		u64 tsl                              : 12;
 | |
| 		u64 reserved_60_63                   : 4;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcsx_tx_lpi_timing_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCSX_TX_LPI_TIMING(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCSX_TX_LPI_TIMING(u64 a)
 | |
| {
 | |
| 	return 0x30800 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_an#_adv
 | |
|  *
 | |
|  * CGX GMP PCS Autonegotiation Advertisement Registers
 | |
|  */
 | |
| union cgxx_gmp_pcs_anx_adv {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_anx_adv_s {
 | |
| 		u64 reserved_0_4                     : 5;
 | |
| 		u64 fd                               : 1;
 | |
| 		u64 hfd                              : 1;
 | |
| 		u64 pause                            : 2;
 | |
| 		u64 reserved_9_11                    : 3;
 | |
| 		u64 rem_flt                          : 2;
 | |
| 		u64 reserved_14                      : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_anx_adv_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_ANX_ADV(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_ANX_ADV(u64 a)
 | |
| {
 | |
| 	return 0x30010 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_an#_ext_st
 | |
|  *
 | |
|  * CGX GMO PCS Autonegotiation Extended Status Registers
 | |
|  */
 | |
| union cgxx_gmp_pcs_anx_ext_st {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_anx_ext_st_s {
 | |
| 		u64 reserved_0_11                    : 12;
 | |
| 		u64 thou_thd                         : 1;
 | |
| 		u64 thou_tfd                         : 1;
 | |
| 		u64 thou_xhd                         : 1;
 | |
| 		u64 thou_xfd                         : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_anx_ext_st_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_ANX_EXT_ST(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_ANX_EXT_ST(u64 a)
 | |
| {
 | |
| 	return 0x30028 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_an#_lp_abil
 | |
|  *
 | |
|  * CGX GMP PCS Autonegotiation Link Partner Ability Registers This is the
 | |
|  * autonegotiation link partner ability register 5 as per IEEE 802.3,
 | |
|  * Clause 37.
 | |
|  */
 | |
| union cgxx_gmp_pcs_anx_lp_abil {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_anx_lp_abil_s {
 | |
| 		u64 reserved_0_4                     : 5;
 | |
| 		u64 fd                               : 1;
 | |
| 		u64 hfd                              : 1;
 | |
| 		u64 pause                            : 2;
 | |
| 		u64 reserved_9_11                    : 3;
 | |
| 		u64 rem_flt                          : 2;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_anx_lp_abil_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_ANX_LP_ABIL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_ANX_LP_ABIL(u64 a)
 | |
| {
 | |
| 	return 0x30018 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_an#_results
 | |
|  *
 | |
|  * CGX GMP PCS Autonegotiation Results Registers This register is not
 | |
|  * valid when CGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 1. If
 | |
|  * CGX()_GMP_PCS_MISC()_CTL[AN_OVRD] is set to 0 and
 | |
|  * CGX()_GMP_PCS_AN()_RESULTS[AN_CPT] is set to 1, this register is
 | |
|  * valid.
 | |
|  */
 | |
| union cgxx_gmp_pcs_anx_results {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_anx_results_s {
 | |
| 		u64 link_ok                          : 1;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 an_cpt                           : 1;
 | |
| 		u64 spd                              : 2;
 | |
| 		u64 pause                            : 2;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_anx_results_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_ANX_RESULTS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_ANX_RESULTS(u64 a)
 | |
| {
 | |
| 	return 0x30020 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_int#
 | |
|  *
 | |
|  * CGX GMP PCS Interrupt Registers
 | |
|  */
 | |
| union cgxx_gmp_pcs_intx {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_intx_s {
 | |
| 		u64 lnkspd                           : 1;
 | |
| 		u64 xmit                             : 1;
 | |
| 		u64 an_err                           : 1;
 | |
| 		u64 txfifu                           : 1;
 | |
| 		u64 txfifo                           : 1;
 | |
| 		u64 txbad                            : 1;
 | |
| 		u64 rxerr                            : 1;
 | |
| 		u64 rxbad                            : 1;
 | |
| 		u64 rxlock                           : 1;
 | |
| 		u64 an_bad                           : 1;
 | |
| 		u64 sync_bad                         : 1;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 reserved_13_15                   : 3;
 | |
| 		u64 an_page_received                 : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 reserved_18_19                   : 2;
 | |
| 		u64 eee_tx_change                    : 1;
 | |
| 		u64 eee_rx_change                    : 1;
 | |
| 		u64 eee_rx_link_fail                 : 1;
 | |
| 		u64 reserved_23_63                   : 41;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_intx_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_INTX(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_INTX(u64 a)
 | |
| {
 | |
| 	return 0x30080 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_int#_ena_w1c
 | |
|  *
 | |
|  * CGX GMP PCS Interrupt Enable Clear Registers This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_gmp_pcs_intx_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_intx_ena_w1c_s {
 | |
| 		u64 lnkspd                           : 1;
 | |
| 		u64 xmit                             : 1;
 | |
| 		u64 an_err                           : 1;
 | |
| 		u64 txfifu                           : 1;
 | |
| 		u64 txfifo                           : 1;
 | |
| 		u64 txbad                            : 1;
 | |
| 		u64 rxerr                            : 1;
 | |
| 		u64 rxbad                            : 1;
 | |
| 		u64 rxlock                           : 1;
 | |
| 		u64 an_bad                           : 1;
 | |
| 		u64 sync_bad                         : 1;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 reserved_13_15                   : 3;
 | |
| 		u64 an_page_received                 : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 reserved_18_19                   : 2;
 | |
| 		u64 eee_tx_change                    : 1;
 | |
| 		u64 eee_rx_change                    : 1;
 | |
| 		u64 eee_rx_link_fail                 : 1;
 | |
| 		u64 reserved_23_63                   : 41;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_intx_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_INTX_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_INTX_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x30090 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_int#_ena_w1s
 | |
|  *
 | |
|  * CGX GMP PCS Interrupt Enable Set Registers This register sets
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_gmp_pcs_intx_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_intx_ena_w1s_s {
 | |
| 		u64 lnkspd                           : 1;
 | |
| 		u64 xmit                             : 1;
 | |
| 		u64 an_err                           : 1;
 | |
| 		u64 txfifu                           : 1;
 | |
| 		u64 txfifo                           : 1;
 | |
| 		u64 txbad                            : 1;
 | |
| 		u64 rxerr                            : 1;
 | |
| 		u64 rxbad                            : 1;
 | |
| 		u64 rxlock                           : 1;
 | |
| 		u64 an_bad                           : 1;
 | |
| 		u64 sync_bad                         : 1;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 reserved_13_15                   : 3;
 | |
| 		u64 an_page_received                 : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 reserved_18_19                   : 2;
 | |
| 		u64 eee_tx_change                    : 1;
 | |
| 		u64 eee_rx_change                    : 1;
 | |
| 		u64 eee_rx_link_fail                 : 1;
 | |
| 		u64 reserved_23_63                   : 41;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_intx_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_INTX_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_INTX_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x30098 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_int#_w1s
 | |
|  *
 | |
|  * CGX GMP PCS Interrupt Set Registers This register sets interrupt bits.
 | |
|  */
 | |
| union cgxx_gmp_pcs_intx_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_intx_w1s_s {
 | |
| 		u64 lnkspd                           : 1;
 | |
| 		u64 xmit                             : 1;
 | |
| 		u64 an_err                           : 1;
 | |
| 		u64 txfifu                           : 1;
 | |
| 		u64 txfifo                           : 1;
 | |
| 		u64 txbad                            : 1;
 | |
| 		u64 rxerr                            : 1;
 | |
| 		u64 rxbad                            : 1;
 | |
| 		u64 rxlock                           : 1;
 | |
| 		u64 an_bad                           : 1;
 | |
| 		u64 sync_bad                         : 1;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 reserved_13_15                   : 3;
 | |
| 		u64 an_page_received                 : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 reserved_18_19                   : 2;
 | |
| 		u64 eee_tx_change                    : 1;
 | |
| 		u64 eee_rx_change                    : 1;
 | |
| 		u64 eee_rx_link_fail                 : 1;
 | |
| 		u64 reserved_23_63                   : 41;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_intx_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_INTX_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_INTX_W1S(u64 a)
 | |
| {
 | |
| 	return 0x30088 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_link#_timer
 | |
|  *
 | |
|  * CGX GMP PCS Link Timer Registers This is the 1.6 ms nominal link timer
 | |
|  * register.
 | |
|  */
 | |
| union cgxx_gmp_pcs_linkx_timer {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_linkx_timer_s {
 | |
| 		u64 count                            : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_linkx_timer_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_LINKX_TIMER(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_LINKX_TIMER(u64 a)
 | |
| {
 | |
| 	return 0x30040 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_misc#_ctl
 | |
|  *
 | |
|  * CGX GMP SGMII Miscellaneous Control Registers Internal: SGMII bit [12]
 | |
|  * is really a misnomer, it is a decode  of pi_qlm_cfg pins to indicate
 | |
|  * SGMII or 1000Base-X modes.  Note: The SGMII AN Advertisement Register
 | |
|  * above will be sent during Auto Negotiation if [MAC_PHY] is set (1=PHY
 | |
|  * mode). If the bit is not set (0=MAC mode), the tx_Config_Reg\<14\>
 | |
|  * becomes ACK bit and tx_Config_Reg\<0\> is always 1. All other bits in
 | |
|  * tx_Config_Reg sent will be 0. The PHY dictates the Auto Negotiation
 | |
|  * results.
 | |
|  */
 | |
| union cgxx_gmp_pcs_miscx_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_miscx_ctl_s {
 | |
| 		u64 samp_pt                          : 7;
 | |
| 		u64 an_ovrd                          : 1;
 | |
| 		u64 mode                             : 1;
 | |
| 		u64 mac_phy                          : 1;
 | |
| 		u64 loopbck2                         : 1;
 | |
| 		u64 gmxeno                           : 1;
 | |
| 		u64 reserved_12                      : 1;
 | |
| 		u64 disp_en                          : 1;
 | |
| 		u64 reserved_14_15                   : 2;
 | |
| 		u64 qsgmii_comma_wd                  : 16;
 | |
| 		u64 qsgmii_comma_wd_en               : 1;
 | |
| 		u64 reserved_33_63                   : 31;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_pcs_miscx_ctl_cn {
 | |
| 		u64 samp_pt                          : 7;
 | |
| 		u64 an_ovrd                          : 1;
 | |
| 		u64 mode                             : 1;
 | |
| 		u64 mac_phy                          : 1;
 | |
| 		u64 loopbck2                         : 1;
 | |
| 		u64 gmxeno                           : 1;
 | |
| 		u64 reserved_12                      : 1;
 | |
| 		u64 disp_en                          : 1;
 | |
| 		u64 reserved_14_15                   : 2;
 | |
| 		u64 qsgmii_comma_wd                  : 16;
 | |
| 		u64 qsgmii_comma_wd_en               : 1;
 | |
| 		u64 reserved_33_35                   : 3;
 | |
| 		u64 reserved_36_63                   : 28;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_MISCX_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_MISCX_CTL(u64 a)
 | |
| {
 | |
| 	return 0x30078 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_mr#_control
 | |
|  *
 | |
|  * CGX GMP PCS Control Registers
 | |
|  */
 | |
| union cgxx_gmp_pcs_mrx_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_mrx_control_s {
 | |
| 		u64 reserved_0_4                     : 5;
 | |
| 		u64 uni                              : 1;
 | |
| 		u64 spdmsb                           : 1;
 | |
| 		u64 coltst                           : 1;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 rst_an                           : 1;
 | |
| 		u64 reserved_10                      : 1;
 | |
| 		u64 pwr_dn                           : 1;
 | |
| 		u64 an_en                            : 1;
 | |
| 		u64 spdlsb                           : 1;
 | |
| 		u64 loopbck1                         : 1;
 | |
| 		u64 reset                            : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_mrx_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_MRX_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_MRX_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x30000 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_mr#_status
 | |
|  *
 | |
|  * CGX GMP PCS Status Registers Bits \<15:9\> in this register indicate
 | |
|  * the ability to operate when CGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set
 | |
|  * to MAC mode. Bits \<15:9\> are always read as 0, indicating that the
 | |
|  * chip cannot operate in the corresponding modes. The field [RM_FLT] is
 | |
|  * a 'don't care' when the selected mode is SGMII/QSGMII.
 | |
|  */
 | |
| union cgxx_gmp_pcs_mrx_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_mrx_status_s {
 | |
| 		u64 extnd                            : 1;
 | |
| 		u64 reserved_1                       : 1;
 | |
| 		u64 lnk_st                           : 1;
 | |
| 		u64 an_abil                          : 1;
 | |
| 		u64 rm_flt                           : 1;
 | |
| 		u64 an_cpt                           : 1;
 | |
| 		u64 prb_sup                          : 1;
 | |
| 		u64 reserved_7                       : 1;
 | |
| 		u64 ext_st                           : 1;
 | |
| 		u64 hun_t2hd                         : 1;
 | |
| 		u64 hun_t2fd                         : 1;
 | |
| 		u64 ten_hd                           : 1;
 | |
| 		u64 ten_fd                           : 1;
 | |
| 		u64 hun_xhd                          : 1;
 | |
| 		u64 hun_xfd                          : 1;
 | |
| 		u64 hun_t4                           : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_mrx_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_MRX_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_MRX_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x30008 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_rx#_states
 | |
|  *
 | |
|  * CGX GMP PCS RX State-Machines States Registers
 | |
|  */
 | |
| union cgxx_gmp_pcs_rxx_states {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_rxx_states_s {
 | |
| 		u64 an_st                            : 4;
 | |
| 		u64 an_bad                           : 1;
 | |
| 		u64 sync                             : 4;
 | |
| 		u64 sync_bad                         : 1;
 | |
| 		u64 rx_st                            : 5;
 | |
| 		u64 rx_bad                           : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_rxx_states_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_RXX_STATES(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_RXX_STATES(u64 a)
 | |
| {
 | |
| 	return 0x30058 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_rx#_sync
 | |
|  *
 | |
|  * CGX GMP PCS Code Group Synchronization Registers
 | |
|  */
 | |
| union cgxx_gmp_pcs_rxx_sync {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_rxx_sync_s {
 | |
| 		u64 bit_lock                         : 1;
 | |
| 		u64 sync                             : 1;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_rxx_sync_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_RXX_SYNC(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_RXX_SYNC(u64 a)
 | |
| {
 | |
| 	return 0x30050 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_sgm#_an_adv
 | |
|  *
 | |
|  * CGX GMP PCS SGMII Autonegotiation Advertisement Registers This is the
 | |
|  * SGMII autonegotiation advertisement register (sent out as
 | |
|  * tx_Config_Reg\<15:0\> as defined in IEEE 802.3 clause 37). This
 | |
|  * register is sent during autonegotiation if
 | |
|  * CGX()_GMP_PCS_MISC()_CTL[MAC_PHY] is set (1 = PHY mode). If the bit is
 | |
|  * not set (0 = MAC mode), then tx_Config_Reg\<14\> becomes ACK bit and
 | |
|  * tx_Config_Reg\<0\> is always 1. All other bits in tx_Config_Reg sent
 | |
|  * will be 0. The PHY dictates the autonegotiation results.
 | |
|  */
 | |
| union cgxx_gmp_pcs_sgmx_an_adv {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_sgmx_an_adv_s {
 | |
| 		u64 one                              : 1;
 | |
| 		u64 reserved_1_9                     : 9;
 | |
| 		u64 speed                            : 2;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 reserved_13                      : 1;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 link                             : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_sgmx_an_adv_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_SGMX_AN_ADV(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_SGMX_AN_ADV(u64 a)
 | |
| {
 | |
| 	return 0x30068 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_sgm#_lp_adv
 | |
|  *
 | |
|  * CGX GMP PCS SGMII Link-Partner-Advertisement Registers This is the
 | |
|  * SGMII link partner advertisement register (received as
 | |
|  * rx_Config_Reg\<15:0\> as defined in IEEE 802.3 clause 37).
 | |
|  */
 | |
| union cgxx_gmp_pcs_sgmx_lp_adv {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_sgmx_lp_adv_s {
 | |
| 		u64 one                              : 1;
 | |
| 		u64 reserved_1_9                     : 9;
 | |
| 		u64 speed                            : 2;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 reserved_13_14                   : 2;
 | |
| 		u64 link                             : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	struct cgxx_gmp_pcs_sgmx_lp_adv_cn {
 | |
| 		u64 one                              : 1;
 | |
| 		u64 reserved_1_9                     : 9;
 | |
| 		u64 speed                            : 2;
 | |
| 		u64 dup                              : 1;
 | |
| 		u64 reserved_13                      : 1;
 | |
| 		u64 reserved_14                      : 1;
 | |
| 		u64 link                             : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} cn;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_SGMX_LP_ADV(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_SGMX_LP_ADV(u64 a)
 | |
| {
 | |
| 	return 0x30070 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_tx#_states
 | |
|  *
 | |
|  * CGX GMP PCS TX State-Machines States Registers
 | |
|  */
 | |
| union cgxx_gmp_pcs_txx_states {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_txx_states_s {
 | |
| 		u64 ord_st                           : 4;
 | |
| 		u64 tx_bad                           : 1;
 | |
| 		u64 xmit                             : 2;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_txx_states_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_TXX_STATES(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_TXX_STATES(u64 a)
 | |
| {
 | |
| 	return 0x30060 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_gmp_pcs_tx_rx#_polarity
 | |
|  *
 | |
|  * CGX GMP PCS TX/RX Polarity Registers
 | |
|  * CGX()_GMP_PCS_TX_RX()_POLARITY[AUTORXPL] shows correct polarity needed
 | |
|  * on the link receive path after code group synchronization is achieved.
 | |
|  * When LMAC_TYPE=QSGMII, only lane 0 polarity data and settings are
 | |
|  * relevant and settings for lanes 1, 2 and 3 are unused.
 | |
|  */
 | |
| union cgxx_gmp_pcs_tx_rxx_polarity {
 | |
| 	u64 u;
 | |
| 	struct cgxx_gmp_pcs_tx_rxx_polarity_s {
 | |
| 		u64 txplrt                           : 1;
 | |
| 		u64 rxplrt                           : 1;
 | |
| 		u64 autorxpl                         : 1;
 | |
| 		u64 rxovrd                           : 1;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_gmp_pcs_tx_rxx_polarity_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_GMP_PCS_TX_RXX_POLARITY(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_GMP_PCS_TX_RXX_POLARITY(u64 a)
 | |
| {
 | |
| 	return 0x30048 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_msix_pba#
 | |
|  *
 | |
|  * CGX MSI-X Pending Bit Array Registers This register is the MSI-X PBA
 | |
|  * table, the bit number is indexed by the CGX_INT_VEC_E enumeration.
 | |
|  */
 | |
| union cgxx_msix_pbax {
 | |
| 	u64 u;
 | |
| 	struct cgxx_msix_pbax_s {
 | |
| 		u64 pend                             : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_msix_pbax_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_MSIX_PBAX(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_MSIX_PBAX(u64 a)
 | |
| {
 | |
| 	return 0xf0000 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_msix_vec#_addr
 | |
|  *
 | |
|  * CGX MSI-X Vector Table Address Registers This register is the MSI-X
 | |
|  * vector table, indexed by the CGX_INT_VEC_E enumeration.
 | |
|  */
 | |
| union cgxx_msix_vecx_addr {
 | |
| 	u64 u;
 | |
| 	struct cgxx_msix_vecx_addr_s {
 | |
| 		u64 secvec                           : 1;
 | |
| 		u64 reserved_1                       : 1;
 | |
| 		u64 addr                             : 51;
 | |
| 		u64 reserved_53_63                   : 11;
 | |
| 	} s;
 | |
| 	/* struct cgxx_msix_vecx_addr_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_MSIX_VECX_ADDR(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_MSIX_VECX_ADDR(u64 a)
 | |
| {
 | |
| 	return 0 + 0x10 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_msix_vec#_ctl
 | |
|  *
 | |
|  * CGX MSI-X Vector Table Control and Data Registers This register is the
 | |
|  * MSI-X vector table, indexed by the CGX_INT_VEC_E enumeration.
 | |
|  */
 | |
| union cgxx_msix_vecx_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_msix_vecx_ctl_s {
 | |
| 		u64 data                             : 32;
 | |
| 		u64 mask                             : 1;
 | |
| 		u64 reserved_33_63                   : 31;
 | |
| 	} s;
 | |
| 	/* struct cgxx_msix_vecx_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_MSIX_VECX_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_MSIX_VECX_CTL(u64 a)
 | |
| {
 | |
| 	return 8 + 0x10 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_bp_test
 | |
|  *
 | |
|  * INTERNAL: CGX SMU TX Backpressure Test Registers
 | |
|  */
 | |
| union cgxx_smux_bp_test {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_bp_test_s {
 | |
| 		u64 lfsr_freq                        : 12;
 | |
| 		u64 reserved_12_15                   : 4;
 | |
| 		u64 bp_cfg                           : 8;
 | |
| 		u64 reserved_24_47                   : 24;
 | |
| 		u64 enable                           : 4;
 | |
| 		u64 reserved_52_63                   : 12;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_bp_test_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_BP_TEST(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_BP_TEST(u64 a)
 | |
| {
 | |
| 	return 0x20230 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_cbfc_ctl
 | |
|  *
 | |
|  * CGX SMU PFC Control Registers Internal: INTERNAL: XOFF for a specific
 | |
|  * class/channel \<i\> is XOFF\<i\> = ([PHYS_EN]\<i\> & cmr_rx_phys_bp) |
 | |
|  * ([LOGL_EN]\<i\> & cmr_rx_logl_xoff\<i\>).
 | |
|  */
 | |
| union cgxx_smux_cbfc_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_cbfc_ctl_s {
 | |
| 		u64 rx_en                            : 1;
 | |
| 		u64 tx_en                            : 1;
 | |
| 		u64 drp_en                           : 1;
 | |
| 		u64 bck_en                           : 1;
 | |
| 		u64 reserved_4_31                    : 28;
 | |
| 		u64 logl_en                          : 16;
 | |
| 		u64 phys_en                          : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_cbfc_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_CBFC_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_CBFC_CTL(u64 a)
 | |
| {
 | |
| 	return 0x20218 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_ctrl
 | |
|  *
 | |
|  * CGX SMU Control Registers
 | |
|  */
 | |
| union cgxx_smux_ctrl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_ctrl_s {
 | |
| 		u64 rx_idle                          : 1;
 | |
| 		u64 tx_idle                          : 1;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_ctrl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_CTRL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_CTRL(u64 a)
 | |
| {
 | |
| 	return 0x20200 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_ext_loopback
 | |
|  *
 | |
|  * CGX SMU External Loopback Registers In loopback mode, the IFG1+IFG2 of
 | |
|  * local and remote parties must match exactly; otherwise loopback FIFO
 | |
|  * will overrun: CGX()_SMU()_TX_INT[LB_OVRFLW].
 | |
|  */
 | |
| union cgxx_smux_ext_loopback {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_ext_loopback_s {
 | |
| 		u64 thresh                           : 6;
 | |
| 		u64 reserved_6_7                     : 2;
 | |
| 		u64 depth                            : 6;
 | |
| 		u64 reserved_14_15                   : 2;
 | |
| 		u64 en                               : 1;
 | |
| 		u64 reserved_17_63                   : 47;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_ext_loopback_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_EXT_LOOPBACK(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_EXT_LOOPBACK(u64 a)
 | |
| {
 | |
| 	return 0x20208 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_hg2_control
 | |
|  *
 | |
|  * CGX SMU HiGig2 Control Registers HiGig2 TX- and RX-enable are normally
 | |
|  * set together for HiGig2 messaging. Setting just the TX or RX bit
 | |
|  * results in only the HG2 message transmit or receive capability.
 | |
|  * Setting [PHYS_EN] and [LOGL_EN] to 1 allows link PAUSE or backpressure
 | |
|  * to NIX as per the received HiGig2 message. Setting these fields to 0
 | |
|  * disables link PAUSE and backpressure to NIX in response to received
 | |
|  * messages.  CGX()_SMU()_TX_CTL[HG_EN] must be set (to enable HiGig)
 | |
|  * whenever either [HG2TX_EN] or [HG2RX_EN] are set.
 | |
|  * CGX()_SMU()_RX_UDD_SKP[LEN] must be set to 16 (to select HiGig2)
 | |
|  * whenever either [HG2TX_EN] or [HG2RX_EN] are set.
 | |
|  * CGX()_CMR_RX_OVR_BP[EN]\<0\> must be set and
 | |
|  * CGX()_CMR_RX_OVR_BP[BP]\<0\> must be cleared to 0 (to forcibly disable
 | |
|  * hardware-automatic 802.3 PAUSE packet generation) with the HiGig2
 | |
|  * Protocol when [HG2TX_EN] = 0. (The HiGig2 protocol is indicated by
 | |
|  * CGX()_SMU()_TX_CTL[HG_EN] = 1 and CGX()_SMU()_RX_UDD_SKP[LEN]=16.)
 | |
|  * Hardware can only autogenerate backpressure via HiGig2 messages
 | |
|  * (optionally, when [HG2TX_EN] = 1) with the HiGig2 protocol.
 | |
|  */
 | |
| union cgxx_smux_hg2_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_hg2_control_s {
 | |
| 		u64 logl_en                          : 16;
 | |
| 		u64 phys_en                          : 1;
 | |
| 		u64 hg2rx_en                         : 1;
 | |
| 		u64 hg2tx_en                         : 1;
 | |
| 		u64 reserved_19_63                   : 45;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_hg2_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_HG2_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_HG2_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x20210 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_mmsi_ctl_sta
 | |
|  *
 | |
|  * CGX SMU MAC Merge Service Interface (MMSI) Control/Status Registers
 | |
|  * MMSI control and status registers for frame preemption mode. Refer to
 | |
|  * IEEE 802.3br, Clause 99.
 | |
|  */
 | |
| union cgxx_smux_mmsi_ctl_sta {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_mmsi_ctl_sta_s {
 | |
| 		u64 p_en                             : 1;
 | |
| 		u64 dis_v                            : 1;
 | |
| 		u64 afs                              : 2;
 | |
| 		u64 v_sta                            : 3;
 | |
| 		u64 tx_pactive                       : 1;
 | |
| 		u64 reserved_8_31                    : 24;
 | |
| 		u64 v_time                           : 24;
 | |
| 		u64 reserved_56_63                   : 8;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_mmsi_ctl_sta_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_MMSI_CTL_STA(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_MMSI_CTL_STA(u64 a)
 | |
| {
 | |
| 	return 0x20220 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_bad_col_ctrl
 | |
|  *
 | |
|  * CGX SMU RX Bad Column High Registers
 | |
|  */
 | |
| union cgxx_smux_rx_bad_col_ctrl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_bad_col_ctrl_s {
 | |
| 		u64 lane_rxc                         : 16;
 | |
| 		u64 state                            : 3;
 | |
| 		u64 val                              : 1;
 | |
| 		u64 reserved_20_63                   : 44;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_bad_col_ctrl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_BAD_COL_CTRL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_BAD_COL_CTRL(u64 a)
 | |
| {
 | |
| 	return 0x20060 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_bad_col_data_hi
 | |
|  *
 | |
|  * CGX SMU RX Bad Column Low Registers
 | |
|  */
 | |
| union cgxx_smux_rx_bad_col_data_hi {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_bad_col_data_hi_s {
 | |
| 		u64 lane_rxd                         : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_bad_col_data_hi_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_BAD_COL_DATA_HI(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_BAD_COL_DATA_HI(u64 a)
 | |
| {
 | |
| 	return 0x20058 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_bad_col_data_lo
 | |
|  *
 | |
|  * CGX SMU RX Bad Column Low Registers
 | |
|  */
 | |
| union cgxx_smux_rx_bad_col_data_lo {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_bad_col_data_lo_s {
 | |
| 		u64 lane_rxd                         : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_bad_col_data_lo_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_BAD_COL_DATA_LO(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_BAD_COL_DATA_LO(u64 a)
 | |
| {
 | |
| 	return 0x20050 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_ctl
 | |
|  *
 | |
|  * CGX SMU RX Control Registers
 | |
|  */
 | |
| union cgxx_smux_rx_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_ctl_s {
 | |
| 		u64 status                           : 2;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_CTL(u64 a)
 | |
| {
 | |
| 	return 0x20048 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_decision
 | |
|  *
 | |
|  * CGX SMU Packet Decision Registers This register specifies the byte
 | |
|  * count used to determine when to accept or to filter a packet. As each
 | |
|  * byte in a packet is received by CGX, the L2 byte count (i.e. the
 | |
|  * number of bytes from the beginning of the L2 header (DMAC)) is
 | |
|  * compared against CNT. In normal operation, the L2 header begins after
 | |
|  * the PREAMBLE + SFD (CGX()_SMU()_RX_FRM_CTL[PRE_CHK] = 1) and any
 | |
|  * optional UDD skip data (CGX()_SMU()_RX_UDD_SKP[LEN]).
 | |
|  */
 | |
| union cgxx_smux_rx_decision {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_decision_s {
 | |
| 		u64 cnt                              : 5;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_decision_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_DECISION(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_DECISION(u64 a)
 | |
| {
 | |
| 	return 0x20038 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_frm_chk
 | |
|  *
 | |
|  * CGX SMU RX Frame Check Registers The CSRs provide the enable bits for
 | |
|  * a subset of errors passed to CMR encoded.
 | |
|  */
 | |
| union cgxx_smux_rx_frm_chk {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_frm_chk_s {
 | |
| 		u64 reserved_0_2                     : 3;
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr_d                         : 1;
 | |
| 		u64 fcserr_c                         : 1;
 | |
| 		u64 reserved_6                       : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_frm_chk_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_FRM_CHK(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_FRM_CHK(u64 a)
 | |
| {
 | |
| 	return 0x20028 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_frm_ctl
 | |
|  *
 | |
|  * CGX SMU RX Frame Control Registers This register controls the handling
 | |
|  * of the frames. The [CTL_BCK] and [CTL_DRP] bits control how the
 | |
|  * hardware handles incoming PAUSE packets. The most common modes of
 | |
|  * operation: _ [CTL_BCK] = 1, [CTL_DRP] = 1: hardware handles everything
 | |
|  * _ [CTL_BCK] = 0, [CTL_DRP] = 0: software sees all PAUSE frames _
 | |
|  * [CTL_BCK] = 0, [CTL_DRP] = 1: all PAUSE frames are completely ignored
 | |
|  * These control bits should be set to [CTL_BCK] = 0, [CTL_DRP] = 0 in
 | |
|  * half-duplex mode. Since PAUSE packets only apply to full duplex
 | |
|  * operation, any PAUSE packet would constitute an exception which should
 | |
|  * be handled by the processing cores. PAUSE packets should not be
 | |
|  * forwarded.
 | |
|  */
 | |
| union cgxx_smux_rx_frm_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_frm_ctl_s {
 | |
| 		u64 pre_chk                          : 1;
 | |
| 		u64 pre_strp                         : 1;
 | |
| 		u64 ctl_drp                          : 1;
 | |
| 		u64 ctl_bck                          : 1;
 | |
| 		u64 ctl_mcst                         : 1;
 | |
| 		u64 ctl_smac                         : 1;
 | |
| 		u64 reserved_6_11                    : 6;
 | |
| 		u64 ptp_mode                         : 1;
 | |
| 		u64 reserved_13_63                   : 51;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_frm_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_FRM_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_FRM_CTL(u64 a)
 | |
| {
 | |
| 	return 0x20020 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_int
 | |
|  *
 | |
|  * CGX SMU Receive Interrupt Registers SMU Interrupt Register. Internal:
 | |
|  * Exception conditions \<9\> and \<4:0\> can also set the rcv/opcode in
 | |
|  * the received packet's work queue entry. CGX()_SMU()_RX_FRM_CHK
 | |
|  * provides a bit mask for configuring which conditions set the error.
 | |
|  */
 | |
| union cgxx_smux_rx_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_int_s {
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 loc_fault                        : 1;
 | |
| 		u64 rem_fault                        : 1;
 | |
| 		u64 bad_seq                          : 1;
 | |
| 		u64 bad_term                         : 1;
 | |
| 		u64 hg2fld                           : 1;
 | |
| 		u64 hg2cc                            : 1;
 | |
| 		u64 badver                           : 1;
 | |
| 		u64 badrsp                           : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_INT(u64 a)
 | |
| {
 | |
| 	return 0x20000 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_int_ena_w1c
 | |
|  *
 | |
|  * CGX SMU Receive Interrupt Enable Clear Registers This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_smux_rx_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_int_ena_w1c_s {
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 loc_fault                        : 1;
 | |
| 		u64 rem_fault                        : 1;
 | |
| 		u64 bad_seq                          : 1;
 | |
| 		u64 bad_term                         : 1;
 | |
| 		u64 hg2fld                           : 1;
 | |
| 		u64 hg2cc                            : 1;
 | |
| 		u64 badver                           : 1;
 | |
| 		u64 badrsp                           : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x20010 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_int_ena_w1s
 | |
|  *
 | |
|  * CGX SMU Receive Interrupt Enable Set Registers This register sets
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_smux_rx_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_int_ena_w1s_s {
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 loc_fault                        : 1;
 | |
| 		u64 rem_fault                        : 1;
 | |
| 		u64 bad_seq                          : 1;
 | |
| 		u64 bad_term                         : 1;
 | |
| 		u64 hg2fld                           : 1;
 | |
| 		u64 hg2cc                            : 1;
 | |
| 		u64 badver                           : 1;
 | |
| 		u64 badrsp                           : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x20018 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_int_w1s
 | |
|  *
 | |
|  * CGX SMU Receive Interrupt Set Registers This register sets interrupt
 | |
|  * bits.
 | |
|  */
 | |
| union cgxx_smux_rx_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_int_w1s_s {
 | |
| 		u64 jabber                           : 1;
 | |
| 		u64 fcserr                           : 1;
 | |
| 		u64 rcverr                           : 1;
 | |
| 		u64 skperr                           : 1;
 | |
| 		u64 pcterr                           : 1;
 | |
| 		u64 rsverr                           : 1;
 | |
| 		u64 loc_fault                        : 1;
 | |
| 		u64 rem_fault                        : 1;
 | |
| 		u64 bad_seq                          : 1;
 | |
| 		u64 bad_term                         : 1;
 | |
| 		u64 hg2fld                           : 1;
 | |
| 		u64 hg2cc                            : 1;
 | |
| 		u64 badver                           : 1;
 | |
| 		u64 badrsp                           : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x20008 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_jabber
 | |
|  *
 | |
|  * CGX SMU Maximum Packet-Size Registers This register specifies the
 | |
|  * maximum size for packets, beyond which the SMU truncates. Internal:
 | |
|  * JABBER[CNT] is checked against the packet that arrives from SPU.  The
 | |
|  * checking is performed before preamble is stripped or PTP is inserted.
 | |
|  * If present, preamble is counted as eight bytes of the incoming packet.
 | |
|  */
 | |
| union cgxx_smux_rx_jabber {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_jabber_s {
 | |
| 		u64 cnt                              : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_jabber_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_JABBER(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_JABBER(u64 a)
 | |
| {
 | |
| 	return 0x20030 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_udd_skp
 | |
|  *
 | |
|  * CGX SMU User-Defined Data Skip Registers Internal: (1) The skip bytes
 | |
|  * are part of the packet and will be sent down the NCB packet interface
 | |
|  * and will be handled by NIX.  (2) The system can determine if the UDD
 | |
|  * bytes are included in the FCS check by using the FCSSEL field if the
 | |
|  * FCS check is enabled.  (3) Assume that the preamble/sfd is always at
 | |
|  * the start of the frame even before UDD bytes.  In most cases, there
 | |
|  * will be no preamble in these cases since it will be packet interface
 | |
|  * in direct communication to another packet interface (MAC to MAC)
 | |
|  * without a PHY involved.  (4) We can still do address filtering and
 | |
|  * control packet filtering if the user desires.  (5) In all cases, the
 | |
|  * UDD bytes will be sent down the packet interface as part of the
 | |
|  * packet.  The UDD bytes are never stripped from the actual packet.
 | |
|  */
 | |
| union cgxx_smux_rx_udd_skp {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_udd_skp_s {
 | |
| 		u64 len                              : 7;
 | |
| 		u64 reserved_7                       : 1;
 | |
| 		u64 fcssel                           : 1;
 | |
| 		u64 reserved_9_63                    : 55;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_udd_skp_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_UDD_SKP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_UDD_SKP(u64 a)
 | |
| {
 | |
| 	return 0x20040 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_wol_ctrl0
 | |
|  *
 | |
|  * CGX SMU RX Wake-on-LAN Control 0 Registers
 | |
|  */
 | |
| union cgxx_smux_rx_wol_ctrl0 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_wol_ctrl0_s {
 | |
| 		u64 dmac                             : 48;
 | |
| 		u64 pswd_len                         : 4;
 | |
| 		u64 reserved_52_63                   : 12;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_wol_ctrl0_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_WOL_CTRL0(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_WOL_CTRL0(u64 a)
 | |
| {
 | |
| 	return 0x20068 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_wol_ctrl1
 | |
|  *
 | |
|  * CGX SMU RX Wake-on-LAN Control 1 Registers
 | |
|  */
 | |
| union cgxx_smux_rx_wol_ctrl1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_wol_ctrl1_s {
 | |
| 		u64 pswd                             : 64;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_wol_ctrl1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_WOL_CTRL1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_WOL_CTRL1(u64 a)
 | |
| {
 | |
| 	return 0x20070 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_wol_int
 | |
|  *
 | |
|  * CGX SMU RX WOL Interrupt Registers These registers allow WOL
 | |
|  * interrupts to be sent to the control processor.
 | |
|  */
 | |
| union cgxx_smux_rx_wol_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_wol_int_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_wol_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT(u64 a)
 | |
| {
 | |
| 	return 0x20078 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_wol_int_ena_w1c
 | |
|  *
 | |
|  * CGX SMU RX WOL Interrupt Enable Clear Registers This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_smux_rx_wol_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_wol_int_ena_w1c_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_wol_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x20088 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_wol_int_ena_w1s
 | |
|  *
 | |
|  * CGX SMU RX WOL Interrupt Enable Set Registers This register sets
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_smux_rx_wol_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_wol_int_ena_w1s_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_wol_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x20090 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_rx_wol_int_w1s
 | |
|  *
 | |
|  * CGX SMU RX WOL Interrupt Set Registers This register sets interrupt
 | |
|  * bits.
 | |
|  */
 | |
| union cgxx_smux_rx_wol_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_rx_wol_int_w1s_s {
 | |
| 		u64 wol_rcvd                         : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_rx_wol_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_RX_WOL_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x20080 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_smac
 | |
|  *
 | |
|  * CGX SMU SMAC Registers
 | |
|  */
 | |
| union cgxx_smux_smac {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_smac_s {
 | |
| 		u64 smac                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_smac_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_SMAC(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_SMAC(u64 a)
 | |
| {
 | |
| 	return 0x20108 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_append
 | |
|  *
 | |
|  * CGX SMU TX Append Control Registers For more details on the
 | |
|  * interactions between FCS and PAD, see also the description of
 | |
|  * CGX()_SMU()_TX_MIN_PKT[MIN_SIZE].
 | |
|  */
 | |
| union cgxx_smux_tx_append {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_append_s {
 | |
| 		u64 preamble                         : 1;
 | |
| 		u64 pad                              : 1;
 | |
| 		u64 fcs_d                            : 1;
 | |
| 		u64 fcs_c                            : 1;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_append_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_APPEND(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_APPEND(u64 a)
 | |
| {
 | |
| 	return 0x20100 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_ctl
 | |
|  *
 | |
|  * CGX SMU Transmit Control Registers
 | |
|  */
 | |
| union cgxx_smux_tx_ctl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_ctl_s {
 | |
| 		u64 dic_en                           : 1;
 | |
| 		u64 uni_en                           : 1;
 | |
| 		u64 x4a_dis                          : 1;
 | |
| 		u64 mia_en                           : 1;
 | |
| 		u64 ls                               : 2;
 | |
| 		u64 ls_byp                           : 1;
 | |
| 		u64 l2p_bp_conv                      : 1;
 | |
| 		u64 hg_en                            : 1;
 | |
| 		u64 hg_pause_hgi                     : 2;
 | |
| 		u64 reserved_11_63                   : 53;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_ctl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_CTL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_CTL(u64 a)
 | |
| {
 | |
| 	return 0x20178 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_dack
 | |
|  *
 | |
|  * CGX SMU TX Drop Counters Registers
 | |
|  */
 | |
| union cgxx_smux_tx_dack {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_dack_s {
 | |
| 		u64 dpi_sdrop_ack                    : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_dack_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_DACK(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_DACK(u64 a)
 | |
| {
 | |
| 	return 0x201b0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_dcnt
 | |
|  *
 | |
|  * CGX SMU TX Drop Counters Registers
 | |
|  */
 | |
| union cgxx_smux_tx_dcnt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_dcnt_s {
 | |
| 		u64 dpi_sdrop_cnt                    : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_dcnt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_DCNT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_DCNT(u64 a)
 | |
| {
 | |
| 	return 0x201a8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_eee
 | |
|  *
 | |
|  * INTERNAL: CGX SMU TX EEE Configure Registers  Resvered. Internal:
 | |
|  * These registers control when SMU TX requests to enter or exist LPI.
 | |
|  * Those registers take effect only when EEE is supported and enabled for
 | |
|  * a given LMAC.
 | |
|  */
 | |
| union cgxx_smux_tx_eee {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_eee_s {
 | |
| 		u64 idle_thresh                      : 28;
 | |
| 		u64 reserved_28                      : 1;
 | |
| 		u64 force_lpi                        : 1;
 | |
| 		u64 wakeup                           : 1;
 | |
| 		u64 auto_lpi                         : 1;
 | |
| 		u64 idle_cnt                         : 28;
 | |
| 		u64 reserved_60_61                   : 2;
 | |
| 		u64 tx_lpi_wake                      : 1;
 | |
| 		u64 tx_lpi                           : 1;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_eee_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_EEE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_EEE(u64 a)
 | |
| {
 | |
| 	return 0x20190 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_eee_timer_status
 | |
|  *
 | |
|  * INTERNAL: CGX SMU TX EEE TIMER STATUS Registers  Reserved. Internal:
 | |
|  * These registers configure SMU TX EEE timing parameters.
 | |
|  */
 | |
| union cgxx_smux_tx_eee_timer_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_eee_timer_status_s {
 | |
| 		u64 lpi_wake_cnt                     : 16;
 | |
| 		u64 reserved_16_30                   : 15;
 | |
| 		u64 wake_timer_done                  : 1;
 | |
| 		u64 link_ok_cnt                      : 30;
 | |
| 		u64 reserved_62                      : 1;
 | |
| 		u64 link_timer_done                  : 1;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_eee_timer_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_EEE_TIMER_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_EEE_TIMER_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x201a0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_eee_timing
 | |
|  *
 | |
|  * INTERNAL: CGX SMU TX EEE TIMING Parameter Registers  Reserved.
 | |
|  * Internal: These registers configure SMU TX EEE timing parameters.
 | |
|  */
 | |
| union cgxx_smux_tx_eee_timing {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_eee_timing_s {
 | |
| 		u64 w_sys_tx_min                     : 16;
 | |
| 		u64 reserved_16_31                   : 16;
 | |
| 		u64 link_ok_min                      : 30;
 | |
| 		u64 reserved_62_63                   : 2;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_eee_timing_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_EEE_TIMING(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_EEE_TIMING(u64 a)
 | |
| {
 | |
| 	return 0x20198 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_ifg
 | |
|  *
 | |
|  * CGX SMU TX Interframe-Gap Cycles Registers Programming IFG1 and IFG2:
 | |
|  * * For XAUI/RXAUI/10G/25G/40G/50G/100G systems that require IEEE 802.3
 | |
|  * compatibility, the [IFG1]+[IFG2] sum must be 12. * In loopback mode,
 | |
|  * the [IFG1]+[IFG2] of local and remote parties must match exactly;
 | |
|  * otherwise loopback FIFO will overrun: CGX()_SMU()_TX_INT[LB_OVRFLW]. *
 | |
|  * When CGX()_SMU()_TX_CTL[DIC_EN] is set, [IFG1]+[IFG2] sum must be at
 | |
|  * least 8. The behavior of smaller values is un-determined. * When
 | |
|  * CGX()_SMU()_TX_CTL[DIC_EN] is cleared, the minimum value of
 | |
|  * [IFG1]+[IFG2] is 1 for 40G/50G/100G LMAC_TYPE configurations and 5 for
 | |
|  * all other values. The behavior of smaller values is un-determined.
 | |
|  * Internal: When CGX()_SMU()_TX_CTL[DIC_EN] is set, SMU TX treats
 | |
|  * ([IFG1]+[IFG2]) \< 8 as 8 for 40G/50G/100G MACs and ([IFG1]+[IFG2]) \<
 | |
|  * 8 as 8 for other MACs. When CGX()_SMU()_TX_CTL[DIC_EN] is cleared, SMU
 | |
|  * TX can work correctly with any IFG1 and IFG2.
 | |
|  */
 | |
| union cgxx_smux_tx_ifg {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_ifg_s {
 | |
| 		u64 ifg1                             : 4;
 | |
| 		u64 ifg2                             : 4;
 | |
| 		u64 mia_amt                          : 2;
 | |
| 		u64 reserved_10_15                   : 6;
 | |
| 		u64 mia_cnt                          : 8;
 | |
| 		u64 reserved_24_63                   : 40;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_ifg_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_IFG(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_IFG(u64 a)
 | |
| {
 | |
| 	return 0x20160 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_int
 | |
|  *
 | |
|  * CGX SMU TX Interrupt Registers
 | |
|  */
 | |
| union cgxx_smux_tx_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_int_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xchange                          : 1;
 | |
| 		u64 fake_commit                      : 1;
 | |
| 		u64 lb_undflw                        : 1;
 | |
| 		u64 lb_ovrflw                        : 1;
 | |
| 		u64 dpi_sdrop                        : 1;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_INT(u64 a)
 | |
| {
 | |
| 	return 0x20140 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_int_ena_w1c
 | |
|  *
 | |
|  * CGX SMU TX Interrupt Enable Clear Registers This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_smux_tx_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_int_ena_w1c_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xchange                          : 1;
 | |
| 		u64 fake_commit                      : 1;
 | |
| 		u64 lb_undflw                        : 1;
 | |
| 		u64 lb_ovrflw                        : 1;
 | |
| 		u64 dpi_sdrop                        : 1;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x20150 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_int_ena_w1s
 | |
|  *
 | |
|  * CGX SMU TX Interrupt Enable Set Registers This register sets interrupt
 | |
|  * enable bits.
 | |
|  */
 | |
| union cgxx_smux_tx_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_int_ena_w1s_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xchange                          : 1;
 | |
| 		u64 fake_commit                      : 1;
 | |
| 		u64 lb_undflw                        : 1;
 | |
| 		u64 lb_ovrflw                        : 1;
 | |
| 		u64 dpi_sdrop                        : 1;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x20158 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_int_w1s
 | |
|  *
 | |
|  * CGX SMU TX Interrupt Set Registers This register sets interrupt bits.
 | |
|  */
 | |
| union cgxx_smux_tx_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_int_w1s_s {
 | |
| 		u64 undflw                           : 1;
 | |
| 		u64 xchange                          : 1;
 | |
| 		u64 fake_commit                      : 1;
 | |
| 		u64 lb_undflw                        : 1;
 | |
| 		u64 lb_ovrflw                        : 1;
 | |
| 		u64 dpi_sdrop                        : 1;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x20148 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_min_pkt
 | |
|  *
 | |
|  * CGX SMU TX Minimum-Size-Packet Registers Internal: [MIN_SIZE] less
 | |
|  * than 16 will be ignored by hardware which will use 16 instead.
 | |
|  */
 | |
| union cgxx_smux_tx_min_pkt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_min_pkt_s {
 | |
| 		u64 min_size                         : 8;
 | |
| 		u64 reserved_8_63                    : 56;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_min_pkt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_MIN_PKT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_MIN_PKT(u64 a)
 | |
| {
 | |
| 	return 0x20118 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_pause_pkt_dmac
 | |
|  *
 | |
|  * CGX SMU TX PAUSE-Packet DMAC-Field Registers This register provides
 | |
|  * the DMAC value that is placed in outbound PAUSE packets.
 | |
|  */
 | |
| union cgxx_smux_tx_pause_pkt_dmac {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_pause_pkt_dmac_s {
 | |
| 		u64 dmac                             : 48;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_pause_pkt_dmac_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_DMAC(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_DMAC(u64 a)
 | |
| {
 | |
| 	return 0x20168 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_pause_pkt_interval
 | |
|  *
 | |
|  * CGX SMU TX PAUSE-Packet Transmission-Interval Registers This register
 | |
|  * specifies how often PAUSE packets are sent.
 | |
|  */
 | |
| union cgxx_smux_tx_pause_pkt_interval {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_pause_pkt_interval_s {
 | |
| 		u64 interval                         : 16;
 | |
| 		u64 hg2_intra_interval               : 16;
 | |
| 		u64 hg2_intra_en                     : 1;
 | |
| 		u64 reserved_33_63                   : 31;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_pause_pkt_interval_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_INTERVAL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_INTERVAL(u64 a)
 | |
| {
 | |
| 	return 0x20120 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_pause_pkt_time
 | |
|  *
 | |
|  * CGX SMU TX PAUSE Packet Time Registers
 | |
|  */
 | |
| union cgxx_smux_tx_pause_pkt_time {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_pause_pkt_time_s {
 | |
| 		u64 p_time                           : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_pause_pkt_time_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_TIME(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_TIME(u64 a)
 | |
| {
 | |
| 	return 0x20110 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_pause_pkt_type
 | |
|  *
 | |
|  * CGX SMU TX PAUSE-Packet P_TYPE-Field Registers This register provides
 | |
|  * the P_TYPE field that is placed in outbound PAUSE packets.
 | |
|  */
 | |
| union cgxx_smux_tx_pause_pkt_type {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_pause_pkt_type_s {
 | |
| 		u64 p_type                           : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_pause_pkt_type_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_TYPE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_PKT_TYPE(u64 a)
 | |
| {
 | |
| 	return 0x20170 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_pause_togo
 | |
|  *
 | |
|  * CGX SMU TX Time-to-Backpressure Registers
 | |
|  */
 | |
| union cgxx_smux_tx_pause_togo {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_pause_togo_s {
 | |
| 		u64 p_time                           : 16;
 | |
| 		u64 msg_time                         : 16;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_pause_togo_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_TOGO(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_TOGO(u64 a)
 | |
| {
 | |
| 	return 0x20130 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_pause_zero
 | |
|  *
 | |
|  * CGX SMU TX PAUSE Zero Registers
 | |
|  */
 | |
| union cgxx_smux_tx_pause_zero {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_pause_zero_s {
 | |
| 		u64 send                             : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_pause_zero_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_ZERO(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_PAUSE_ZERO(u64 a)
 | |
| {
 | |
| 	return 0x20138 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_soft_pause
 | |
|  *
 | |
|  * CGX SMU TX Soft PAUSE Registers
 | |
|  */
 | |
| union cgxx_smux_tx_soft_pause {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_soft_pause_s {
 | |
| 		u64 p_time                           : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_soft_pause_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_SOFT_PAUSE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_SOFT_PAUSE(u64 a)
 | |
| {
 | |
| 	return 0x20128 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_smu#_tx_thresh
 | |
|  *
 | |
|  * CGX SMU TX Threshold Registers
 | |
|  */
 | |
| union cgxx_smux_tx_thresh {
 | |
| 	u64 u;
 | |
| 	struct cgxx_smux_tx_thresh_s {
 | |
| 		u64 cnt                              : 12;
 | |
| 		u64 reserved_12_15                   : 4;
 | |
| 		u64 dpi_thresh                       : 5;
 | |
| 		u64 reserved_21_23                   : 3;
 | |
| 		u64 dpi_depth                        : 5;
 | |
| 		u64 reserved_29_31                   : 3;
 | |
| 		u64 ecnt                             : 12;
 | |
| 		u64 reserved_44_63                   : 20;
 | |
| 	} s;
 | |
| 	/* struct cgxx_smux_tx_thresh_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SMUX_TX_THRESH(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SMUX_TX_THRESH(u64 a)
 | |
| {
 | |
| 	return 0x20180 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_an_adv
 | |
|  *
 | |
|  * CGX SPU Autonegotiation Advertisement Registers Software programs this
 | |
|  * register with the contents of the AN-link code word base page to be
 | |
|  * transmitted during autonegotiation. (See IEEE 802.3 section 73.6 for
 | |
|  * details.) Any write operations to this register prior to completion of
 | |
|  * autonegotiation, as indicated by CGX()_SPU()_AN_STATUS[AN_COMPLETE],
 | |
|  * should be followed by a renegotiation in order for the new values to
 | |
|  * take effect. Renegotiation is initiated by setting
 | |
|  * CGX()_SPU()_AN_CONTROL[AN_RESTART]. Once autonegotiation has
 | |
|  * completed, software can examine this register along with
 | |
|  * CGX()_SPU()_AN_LP_BASE to determine the highest common denominator
 | |
|  * technology.
 | |
|  */
 | |
| union cgxx_spux_an_adv {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_an_adv_s {
 | |
| 		u64 s                                : 5;
 | |
| 		u64 e                                : 5;
 | |
| 		u64 pause                            : 1;
 | |
| 		u64 asm_dir                          : 1;
 | |
| 		u64 xnp_able                         : 1;
 | |
| 		u64 rf                               : 1;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 t                                : 5;
 | |
| 		u64 a1g_kx                           : 1;
 | |
| 		u64 a10g_kx4                         : 1;
 | |
| 		u64 a10g_kr                          : 1;
 | |
| 		u64 a40g_kr4                         : 1;
 | |
| 		u64 a40g_cr4                         : 1;
 | |
| 		u64 a100g_cr10                       : 1;
 | |
| 		u64 a100g_kp4                        : 1;
 | |
| 		u64 a100g_kr4                        : 1;
 | |
| 		u64 a100g_cr4                        : 1;
 | |
| 		u64 a25g_krs_crs                     : 1;
 | |
| 		u64 a25g_kr_cr                       : 1;
 | |
| 		u64 arsv                             : 12;
 | |
| 		u64 a25g_rs_fec_req                  : 1;
 | |
| 		u64 a25g_br_fec_req                  : 1;
 | |
| 		u64 fec_able                         : 1;
 | |
| 		u64 fec_req                          : 1;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_an_adv_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_AN_ADV(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_AN_ADV(u64 a)
 | |
| {
 | |
| 	return 0x10198 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_an_bp_status
 | |
|  *
 | |
|  * CGX SPU Autonegotiation Backplane Ethernet & BASE-R Copper Status
 | |
|  * Registers The contents of this register are updated during
 | |
|  * autonegotiation and are valid when CGX()_SPU()_AN_STATUS[AN_COMPLETE]
 | |
|  * is set. At that time, one of the port type bits will be set depending
 | |
|  * on the AN priority resolution. The port types are listed in order of
 | |
|  * decreasing priority. If a BASE-R type is negotiated then [FEC] or
 | |
|  * [RS_FEC] will be set to indicate whether/which FEC operation has been
 | |
|  * negotiated and will be clear otherwise.
 | |
|  */
 | |
| union cgxx_spux_an_bp_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_an_bp_status_s {
 | |
| 		u64 bp_an_able                       : 1;
 | |
| 		u64 n1g_kx                           : 1;
 | |
| 		u64 n10g_kx4                         : 1;
 | |
| 		u64 n10g_kr                          : 1;
 | |
| 		u64 n25g_kr1                         : 1;
 | |
| 		u64 n25g_cr1                         : 1;
 | |
| 		u64 n25g_krs_crs                     : 1;
 | |
| 		u64 n25g_kr_cr                       : 1;
 | |
| 		u64 n40g_kr4                         : 1;
 | |
| 		u64 n40g_cr4                         : 1;
 | |
| 		u64 n50g_kr2                         : 1;
 | |
| 		u64 n50g_cr2                         : 1;
 | |
| 		u64 n100g_cr10                       : 1;
 | |
| 		u64 n100g_kp4                        : 1;
 | |
| 		u64 n100g_kr4                        : 1;
 | |
| 		u64 n100g_cr4                        : 1;
 | |
| 		u64 fec                              : 1;
 | |
| 		u64 rs_fec                           : 1;
 | |
| 		u64 reserved_18_63                   : 46;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_an_bp_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_AN_BP_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_AN_BP_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x101b8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_an_control
 | |
|  *
 | |
|  * CGX SPU Autonegotiation Control Registers
 | |
|  */
 | |
| union cgxx_spux_an_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_an_control_s {
 | |
| 		u64 reserved_0_8                     : 9;
 | |
| 		u64 an_restart                       : 1;
 | |
| 		u64 reserved_10_11                   : 2;
 | |
| 		u64 an_en                            : 1;
 | |
| 		u64 xnp_en                           : 1;
 | |
| 		u64 reserved_14                      : 1;
 | |
| 		u64 an_reset                         : 1;
 | |
| 		u64 an_arb_link_chk_en               : 1;
 | |
| 		u64 usx_an_arb_link_chk_en           : 1;
 | |
| 		u64 reserved_18_63                   : 46;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_an_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_AN_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_AN_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x10188 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_an_lp_base
 | |
|  *
 | |
|  * CGX SPU Autonegotiation Link-Partner Base-Page Ability Registers This
 | |
|  * register captures the contents of the latest AN link code word base
 | |
|  * page received from the link partner during autonegotiation. (See IEEE
 | |
|  * 802.3 section 73.6 for details.) CGX()_SPU()_AN_STATUS[PAGE_RX] is set
 | |
|  * when this register is updated by hardware.
 | |
|  */
 | |
| union cgxx_spux_an_lp_base {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_an_lp_base_s {
 | |
| 		u64 s                                : 5;
 | |
| 		u64 e                                : 5;
 | |
| 		u64 pause                            : 1;
 | |
| 		u64 asm_dir                          : 1;
 | |
| 		u64 xnp_able                         : 1;
 | |
| 		u64 rf                               : 1;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 t                                : 5;
 | |
| 		u64 a1g_kx                           : 1;
 | |
| 		u64 a10g_kx4                         : 1;
 | |
| 		u64 a10g_kr                          : 1;
 | |
| 		u64 a40g_kr4                         : 1;
 | |
| 		u64 a40g_cr4                         : 1;
 | |
| 		u64 a100g_cr10                       : 1;
 | |
| 		u64 a100g_kp4                        : 1;
 | |
| 		u64 a100g_kr4                        : 1;
 | |
| 		u64 a100g_cr4                        : 1;
 | |
| 		u64 a25g_krs_crs                     : 1;
 | |
| 		u64 a25g_kr_cr                       : 1;
 | |
| 		u64 arsv                             : 12;
 | |
| 		u64 a25g_rs_fec_req                  : 1;
 | |
| 		u64 a25g_br_fec_req                  : 1;
 | |
| 		u64 fec_able                         : 1;
 | |
| 		u64 fec_req                          : 1;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_an_lp_base_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_AN_LP_BASE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_AN_LP_BASE(u64 a)
 | |
| {
 | |
| 	return 0x101a0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_an_lp_xnp
 | |
|  *
 | |
|  * CGX SPU Autonegotiation Link Partner Extended Next Page Ability
 | |
|  * Registers This register captures the contents of the latest next page
 | |
|  * code word received from the link partner during autonegotiation, if
 | |
|  * any. See IEEE 802.3 section 73.7.7 for details.
 | |
|  */
 | |
| union cgxx_spux_an_lp_xnp {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_an_lp_xnp_s {
 | |
| 		u64 m_u                              : 11;
 | |
| 		u64 toggle                           : 1;
 | |
| 		u64 ack2                             : 1;
 | |
| 		u64 mp                               : 1;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 u                                : 32;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_an_lp_xnp_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_AN_LP_XNP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_AN_LP_XNP(u64 a)
 | |
| {
 | |
| 	return 0x101b0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_an_status
 | |
|  *
 | |
|  * CGX SPU Autonegotiation Status Registers
 | |
|  */
 | |
| union cgxx_spux_an_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_an_status_s {
 | |
| 		u64 lp_an_able                       : 1;
 | |
| 		u64 reserved_1                       : 1;
 | |
| 		u64 link_status                      : 1;
 | |
| 		u64 an_able                          : 1;
 | |
| 		u64 rmt_flt                          : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 page_rx                          : 1;
 | |
| 		u64 xnp_stat                         : 1;
 | |
| 		u64 reserved_8                       : 1;
 | |
| 		u64 prl_flt                          : 1;
 | |
| 		u64 reserved_10_63                   : 54;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_an_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_AN_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_AN_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x10190 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_an_xnp_tx
 | |
|  *
 | |
|  * CGX SPU Autonegotiation Extended Next Page Transmit Registers Software
 | |
|  * programs this register with the contents of the AN message next page
 | |
|  * or unformatted next page link code word to be transmitted during
 | |
|  * autonegotiation. Next page exchange occurs after the base link code
 | |
|  * words have been exchanged if either end of the link segment sets the
 | |
|  * NP bit to 1, indicating that it has at least one next page to send.
 | |
|  * Once initiated, next page exchange continues until both ends of the
 | |
|  * link segment set their NP bits to 0. See IEEE 802.3 section 73.7.7 for
 | |
|  * details.
 | |
|  */
 | |
| union cgxx_spux_an_xnp_tx {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_an_xnp_tx_s {
 | |
| 		u64 m_u                              : 11;
 | |
| 		u64 toggle                           : 1;
 | |
| 		u64 ack2                             : 1;
 | |
| 		u64 mp                               : 1;
 | |
| 		u64 ack                              : 1;
 | |
| 		u64 np                               : 1;
 | |
| 		u64 u                                : 32;
 | |
| 		u64 reserved_48_63                   : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_an_xnp_tx_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_AN_XNP_TX(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_AN_XNP_TX(u64 a)
 | |
| {
 | |
| 	return 0x101a8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_algn_status
 | |
|  *
 | |
|  * CGX SPU Multilane BASE-R PCS Alignment-Status Registers This register
 | |
|  * implements the IEEE 802.3 multilane BASE-R PCS alignment status 1-4
 | |
|  * registers (3.50-3.53). It is valid only when the LPCS type is
 | |
|  * 40GBASE-R, 50GBASE-R, 100GBASE-R, (CGX()_CMR()_CONFIG[LMAC_TYPE] =
 | |
|  * CGX_LMAC_TYPES_E::FORTYG_R,FIFTYG_R,HUNDREDG_R), and always returns
 | |
|  * 0x0 for all other LPCS types. Service interfaces (lanes) 19-0 (100G)
 | |
|  * and 3-0 (all others) are mapped to PCS lanes 19-0 or 3-0 via
 | |
|  * CGX()_SPU()_BR_LANE_MAP()[LN_MAPPING]. For 100G, logical lane 0 fans
 | |
|  * out to service interfaces 0-4, logical lane 1 fans out to service
 | |
|  * interfaces 5-9, ... etc. For all other modes, logical lanes and
 | |
|  * service interfaces are identical. Logical interfaces (lanes) map to
 | |
|  * SerDes lanes via CGX()_CMR()_CONFIG[LANE_TO_SDS] (programmable).
 | |
|  */
 | |
| union cgxx_spux_br_algn_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_algn_status_s {
 | |
| 		u64 block_lock                       : 20;
 | |
| 		u64 reserved_20_29                   : 10;
 | |
| 		u64 alignd                           : 1;
 | |
| 		u64 reserved_31_40                   : 10;
 | |
| 		u64 marker_lock                      : 20;
 | |
| 		u64 reserved_61_63                   : 3;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_algn_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_ALGN_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_ALGN_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x10050 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_lane_map#
 | |
|  *
 | |
|  * CGX SPU 40,50,100GBASE-R Lane-Mapping Registers This register
 | |
|  * implements the IEEE 802.3 lane 0-19 mapping registers (3.400-3.403).
 | |
|  * It is valid only when the LPCS type is 40GBASE-R, 50GBASE-R,
 | |
|  * 100GBASE-R, USXGMII (CGX()_CMR()_CONFIG[LMAC_TYPE]), and always
 | |
|  * returns 0x0 for all other LPCS types. The LNx_MAPPING field for each
 | |
|  * programmed PCS lane (called service interface in 802.3) is valid when
 | |
|  * that lane has achieved alignment marker lock on the receive side (i.e.
 | |
|  * the associated CGX()_SPU()_BR_ALGN_STATUS[MARKER_LOCK] = 1), and is
 | |
|  * invalid otherwise. When valid, it returns the actual detected receive
 | |
|  * PCS lane number based on the received alignment marker contents
 | |
|  * received on that service interface.  In RS-FEC mode the LNx_MAPPING
 | |
|  * field is valid when that lane has achieved alignment marker lock on
 | |
|  * the receive side (i.e. the associated
 | |
|  * CGX()_SPU()_RSFEC_STATUS[AMPS_LOCK] = 1), and is invalid otherwise.
 | |
|  * When valid, it returns the actual detected receive FEC lane number
 | |
|  * based on the received alignment marker contents received on that
 | |
|  * logical lane therefore expect for RS-FEC that LNx_MAPPING = x.  The
 | |
|  * mapping is flexible because IEEE 802.3 allows multilane BASE-R receive
 | |
|  * lanes to be re-ordered. Note that for the transmit side, each logical
 | |
|  * lane is mapped to a physical SerDes lane based on the programming of
 | |
|  * CGX()_CMR()_CONFIG[LANE_TO_SDS]. For the receive side,
 | |
|  * CGX()_CMR()_CONFIG[LANE_TO_SDS] specifies the logical lane to physical
 | |
|  * SerDes lane mapping, and this register specifies the service interface
 | |
|  * (or lane) to PCS lane mapping.
 | |
|  */
 | |
| union cgxx_spux_br_lane_mapx {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_lane_mapx_s {
 | |
| 		u64 ln_mapping                       : 6;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_lane_mapx_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_LANE_MAPX(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_LANE_MAPX(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x10600 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_pmd_control
 | |
|  *
 | |
|  * CGX SPU BASE-R PMD Control Registers
 | |
|  */
 | |
| union cgxx_spux_br_pmd_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_pmd_control_s {
 | |
| 		u64 train_restart                    : 1;
 | |
| 		u64 train_en                         : 1;
 | |
| 		u64 use_lane_poly                    : 1;
 | |
| 		u64 max_wait_disable                 : 1;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	struct cgxx_spux_br_pmd_control_cn96xx {
 | |
| 		u64 train_restart                    : 1;
 | |
| 		u64 train_en                         : 1;
 | |
| 		u64 use_lane_poly                    : 1;
 | |
| 		u64 reserved_3_63                    : 61;
 | |
| 	} cn96xx;
 | |
| 	/* struct cgxx_spux_br_pmd_control_s cnf95xxp1; */
 | |
| 	/* struct cgxx_spux_br_pmd_control_cn96xx cnf95xxp2; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_PMD_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_PMD_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x100a8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_pmd_ld_cup
 | |
|  *
 | |
|  * INTERNAL:CGX SPU BASE-R PMD Local Device Coefficient Update Registers
 | |
|  * This register implements MDIO register 1.154 of 802.3-2012 Section 5
 | |
|  * CL45 for 10GBASE-R and and of 802.3by-2016 CL45 for 25GBASE-R. Note
 | |
|  * that for 10G, 25G LN0_ only is used.  It implements  MDIO registers
 | |
|  * 1.1300-1.1303 for all other BASE-R modes (40G, 50G, 100G) per
 | |
|  * 802.3bj-2014 CL45. Note that for 50G LN0_ and LN1_ only are used.  The
 | |
|  * fields in this register are read/write even though they are specified
 | |
|  * as read-only in 802.3.  The register is automatically cleared at the
 | |
|  * start of training. When link training is in progress, each field
 | |
|  * reflects the contents of the coefficient update field in the
 | |
|  * associated lane's outgoing training frame.  If
 | |
|  * CGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register
 | |
|  * must be updated by software during link training and hardware updates
 | |
|  * are disabled. If CGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear,
 | |
|  * this register is automatically updated by hardware, and it should not
 | |
|  * be written by software. The lane fields in this register are indexed
 | |
|  * by logical PCS lane ID.
 | |
|  */
 | |
| union cgxx_spux_br_pmd_ld_cup {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_pmd_ld_cup_s {
 | |
| 		u64 ln0_cup                          : 16;
 | |
| 		u64 ln1_cup                          : 16;
 | |
| 		u64 ln2_cup                          : 16;
 | |
| 		u64 ln3_cup                          : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_pmd_ld_cup_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LD_CUP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LD_CUP(u64 a)
 | |
| {
 | |
| 	return 0x100c8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_pmd_ld_rep
 | |
|  *
 | |
|  * INTERNAL:CGX SPU BASE-R PMD Local Device Status Report Registers  This
 | |
|  * register implements MDIO register 1.155 of 802.3-2012 Section 5 CL45
 | |
|  * for 10GBASE-R and and of 802.3by-2016 CL45 for 25GBASE-R. Note that
 | |
|  * for 10G, 25G LN0_ only is used.  It implements  MDIO registers
 | |
|  * 1.1400-1.1403 for all other BASE-R modes (40G, 50G, 100G) per
 | |
|  * 802.3bj-2014 CL45. Note that for 50G LN0_ and LN1_ only are used.  The
 | |
|  * fields in this register are read/write even though they are specified
 | |
|  * as read-only in 802.3.  The register is automatically cleared at the
 | |
|  * start of training. Each field reflects the contents of the status
 | |
|  * report field in the associated lane's outgoing training frame.  If
 | |
|  * CGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is set, then this register
 | |
|  * must be updated by software during link training and hardware updates
 | |
|  * are disabled. If CGX()_SPU_DBG_CONTROL[BR_PMD_TRAIN_SOFT_EN] is clear,
 | |
|  * this register is automatically updated by hardware, and it should not
 | |
|  * be written by software. The lane fields in this register are indexed
 | |
|  * by logical PCS lane ID.
 | |
|  */
 | |
| union cgxx_spux_br_pmd_ld_rep {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_pmd_ld_rep_s {
 | |
| 		u64 ln0_rep                          : 16;
 | |
| 		u64 ln1_rep                          : 16;
 | |
| 		u64 ln2_rep                          : 16;
 | |
| 		u64 ln3_rep                          : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_pmd_ld_rep_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LD_REP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LD_REP(u64 a)
 | |
| {
 | |
| 	return 0x100d0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_pmd_lp_cup
 | |
|  *
 | |
|  * INTERNAL:CGX SPU BASE-R PMD Link Partner Coefficient Update Registers
 | |
|  * This register implements MDIO register 1.152 of 802.3-2012 Section 5
 | |
|  * CL45 for 10GBASE-R and and of 802.3by-2016 CL45 for 25GBASE-R. Note
 | |
|  * that for 10G, 25G LN0_ only is used.  It implements  MDIO registers
 | |
|  * 1.1100-1.1103 for all other BASE-R modes (40G, 50G, 100G) per
 | |
|  * 802.3bj-2014 CL45. Note that for 50G LN0_ and LN1_ only are used.  The
 | |
|  * register is automatically cleared at the start of training. Each field
 | |
|  * reflects the contents of the coefficient update field in the lane's
 | |
|  * most recently received training frame. This register should not be
 | |
|  * written when link training is enabled, i.e. when
 | |
|  * CGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is set. The lane fields in this
 | |
|  * register are indexed by logical PCS lane ID.
 | |
|  */
 | |
| union cgxx_spux_br_pmd_lp_cup {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_pmd_lp_cup_s {
 | |
| 		u64 ln0_cup                          : 16;
 | |
| 		u64 ln1_cup                          : 16;
 | |
| 		u64 ln2_cup                          : 16;
 | |
| 		u64 ln3_cup                          : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_pmd_lp_cup_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LP_CUP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LP_CUP(u64 a)
 | |
| {
 | |
| 	return 0x100b8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_pmd_lp_rep
 | |
|  *
 | |
|  * INTERNAL:CGX SPU BASE-R PMD Link Partner Status Report Registers  This
 | |
|  * register implements MDIO register 1.153 of 802.3-2012 Section 5 CL45
 | |
|  * for 10GBASE-R and and of 802.3by-2016 CL45 for 25GBASE-R. Note that
 | |
|  * for 10G, 25G LN0_ only is used.  It implements  MDIO registers
 | |
|  * 1.1200-1.1203 for all other BASE-R modes (40G, 50G, 100G) per
 | |
|  * 802.3bj-2014 CL45. Note that for 50G LN0_ and LN1_ only are used.  The
 | |
|  * register is automatically cleared at the start of training. Each field
 | |
|  * reflects the contents of the coefficient update field in the lane's
 | |
|  * most recently received training frame. This register should not be
 | |
|  * written when link training is enabled, i.e. when
 | |
|  * CGX()_SPU()_BR_PMD_CONTROL[TRAIN_EN] is set. The lane fields in this
 | |
|  * register are indexed by logical PCS lane ID.
 | |
|  */
 | |
| union cgxx_spux_br_pmd_lp_rep {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_pmd_lp_rep_s {
 | |
| 		u64 ln0_rep                          : 16;
 | |
| 		u64 ln1_rep                          : 16;
 | |
| 		u64 ln2_rep                          : 16;
 | |
| 		u64 ln3_rep                          : 16;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_pmd_lp_rep_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LP_REP(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_PMD_LP_REP(u64 a)
 | |
| {
 | |
| 	return 0x100c0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_pmd_status
 | |
|  *
 | |
|  * INTERNAL:CGX SPU BASE-R PMD Status Registers  The lane fields in this
 | |
|  * register are indexed by logical PCS lane ID. The lane 0 field (LN0_*)
 | |
|  * is valid for 10GBASE-R, 25GBASE-R, 40GBASE-R, 50GBASE-R and
 | |
|  * 100GBASE-R. The lane 1 field (LN1_*) is valid for 40GBASE-R, 50GBASE-R
 | |
|  * and 100GBASE-R. The remaining fields (LN2_*, LN3_*) are only valid for
 | |
|  * 40GBASE-R and 100GBASE-R.
 | |
|  */
 | |
| union cgxx_spux_br_pmd_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_pmd_status_s {
 | |
| 		u64 ln0_train_status                 : 4;
 | |
| 		u64 ln1_train_status                 : 4;
 | |
| 		u64 ln2_train_status                 : 4;
 | |
| 		u64 ln3_train_status                 : 4;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_pmd_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_PMD_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_PMD_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x100b0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_status1
 | |
|  *
 | |
|  * CGX SPU BASE-R Status 1 Registers
 | |
|  */
 | |
| union cgxx_spux_br_status1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_status1_s {
 | |
| 		u64 blk_lock                         : 1;
 | |
| 		u64 hi_ber                           : 1;
 | |
| 		u64 prbs31                           : 1;
 | |
| 		u64 prbs9                            : 1;
 | |
| 		u64 reserved_4_11                    : 8;
 | |
| 		u64 rcv_lnk                          : 1;
 | |
| 		u64 reserved_13_63                   : 51;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_status1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_STATUS1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_STATUS1(u64 a)
 | |
| {
 | |
| 	return 0x10030 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_status2
 | |
|  *
 | |
|  * CGX SPU BASE-R Status 2 Registers This register implements a
 | |
|  * combination of the following IEEE 802.3 registers: * BASE-R PCS status
 | |
|  * 2 (MDIO address 3.33). * BASE-R BER high-order counter (MDIO address
 | |
|  * 3.44). * Errored-blocks high-order counter (MDIO address 3.45).  Note
 | |
|  * that the relative locations of some fields have been moved from IEEE
 | |
|  * 802.3 in order to make the register layout more software friendly: the
 | |
|  * BER counter high-order and low-order bits from sections 3.44 and 3.33
 | |
|  * have been combined into the contiguous, 22-bit [BER_CNT] field;
 | |
|  * likewise, the errored-blocks counter high-order and low-order bits
 | |
|  * from section 3.45 have been combined into the contiguous, 22-bit
 | |
|  * [ERR_BLKS] field.
 | |
|  */
 | |
| union cgxx_spux_br_status2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_status2_s {
 | |
| 		u64 reserved_0_13                    : 14;
 | |
| 		u64 latched_ber                      : 1;
 | |
| 		u64 latched_lock                     : 1;
 | |
| 		u64 ber_cnt                          : 22;
 | |
| 		u64 reserved_38_39                   : 2;
 | |
| 		u64 err_blks                         : 22;
 | |
| 		u64 reserved_62_63                   : 2;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_status2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_STATUS2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_STATUS2(u64 a)
 | |
| {
 | |
| 	return 0x10038 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_tp_control
 | |
|  *
 | |
|  * CGX SPU BASE-R Test-Pattern Control Registers Refer to the test
 | |
|  * pattern methodology described in 802.3 sections 49.2.8 and 82.2.10.
 | |
|  */
 | |
| union cgxx_spux_br_tp_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_tp_control_s {
 | |
| 		u64 dp_sel                           : 1;
 | |
| 		u64 tp_sel                           : 1;
 | |
| 		u64 rx_tp_en                         : 1;
 | |
| 		u64 tx_tp_en                         : 1;
 | |
| 		u64 prbs31_tx                        : 1;
 | |
| 		u64 prbs31_rx                        : 1;
 | |
| 		u64 prbs9_tx                         : 1;
 | |
| 		u64 scramble_tp                      : 2;
 | |
| 		u64 pr_tp_data_type                  : 1;
 | |
| 		u64 reserved_10_63                   : 54;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_tp_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_TP_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_TP_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x10040 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_tp_err_cnt
 | |
|  *
 | |
|  * CGX SPU BASE-R Test-Pattern Error-Count Registers This register
 | |
|  * provides the BASE-R PCS test-pattern error counter.
 | |
|  */
 | |
| union cgxx_spux_br_tp_err_cnt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_tp_err_cnt_s {
 | |
| 		u64 err_cnt                          : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_tp_err_cnt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_TP_ERR_CNT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_TP_ERR_CNT(u64 a)
 | |
| {
 | |
| 	return 0x10048 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_tp_seed_a
 | |
|  *
 | |
|  * CGX SPU BASE-R Test-Pattern Seed A Registers Refer to the test pattern
 | |
|  * methodology described in 802.3 sections 49.2.8 and 82.2.10.
 | |
|  */
 | |
| union cgxx_spux_br_tp_seed_a {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_tp_seed_a_s {
 | |
| 		u64 tp_seed_a                        : 58;
 | |
| 		u64 reserved_58_63                   : 6;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_tp_seed_a_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_TP_SEED_A(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_TP_SEED_A(u64 a)
 | |
| {
 | |
| 	return 0x10060 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_br_tp_seed_b
 | |
|  *
 | |
|  * CGX SPU BASE-R Test-Pattern Seed B Registers Refer to the test pattern
 | |
|  * methodology described in 802.3 sections 49.2.8 and 82.2.10.
 | |
|  */
 | |
| union cgxx_spux_br_tp_seed_b {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_br_tp_seed_b_s {
 | |
| 		u64 tp_seed_b                        : 58;
 | |
| 		u64 reserved_58_63                   : 6;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_br_tp_seed_b_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BR_TP_SEED_B(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BR_TP_SEED_B(u64 a)
 | |
| {
 | |
| 	return 0x10068 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_bx_status
 | |
|  *
 | |
|  * CGX SPU BASE-X Status Registers
 | |
|  */
 | |
| union cgxx_spux_bx_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_bx_status_s {
 | |
| 		u64 lsync                            : 4;
 | |
| 		u64 reserved_4_10                    : 7;
 | |
| 		u64 pattst                           : 1;
 | |
| 		u64 alignd                           : 1;
 | |
| 		u64 reserved_13_63                   : 51;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_bx_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_BX_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_BX_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x10028 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_control1
 | |
|  *
 | |
|  * CGX SPU Control 1 Registers
 | |
|  */
 | |
| union cgxx_spux_control1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_control1_s {
 | |
| 		u64 reserved_0_1                     : 2;
 | |
| 		u64 spd                              : 4;
 | |
| 		u64 spdsel0                          : 1;
 | |
| 		u64 reserved_7_10                    : 4;
 | |
| 		u64 lo_pwr                           : 1;
 | |
| 		u64 reserved_12                      : 1;
 | |
| 		u64 spdsel1                          : 1;
 | |
| 		u64 loopbck                          : 1;
 | |
| 		u64 reset                            : 1;
 | |
| 		u64 usxgmii_type                     : 3;
 | |
| 		u64 usxgmii_rate                     : 3;
 | |
| 		u64 disable_am                       : 1;
 | |
| 		u64 reserved_23_63                   : 41;
 | |
| 	} s;
 | |
| 	struct cgxx_spux_control1_cn96xxp1 {
 | |
| 		u64 reserved_0_1                     : 2;
 | |
| 		u64 spd                              : 4;
 | |
| 		u64 spdsel0                          : 1;
 | |
| 		u64 reserved_7_10                    : 4;
 | |
| 		u64 lo_pwr                           : 1;
 | |
| 		u64 reserved_12                      : 1;
 | |
| 		u64 spdsel1                          : 1;
 | |
| 		u64 loopbck                          : 1;
 | |
| 		u64 reset                            : 1;
 | |
| 		u64 usxgmii_type                     : 3;
 | |
| 		u64 usxgmii_rate                     : 3;
 | |
| 		u64 reserved_22_63                   : 42;
 | |
| 	} cn96xxp1;
 | |
| 	/* struct cgxx_spux_control1_s cn96xxp3; */
 | |
| 	/* struct cgxx_spux_control1_cn96xxp1 cnf95xxp1; */
 | |
| 	struct cgxx_spux_control1_cnf95xxp2 {
 | |
| 		u64 reserved_0_1                     : 2;
 | |
| 		u64 spd                              : 4;
 | |
| 		u64 spdsel0                          : 1;
 | |
| 		u64 reserved_7_10                    : 4;
 | |
| 		u64 lo_pwr                           : 1;
 | |
| 		u64 reserved_12                      : 1;
 | |
| 		u64 spdsel1                          : 1;
 | |
| 		u64 loopbck                          : 1;
 | |
| 		u64 reset                            : 1;
 | |
| 		u64 usxgmii_type                     : 3;
 | |
| 		u64 usxgmii_rate                     : 3;
 | |
| 		u64 reserved_22                      : 1;
 | |
| 		u64 reserved_23_63                   : 41;
 | |
| 	} cnf95xxp2;
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_CONTROL1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_CONTROL1(u64 a)
 | |
| {
 | |
| 	return 0x10000 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_control2
 | |
|  *
 | |
|  * CGX SPU Control 2 Registers
 | |
|  */
 | |
| union cgxx_spux_control2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_control2_s {
 | |
| 		u64 pcs_type                         : 4;
 | |
| 		u64 reserved_4_63                    : 60;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_control2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_CONTROL2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_CONTROL2(u64 a)
 | |
| {
 | |
| 	return 0x10018 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_fec_abil
 | |
|  *
 | |
|  * CGX SPU Forward Error Correction Ability Registers
 | |
|  */
 | |
| union cgxx_spux_fec_abil {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_fec_abil_s {
 | |
| 		u64 fec_abil                         : 1;
 | |
| 		u64 err_abil                         : 1;
 | |
| 		u64 reserved_2_63                    : 62;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_fec_abil_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_FEC_ABIL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_FEC_ABIL(u64 a)
 | |
| {
 | |
| 	return 0x100d8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_fec_control
 | |
|  *
 | |
|  * CGX SPU Forward Error Correction Control Registers
 | |
|  */
 | |
| union cgxx_spux_fec_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_fec_control_s {
 | |
| 		u64 fec_en                           : 2;
 | |
| 		u64 err_en                           : 1;
 | |
| 		u64 fec_byp_ind_en                   : 1;
 | |
| 		u64 fec_byp_cor_en                   : 1;
 | |
| 		u64 reserved_5_63                    : 59;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_fec_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_FEC_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_FEC_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x100e0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_fec_ln#_rsfec_err
 | |
|  *
 | |
|  * CGX SPU Reed-Solomon FEC Symbol Error Counter for FEC Lanes 0-3
 | |
|  * Registers This register is valid only when Reed-Solomon FEC is
 | |
|  * enabled. The symbol error counters are defined in 802.3 section
 | |
|  * 91.6.11 (for 100G and extended to 50G) and 802.3by-2016 section
 | |
|  * 108.6.9 (for 25G and extended to USXGMII). The counter is reset to all
 | |
|  * zeros when the register is read, and held at all ones in case of
 | |
|  * overflow.  The reset operation takes precedence over the increment
 | |
|  * operation; if the register is read on the same clock cycle as an
 | |
|  * increment operation, the counter is reset to all zeros and the
 | |
|  * increment operation is lost. The counters are writable for test
 | |
|  * purposes, rather than read-only as specified in IEEE 802.3.
 | |
|  */
 | |
| union cgxx_spux_fec_lnx_rsfec_err {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_fec_lnx_rsfec_err_s {
 | |
| 		u64 symb_err_cnt                     : 32;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_fec_lnx_rsfec_err_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_FEC_LNX_RSFEC_ERR(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_FEC_LNX_RSFEC_ERR(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x10900 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_int
 | |
|  *
 | |
|  * CGX SPU Interrupt Registers
 | |
|  */
 | |
| union cgxx_spux_int {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_int_s {
 | |
| 		u64 rx_link_up                       : 1;
 | |
| 		u64 rx_link_down                     : 1;
 | |
| 		u64 err_blk                          : 1;
 | |
| 		u64 bitlckls                         : 1;
 | |
| 		u64 synlos                           : 1;
 | |
| 		u64 algnlos                          : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 bip_err                          : 1;
 | |
| 		u64 fec_corr                         : 1;
 | |
| 		u64 fec_uncorr                       : 1;
 | |
| 		u64 an_page_rx                       : 1;
 | |
| 		u64 an_link_good                     : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 training_done                    : 1;
 | |
| 		u64 training_failure                 : 1;
 | |
| 		u64 fec_align_status                 : 1;
 | |
| 		u64 rsfec_corr                       : 1;
 | |
| 		u64 rsfec_uncorr                     : 1;
 | |
| 		u64 hi_ser                           : 1;
 | |
| 		u64 usx_an_lnk_st                    : 1;
 | |
| 		u64 usx_an_cpt                       : 1;
 | |
| 		u64 reserved_21_63                   : 43;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_int_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_INT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_INT(u64 a)
 | |
| {
 | |
| 	return 0x10220 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_int_ena_w1c
 | |
|  *
 | |
|  * CGX SPU Interrupt Enable Clear Registers This register clears
 | |
|  * interrupt enable bits.
 | |
|  */
 | |
| union cgxx_spux_int_ena_w1c {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_int_ena_w1c_s {
 | |
| 		u64 rx_link_up                       : 1;
 | |
| 		u64 rx_link_down                     : 1;
 | |
| 		u64 err_blk                          : 1;
 | |
| 		u64 bitlckls                         : 1;
 | |
| 		u64 synlos                           : 1;
 | |
| 		u64 algnlos                          : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 bip_err                          : 1;
 | |
| 		u64 fec_corr                         : 1;
 | |
| 		u64 fec_uncorr                       : 1;
 | |
| 		u64 an_page_rx                       : 1;
 | |
| 		u64 an_link_good                     : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 training_done                    : 1;
 | |
| 		u64 training_failure                 : 1;
 | |
| 		u64 fec_align_status                 : 1;
 | |
| 		u64 rsfec_corr                       : 1;
 | |
| 		u64 rsfec_uncorr                     : 1;
 | |
| 		u64 hi_ser                           : 1;
 | |
| 		u64 usx_an_lnk_st                    : 1;
 | |
| 		u64 usx_an_cpt                       : 1;
 | |
| 		u64 reserved_21_63                   : 43;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_int_ena_w1c_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_INT_ENA_W1C(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_INT_ENA_W1C(u64 a)
 | |
| {
 | |
| 	return 0x10230 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_int_ena_w1s
 | |
|  *
 | |
|  * CGX SPU Interrupt Enable Set Registers This register sets interrupt
 | |
|  * enable bits.
 | |
|  */
 | |
| union cgxx_spux_int_ena_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_int_ena_w1s_s {
 | |
| 		u64 rx_link_up                       : 1;
 | |
| 		u64 rx_link_down                     : 1;
 | |
| 		u64 err_blk                          : 1;
 | |
| 		u64 bitlckls                         : 1;
 | |
| 		u64 synlos                           : 1;
 | |
| 		u64 algnlos                          : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 bip_err                          : 1;
 | |
| 		u64 fec_corr                         : 1;
 | |
| 		u64 fec_uncorr                       : 1;
 | |
| 		u64 an_page_rx                       : 1;
 | |
| 		u64 an_link_good                     : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 training_done                    : 1;
 | |
| 		u64 training_failure                 : 1;
 | |
| 		u64 fec_align_status                 : 1;
 | |
| 		u64 rsfec_corr                       : 1;
 | |
| 		u64 rsfec_uncorr                     : 1;
 | |
| 		u64 hi_ser                           : 1;
 | |
| 		u64 usx_an_lnk_st                    : 1;
 | |
| 		u64 usx_an_cpt                       : 1;
 | |
| 		u64 reserved_21_63                   : 43;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_int_ena_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_INT_ENA_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_INT_ENA_W1S(u64 a)
 | |
| {
 | |
| 	return 0x10238 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_int_w1s
 | |
|  *
 | |
|  * CGX SPU Interrupt Set Registers This register sets interrupt bits.
 | |
|  */
 | |
| union cgxx_spux_int_w1s {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_int_w1s_s {
 | |
| 		u64 rx_link_up                       : 1;
 | |
| 		u64 rx_link_down                     : 1;
 | |
| 		u64 err_blk                          : 1;
 | |
| 		u64 bitlckls                         : 1;
 | |
| 		u64 synlos                           : 1;
 | |
| 		u64 algnlos                          : 1;
 | |
| 		u64 dbg_sync                         : 1;
 | |
| 		u64 bip_err                          : 1;
 | |
| 		u64 fec_corr                         : 1;
 | |
| 		u64 fec_uncorr                       : 1;
 | |
| 		u64 an_page_rx                       : 1;
 | |
| 		u64 an_link_good                     : 1;
 | |
| 		u64 an_complete                      : 1;
 | |
| 		u64 training_done                    : 1;
 | |
| 		u64 training_failure                 : 1;
 | |
| 		u64 fec_align_status                 : 1;
 | |
| 		u64 rsfec_corr                       : 1;
 | |
| 		u64 rsfec_uncorr                     : 1;
 | |
| 		u64 hi_ser                           : 1;
 | |
| 		u64 usx_an_lnk_st                    : 1;
 | |
| 		u64 usx_an_cpt                       : 1;
 | |
| 		u64 reserved_21_63                   : 43;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_int_w1s_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_INT_W1S(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_INT_W1S(u64 a)
 | |
| {
 | |
| 	return 0x10228 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_ln#_br_bip_err_cnt
 | |
|  *
 | |
|  * CGX SPU 40,50,100GBASE-R BIP Error-Counter Registers This register
 | |
|  * implements the IEEE 802.3 BIP error-counter registers for PCS lanes
 | |
|  * 0-19 (3.200-3.203). It is valid only when the LPCS type is 40GBASE-R,
 | |
|  * 50GBASE-R, 100GBASE-R, (CGX()_CMR()_CONFIG[LMAC_TYPE]), and always
 | |
|  * returns 0x0 for all other LPCS types. The counters are indexed by the
 | |
|  * RX PCS lane number based on the alignment marker detected on each lane
 | |
|  * and captured in CGX()_SPU()_BR_LANE_MAP(). Each counter counts the BIP
 | |
|  * errors for its PCS lane, and is held at all ones in case of overflow.
 | |
|  * The counters are reset to all zeros when this register is read by
 | |
|  * software.  The reset operation takes precedence over the increment
 | |
|  * operation; if the register is read on the same clock cycle as an
 | |
|  * increment operation, the counter is reset to all zeros and the
 | |
|  * increment operation is lost. The counters are writable for test
 | |
|  * purposes, rather than read-only as specified in IEEE 802.3.
 | |
|  */
 | |
| union cgxx_spux_lnx_br_bip_err_cnt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_lnx_br_bip_err_cnt_s {
 | |
| 		u64 bip_err_cnt                      : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_lnx_br_bip_err_cnt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_LNX_BR_BIP_ERR_CNT(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_LNX_BR_BIP_ERR_CNT(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x10500 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_ln#_fec_corr_blks
 | |
|  *
 | |
|  * CGX SPU FEC Corrected-Blocks Counters 0-19 Registers This register is
 | |
|  * valid only when the LPCS type is BASE-R
 | |
|  * (CGX()_CMR()_CONFIG[LMAC_TYPE]) and applies to BASE-R FEC and Reed-
 | |
|  * Solomon FEC (RS-FEC). When BASE-R FEC is enabled, the FEC corrected-
 | |
|  * block counters are defined in IEEE 802.3 section 74.8.4.1. Each
 | |
|  * corrected-blocks counter increments by one for a corrected FEC block,
 | |
|  * i.e. an FEC block that has been received with invalid parity on the
 | |
|  * associated PCS lane and has been corrected by the FEC decoder. The
 | |
|  * counter is reset to all zeros when the register is read, and held at
 | |
|  * all ones in case of overflow.  The reset operation takes precedence
 | |
|  * over the increment operation; if the register is read on the same
 | |
|  * clock cycle as an increment operation, the counter is reset to all
 | |
|  * zeros and the increment operation is lost. The counters are writable
 | |
|  * for test purposes, rather than read-only as specified in IEEE 802.3.
 | |
|  */
 | |
| union cgxx_spux_lnx_fec_corr_blks {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_lnx_fec_corr_blks_s {
 | |
| 		u64 ln_corr_blks                     : 32;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_lnx_fec_corr_blks_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_LNX_FEC_CORR_BLKS(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_LNX_FEC_CORR_BLKS(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x10700 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_ln#_fec_uncorr_blks
 | |
|  *
 | |
|  * CGX SPU FEC Uncorrected-Blocks Counters 0-19 Registers This register
 | |
|  * is valid only when the LPCS type is BASE-R
 | |
|  * (CGX()_CMR()_CONFIG[LMAC_TYPE]) and applies to BASE-R FEC and Reed-
 | |
|  * Solomon FEC (RS-FEC). When BASE-R FEC is enabled, the FEC corrected-
 | |
|  * block counters are defined in IEEE 802.3 section 74.8.4.2. Each
 | |
|  * uncorrected-blocks counter increments by one for an uncorrected FEC
 | |
|  * block, i.e. an FEC block that has been received with invalid parity on
 | |
|  * the associated PCS lane and has not been corrected by the FEC decoder.
 | |
|  * The counter is reset to all zeros when the register is read, and held
 | |
|  * at all ones in case of overflow.  The reset operation takes precedence
 | |
|  * over the increment operation; if the register is read on the same
 | |
|  * clock cycle as an increment operation, the counter is reset to all
 | |
|  * zeros and the increment operation is lost. The counters are writable
 | |
|  * for test purposes, rather than read-only as specified in IEEE 802.3.
 | |
|  */
 | |
| union cgxx_spux_lnx_fec_uncorr_blks {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_lnx_fec_uncorr_blks_s {
 | |
| 		u64 ln_uncorr_blks                   : 32;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_lnx_fec_uncorr_blks_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_LNX_FEC_UNCORR_BLKS(u64 a, u64 b)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_LNX_FEC_UNCORR_BLKS(u64 a, u64 b)
 | |
| {
 | |
| 	return 0x10800 + 0x40000 * a + 8 * b;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_lpcs_states
 | |
|  *
 | |
|  * CGX SPU BASE-X Transmit/Receive States Registers
 | |
|  */
 | |
| union cgxx_spux_lpcs_states {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_lpcs_states_s {
 | |
| 		u64 deskew_sm                        : 3;
 | |
| 		u64 reserved_3                       : 1;
 | |
| 		u64 deskew_am_found                  : 20;
 | |
| 		u64 bx_rx_sm                         : 2;
 | |
| 		u64 reserved_26_27                   : 2;
 | |
| 		u64 br_rx_sm                         : 3;
 | |
| 		u64 reserved_31_63                   : 33;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_lpcs_states_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_LPCS_STATES(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_LPCS_STATES(u64 a)
 | |
| {
 | |
| 	return 0x10208 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_misc_control
 | |
|  *
 | |
|  * CGX SPU Miscellaneous Control Registers "* RX logical PCS lane
 | |
|  * polarity vector \<3:0\> = [XOR_RXPLRT]\<3:0\> ^ {4{[RXPLRT]}}. * TX
 | |
|  * logical PCS lane polarity vector \<3:0\> = [XOR_TXPLRT]\<3:0\> ^
 | |
|  * {4{[TXPLRT]}}.  In short, keep [RXPLRT] and [TXPLRT] cleared, and use
 | |
|  * [XOR_RXPLRT] and [XOR_TXPLRT] fields to define the polarity per
 | |
|  * logical PCS lane. Only bit 0 of vector is used for 10GBASE-R, and only
 | |
|  * bits 1:0 of vector are used for RXAUI."
 | |
|  */
 | |
| union cgxx_spux_misc_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_misc_control_s {
 | |
| 		u64 txplrt                           : 1;
 | |
| 		u64 rxplrt                           : 1;
 | |
| 		u64 xor_txplrt                       : 4;
 | |
| 		u64 xor_rxplrt                       : 4;
 | |
| 		u64 intlv_rdisp                      : 1;
 | |
| 		u64 skip_after_term                  : 1;
 | |
| 		u64 rx_packet_dis                    : 1;
 | |
| 		u64 rx_edet_signal_ok                : 1;
 | |
| 		u64 reserved_14_63                   : 50;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_misc_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_MISC_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_MISC_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x10218 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_rsfec_corr
 | |
|  *
 | |
|  * CGX SPU Reed-Solomon FEC Corrected Codeword Counter Register This
 | |
|  * register implements the IEEE 802.3 RS-FEC corrected codewords counter
 | |
|  * described in 802.3 section 91.6.8 (for 100G and extended to 50G) and
 | |
|  * 802.3by-2016 section 108.6.7 (for 25G and extended to USXGMII).
 | |
|  */
 | |
| union cgxx_spux_rsfec_corr {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_rsfec_corr_s {
 | |
| 		u64 cw_cnt                           : 32;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_rsfec_corr_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_RSFEC_CORR(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_RSFEC_CORR(u64 a)
 | |
| {
 | |
| 	return 0x10088 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_rsfec_status
 | |
|  *
 | |
|  * CGX SPU Reed-Solomon FEC Status Registers This register implements the
 | |
|  * IEEE 802.3 RS-FEC status and lane mapping registers as described in
 | |
|  * 802.3 section 91.6 (for 100G and extended to 50G) and 802.3by-2016
 | |
|  * section 108-6 (for 25G and extended to USXGMII).
 | |
|  */
 | |
| union cgxx_spux_rsfec_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_rsfec_status_s {
 | |
| 		u64 fec_lane_mapping                 : 8;
 | |
| 		u64 fec_align_status                 : 1;
 | |
| 		u64 amps_lock                        : 4;
 | |
| 		u64 hi_ser                           : 1;
 | |
| 		u64 fec_byp_ind_abil                 : 1;
 | |
| 		u64 fec_byp_cor_abil                 : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_rsfec_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_RSFEC_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_RSFEC_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x10080 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_rsfec_uncorr
 | |
|  *
 | |
|  * CGX SPU Reed-Solomon FEC Uncorrected Codeword Counter Register This
 | |
|  * register implements the IEEE 802.3 RS-FEC uncorrected codewords
 | |
|  * counter described in 802.3 section 91.6.9 (for 100G and extended to
 | |
|  * 50G) and 802.3by-2016 section 108.6.8 (for 25G and extended to
 | |
|  * USXGMII).
 | |
|  */
 | |
| union cgxx_spux_rsfec_uncorr {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_rsfec_uncorr_s {
 | |
| 		u64 cw_cnt                           : 32;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_rsfec_uncorr_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_RSFEC_UNCORR(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_RSFEC_UNCORR(u64 a)
 | |
| {
 | |
| 	return 0x10090 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_rx_eee_wake
 | |
|  *
 | |
|  * INTERNAL: CGX SPU  RX EEE Wake Error Counter  Registers  Reserved.
 | |
|  * Internal: A counter that is incremented each time that the LPI receive
 | |
|  * state diagram enters the RX_WTF state indicating that a wake time
 | |
|  * fault has been detected.
 | |
|  */
 | |
| union cgxx_spux_rx_eee_wake {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_rx_eee_wake_s {
 | |
| 		u64 wtf_error_counter                : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_rx_eee_wake_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_RX_EEE_WAKE(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_RX_EEE_WAKE(u64 a)
 | |
| {
 | |
| 	return 0x103e0 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_rx_lpi_timing
 | |
|  *
 | |
|  * INTERNAL: CGX SPU RX EEE LPI Timing Parameters Registers  Reserved.
 | |
|  * Internal: This register specifies receiver LPI timing parameters Tqr,
 | |
|  * Twr and Twtf.
 | |
|  */
 | |
| union cgxx_spux_rx_lpi_timing {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_rx_lpi_timing_s {
 | |
| 		u64 twtf                             : 20;
 | |
| 		u64 twr                              : 20;
 | |
| 		u64 tqr                              : 20;
 | |
| 		u64 reserved_60_61                   : 2;
 | |
| 		u64 rx_lpi_fw                        : 1;
 | |
| 		u64 rx_lpi_en                        : 1;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_rx_lpi_timing_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_RX_LPI_TIMING(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_RX_LPI_TIMING(u64 a)
 | |
| {
 | |
| 	return 0x103c0 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_rx_lpi_timing2
 | |
|  *
 | |
|  * INTERNAL: CGX SPU RX EEE LPI Timing2 Parameters Registers  Reserved.
 | |
|  * Internal: This register specifies receiver LPI timing parameters
 | |
|  * hold_off_timer.
 | |
|  */
 | |
| union cgxx_spux_rx_lpi_timing2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_rx_lpi_timing2_s {
 | |
| 		u64 hold_off_timer                   : 20;
 | |
| 		u64 reserved_20_63                   : 44;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_rx_lpi_timing2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_RX_LPI_TIMING2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_RX_LPI_TIMING2(u64 a)
 | |
| {
 | |
| 	return 0x10420 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_rx_mrk_cnt
 | |
|  *
 | |
|  * CGX SPU Receiver Marker Interval Count Control Registers
 | |
|  */
 | |
| union cgxx_spux_rx_mrk_cnt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_rx_mrk_cnt_s {
 | |
| 		u64 mrk_cnt                          : 20;
 | |
| 		u64 reserved_20_43                   : 24;
 | |
| 		u64 by_mrk_100g                      : 1;
 | |
| 		u64 reserved_45_47                   : 3;
 | |
| 		u64 ram_mrk_cnt                      : 8;
 | |
| 		u64 reserved_56_63                   : 8;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_rx_mrk_cnt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_RX_MRK_CNT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_RX_MRK_CNT(u64 a)
 | |
| {
 | |
| 	return 0x103a0 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_spd_abil
 | |
|  *
 | |
|  * CGX SPU PCS Speed Ability Registers
 | |
|  */
 | |
| union cgxx_spux_spd_abil {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_spd_abil_s {
 | |
| 		u64 tengb                            : 1;
 | |
| 		u64 tenpasst                         : 1;
 | |
| 		u64 usxgmii                          : 1;
 | |
| 		u64 twentyfivegb                     : 1;
 | |
| 		u64 fortygb                          : 1;
 | |
| 		u64 fiftygb                          : 1;
 | |
| 		u64 hundredgb                        : 1;
 | |
| 		u64 reserved_7_63                    : 57;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_spd_abil_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_SPD_ABIL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_SPD_ABIL(u64 a)
 | |
| {
 | |
| 	return 0x10010 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_status1
 | |
|  *
 | |
|  * CGX SPU Status 1 Registers
 | |
|  */
 | |
| union cgxx_spux_status1 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_status1_s {
 | |
| 		u64 reserved_0                       : 1;
 | |
| 		u64 lpable                           : 1;
 | |
| 		u64 rcv_lnk                          : 1;
 | |
| 		u64 reserved_3_6                     : 4;
 | |
| 		u64 flt                              : 1;
 | |
| 		u64 rx_lpi_indication                : 1;
 | |
| 		u64 tx_lpi_indication                : 1;
 | |
| 		u64 rx_lpi_received                  : 1;
 | |
| 		u64 tx_lpi_received                  : 1;
 | |
| 		u64 reserved_12_63                   : 52;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_status1_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_STATUS1(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_STATUS1(u64 a)
 | |
| {
 | |
| 	return 0x10008 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_status2
 | |
|  *
 | |
|  * CGX SPU Status 2 Registers
 | |
|  */
 | |
| union cgxx_spux_status2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_status2_s {
 | |
| 		u64 tengb_r                          : 1;
 | |
| 		u64 tengb_x                          : 1;
 | |
| 		u64 tengb_w                          : 1;
 | |
| 		u64 tengb_t                          : 1;
 | |
| 		u64 usxgmii_r                        : 1;
 | |
| 		u64 twentyfivegb_r                   : 1;
 | |
| 		u64 fortygb_r                        : 1;
 | |
| 		u64 fiftygb_r                        : 1;
 | |
| 		u64 hundredgb_r                      : 1;
 | |
| 		u64 reserved_9                       : 1;
 | |
| 		u64 rcvflt                           : 1;
 | |
| 		u64 xmtflt                           : 1;
 | |
| 		u64 reserved_12_13                   : 2;
 | |
| 		u64 dev                              : 2;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_status2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_STATUS2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_STATUS2(u64 a)
 | |
| {
 | |
| 	return 0x10020 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_tx_lpi_timing
 | |
|  *
 | |
|  * INTERNAL: CGX SPU TX EEE LPI Timing Parameters Registers  Reserved.
 | |
|  * Internal: Transmit LPI timing parameters Tsl, Tql and Tul
 | |
|  */
 | |
| union cgxx_spux_tx_lpi_timing {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_tx_lpi_timing_s {
 | |
| 		u64 tql                              : 19;
 | |
| 		u64 reserved_19_31                   : 13;
 | |
| 		u64 tul                              : 12;
 | |
| 		u64 reserved_44_47                   : 4;
 | |
| 		u64 tsl                              : 12;
 | |
| 		u64 reserved_60                      : 1;
 | |
| 		u64 tx_lpi_ignore_twl                : 1;
 | |
| 		u64 tx_lpi_fw                        : 1;
 | |
| 		u64 tx_lpi_en                        : 1;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_tx_lpi_timing_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_TX_LPI_TIMING(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_TX_LPI_TIMING(u64 a)
 | |
| {
 | |
| 	return 0x10400 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_tx_lpi_timing2
 | |
|  *
 | |
|  * INTERNAL: CGX SPU TX EEE LPI Timing2 Parameters Registers  Reserved.
 | |
|  * Internal: This register specifies transmit LPI timer parameters.
 | |
|  */
 | |
| union cgxx_spux_tx_lpi_timing2 {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_tx_lpi_timing2_s {
 | |
| 		u64 t1u                              : 8;
 | |
| 		u64 reserved_8_11                    : 4;
 | |
| 		u64 twl                              : 12;
 | |
| 		u64 reserved_24_31                   : 8;
 | |
| 		u64 twl2                             : 12;
 | |
| 		u64 reserved_44_47                   : 4;
 | |
| 		u64 tbyp                             : 12;
 | |
| 		u64 reserved_60_63                   : 4;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_tx_lpi_timing2_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_TX_LPI_TIMING2(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_TX_LPI_TIMING2(u64 a)
 | |
| {
 | |
| 	return 0x10440 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_tx_mrk_cnt
 | |
|  *
 | |
|  * CGX SPU Transmitter Marker Interval Count Control Registers
 | |
|  */
 | |
| union cgxx_spux_tx_mrk_cnt {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_tx_mrk_cnt_s {
 | |
| 		u64 mrk_cnt                          : 20;
 | |
| 		u64 reserved_20_43                   : 24;
 | |
| 		u64 by_mrk_100g                      : 1;
 | |
| 		u64 reserved_45_47                   : 3;
 | |
| 		u64 ram_mrk_cnt                      : 8;
 | |
| 		u64 reserved_56_63                   : 8;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_tx_mrk_cnt_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_TX_MRK_CNT(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_TX_MRK_CNT(u64 a)
 | |
| {
 | |
| 	return 0x10380 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_usx_an_adv
 | |
|  *
 | |
|  * CGX SPU USXGMII Autonegotiation Advertisement Registers Software
 | |
|  * programs this register with the contents of the AN-link code word base
 | |
|  * page to be transmitted during autonegotiation. Any write operations to
 | |
|  * this register prior to completion of autonegotiation should be
 | |
|  * followed by a renegotiation in order for the new values to take
 | |
|  * effect. Once autonegotiation has completed, software can examine this
 | |
|  * register along with CGX()_SPU()_USX_AN_ADV to determine the highest
 | |
|  * common denominator technology. The format for this register is from
 | |
|  * USXGMII Multiport specification section 1.1.2 Table 2.
 | |
|  */
 | |
| union cgxx_spux_usx_an_adv {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_usx_an_adv_s {
 | |
| 		u64 set                              : 1;
 | |
| 		u64 reserved_1_6                     : 6;
 | |
| 		u64 eee_clk_stop_abil                : 1;
 | |
| 		u64 eee_abil                         : 1;
 | |
| 		u64 spd                              : 3;
 | |
| 		u64 dplx                             : 1;
 | |
| 		u64 reserved_13_14                   : 2;
 | |
| 		u64 lnk_st                           : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_usx_an_adv_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_USX_AN_ADV(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_USX_AN_ADV(u64 a)
 | |
| {
 | |
| 	return 0x101d0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_usx_an_control
 | |
|  *
 | |
|  * CGX SPU USXGMII Autonegotiation Control Register
 | |
|  */
 | |
| union cgxx_spux_usx_an_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_usx_an_control_s {
 | |
| 		u64 reserved_0_8                     : 9;
 | |
| 		u64 rst_an                           : 1;
 | |
| 		u64 reserved_10_11                   : 2;
 | |
| 		u64 an_en                            : 1;
 | |
| 		u64 reserved_13_14                   : 2;
 | |
| 		u64 an_reset                         : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_usx_an_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_USX_AN_CONTROL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_USX_AN_CONTROL(u64 a)
 | |
| {
 | |
| 	return 0x101c0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_usx_an_expansion
 | |
|  *
 | |
|  * CGX SPU USXGMII Autonegotiation Expansion Register This register is
 | |
|  * only used to signal page reception.
 | |
|  */
 | |
| union cgxx_spux_usx_an_expansion {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_usx_an_expansion_s {
 | |
| 		u64 reserved_0                       : 1;
 | |
| 		u64 an_page_received                 : 1;
 | |
| 		u64 next_page_able                   : 1;
 | |
| 		u64 reserved_3_63                    : 61;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_usx_an_expansion_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_USX_AN_EXPANSION(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_USX_AN_EXPANSION(u64 a)
 | |
| {
 | |
| 	return 0x101e0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_usx_an_flow_ctrl
 | |
|  *
 | |
|  * CGX SPU USXGMII Flow Control Registers This register is used by
 | |
|  * software to affect USXGMII AN hardware behavior.
 | |
|  */
 | |
| union cgxx_spux_usx_an_flow_ctrl {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_usx_an_flow_ctrl_s {
 | |
| 		u64 start_idle_detect                : 1;
 | |
| 		u64 reserved_1_63                    : 63;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_usx_an_flow_ctrl_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_USX_AN_FLOW_CTRL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_USX_AN_FLOW_CTRL(u64 a)
 | |
| {
 | |
| 	return 0x101e8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_usx_an_link_timer
 | |
|  *
 | |
|  * CGX SPU USXGMII Link Timer Registers This is the link timer register.
 | |
|  */
 | |
| union cgxx_spux_usx_an_link_timer {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_usx_an_link_timer_s {
 | |
| 		u64 count                            : 16;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_usx_an_link_timer_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_USX_AN_LINK_TIMER(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_USX_AN_LINK_TIMER(u64 a)
 | |
| {
 | |
| 	return 0x101f0 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_usx_an_lp_abil
 | |
|  *
 | |
|  * CGX SPU USXGMII Autonegotiation Link-Partner Advertisement Registers
 | |
|  * This register captures the contents of the latest AN link code word
 | |
|  * base page received from the link partner during autonegotiation. This
 | |
|  * is register 5 per IEEE 802.3, Clause 37.
 | |
|  * CGX()_SPU()_USX_AN_EXPANSION[AN_PAGE_RECEIVED] is set when this
 | |
|  * register is updated by hardware.
 | |
|  */
 | |
| union cgxx_spux_usx_an_lp_abil {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_usx_an_lp_abil_s {
 | |
| 		u64 set                              : 1;
 | |
| 		u64 reserved_1_6                     : 6;
 | |
| 		u64 eee_clk_stop_abil                : 1;
 | |
| 		u64 eee_abil                         : 1;
 | |
| 		u64 spd                              : 3;
 | |
| 		u64 dplx                             : 1;
 | |
| 		u64 reserved_13_14                   : 2;
 | |
| 		u64 lnk_st                           : 1;
 | |
| 		u64 reserved_16_63                   : 48;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_usx_an_lp_abil_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_USX_AN_LP_ABIL(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_USX_AN_LP_ABIL(u64 a)
 | |
| {
 | |
| 	return 0x101d8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu#_usx_an_status
 | |
|  *
 | |
|  * CGX SPU USXGMII Autonegotiation Status Register
 | |
|  */
 | |
| union cgxx_spux_usx_an_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spux_usx_an_status_s {
 | |
| 		u64 extnd                            : 1;
 | |
| 		u64 reserved_1                       : 1;
 | |
| 		u64 lnk_st                           : 1;
 | |
| 		u64 an_abil                          : 1;
 | |
| 		u64 rmt_flt                          : 1;
 | |
| 		u64 an_cpt                           : 1;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spux_usx_an_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPUX_USX_AN_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPUX_USX_AN_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x101c8 + 0x40000 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu_dbg_control
 | |
|  *
 | |
|  * CGX SPU Debug Control Registers
 | |
|  */
 | |
| union cgxx_spu_dbg_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spu_dbg_control_s {
 | |
| 		u64 marker_rxp                       : 15;
 | |
| 		u64 reserved_15                      : 1;
 | |
| 		u64 scramble_dis                     : 1;
 | |
| 		u64 reserved_17_18                   : 2;
 | |
| 		u64 br_pmd_train_soft_en             : 1;
 | |
| 		u64 reserved_20_27                   : 8;
 | |
| 		u64 timestamp_norm_dis               : 1;
 | |
| 		u64 an_nonce_match_dis               : 1;
 | |
| 		u64 br_ber_mon_dis                   : 1;
 | |
| 		u64 rf_cw_mon_erly_restart_dis       : 1;
 | |
| 		u64 us_clk_period                    : 12;
 | |
| 		u64 ms_clk_period                    : 12;
 | |
| 		u64 reserved_56_63                   : 8;
 | |
| 	} s;
 | |
| 	struct cgxx_spu_dbg_control_cn96xxp1 {
 | |
| 		u64 marker_rxp                       : 15;
 | |
| 		u64 reserved_15                      : 1;
 | |
| 		u64 scramble_dis                     : 1;
 | |
| 		u64 reserved_17_18                   : 2;
 | |
| 		u64 br_pmd_train_soft_en             : 1;
 | |
| 		u64 reserved_20_27                   : 8;
 | |
| 		u64 timestamp_norm_dis               : 1;
 | |
| 		u64 an_nonce_match_dis               : 1;
 | |
| 		u64 br_ber_mon_dis                   : 1;
 | |
| 		u64 reserved_31                      : 1;
 | |
| 		u64 us_clk_period                    : 12;
 | |
| 		u64 ms_clk_period                    : 12;
 | |
| 		u64 reserved_56_63                   : 8;
 | |
| 	} cn96xxp1;
 | |
| 	/* struct cgxx_spu_dbg_control_s cn96xxp3; */
 | |
| 	/* struct cgxx_spu_dbg_control_cn96xxp1 cnf95xxp1; */
 | |
| 	/* struct cgxx_spu_dbg_control_s cnf95xxp2; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPU_DBG_CONTROL(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPU_DBG_CONTROL(void)
 | |
| {
 | |
| 	return 0x10300;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu_sds#_skew_status
 | |
|  *
 | |
|  * CGX SPU SerDes Lane Skew Status Registers This register provides
 | |
|  * SerDes lane skew status. One register per physical SerDes lane.
 | |
|  */
 | |
| union cgxx_spu_sdsx_skew_status {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spu_sdsx_skew_status_s {
 | |
| 		u64 skew_status                      : 32;
 | |
| 		u64 reserved_32_63                   : 32;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spu_sdsx_skew_status_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPU_SDSX_SKEW_STATUS(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPU_SDSX_SKEW_STATUS(u64 a)
 | |
| {
 | |
| 	return 0x10340 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu_sds#_states
 | |
|  *
 | |
|  * CGX SPU SerDes States Registers This register provides SerDes lane
 | |
|  * states. One register per physical SerDes lane.
 | |
|  */
 | |
| union cgxx_spu_sdsx_states {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spu_sdsx_states_s {
 | |
| 		u64 bx_sync_sm                       : 4;
 | |
| 		u64 br_sh_cnt                        : 11;
 | |
| 		u64 br_block_lock                    : 1;
 | |
| 		u64 br_sh_invld_cnt                  : 7;
 | |
| 		u64 reserved_23                      : 1;
 | |
| 		u64 fec_sync_cnt                     : 4;
 | |
| 		u64 fec_block_sync                   : 1;
 | |
| 		u64 reserved_29                      : 1;
 | |
| 		u64 an_rx_sm                         : 2;
 | |
| 		u64 an_arb_sm                        : 3;
 | |
| 		u64 reserved_35                      : 1;
 | |
| 		u64 train_lock_bad_markers           : 3;
 | |
| 		u64 train_lock_found_1st_marker      : 1;
 | |
| 		u64 train_frame_lock                 : 1;
 | |
| 		u64 train_code_viol                  : 1;
 | |
| 		u64 train_sm                         : 3;
 | |
| 		u64 reserved_45_47                   : 3;
 | |
| 		u64 am_lock_sm                       : 2;
 | |
| 		u64 am_lock_invld_cnt                : 2;
 | |
| 		u64 reserved_52_63                   : 12;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spu_sdsx_states_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPU_SDSX_STATES(u64 a)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPU_SDSX_STATES(u64 a)
 | |
| {
 | |
| 	return 0x10360 + 8 * a;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Register (RSL) cgx#_spu_usxgmii_control
 | |
|  *
 | |
|  * CGX SPU Common USXGMII Control Register This register is the common
 | |
|  * control register that enables USXGMII Mode. The fields in this
 | |
|  * register are preserved across any LMAC soft-resets. For an LMAC in
 | |
|  * soft- reset state in USXGMII mode, the CGX will transmit Remote Fault
 | |
|  * BASE-R blocks.
 | |
|  */
 | |
| union cgxx_spu_usxgmii_control {
 | |
| 	u64 u;
 | |
| 	struct cgxx_spu_usxgmii_control_s {
 | |
| 		u64 enable                           : 1;
 | |
| 		u64 usxgmii_type                     : 3;
 | |
| 		u64 sds_id                           : 2;
 | |
| 		u64 reserved_6_63                    : 58;
 | |
| 	} s;
 | |
| 	/* struct cgxx_spu_usxgmii_control_s cn; */
 | |
| };
 | |
| 
 | |
| static inline u64 CGXX_SPU_USXGMII_CONTROL(void)
 | |
| 	__attribute__ ((pure, always_inline));
 | |
| static inline u64 CGXX_SPU_USXGMII_CONTROL(void)
 | |
| {
 | |
| 	return 0x10920;
 | |
| }
 | |
| 
 | |
| #endif /* __CSRS_CGX_H__ */
 |