13859Sml29623 /* 23859Sml29623 * CDDL HEADER START 33859Sml29623 * 43859Sml29623 * The contents of this file are subject to the terms of the 53859Sml29623 * Common Development and Distribution License (the "License"). 63859Sml29623 * You may not use this file except in compliance with the License. 73859Sml29623 * 83859Sml29623 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 93859Sml29623 * or http://www.opensolaris.org/os/licensing. 103859Sml29623 * See the License for the specific language governing permissions 113859Sml29623 * and limitations under the License. 123859Sml29623 * 133859Sml29623 * When distributing Covered Code, include this CDDL HEADER in each 143859Sml29623 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 153859Sml29623 * If applicable, add the following below this CDDL HEADER, with the 163859Sml29623 * fields enclosed by brackets "[]" replaced with your own identifying 173859Sml29623 * information: Portions Copyright [yyyy] [name of copyright owner] 183859Sml29623 * 193859Sml29623 * CDDL HEADER END 203859Sml29623 */ 213859Sml29623 /* 226028Ssbehera * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 233859Sml29623 * Use is subject to license terms. 243859Sml29623 */ 253859Sml29623 263859Sml29623 #ifndef _SYS_MAC_NXGE_MAC_HW_H 273859Sml29623 #define _SYS_MAC_NXGE_MAC_HW_H 283859Sml29623 293859Sml29623 #pragma ident "%Z%%M% %I% %E% SMI" 303859Sml29623 313859Sml29623 #ifdef __cplusplus 323859Sml29623 extern "C" { 333859Sml29623 #endif 343859Sml29623 353859Sml29623 #include <nxge_defs.h> 363859Sml29623 373859Sml29623 /* -------------------------- From May's template --------------------------- */ 383859Sml29623 393859Sml29623 #define NXGE_1GETHERMIN 255 403859Sml29623 #define NXGE_ETHERMIN 97 413859Sml29623 #define NXGE_MAX_HEADER 250 423859Sml29623 433859Sml29623 /* Hardware reset */ 443859Sml29623 typedef enum { 453859Sml29623 NXGE_TX_DISABLE, /* Disable Tx side */ 463859Sml29623 NXGE_RX_DISABLE, /* Disable Rx side */ 473859Sml29623 NXGE_CHIP_RESET /* Full chip reset */ 483859Sml29623 } nxge_reset_t; 493859Sml29623 503859Sml29623 #define NXGE_DELAY_AFTER_TXRX 10000 /* 10ms after idling rx/tx */ 513859Sml29623 #define NXGE_DELAY_AFTER_RESET 1000 /* 1ms after the reset */ 523859Sml29623 #define NXGE_DELAY_AFTER_EE_RESET 10000 /* 10ms after EEPROM reset */ 533859Sml29623 #define NXGE_DELAY_AFTER_LINK_RESET 13 /* 13 Us after link reset */ 543859Sml29623 #define NXGE_LINK_RESETS 8 /* Max PHY resets to wait for */ 553859Sml29623 /* linkup */ 563859Sml29623 573859Sml29623 #define FILTER_M_CTL 0xDCEF1 583859Sml29623 #define HASH_BITS 8 593859Sml29623 #define NMCFILTER_BITS (1 << HASH_BITS) 603859Sml29623 #define HASH_REG_WIDTH 16 613859Sml29623 #define BROADCAST_HASH_WORD 0x0f 623859Sml29623 #define BROADCAST_HASH_BIT 0x8000 633859Sml29623 #define NMCFILTER_REGS NMCFILTER_BITS / HASH_REG_WIDTH 643859Sml29623 /* Number of multicast filter regs */ 653859Sml29623 663859Sml29623 /* -------------------------------------------------------------------------- */ 673859Sml29623 683859Sml29623 #define XMAC_PORT_0 0 693859Sml29623 #define XMAC_PORT_1 1 703859Sml29623 #define BMAC_PORT_0 2 713859Sml29623 #define BMAC_PORT_1 3 723859Sml29623 733859Sml29623 #define MAC_RESET_WAIT 10 /* usecs */ 743859Sml29623 753859Sml29623 #define MAC_ADDR_REG_MASK 0xFFFF 763859Sml29623 774732Sdavemq /* 784732Sdavemq * Neptune port PHY type and Speed encoding. 794732Sdavemq * 804732Sdavemq * Per port, 4 bits are reserved for port speed (1G/10G) and 4 bits 814732Sdavemq * are reserved for port PHY type (Copper/Fibre). Bits 0 thru 3 are for port0 824732Sdavemq * speed, bits 4 thru 7 are for port1 speed, bits 8 thru 11 are for port2 speed 834732Sdavemq * and bits 12 thru 15 are for port3 speed. Thus, the first 16 bits hold the 844732Sdavemq * speed encoding for the 4 ports. The next 16 bits (16 thru 31) hold the phy 854732Sdavemq * type encoding for the ports 0 thru 3. 864732Sdavemq * 874732Sdavemq * p3phy p2phy p1phy p0phy p3spd p2spd p1spd p0spd 884732Sdavemq * | | | | | | | | 894732Sdavemq * --- --- --- --- --- --- --- --- 904732Sdavemq * / \ / \ / \ / \ / \ / \ / \ / \ 914732Sdavemq * 31..28 27..24 23..20 19..16 15..12 11.. 8 7.. 4 3.. 0 924732Sdavemq */ 934977Sraghus 944732Sdavemq #define NXGE_PORT_SPD_NONE 0x0 954732Sdavemq #define NXGE_PORT_SPD_1G 0x1 964732Sdavemq #define NXGE_PORT_SPD_10G 0x2 974732Sdavemq #define NXGE_PORT_SPD_RSVD 0x7 984732Sdavemq 994732Sdavemq #define NXGE_PHY_NONE 0x0 1004732Sdavemq #define NXGE_PHY_COPPER 0x1 1014732Sdavemq #define NXGE_PHY_FIBRE 0x2 1024977Sraghus #define NXGE_PHY_SERDES 0x3 1034977Sraghus #define NXGE_PHY_RGMII_FIBER 0x4 104*6835Syc148097 #define NXGE_PHY_TN1010 0x5 1054732Sdavemq #define NXGE_PHY_RSVD 0x7 1064732Sdavemq 1074732Sdavemq #define NXGE_PORT_SPD_SHIFT 0 1084732Sdavemq #define NXGE_PORT_SPD_MASK 0x0f 1094732Sdavemq 1104732Sdavemq #define NXGE_PHY_SHIFT 16 1114732Sdavemq #define NXGE_PHY_MASK 0x0f0000 1124732Sdavemq 113*6835Syc148097 /* 114*6835Syc148097 * "xgc" as a possible value for the device property "phy-type" 115*6835Syc148097 * was intended for the portmode == PORT_10G_COPPER case. But 116*6835Syc148097 * the first 10G copper network I/O device available is the 117*6835Syc148097 * TN1010 based copper XAUI card and we use PORT_10G_TN1010 or 118*6835Syc148097 * PORT_1G_TN1010 as the portmode, so PORT_10G_COPPER is never 119*6835Syc148097 * used as portmode. The driver code related to PORT_10G_COPPER 120*6835Syc148097 * is kept in the driver as a place holder for possble future 121*6835Syc148097 * 10G copper devices. 122*6835Syc148097 */ 123*6835Syc148097 #define NXGE_PORT_10G_COPPER (NXGE_PORT_SPD_10G | \ 1244732Sdavemq (NXGE_PHY_COPPER << NXGE_PHY_SHIFT)) 125*6835Syc148097 126*6835Syc148097 #define NXGE_PORT_1G_COPPER (NXGE_PORT_SPD_1G | \ 1274732Sdavemq (NXGE_PHY_COPPER << NXGE_PHY_SHIFT)) 1284732Sdavemq #define NXGE_PORT_1G_FIBRE (NXGE_PORT_SPD_1G | \ 1294732Sdavemq (NXGE_PHY_FIBRE << NXGE_PHY_SHIFT)) 1304732Sdavemq #define NXGE_PORT_10G_FIBRE (NXGE_PORT_SPD_10G | \ 1314732Sdavemq (NXGE_PHY_FIBRE << NXGE_PHY_SHIFT)) 1324977Sraghus #define NXGE_PORT_1G_SERDES (NXGE_PORT_SPD_1G | \ 1334977Sraghus (NXGE_PHY_SERDES << NXGE_PHY_SHIFT)) 1344977Sraghus #define NXGE_PORT_10G_SERDES (NXGE_PORT_SPD_10G | \ 1354977Sraghus (NXGE_PHY_SERDES << NXGE_PHY_SHIFT)) 1365196Ssbehera #define NXGE_PORT_1G_RGMII_FIBER (NXGE_PORT_SPD_1G | \ 1374977Sraghus (NXGE_PHY_RGMII_FIBER << NXGE_PHY_SHIFT)) 138*6835Syc148097 139*6835Syc148097 /* The speed of TN1010 will be determined by each nxge instance */ 140*6835Syc148097 #define NXGE_PORT_TN1010 (NXGE_PORT_SPD_NONE | \ 141*6835Syc148097 (NXGE_PHY_TN1010 << NXGE_PHY_SHIFT)) 142*6835Syc148097 1434732Sdavemq #define NXGE_PORT_NONE (NXGE_PORT_SPD_NONE | \ 1444732Sdavemq (NXGE_PHY_NONE << NXGE_PHY_SHIFT)) 1454732Sdavemq #define NXGE_PORT_RSVD (NXGE_PORT_SPD_RSVD | \ 1464732Sdavemq (NXGE_PHY_RSVD << NXGE_PHY_SHIFT)) 1474732Sdavemq 1484732Sdavemq #define NXGE_PORT_TYPE_MASK (NXGE_PORT_SPD_MASK | NXGE_PHY_MASK) 1494732Sdavemq 1504732Sdavemq /* number of bits used for phy/spd encoding per port */ 1514732Sdavemq #define NXGE_PORT_TYPE_SHIFT 4 1524732Sdavemq 1533859Sml29623 /* Network Modes */ 1543859Sml29623 1553859Sml29623 typedef enum nxge_network_mode { 1563859Sml29623 NET_2_10GE_FIBER = 1, 1573859Sml29623 NET_2_10GE_COPPER, 1583859Sml29623 NET_1_10GE_FIBER_3_1GE_COPPER, 1593859Sml29623 NET_1_10GE_COPPER_3_1GE_COPPER, 1603859Sml29623 NET_1_10GE_FIBER_3_1GE_FIBER, 1613859Sml29623 NET_1_10GE_COPPER_3_1GE_FIBER, 1623859Sml29623 NET_2_1GE_FIBER_2_1GE_COPPER, 1633859Sml29623 NET_QGE_FIBER, 1643859Sml29623 NET_QGE_COPPER 1653859Sml29623 } nxge_network_mode_t; 1663859Sml29623 1673859Sml29623 typedef enum nxge_port { 1683859Sml29623 PORT_TYPE_XMAC = 1, 1696495Sspeer PORT_TYPE_BMAC, 1706495Sspeer PORT_TYPE_LOGICAL 1713859Sml29623 } nxge_port_t; 1723859Sml29623 1733859Sml29623 typedef enum nxge_port_mode { 1743859Sml29623 PORT_1G_COPPER = 1, 1753859Sml29623 PORT_1G_FIBER, 1763859Sml29623 PORT_10G_COPPER, 1774977Sraghus PORT_10G_FIBER, 178*6835Syc148097 PORT_10G_SERDES, /* Port0 or 1 of Alonso or Monza */ 179*6835Syc148097 PORT_1G_SERDES, /* Port0 or 1 of Alonso or Monza */ 180*6835Syc148097 PORT_1G_RGMII_FIBER, /* Port2 or 3 of Alonso or ARTM */ 1816495Sspeer PORT_HSP_MODE, 182*6835Syc148097 PORT_LOGICAL, 183*6835Syc148097 PORT_1G_TN1010, /* Teranetics PHY in 1G mode */ 184*6835Syc148097 PORT_10G_TN1010 /* Teranetics PHY in 10G mode */ 1853859Sml29623 } nxge_port_mode_t; 1863859Sml29623 1873859Sml29623 typedef enum nxge_linkchk_mode { 1883859Sml29623 LINKCHK_INTR = 1, 1893859Sml29623 LINKCHK_TIMER 1903859Sml29623 } nxge_linkchk_mode_t; 1913859Sml29623 1923859Sml29623 typedef enum { 1933859Sml29623 LINK_INTR_STOP, 1943859Sml29623 LINK_INTR_START 1953859Sml29623 } link_intr_enable_t, *link_intr_enable_pt; 1963859Sml29623 1973859Sml29623 typedef enum { 1983859Sml29623 LINK_MONITOR_STOP, 1994693Stm144005 LINK_MONITOR_START, 2004693Stm144005 LINK_MONITOR_STOPPING 2013859Sml29623 } link_mon_enable_t, *link_mon_enable_pt; 2023859Sml29623 2033859Sml29623 typedef enum { 2043859Sml29623 NO_XCVR, 2053859Sml29623 INT_MII_XCVR, 2063859Sml29623 EXT_MII_XCVR, 2073859Sml29623 PCS_XCVR, 2085572Ssbehera XPCS_XCVR, 2096495Sspeer HSP_XCVR, 2106495Sspeer LOGICAL_XCVR 2113859Sml29623 } xcvr_inuse_t; 2123859Sml29623 2133859Sml29623 /* macros for port offset calculations */ 2143859Sml29623 2153859Sml29623 #define PORT_1_OFFSET 0x6000 2163859Sml29623 #define PORT_GT_1_OFFSET 0x4000 2173859Sml29623 2183859Sml29623 /* XMAC address macros */ 2193859Sml29623 2203859Sml29623 #define XMAC_ADDR_OFFSET_0 0 2213859Sml29623 #define XMAC_ADDR_OFFSET_1 0x6000 2223859Sml29623 2233859Sml29623 #define XMAC_ADDR_OFFSET(port_num)\ 2243859Sml29623 (XMAC_ADDR_OFFSET_0 + ((port_num) * PORT_1_OFFSET)) 2253859Sml29623 2263859Sml29623 #define XMAC_REG_ADDR(port_num, reg)\ 2273859Sml29623 (FZC_MAC + (XMAC_ADDR_OFFSET(port_num)) + (reg)) 2283859Sml29623 2293859Sml29623 #define XMAC_PORT_ADDR(port_num)\ 2303859Sml29623 (FZC_MAC + XMAC_ADDR_OFFSET(port_num)) 2313859Sml29623 2323859Sml29623 /* BMAC address macros */ 2333859Sml29623 2343859Sml29623 #define BMAC_ADDR_OFFSET_2 0x0C000 2353859Sml29623 #define BMAC_ADDR_OFFSET_3 0x10000 2363859Sml29623 2373859Sml29623 #define BMAC_ADDR_OFFSET(port_num)\ 2383859Sml29623 (BMAC_ADDR_OFFSET_2 + (((port_num) - 2) * PORT_GT_1_OFFSET)) 2393859Sml29623 2403859Sml29623 #define BMAC_REG_ADDR(port_num, reg)\ 2413859Sml29623 (FZC_MAC + (BMAC_ADDR_OFFSET(port_num)) + (reg)) 2423859Sml29623 2433859Sml29623 #define BMAC_PORT_ADDR(port_num)\ 2443859Sml29623 (FZC_MAC + BMAC_ADDR_OFFSET(port_num)) 2453859Sml29623 2463859Sml29623 /* PCS address macros */ 2473859Sml29623 2483859Sml29623 #define PCS_ADDR_OFFSET_0 0x04000 2493859Sml29623 #define PCS_ADDR_OFFSET_1 0x0A000 2503859Sml29623 #define PCS_ADDR_OFFSET_2 0x0E000 2513859Sml29623 #define PCS_ADDR_OFFSET_3 0x12000 2523859Sml29623 2533859Sml29623 #define PCS_ADDR_OFFSET(port_num)\ 2543859Sml29623 ((port_num <= 1) ? \ 2553859Sml29623 (PCS_ADDR_OFFSET_0 + (port_num) * PORT_1_OFFSET) : \ 2563859Sml29623 (PCS_ADDR_OFFSET_2 + (((port_num) - 2) * PORT_GT_1_OFFSET))) 2573859Sml29623 2583859Sml29623 #define PCS_REG_ADDR(port_num, reg)\ 2593859Sml29623 (FZC_MAC + (PCS_ADDR_OFFSET((port_num)) + (reg))) 2603859Sml29623 2613859Sml29623 #define PCS_PORT_ADDR(port_num)\ 2623859Sml29623 (FZC_MAC + (PCS_ADDR_OFFSET(port_num))) 2633859Sml29623 2643859Sml29623 /* XPCS address macros */ 2653859Sml29623 2663859Sml29623 #define XPCS_ADDR_OFFSET_0 0x02000 2673859Sml29623 #define XPCS_ADDR_OFFSET_1 0x08000 2683859Sml29623 #define XPCS_ADDR_OFFSET(port_num)\ 2693859Sml29623 (XPCS_ADDR_OFFSET_0 + ((port_num) * PORT_1_OFFSET)) 2703859Sml29623 2713859Sml29623 #define XPCS_ADDR(port_num, reg)\ 2723859Sml29623 (FZC_MAC + (XPCS_ADDR_OFFSET((port_num)) + (reg))) 2733859Sml29623 2743859Sml29623 #define XPCS_PORT_ADDR(port_num)\ 2753859Sml29623 (FZC_MAC + (XPCS_ADDR_OFFSET(port_num))) 2763859Sml29623 2773859Sml29623 /* ESR address macro */ 2783859Sml29623 #define ESR_ADDR_OFFSET 0x14000 2793859Sml29623 #define ESR_ADDR(reg)\ 2803859Sml29623 (FZC_MAC + (ESR_ADDR_OFFSET) + (reg)) 2813859Sml29623 2823859Sml29623 /* MIF address macros */ 2833859Sml29623 #define MIF_ADDR_OFFSET 0x16000 2843859Sml29623 #define MIF_ADDR(reg)\ 2853859Sml29623 (FZC_MAC + (MIF_ADDR_OFFSET) + (reg)) 2863859Sml29623 2873859Sml29623 /* BMAC registers offset */ 2883859Sml29623 #define BTXMAC_SW_RST_REG 0x000 /* TX MAC software reset */ 2893859Sml29623 #define BRXMAC_SW_RST_REG 0x008 /* RX MAC software reset */ 2903859Sml29623 #define MAC_SEND_PAUSE_REG 0x010 /* send pause command */ 2913859Sml29623 #define BTXMAC_STATUS_REG 0x020 /* TX MAC status */ 2923859Sml29623 #define BRXMAC_STATUS_REG 0x028 /* RX MAC status */ 2933859Sml29623 #define BMAC_CTRL_STAT_REG 0x030 /* MAC control status */ 2943859Sml29623 #define BTXMAC_STAT_MSK_REG 0x040 /* TX MAC mask */ 2953859Sml29623 #define BRXMAC_STAT_MSK_REG 0x048 /* RX MAC mask */ 2963859Sml29623 #define BMAC_C_S_MSK_REG 0x050 /* MAC control mask */ 2973859Sml29623 #define TXMAC_CONFIG_REG 0x060 /* TX MAC config */ 2983859Sml29623 /* cfg register bitmap */ 2993859Sml29623 3003859Sml29623 typedef union _btxmac_config_t { 3013859Sml29623 uint64_t value; 3023859Sml29623 3033859Sml29623 struct { 3043859Sml29623 #if defined(_BIG_ENDIAN) 3053859Sml29623 uint32_t msw; /* Most significant word */ 3063859Sml29623 uint32_t lsw; /* Least significant word */ 3073859Sml29623 #elif defined(_LITTLE_ENDIAN) 3083859Sml29623 uint32_t lsw; /* Least significant word */ 3093859Sml29623 uint32_t msw; /* Most significant word */ 3103859Sml29623 #endif 3113859Sml29623 } val; 3123859Sml29623 struct { 3133859Sml29623 #if defined(_BIG_ENDIAN) 3143859Sml29623 uint32_t w1; 3153859Sml29623 #endif 3163859Sml29623 struct { 3173859Sml29623 #if defined(_BIT_FIELDS_HTOL) 3183859Sml29623 uint32_t rsrvd : 22; 3193859Sml29623 uint32_t hdx_ctrl2 : 1; 3203859Sml29623 uint32_t no_fcs : 1; 3213859Sml29623 uint32_t hdx_ctrl : 7; 3223859Sml29623 uint32_t txmac_enable : 1; 3233859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 3243859Sml29623 uint32_t txmac_enable : 1; 3253859Sml29623 uint32_t hdx_ctrl : 7; 3263859Sml29623 uint32_t no_fcs : 1; 3273859Sml29623 uint32_t hdx_ctrl2 : 1; 3283859Sml29623 uint32_t rsrvd : 22; 3293859Sml29623 #endif 3303859Sml29623 } w0; 3313859Sml29623 3323859Sml29623 #if defined(_LITTLE_ENDIAN) 3333859Sml29623 uint32_t w1; 3343859Sml29623 #endif 3353859Sml29623 } bits; 3363859Sml29623 } btxmac_config_t, *p_btxmac_config_t; 3373859Sml29623 3383859Sml29623 #define RXMAC_CONFIG_REG 0x068 /* RX MAC config */ 3393859Sml29623 3403859Sml29623 typedef union _brxmac_config_t { 3413859Sml29623 uint64_t value; 3423859Sml29623 3433859Sml29623 struct { 3443859Sml29623 #if defined(_BIG_ENDIAN) 3453859Sml29623 uint32_t msw; /* Most significant word */ 3463859Sml29623 uint32_t lsw; /* Least significant word */ 3473859Sml29623 #elif defined(_LITTLE_ENDIAN) 3483859Sml29623 uint32_t lsw; /* Least significant word */ 3493859Sml29623 uint32_t msw; /* Most significant word */ 3503859Sml29623 #endif 3513859Sml29623 } val; 3523859Sml29623 struct { 3533859Sml29623 #if defined(_BIG_ENDIAN) 3543859Sml29623 uint32_t w1; 3553859Sml29623 #endif 3563859Sml29623 struct { 3573859Sml29623 #if defined(_BIT_FIELDS_HTOL) 3583859Sml29623 uint32_t rsrvd : 20; 3593859Sml29623 uint32_t mac_reg_sw_test : 2; 3603859Sml29623 uint32_t mac2ipp_pkt_cnt_en : 1; 3613859Sml29623 uint32_t rx_crs_extend_en : 1; 3623859Sml29623 uint32_t error_chk_dis : 1; 3633859Sml29623 uint32_t addr_filter_en : 1; 3643859Sml29623 uint32_t hash_filter_en : 1; 3653859Sml29623 uint32_t promiscuous_group : 1; 3663859Sml29623 uint32_t promiscuous : 1; 3673859Sml29623 uint32_t strip_fcs : 1; 3683859Sml29623 uint32_t strip_pad : 1; 3693859Sml29623 uint32_t rxmac_enable : 1; 3703859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 3713859Sml29623 uint32_t rxmac_enable : 1; 3723859Sml29623 uint32_t strip_pad : 1; 3733859Sml29623 uint32_t strip_fcs : 1; 3743859Sml29623 uint32_t promiscuous : 1; 3753859Sml29623 uint32_t promiscuous_group : 1; 3763859Sml29623 uint32_t hash_filter_en : 1; 3773859Sml29623 uint32_t addr_filter_en : 1; 3783859Sml29623 uint32_t error_chk_dis : 1; 3793859Sml29623 uint32_t rx_crs_extend_en : 1; 3803859Sml29623 uint32_t mac2ipp_pkt_cnt_en : 1; 3813859Sml29623 uint32_t mac_reg_sw_test : 2; 3823859Sml29623 uint32_t rsrvd : 20; 3833859Sml29623 #endif 3843859Sml29623 } w0; 3853859Sml29623 3863859Sml29623 #if defined(_LITTLE_ENDIAN) 3873859Sml29623 uint32_t w1; 3883859Sml29623 #endif 3893859Sml29623 } bits; 3903859Sml29623 } brxmac_config_t, *p_brxmac_config_t; 3913859Sml29623 3923859Sml29623 #define MAC_CTRL_CONFIG_REG 0x070 /* MAC control config */ 3933859Sml29623 #define MAC_XIF_CONFIG_REG 0x078 /* XIF config */ 3943859Sml29623 3953859Sml29623 typedef union _bxif_config_t { 3963859Sml29623 uint64_t value; 3973859Sml29623 3983859Sml29623 struct { 3993859Sml29623 #if defined(_BIG_ENDIAN) 4003859Sml29623 uint32_t msw; /* Most significant word */ 4013859Sml29623 uint32_t lsw; /* Least significant word */ 4023859Sml29623 #elif defined(_LITTLE_ENDIAN) 4033859Sml29623 uint32_t lsw; /* Least significant word */ 4043859Sml29623 uint32_t msw; /* Most significant word */ 4053859Sml29623 #endif 4063859Sml29623 } val; 4073859Sml29623 struct { 4083859Sml29623 #if defined(_BIG_ENDIAN) 4093859Sml29623 uint32_t w1; 4103859Sml29623 #endif 4113859Sml29623 struct { 4123859Sml29623 #if defined(_BIT_FIELDS_HTOL) 4133859Sml29623 uint32_t rsrvd2 : 24; 4143859Sml29623 uint32_t sel_clk_25mhz : 1; 4153859Sml29623 uint32_t led_polarity : 1; 4163859Sml29623 uint32_t force_led_on : 1; 4173859Sml29623 uint32_t used : 1; 4183859Sml29623 uint32_t gmii_mode : 1; 4193859Sml29623 uint32_t rsrvd : 1; 4203859Sml29623 uint32_t loopback : 1; 4213859Sml29623 uint32_t tx_output_en : 1; 4223859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 4233859Sml29623 uint32_t tx_output_en : 1; 4243859Sml29623 uint32_t loopback : 1; 4253859Sml29623 uint32_t rsrvd : 1; 4263859Sml29623 uint32_t gmii_mode : 1; 4273859Sml29623 uint32_t used : 1; 4283859Sml29623 uint32_t force_led_on : 1; 4293859Sml29623 uint32_t led_polarity : 1; 4303859Sml29623 uint32_t sel_clk_25mhz : 1; 4313859Sml29623 uint32_t rsrvd2 : 24; 4323859Sml29623 #endif 4333859Sml29623 } w0; 4343859Sml29623 4353859Sml29623 #if defined(_LITTLE_ENDIAN) 4363859Sml29623 uint32_t w1; 4373859Sml29623 #endif 4383859Sml29623 } bits; 4393859Sml29623 } bxif_config_t, *p_bxif_config_t; 4403859Sml29623 4413859Sml29623 #define BMAC_MIN_REG 0x0a0 /* min frame size */ 4423859Sml29623 #define BMAC_MAX_REG 0x0a8 /* max frame size reg */ 4433859Sml29623 #define MAC_PA_SIZE_REG 0x0b0 /* num of preamble bytes */ 4443859Sml29623 #define MAC_CTRL_TYPE_REG 0x0c8 /* type field of MAC ctrl */ 4453859Sml29623 #define BMAC_ADDR0_REG 0x100 /* MAC unique ad0 reg (HI 0) */ 4463859Sml29623 #define BMAC_ADDR1_REG 0x108 /* MAC unique ad1 reg */ 4473859Sml29623 #define BMAC_ADDR2_REG 0x110 /* MAC unique ad2 reg */ 4483859Sml29623 #define BMAC_ADDR3_REG 0x118 /* MAC alt ad0 reg (HI 1) */ 4493859Sml29623 #define BMAC_ADDR4_REG 0x120 /* MAC alt ad0 reg */ 4503859Sml29623 #define BMAC_ADDR5_REG 0x128 /* MAC alt ad0 reg */ 4513859Sml29623 #define BMAC_ADDR6_REG 0x130 /* MAC alt ad1 reg (HI 2) */ 4523859Sml29623 #define BMAC_ADDR7_REG 0x138 /* MAC alt ad1 reg */ 4533859Sml29623 #define BMAC_ADDR8_REG 0x140 /* MAC alt ad1 reg */ 4543859Sml29623 #define BMAC_ADDR9_REG 0x148 /* MAC alt ad2 reg (HI 3) */ 4553859Sml29623 #define BMAC_ADDR10_REG 0x150 /* MAC alt ad2 reg */ 4563859Sml29623 #define BMAC_ADDR11_REG 0x158 /* MAC alt ad2 reg */ 4573859Sml29623 #define BMAC_ADDR12_REG 0x160 /* MAC alt ad3 reg (HI 4) */ 4583859Sml29623 #define BMAC_ADDR13_REG 0x168 /* MAC alt ad3 reg */ 4593859Sml29623 #define BMAC_ADDR14_REG 0x170 /* MAC alt ad3 reg */ 4603859Sml29623 #define BMAC_ADDR15_REG 0x178 /* MAC alt ad4 reg (HI 5) */ 4613859Sml29623 #define BMAC_ADDR16_REG 0x180 /* MAC alt ad4 reg */ 4623859Sml29623 #define BMAC_ADDR17_REG 0x188 /* MAC alt ad4 reg */ 4633859Sml29623 #define BMAC_ADDR18_REG 0x190 /* MAC alt ad5 reg (HI 6) */ 4643859Sml29623 #define BMAC_ADDR19_REG 0x198 /* MAC alt ad5 reg */ 4653859Sml29623 #define BMAC_ADDR20_REG 0x1a0 /* MAC alt ad5 reg */ 4663859Sml29623 #define BMAC_ADDR21_REG 0x1a8 /* MAC alt ad6 reg (HI 7) */ 4673859Sml29623 #define BMAC_ADDR22_REG 0x1b0 /* MAC alt ad6 reg */ 4683859Sml29623 #define BMAC_ADDR23_REG 0x1b8 /* MAC alt ad6 reg */ 4693859Sml29623 #define MAC_FC_ADDR0_REG 0x268 /* FC frame addr0 (HI 0, p3) */ 4703859Sml29623 #define MAC_FC_ADDR1_REG 0x270 /* FC frame addr1 */ 4713859Sml29623 #define MAC_FC_ADDR2_REG 0x278 /* FC frame addr2 */ 4723859Sml29623 #define MAC_ADDR_FILT0_REG 0x298 /* bits [47:32] (HI 0, p2) */ 4733859Sml29623 #define MAC_ADDR_FILT1_REG 0x2a0 /* bits [31:16] */ 4743859Sml29623 #define MAC_ADDR_FILT2_REG 0x2a8 /* bits [15:0] */ 4753859Sml29623 #define MAC_ADDR_FILT12_MASK_REG 0x2b0 /* addr filter 2 & 1 mask */ 4763859Sml29623 #define MAC_ADDR_FILT00_MASK_REG 0x2b8 /* addr filter 0 mask */ 4773859Sml29623 #define MAC_HASH_TBL0_REG 0x2c0 /* hash table 0 reg */ 4783859Sml29623 #define MAC_HASH_TBL1_REG 0x2c8 /* hash table 1 reg */ 4793859Sml29623 #define MAC_HASH_TBL2_REG 0x2d0 /* hash table 2 reg */ 4803859Sml29623 #define MAC_HASH_TBL3_REG 0x2d8 /* hash table 3 reg */ 4813859Sml29623 #define MAC_HASH_TBL4_REG 0x2e0 /* hash table 4 reg */ 4823859Sml29623 #define MAC_HASH_TBL5_REG 0x2e8 /* hash table 5 reg */ 4833859Sml29623 #define MAC_HASH_TBL6_REG 0x2f0 /* hash table 6 reg */ 4843859Sml29623 #define MAC_HASH_TBL7_REG 0x2f8 /* hash table 7 reg */ 4853859Sml29623 #define MAC_HASH_TBL8_REG 0x300 /* hash table 8 reg */ 4863859Sml29623 #define MAC_HASH_TBL9_REG 0x308 /* hash table 9 reg */ 4873859Sml29623 #define MAC_HASH_TBL10_REG 0x310 /* hash table 10 reg */ 4883859Sml29623 #define MAC_HASH_TBL11_REG 0x318 /* hash table 11 reg */ 4893859Sml29623 #define MAC_HASH_TBL12_REG 0x320 /* hash table 12 reg */ 4903859Sml29623 #define MAC_HASH_TBL13_REG 0x328 /* hash table 13 reg */ 4913859Sml29623 #define MAC_HASH_TBL14_REG 0x330 /* hash table 14 reg */ 4923859Sml29623 #define MAC_HASH_TBL15_REG 0x338 /* hash table 15 reg */ 4933859Sml29623 #define RXMAC_FRM_CNT_REG 0x370 /* receive frame counter */ 4943859Sml29623 #define MAC_LEN_ER_CNT_REG 0x378 /* length error counter */ 4953859Sml29623 #define BMAC_AL_ER_CNT_REG 0x380 /* alignment error counter */ 4963859Sml29623 #define BMAC_CRC_ER_CNT_REG 0x388 /* FCS error counter */ 4973859Sml29623 #define BMAC_CD_VIO_CNT_REG 0x390 /* RX code violation err */ 4983859Sml29623 #define BMAC_SM_REG 0x3a0 /* (ro) state machine reg */ 4993859Sml29623 #define BMAC_ALTAD_CMPEN_REG 0x3f8 /* Alt addr compare enable */ 5003859Sml29623 #define BMAC_HOST_INF0_REG 0x400 /* Host info */ 5013859Sml29623 /* (own da, add filter, fc) */ 5023859Sml29623 #define BMAC_HOST_INF1_REG 0x408 /* Host info (alt ad 0) */ 5033859Sml29623 #define BMAC_HOST_INF2_REG 0x410 /* Host info (alt ad 1) */ 5043859Sml29623 #define BMAC_HOST_INF3_REG 0x418 /* Host info (alt ad 2) */ 5053859Sml29623 #define BMAC_HOST_INF4_REG 0x420 /* Host info (alt ad 3) */ 5063859Sml29623 #define BMAC_HOST_INF5_REG 0x428 /* Host info (alt ad 4) */ 5073859Sml29623 #define BMAC_HOST_INF6_REG 0x430 /* Host info (alt ad 5) */ 5083859Sml29623 #define BMAC_HOST_INF7_REG 0x438 /* Host info (alt ad 6) */ 5093859Sml29623 #define BMAC_HOST_INF8_REG 0x440 /* Host info (hash hit, miss) */ 5103859Sml29623 #define BTXMAC_BYTE_CNT_REG 0x448 /* Tx byte count */ 5113859Sml29623 #define BTXMAC_FRM_CNT_REG 0x450 /* frame count */ 5123859Sml29623 #define BRXMAC_BYTE_CNT_REG 0x458 /* Rx byte count */ 5133859Sml29623 /* x ranges from 0 to 6 (BMAC_MAX_ALT_ADDR_ENTRY - 1) */ 5143859Sml29623 #define BMAC_ALT_ADDR0N_REG_ADDR(x) (BMAC_ADDR3_REG + (x) * 24) 5153859Sml29623 #define BMAC_ALT_ADDR1N_REG_ADDR(x) (BMAC_ADDR3_REG + 8 + (x) * 24) 5163859Sml29623 #define BMAC_ALT_ADDR2N_REG_ADDR(x) (BMAC_ADDR3_REG + 0x10 + (x) * 24) 5173859Sml29623 #define BMAC_HASH_TBLN_REG_ADDR(x) (MAC_HASH_TBL0_REG + (x) * 8) 5183859Sml29623 #define BMAC_HOST_INFN_REG_ADDR(x) (BMAC_HOST_INF0_REG + (x) * 8) 5193859Sml29623 5203859Sml29623 /* XMAC registers offset */ 5213859Sml29623 #define XTXMAC_SW_RST_REG 0x000 /* XTX MAC soft reset */ 5223859Sml29623 #define XRXMAC_SW_RST_REG 0x008 /* XRX MAC soft reset */ 5233859Sml29623 #define XTXMAC_STATUS_REG 0x020 /* XTX MAC status */ 5243859Sml29623 #define XRXMAC_STATUS_REG 0x028 /* XRX MAC status */ 5253859Sml29623 #define XMAC_CTRL_STAT_REG 0x030 /* Control / Status */ 5263859Sml29623 #define XTXMAC_STAT_MSK_REG 0x040 /* XTX MAC Status mask */ 5273859Sml29623 #define XRXMAC_STAT_MSK_REG 0x048 /* XRX MAC Status mask */ 5283859Sml29623 #define XMAC_C_S_MSK_REG 0x050 /* Control / Status mask */ 5293859Sml29623 #define XMAC_CONFIG_REG 0x060 /* Configuration */ 5303859Sml29623 5313859Sml29623 /* xmac config bit fields */ 5323859Sml29623 typedef union _xmac_cfg_t { 5333859Sml29623 uint64_t value; 5343859Sml29623 5353859Sml29623 struct { 5363859Sml29623 #if defined(_BIG_ENDIAN) 5373859Sml29623 uint32_t msw; /* Most significant word */ 5383859Sml29623 uint32_t lsw; /* Least significant word */ 5393859Sml29623 #elif defined(_LITTLE_ENDIAN) 5403859Sml29623 uint32_t lsw; /* Least significant word */ 5413859Sml29623 uint32_t msw; /* Most significant word */ 5423859Sml29623 #endif 5433859Sml29623 } val; 5443859Sml29623 struct { 5453859Sml29623 #if defined(_BIG_ENDIAN) 5463859Sml29623 uint32_t w1; 5473859Sml29623 #endif 5483859Sml29623 struct { 5493859Sml29623 #if defined(_BIT_FIELDS_HTOL) 5503859Sml29623 uint32_t sel_clk_25mhz : 1; 5513859Sml29623 uint32_t pcs_bypass : 1; 5523859Sml29623 uint32_t xpcs_bypass : 1; 5533859Sml29623 uint32_t mii_gmii_mode : 2; 5543859Sml29623 uint32_t lfs_disable : 1; 5553859Sml29623 uint32_t loopback : 1; 5563859Sml29623 uint32_t tx_output_en : 1; 5573859Sml29623 uint32_t sel_por_clk_src : 1; 5583859Sml29623 uint32_t led_polarity : 1; 5593859Sml29623 uint32_t force_led_on : 1; 5603859Sml29623 uint32_t pass_fctl_frames : 1; 5613859Sml29623 uint32_t recv_pause_en : 1; 5623859Sml29623 uint32_t mac2ipp_pkt_cnt_en : 1; 5633859Sml29623 uint32_t strip_crc : 1; 5643859Sml29623 uint32_t addr_filter_en : 1; 5653859Sml29623 uint32_t hash_filter_en : 1; 5663859Sml29623 uint32_t code_viol_chk_dis : 1; 5673859Sml29623 uint32_t reserved_mcast : 1; 5683859Sml29623 uint32_t rx_crc_chk_dis : 1; 5693859Sml29623 uint32_t error_chk_dis : 1; 5703859Sml29623 uint32_t promisc_grp : 1; 5713859Sml29623 uint32_t promiscuous : 1; 5723859Sml29623 uint32_t rx_mac_enable : 1; 5733859Sml29623 uint32_t warning_msg_en : 1; 5743859Sml29623 uint32_t used : 3; 5753859Sml29623 uint32_t always_no_crc : 1; 5763859Sml29623 uint32_t var_min_ipg_en : 1; 5773859Sml29623 uint32_t strech_mode : 1; 5783859Sml29623 uint32_t tx_enable : 1; 5793859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 5803859Sml29623 uint32_t tx_enable : 1; 5813859Sml29623 uint32_t strech_mode : 1; 5823859Sml29623 uint32_t var_min_ipg_en : 1; 5833859Sml29623 uint32_t always_no_crc : 1; 5843859Sml29623 uint32_t used : 3; 5853859Sml29623 uint32_t warning_msg_en : 1; 5863859Sml29623 uint32_t rx_mac_enable : 1; 5873859Sml29623 uint32_t promiscuous : 1; 5883859Sml29623 uint32_t promisc_grp : 1; 5893859Sml29623 uint32_t error_chk_dis : 1; 5903859Sml29623 uint32_t rx_crc_chk_dis : 1; 5913859Sml29623 uint32_t reserved_mcast : 1; 5923859Sml29623 uint32_t code_viol_chk_dis : 1; 5933859Sml29623 uint32_t hash_filter_en : 1; 5943859Sml29623 uint32_t addr_filter_en : 1; 5953859Sml29623 uint32_t strip_crc : 1; 5963859Sml29623 uint32_t mac2ipp_pkt_cnt_en : 1; 5973859Sml29623 uint32_t recv_pause_en : 1; 5983859Sml29623 uint32_t pass_fctl_frames : 1; 5993859Sml29623 uint32_t force_led_on : 1; 6003859Sml29623 uint32_t led_polarity : 1; 6013859Sml29623 uint32_t sel_por_clk_src : 1; 6023859Sml29623 uint32_t tx_output_en : 1; 6033859Sml29623 uint32_t loopback : 1; 6043859Sml29623 uint32_t lfs_disable : 1; 6053859Sml29623 uint32_t mii_gmii_mode : 2; 6063859Sml29623 uint32_t xpcs_bypass : 1; 6073859Sml29623 uint32_t pcs_bypass : 1; 6083859Sml29623 uint32_t sel_clk_25mhz : 1; 6093859Sml29623 #endif 6103859Sml29623 } w0; 6113859Sml29623 6123859Sml29623 #if defined(_LITTLE_ENDIAN) 6133859Sml29623 uint32_t w1; 6143859Sml29623 #endif 6153859Sml29623 } bits; 6163859Sml29623 } xmac_cfg_t, *p_xmac_cfg_t; 6173859Sml29623 6183859Sml29623 #define XMAC_IPG_REG 0x080 /* Inter-Packet-Gap */ 6193859Sml29623 #define XMAC_MIN_REG 0x088 /* min frame size register */ 6203859Sml29623 #define XMAC_MAX_REG 0x090 /* max frame/burst size */ 6213859Sml29623 #define XMAC_ADDR0_REG 0x0a0 /* [47:32] of MAC addr (HI17) */ 6223859Sml29623 #define XMAC_ADDR1_REG 0x0a8 /* [31:16] of MAC addr */ 6233859Sml29623 #define XMAC_ADDR2_REG 0x0b0 /* [15:0] of MAC addr */ 6243859Sml29623 #define XRXMAC_BT_CNT_REG 0x100 /* bytes received / 8 */ 6253859Sml29623 #define XRXMAC_BC_FRM_CNT_REG 0x108 /* good BC frames received */ 6263859Sml29623 #define XRXMAC_MC_FRM_CNT_REG 0x110 /* good MC frames received */ 6273859Sml29623 #define XRXMAC_FRAG_CNT_REG 0x118 /* frag frames rejected */ 6283859Sml29623 #define XRXMAC_HIST_CNT1_REG 0x120 /* 64 bytes frames */ 6293859Sml29623 #define XRXMAC_HIST_CNT2_REG 0x128 /* 65-127 bytes frames */ 6303859Sml29623 #define XRXMAC_HIST_CNT3_REG 0x130 /* 128-255 bytes frames */ 6313859Sml29623 #define XRXMAC_HIST_CNT4_REG 0x138 /* 256-511 bytes frames */ 6323859Sml29623 #define XRXMAC_HIST_CNT5_REG 0x140 /* 512-1023 bytes frames */ 6333859Sml29623 #define XRXMAC_HIST_CNT6_REG 0x148 /* 1024-1522 bytes frames */ 6343859Sml29623 #define XRXMAC_MPSZER_CNT_REG 0x150 /* frames > maxframesize */ 6353859Sml29623 #define XRXMAC_CRC_ER_CNT_REG 0x158 /* frames failed CRC */ 6363859Sml29623 #define XRXMAC_CD_VIO_CNT_REG 0x160 /* frames with code vio */ 6373859Sml29623 #define XRXMAC_AL_ER_CNT_REG 0x168 /* frames with align error */ 6383859Sml29623 #define XTXMAC_FRM_CNT_REG 0x170 /* tx frames */ 6393859Sml29623 #define XTXMAC_BYTE_CNT_REG 0x178 /* tx bytes / 8 */ 6403859Sml29623 #define XMAC_LINK_FLT_CNT_REG 0x180 /* link faults */ 6413859Sml29623 #define XRXMAC_HIST_CNT7_REG 0x188 /* MAC2IPP/>1523 bytes frames */ 6423859Sml29623 #define XMAC_SM_REG 0x1a8 /* State machine */ 6433859Sml29623 #define XMAC_INTERN1_REG 0x1b0 /* internal signals for diag */ 6443859Sml29623 #define XMAC_INTERN2_REG 0x1b8 /* internal signals for diag */ 6453859Sml29623 #define XMAC_ADDR_CMPEN_REG 0x208 /* alt MAC addr check */ 6463859Sml29623 #define XMAC_ADDR3_REG 0x218 /* alt MAC addr 0 (HI 0) */ 6473859Sml29623 #define XMAC_ADDR4_REG 0x220 /* alt MAC addr 0 */ 6483859Sml29623 #define XMAC_ADDR5_REG 0x228 /* alt MAC addr 0 */ 6493859Sml29623 #define XMAC_ADDR6_REG 0x230 /* alt MAC addr 1 (HI 1) */ 6503859Sml29623 #define XMAC_ADDR7_REG 0x238 /* alt MAC addr 1 */ 6513859Sml29623 #define XMAC_ADDR8_REG 0x240 /* alt MAC addr 1 */ 6523859Sml29623 #define XMAC_ADDR9_REG 0x248 /* alt MAC addr 2 (HI 2) */ 6533859Sml29623 #define XMAC_ADDR10_REG 0x250 /* alt MAC addr 2 */ 6543859Sml29623 #define XMAC_ADDR11_REG 0x258 /* alt MAC addr 2 */ 6553859Sml29623 #define XMAC_ADDR12_REG 0x260 /* alt MAC addr 3 (HI 3) */ 6563859Sml29623 #define XMAC_ADDR13_REG 0x268 /* alt MAC addr 3 */ 6573859Sml29623 #define XMAC_ADDR14_REG 0x270 /* alt MAC addr 3 */ 6583859Sml29623 #define XMAC_ADDR15_REG 0x278 /* alt MAC addr 4 (HI 4) */ 6593859Sml29623 #define XMAC_ADDR16_REG 0x280 /* alt MAC addr 4 */ 6603859Sml29623 #define XMAC_ADDR17_REG 0x288 /* alt MAC addr 4 */ 6613859Sml29623 #define XMAC_ADDR18_REG 0x290 /* alt MAC addr 5 (HI 5) */ 6623859Sml29623 #define XMAC_ADDR19_REG 0x298 /* alt MAC addr 5 */ 6633859Sml29623 #define XMAC_ADDR20_REG 0x2a0 /* alt MAC addr 5 */ 6643859Sml29623 #define XMAC_ADDR21_REG 0x2a8 /* alt MAC addr 6 (HI 6) */ 6653859Sml29623 #define XMAC_ADDR22_REG 0x2b0 /* alt MAC addr 6 */ 6663859Sml29623 #define XMAC_ADDR23_REG 0x2b8 /* alt MAC addr 6 */ 6673859Sml29623 #define XMAC_ADDR24_REG 0x2c0 /* alt MAC addr 7 (HI 7) */ 6683859Sml29623 #define XMAC_ADDR25_REG 0x2c8 /* alt MAC addr 7 */ 6693859Sml29623 #define XMAC_ADDR26_REG 0x2d0 /* alt MAC addr 7 */ 6703859Sml29623 #define XMAC_ADDR27_REG 0x2d8 /* alt MAC addr 8 (HI 8) */ 6713859Sml29623 #define XMAC_ADDR28_REG 0x2e0 /* alt MAC addr 8 */ 6723859Sml29623 #define XMAC_ADDR29_REG 0x2e8 /* alt MAC addr 8 */ 6733859Sml29623 #define XMAC_ADDR30_REG 0x2f0 /* alt MAC addr 9 (HI 9) */ 6743859Sml29623 #define XMAC_ADDR31_REG 0x2f8 /* alt MAC addr 9 */ 6753859Sml29623 #define XMAC_ADDR32_REG 0x300 /* alt MAC addr 9 */ 6763859Sml29623 #define XMAC_ADDR33_REG 0x308 /* alt MAC addr 10 (HI 10) */ 6773859Sml29623 #define XMAC_ADDR34_REG 0x310 /* alt MAC addr 10 */ 6783859Sml29623 #define XMAC_ADDR35_REG 0x318 /* alt MAC addr 10 */ 6793859Sml29623 #define XMAC_ADDR36_REG 0x320 /* alt MAC addr 11 (HI 11) */ 6803859Sml29623 #define XMAC_ADDR37_REG 0x328 /* alt MAC addr 11 */ 6813859Sml29623 #define XMAC_ADDR38_REG 0x330 /* alt MAC addr 11 */ 6823859Sml29623 #define XMAC_ADDR39_REG 0x338 /* alt MAC addr 12 (HI 12) */ 6833859Sml29623 #define XMAC_ADDR40_REG 0x340 /* alt MAC addr 12 */ 6843859Sml29623 #define XMAC_ADDR41_REG 0x348 /* alt MAC addr 12 */ 6853859Sml29623 #define XMAC_ADDR42_REG 0x350 /* alt MAC addr 13 (HI 13) */ 6863859Sml29623 #define XMAC_ADDR43_REG 0x358 /* alt MAC addr 13 */ 6873859Sml29623 #define XMAC_ADDR44_REG 0x360 /* alt MAC addr 13 */ 6883859Sml29623 #define XMAC_ADDR45_REG 0x368 /* alt MAC addr 14 (HI 14) */ 6893859Sml29623 #define XMAC_ADDR46_REG 0x370 /* alt MAC addr 14 */ 6903859Sml29623 #define XMAC_ADDR47_REG 0x378 /* alt MAC addr 14 */ 6913859Sml29623 #define XMAC_ADDR48_REG 0x380 /* alt MAC addr 15 (HI 15) */ 6923859Sml29623 #define XMAC_ADDR49_REG 0x388 /* alt MAC addr 15 */ 6933859Sml29623 #define XMAC_ADDR50_REG 0x390 /* alt MAC addr 15 */ 6943859Sml29623 #define XMAC_ADDR_FILT0_REG 0x818 /* [47:32] addr filter (HI18) */ 6953859Sml29623 #define XMAC_ADDR_FILT1_REG 0x820 /* [31:16] of addr filter */ 6963859Sml29623 #define XMAC_ADDR_FILT2_REG 0x828 /* [15:0] of addr filter */ 6973859Sml29623 #define XMAC_ADDR_FILT12_MASK_REG 0x830 /* addr filter 2 & 1 mask */ 6983859Sml29623 #define XMAC_ADDR_FILT0_MASK_REG 0x838 /* addr filter 0 mask */ 6993859Sml29623 #define XMAC_HASH_TBL0_REG 0x840 /* hash table 0 reg */ 7003859Sml29623 #define XMAC_HASH_TBL1_REG 0x848 /* hash table 1 reg */ 7013859Sml29623 #define XMAC_HASH_TBL2_REG 0x850 /* hash table 2 reg */ 7023859Sml29623 #define XMAC_HASH_TBL3_REG 0x858 /* hash table 3 reg */ 7033859Sml29623 #define XMAC_HASH_TBL4_REG 0x860 /* hash table 4 reg */ 7043859Sml29623 #define XMAC_HASH_TBL5_REG 0x868 /* hash table 5 reg */ 7053859Sml29623 #define XMAC_HASH_TBL6_REG 0x870 /* hash table 6 reg */ 7063859Sml29623 #define XMAC_HASH_TBL7_REG 0x878 /* hash table 7 reg */ 7073859Sml29623 #define XMAC_HASH_TBL8_REG 0x880 /* hash table 8 reg */ 7083859Sml29623 #define XMAC_HASH_TBL9_REG 0x888 /* hash table 9 reg */ 7093859Sml29623 #define XMAC_HASH_TBL10_REG 0x890 /* hash table 10 reg */ 7103859Sml29623 #define XMAC_HASH_TBL11_REG 0x898 /* hash table 11 reg */ 7113859Sml29623 #define XMAC_HASH_TBL12_REG 0x8a0 /* hash table 12 reg */ 7123859Sml29623 #define XMAC_HASH_TBL13_REG 0x8a8 /* hash table 13 reg */ 7133859Sml29623 #define XMAC_HASH_TBL14_REG 0x8b0 /* hash table 14 reg */ 7143859Sml29623 #define XMAC_HASH_TBL15_REG 0x8b8 /* hash table 15 reg */ 7153859Sml29623 #define XMAC_HOST_INF0_REG 0x900 /* Host info 0 (alt ad 0) */ 7163859Sml29623 #define XMAC_HOST_INF1_REG 0x908 /* Host info 1 (alt ad 1) */ 7173859Sml29623 #define XMAC_HOST_INF2_REG 0x910 /* Host info 2 (alt ad 2) */ 7183859Sml29623 #define XMAC_HOST_INF3_REG 0x918 /* Host info 3 (alt ad 3) */ 7193859Sml29623 #define XMAC_HOST_INF4_REG 0x920 /* Host info 4 (alt ad 4) */ 7203859Sml29623 #define XMAC_HOST_INF5_REG 0x928 /* Host info 5 (alt ad 5) */ 7213859Sml29623 #define XMAC_HOST_INF6_REG 0x930 /* Host info 6 (alt ad 6) */ 7223859Sml29623 #define XMAC_HOST_INF7_REG 0x938 /* Host info 7 (alt ad 7) */ 7233859Sml29623 #define XMAC_HOST_INF8_REG 0x940 /* Host info 8 (alt ad 8) */ 7243859Sml29623 #define XMAC_HOST_INF9_REG 0x948 /* Host info 9 (alt ad 9) */ 7253859Sml29623 #define XMAC_HOST_INF10_REG 0x950 /* Host info 10 (alt ad 10) */ 7263859Sml29623 #define XMAC_HOST_INF11_REG 0x958 /* Host info 11 (alt ad 11) */ 7273859Sml29623 #define XMAC_HOST_INF12_REG 0x960 /* Host info 12 (alt ad 12) */ 7283859Sml29623 #define XMAC_HOST_INF13_REG 0x968 /* Host info 13 (alt ad 13) */ 7293859Sml29623 #define XMAC_HOST_INF14_REG 0x970 /* Host info 14 (alt ad 14) */ 7303859Sml29623 #define XMAC_HOST_INF15_REG 0x978 /* Host info 15 (alt ad 15) */ 7313859Sml29623 #define XMAC_HOST_INF16_REG 0x980 /* Host info 16 (hash hit) */ 7323859Sml29623 #define XMAC_HOST_INF17_REG 0x988 /* Host info 17 (own da) */ 7333859Sml29623 #define XMAC_HOST_INF18_REG 0x990 /* Host info 18 (filter hit) */ 7343859Sml29623 #define XMAC_HOST_INF19_REG 0x998 /* Host info 19 (fc hit) */ 7353859Sml29623 #define XMAC_PA_DATA0_REG 0xb80 /* preamble [31:0] */ 7363859Sml29623 #define XMAC_PA_DATA1_REG 0xb88 /* preamble [63:32] */ 7373859Sml29623 #define XMAC_DEBUG_SEL_REG 0xb90 /* debug select */ 7383859Sml29623 #define XMAC_TRAINING_VECT_REG 0xb98 /* training vector */ 7393859Sml29623 /* x ranges from 0 to 15 (XMAC_MAX_ALT_ADDR_ENTRY - 1) */ 7403859Sml29623 #define XMAC_ALT_ADDR0N_REG_ADDR(x) (XMAC_ADDR3_REG + (x) * 24) 7413859Sml29623 #define XMAC_ALT_ADDR1N_REG_ADDR(x) (XMAC_ADDR3_REG + 8 + (x) * 24) 7423859Sml29623 #define XMAC_ALT_ADDR2N_REG_ADDR(x) (XMAC_ADDR3_REG + 16 + (x) * 24) 7433859Sml29623 #define XMAC_HASH_TBLN_REG_ADDR(x) (XMAC_HASH_TBL0_REG + (x) * 8) 7443859Sml29623 #define XMAC_HOST_INFN_REG_ADDR(x) (XMAC_HOST_INF0_REG + (x) * 8) 7453859Sml29623 7463859Sml29623 /* MIF registers offset */ 7473859Sml29623 #define MIF_BB_MDC_REG 0 /* MIF bit-bang clock */ 7483859Sml29623 #define MIF_BB_MDO_REG 0x008 /* MIF bit-bang data */ 7493859Sml29623 #define MIF_BB_MDO_EN_REG 0x010 /* MIF bit-bang output en */ 7503859Sml29623 #define MIF_OUTPUT_FRAME_REG 0x018 /* MIF frame/output reg */ 7513859Sml29623 #define MIF_CONFIG_REG 0x020 /* MIF config reg */ 7523859Sml29623 #define MIF_POLL_STATUS_REG 0x028 /* MIF poll status reg */ 7533859Sml29623 #define MIF_POLL_MASK_REG 0x030 /* MIF poll mask reg */ 7543859Sml29623 #define MIF_STATE_MACHINE_REG 0x038 /* MIF state machine reg */ 7553859Sml29623 #define MIF_STATUS_REG 0x040 /* MIF status reg */ 7563859Sml29623 #define MIF_MASK_REG 0x048 /* MIF mask reg */ 7573859Sml29623 7583859Sml29623 7593859Sml29623 /* PCS registers offset */ 7603859Sml29623 #define PCS_MII_CTRL_REG 0 /* PCS MII control reg */ 7613859Sml29623 #define PCS_MII_STATUS_REG 0x008 /* PCS MII status reg */ 7623859Sml29623 #define PCS_MII_ADVERT_REG 0x010 /* PCS MII advertisement */ 7633859Sml29623 #define PCS_MII_LPA_REG 0x018 /* link partner ability */ 7643859Sml29623 #define PCS_CONFIG_REG 0x020 /* PCS config reg */ 7653859Sml29623 #define PCS_STATE_MACHINE_REG 0x028 /* PCS state machine */ 7663859Sml29623 #define PCS_INTR_STATUS_REG 0x030 /* PCS interrupt status */ 7673859Sml29623 #define PCS_DATAPATH_MODE_REG 0x0a0 /* datapath mode reg */ 7683859Sml29623 #define PCS_PACKET_COUNT_REG 0x0c0 /* PCS packet counter */ 7693859Sml29623 7703859Sml29623 #define XPCS_CTRL_1_REG 0 /* Control */ 7713859Sml29623 #define XPCS_STATUS_1_REG 0x008 7723859Sml29623 #define XPCS_DEV_ID_REG 0x010 /* 32bits IEEE manufacture ID */ 7733859Sml29623 #define XPCS_SPEED_ABILITY_REG 0x018 7743859Sml29623 #define XPCS_DEV_IN_PKG_REG 0x020 7753859Sml29623 #define XPCS_CTRL_2_REG 0x028 7763859Sml29623 #define XPCS_STATUS_2_REG 0x030 7773859Sml29623 #define XPCS_PKG_ID_REG 0x038 /* Package ID */ 7783859Sml29623 #define XPCS_STATUS_REG 0x040 7793859Sml29623 #define XPCS_TEST_CTRL_REG 0x048 7803859Sml29623 #define XPCS_CFG_VENDOR_1_REG 0x050 7813859Sml29623 #define XPCS_DIAG_VENDOR_2_REG 0x058 7823859Sml29623 #define XPCS_MASK_1_REG 0x060 7833859Sml29623 #define XPCS_PKT_CNTR_REG 0x068 7843859Sml29623 #define XPCS_TX_STATE_MC_REG 0x070 7853859Sml29623 #define XPCS_DESKEW_ERR_CNTR_REG 0x078 7863859Sml29623 #define XPCS_SYM_ERR_CNTR_L0_L1_REG 0x080 7873859Sml29623 #define XPCS_SYM_ERR_CNTR_L2_L3_REG 0x088 7883859Sml29623 #define XPCS_TRAINING_VECTOR_REG 0x090 7893859Sml29623 7903859Sml29623 /* ESR registers offset */ 7913859Sml29623 #define ESR_RESET_REG 0 7923859Sml29623 #define ESR_CONFIG_REG 0x008 7933859Sml29623 #define ESR_0_PLL_CONFIG_REG 0x010 7943859Sml29623 #define ESR_0_CONTROL_REG 0x018 7953859Sml29623 #define ESR_0_TEST_CONFIG_REG 0x020 7963859Sml29623 #define ESR_1_PLL_CONFIG_REG 0x028 7973859Sml29623 #define ESR_1_CONTROL_REG 0x030 7983859Sml29623 #define ESR_1_TEST_CONFIG_REG 0x038 7993859Sml29623 #define ESR_ENET_RGMII_CFG_REG 0x040 8003859Sml29623 #define ESR_INTERNAL_SIGNALS_REG 0x800 8013859Sml29623 #define ESR_DEBUG_SEL_REG 0x808 8023859Sml29623 8033859Sml29623 8043859Sml29623 /* Reset Register */ 8053859Sml29623 #define MAC_SEND_PAUSE_TIME_MASK 0x0000FFFF /* value of pause time */ 8063859Sml29623 #define MAC_SEND_PAUSE_SEND 0x00010000 /* send pause flow ctrl */ 8073859Sml29623 8083859Sml29623 /* Tx MAC Status Register */ 8093859Sml29623 #define MAC_TX_FRAME_XMIT 0x00000001 /* successful tx frame */ 8103859Sml29623 #define MAC_TX_UNDERRUN 0x00000002 /* starvation in xmit */ 8113859Sml29623 #define MAC_TX_MAX_PACKET_ERR 0x00000004 /* TX frame exceeds max */ 8123859Sml29623 #define MAC_TX_BYTE_CNT_EXP 0x00000400 /* TX byte cnt overflow */ 8133859Sml29623 #define MAC_TX_FRAME_CNT_EXP 0x00000800 /* Tx frame cnt overflow */ 8143859Sml29623 8153859Sml29623 /* Rx MAC Status Register */ 8163859Sml29623 #define MAC_RX_FRAME_RECV 0x00000001 /* successful rx frame */ 8173859Sml29623 #define MAC_RX_OVERFLOW 0x00000002 /* RX FIFO overflow */ 8183859Sml29623 #define MAC_RX_FRAME_COUNT 0x00000004 /* rx frame cnt rollover */ 8193859Sml29623 #define MAC_RX_ALIGN_ERR 0x00000008 /* alignment err rollover */ 8203859Sml29623 #define MAC_RX_CRC_ERR 0x00000010 /* crc error cnt rollover */ 8213859Sml29623 #define MAC_RX_LEN_ERR 0x00000020 /* length err cnt rollover */ 8223859Sml29623 #define MAC_RX_VIOL_ERR 0x00000040 /* code vio err rollover */ 8233859Sml29623 #define MAC_RX_BYTE_CNT_EXP 0x00000080 /* RX MAC byte rollover */ 8243859Sml29623 8253859Sml29623 /* MAC Control Status Register */ 8263859Sml29623 #define MAC_CTRL_PAUSE_RECEIVED 0x00000001 /* successful pause frame */ 8273859Sml29623 #define MAC_CTRL_PAUSE_STATE 0x00000002 /* notpause-->pause */ 8283859Sml29623 #define MAC_CTRL_NOPAUSE_STATE 0x00000004 /* pause-->notpause */ 8293859Sml29623 #define MAC_CTRL_PAUSE_TIME_MASK 0xFFFF0000 /* value of pause time */ 8303859Sml29623 #define MAC_CTRL_PAUSE_TIME_SHIFT 16 8313859Sml29623 8323859Sml29623 /* Tx MAC Configuration Register */ 8333859Sml29623 #define MAC_TX_CFG_TXMAC_ENABLE 0x00000001 /* enable TX MAC. */ 8343859Sml29623 #define MAC_TX_CFG_NO_FCS 0x00000100 /* TX not generate CRC */ 8353859Sml29623 8363859Sml29623 /* Rx MAC Configuration Register */ 8373859Sml29623 #define MAC_RX_CFG_RXMAC_ENABLE 0x00000001 /* enable RX MAC */ 8383859Sml29623 #define MAC_RX_CFG_STRIP_PAD 0x00000002 /* not supported, set to 0 */ 8393859Sml29623 #define MAC_RX_CFG_STRIP_FCS 0x00000004 /* strip last 4bytes (CRC) */ 8403859Sml29623 #define MAC_RX_CFG_PROMISC 0x00000008 /* promisc mode enable */ 8413859Sml29623 #define MAC_RX_CFG_PROMISC_GROUP 0x00000010 /* accept all MC frames */ 8423859Sml29623 #define MAC_RX_CFG_HASH_FILTER_EN 0x00000020 /* use hash table */ 8433859Sml29623 #define MAC_RX_CFG_ADDR_FILTER_EN 0x00000040 /* use address filter */ 8443859Sml29623 #define MAC_RX_CFG_DISABLE_DISCARD 0x00000080 /* do not set abort bit */ 8453859Sml29623 #define MAC_RX_MAC2IPP_PKT_CNT_EN 0x00000200 /* rx pkt cnt -> BMAC-IPP */ 8463859Sml29623 #define MAC_RX_MAC_REG_RW_TEST_MASK 0x00000c00 /* BMAC reg RW test */ 8473859Sml29623 #define MAC_RX_MAC_REG_RW_TEST_SHIFT 10 8483859Sml29623 8493859Sml29623 /* MAC Control Configuration Register */ 8503859Sml29623 #define MAC_CTRL_CFG_SEND_PAUSE_EN 0x00000001 /* send pause flow ctrl */ 8513859Sml29623 #define MAC_CTRL_CFG_RECV_PAUSE_EN 0x00000002 /* receive pause flow ctrl */ 8523859Sml29623 #define MAC_CTRL_CFG_PASS_CTRL 0x00000004 /* accept MAC ctrl pkts */ 8533859Sml29623 8543859Sml29623 /* MAC XIF Configuration Register */ 8553859Sml29623 #define MAC_XIF_TX_OUTPUT_EN 0x00000001 /* enable Tx output driver */ 8563859Sml29623 #define MAC_XIF_MII_INT_LOOPBACK 0x00000002 /* loopback GMII xmit data */ 8573859Sml29623 #define MAC_XIF_GMII_MODE 0x00000008 /* operates with GMII clks */ 8583859Sml29623 #define MAC_XIF_LINK_LED 0x00000020 /* LINKLED# active (low) */ 8593859Sml29623 #define MAC_XIF_LED_POLARITY 0x00000040 /* LED polarity */ 8603859Sml29623 #define MAC_XIF_SEL_CLK_25MHZ 0x00000080 /* Select 10/100Mbps */ 8613859Sml29623 8623859Sml29623 /* MAC IPG Registers */ 8633859Sml29623 #define BMAC_MIN_FRAME_MASK 0x3FF /* 10-bit reg */ 8643859Sml29623 8653859Sml29623 /* MAC Max Frame Size Register */ 8663859Sml29623 #define BMAC_MAX_BURST_MASK 0x3FFF0000 /* max burst size [30:16] */ 8673859Sml29623 #define BMAC_MAX_BURST_SHIFT 16 8683859Sml29623 #define BMAC_MAX_FRAME_MASK 0x00007FFF /* max frame size [14:0] */ 8693859Sml29623 #define BMAC_MAX_FRAME_SHIFT 0 8703859Sml29623 8713859Sml29623 /* MAC Preamble size register */ 8723859Sml29623 #define BMAC_PA_SIZE_MASK 0x000003FF 8733859Sml29623 /* # of preable bytes TxMAC sends at the beginning of each frame */ 8743859Sml29623 8753859Sml29623 /* 8763859Sml29623 * mac address registers: 8773859Sml29623 * register contains comparison 8783859Sml29623 * -------- -------- ---------- 8793859Sml29623 * 0 16 MSB of primary MAC addr [47:32] of DA field 8803859Sml29623 * 1 16 middle bits "" [31:16] of DA field 8813859Sml29623 * 2 16 LSB "" [15:0] of DA field 8823859Sml29623 * 3*x 16MSB of alt MAC addr 1-7 [47:32] of DA field 8833859Sml29623 * 4*x 16 middle bits "" [31:16] 8843859Sml29623 * 5*x 16 LSB "" [15:0] 8853859Sml29623 * 42 16 MSB of MAC CTRL addr [47:32] of DA. 8863859Sml29623 * 43 16 middle bits "" [31:16] 8873859Sml29623 * 44 16 LSB "" [15:0] 8883859Sml29623 * MAC CTRL addr must be the reserved multicast addr for MAC CTRL frames. 8893859Sml29623 * if there is a match, MAC will set the bit for alternative address 8903859Sml29623 * filter pass [15] 8913859Sml29623 * 8923859Sml29623 * here is the map of registers given MAC address notation: a:b:c:d:e:f 8933859Sml29623 * ab cd ef 8943859Sml29623 * primary addr reg 2 reg 1 reg 0 8953859Sml29623 * alt addr 1 reg 5 reg 4 reg 3 8963859Sml29623 * alt addr x reg 5*x reg 4*x reg 3*x 8973859Sml29623 * | | | | 8983859Sml29623 * | | | | 8993859Sml29623 * alt addr 7 reg 23 reg 22 reg 21 9003859Sml29623 * ctrl addr reg 44 reg 43 reg 42 9013859Sml29623 */ 9023859Sml29623 9033859Sml29623 #define BMAC_ALT_ADDR_BASE 0x118 9043859Sml29623 #define BMAC_MAX_ALT_ADDR_ENTRY 7 /* 7 alternate MAC addr */ 9053859Sml29623 #define BMAC_MAX_ADDR_ENTRY (BMAC_MAX_ALT_ADDR_ENTRY + 1) 9063859Sml29623 9073859Sml29623 /* hash table registers */ 9083859Sml29623 #define MAC_MAX_HASH_ENTRY 16 9093859Sml29623 9103859Sml29623 /* 27-bit register has the current state for key state machines in the MAC */ 9113859Sml29623 #define MAC_SM_RLM_MASK 0x07800000 9123859Sml29623 #define MAC_SM_RLM_SHIFT 23 9133859Sml29623 #define MAC_SM_RX_FC_MASK 0x00700000 9143859Sml29623 #define MAC_SM_RX_FC_SHIFT 20 9153859Sml29623 #define MAC_SM_TLM_MASK 0x000F0000 9163859Sml29623 #define MAC_SM_TLM_SHIFT 16 9173859Sml29623 #define MAC_SM_ENCAP_SM_MASK 0x0000F000 9183859Sml29623 #define MAC_SM_ENCAP_SM_SHIFT 12 9193859Sml29623 #define MAC_SM_TX_REQ_MASK 0x00000C00 9203859Sml29623 #define MAC_SM_TX_REQ_SHIFT 10 9213859Sml29623 #define MAC_SM_TX_FC_MASK 0x000003C0 9223859Sml29623 #define MAC_SM_TX_FC_SHIFT 6 9233859Sml29623 #define MAC_SM_FIFO_WRITE_SEL_MASK 0x00000038 9243859Sml29623 #define MAC_SM_FIFO_WRITE_SEL_SHIFT 3 9253859Sml29623 #define MAC_SM_TX_FIFO_EMPTY_MASK 0x00000007 9263859Sml29623 #define MAC_SM_TX_FIFO_EMPTY_SHIFT 0 9273859Sml29623 9283859Sml29623 #define BMAC_ADDR0_CMPEN 0x00000001 9293859Sml29623 #define BMAC_ADDRN_CMPEN(x) (BMAC_ADDR0_CMP_EN << (x)) 9303859Sml29623 9313859Sml29623 /* MAC Host Info Table Registers */ 9323859Sml29623 #define BMAC_MAX_HOST_INFO_ENTRY 9 /* 9 host entries */ 9333859Sml29623 9343859Sml29623 /* 9353859Sml29623 * ********************* XMAC registers ********************************* 9363859Sml29623 */ 9373859Sml29623 9383859Sml29623 /* Reset Register */ 9393859Sml29623 #define XTXMAC_SOFT_RST 0x00000001 /* XTX MAC software reset */ 9403859Sml29623 #define XTXMAC_REG_RST 0x00000002 /* XTX MAC registers reset */ 9413859Sml29623 #define XRXMAC_SOFT_RST 0x00000001 /* XRX MAC software reset */ 9423859Sml29623 #define XRXMAC_REG_RST 0x00000002 /* XRX MAC registers reset */ 9433859Sml29623 9443859Sml29623 /* XTX MAC Status Register */ 9453859Sml29623 #define XMAC_TX_FRAME_XMIT 0x00000001 /* successful tx frame */ 9463859Sml29623 #define XMAC_TX_UNDERRUN 0x00000002 /* starvation in xmit */ 9473859Sml29623 #define XMAC_TX_MAX_PACKET_ERR 0x00000004 /* XTX frame exceeds max */ 9483859Sml29623 #define XMAC_TX_OVERFLOW 0x00000008 /* XTX byte cnt overflow */ 9493859Sml29623 #define XMAC_TX_FIFO_XFR_ERR 0x00000010 /* xtlm state mach error */ 9503859Sml29623 #define XMAC_TX_BYTE_CNT_EXP 0x00000400 /* XTX byte cnt overflow */ 9513859Sml29623 #define XMAC_TX_FRAME_CNT_EXP 0x00000800 /* XTX frame cnt overflow */ 9523859Sml29623 9533859Sml29623 /* XRX MAC Status Register */ 9543859Sml29623 #define XMAC_RX_FRAME_RCVD 0x00000001 /* successful rx frame */ 9553859Sml29623 #define XMAC_RX_OVERFLOW 0x00000002 /* RX FIFO overflow */ 9563859Sml29623 #define XMAC_RX_UNDERFLOW 0x00000004 /* RX FIFO underrun */ 9573859Sml29623 #define XMAC_RX_CRC_ERR_CNT_EXP 0x00000008 /* crc error cnt rollover */ 9583859Sml29623 #define XMAC_RX_LEN_ERR_CNT_EXP 0x00000010 /* length err cnt rollover */ 9593859Sml29623 #define XMAC_RX_VIOL_ERR_CNT_EXP 0x00000020 /* code vio err rollover */ 9603859Sml29623 #define XMAC_RX_OCT_CNT_EXP 0x00000040 /* XRX MAC byte rollover */ 9613859Sml29623 #define XMAC_RX_HST_CNT1_EXP 0x00000080 /* XRX MAC hist1 rollover */ 9623859Sml29623 #define XMAC_RX_HST_CNT2_EXP 0x00000100 /* XRX MAC hist2 rollover */ 9633859Sml29623 #define XMAC_RX_HST_CNT3_EXP 0x00000200 /* XRX MAC hist3 rollover */ 9643859Sml29623 #define XMAC_RX_HST_CNT4_EXP 0x00000400 /* XRX MAC hist4 rollover */ 9653859Sml29623 #define XMAC_RX_HST_CNT5_EXP 0x00000800 /* XRX MAC hist5 rollover */ 9663859Sml29623 #define XMAC_RX_HST_CNT6_EXP 0x00001000 /* XRX MAC hist6 rollover */ 9673859Sml29623 #define XMAC_RX_BCAST_CNT_EXP 0x00002000 /* XRX BC cnt rollover */ 9683859Sml29623 #define XMAC_RX_MCAST_CNT_EXP 0x00004000 /* XRX MC cnt rollover */ 9693859Sml29623 #define XMAC_RX_FRAG_CNT_EXP 0x00008000 /* fragment cnt rollover */ 9703859Sml29623 #define XMAC_RX_ALIGNERR_CNT_EXP 0x00010000 /* framealign err rollover */ 9713859Sml29623 #define XMAC_RX_LINK_FLT_CNT_EXP 0x00020000 /* link fault cnt rollover */ 9723859Sml29623 #define XMAC_RX_REMOTE_FLT_DET 0x00040000 /* Remote Fault detected */ 9733859Sml29623 #define XMAC_RX_LOCAL_FLT_DET 0x00080000 /* Local Fault detected */ 9743859Sml29623 #define XMAC_RX_HST_CNT7_EXP 0x00100000 /* XRX MAC hist7 rollover */ 9753859Sml29623 9763859Sml29623 9773859Sml29623 #define XMAC_CTRL_PAUSE_RCVD 0x00000001 /* successful pause frame */ 9783859Sml29623 #define XMAC_CTRL_PAUSE_STATE 0x00000002 /* notpause-->pause */ 9793859Sml29623 #define XMAC_CTRL_NOPAUSE_STATE 0x00000004 /* pause-->notpause */ 9803859Sml29623 #define XMAC_CTRL_PAUSE_TIME_MASK 0xFFFF0000 /* value of pause time */ 9813859Sml29623 #define XMAC_CTRL_PAUSE_TIME_SHIFT 16 9823859Sml29623 9833859Sml29623 /* XMAC Configuration Register */ 9843859Sml29623 #define XMAC_CONFIG_TX_BIT_MASK 0x000000ff /* bits [7:0] */ 9853859Sml29623 #define XMAC_CONFIG_RX_BIT_MASK 0x001fff00 /* bits [20:8] */ 9863859Sml29623 #define XMAC_CONFIG_XIF_BIT_MASK 0xffe00000 /* bits [31:21] */ 9873859Sml29623 9883859Sml29623 /* XTX MAC config bits */ 9893859Sml29623 #define XMAC_TX_CFG_TX_ENABLE 0x00000001 /* enable XTX MAC */ 9903859Sml29623 #define XMAC_TX_CFG_STRETCH_MD 0x00000002 /* WAN application */ 9913859Sml29623 #define XMAC_TX_CFG_VAR_MIN_IPG_EN 0x00000004 /* Transmit pkts < minpsz */ 9923859Sml29623 #define XMAC_TX_CFG_ALWAYS_NO_CRC 0x00000008 /* No CRC generated */ 9933859Sml29623 9943859Sml29623 #define XMAC_WARNING_MSG_ENABLE 0x00000080 /* Sim warning msg enable */ 9953859Sml29623 9963859Sml29623 /* XRX MAC config bits */ 9973859Sml29623 #define XMAC_RX_CFG_RX_ENABLE 0x00000100 /* enable XRX MAC */ 9983859Sml29623 #define XMAC_RX_CFG_PROMISC 0x00000200 /* promisc mode enable */ 9993859Sml29623 #define XMAC_RX_CFG_PROMISC_GROUP 0x00000400 /* accept all MC frames */ 10003859Sml29623 #define XMAC_RX_CFG_ERR_CHK_DISABLE 0x00000800 /* do not set abort bit */ 10013859Sml29623 #define XMAC_RX_CFG_CRC_CHK_DISABLE 0x00001000 /* disable CRC logic */ 10023859Sml29623 #define XMAC_RX_CFG_RESERVED_MCAST 0x00002000 /* reserved MCaddr compare */ 10033859Sml29623 #define XMAC_RX_CFG_CD_VIO_CHK 0x00004000 /* rx code violation chk */ 10043859Sml29623 #define XMAC_RX_CFG_HASH_FILTER_EN 0x00008000 /* use hash table */ 10053859Sml29623 #define XMAC_RX_CFG_ADDR_FILTER_EN 0x00010000 /* use alt addr filter */ 10063859Sml29623 #define XMAC_RX_CFG_STRIP_CRC 0x00020000 /* strip last 4bytes (CRC) */ 10073859Sml29623 #define XMAC_RX_MAC2IPP_PKT_CNT_EN 0x00040000 /* histo_cntr7 cnt mode */ 10083859Sml29623 #define XMAC_RX_CFG_RX_PAUSE_EN 0x00080000 /* receive pause flow ctrl */ 10093859Sml29623 #define XMAC_RX_CFG_PASS_FLOW_CTRL 0x00100000 /* accept MAC ctrl pkts */ 10103859Sml29623 10113859Sml29623 10123859Sml29623 /* MAC transceiver (XIF) configuration registers */ 10133859Sml29623 10143859Sml29623 #define XMAC_XIF_FORCE_LED_ON 0x00200000 /* Force Link LED on */ 10153859Sml29623 #define XMAC_XIF_LED_POLARITY 0x00400000 /* LED polarity */ 10163859Sml29623 #define XMAC_XIF_SEL_POR_CLK_SRC 0x00800000 /* Select POR clk src */ 10173859Sml29623 #define XMAC_XIF_TX_OUTPUT_EN 0x01000000 /* enable MII/GMII modes */ 10183859Sml29623 #define XMAC_XIF_LOOPBACK 0x02000000 /* loopback xmac xgmii tx */ 10193859Sml29623 #define XMAC_XIF_LFS_DISABLE 0x04000000 /* disable link fault sig */ 10203859Sml29623 #define XMAC_XIF_MII_MODE_MASK 0x18000000 /* MII/GMII/XGMII mode */ 10213859Sml29623 #define XMAC_XIF_MII_MODE_SHIFT 27 10223859Sml29623 #define XMAC_XIF_XGMII_MODE 0x00 10233859Sml29623 #define XMAC_XIF_GMII_MODE 0x01 10243859Sml29623 #define XMAC_XIF_MII_MODE 0x02 10253859Sml29623 #define XMAC_XIF_ILLEGAL_MODE 0x03 10263859Sml29623 #define XMAC_XIF_XPCS_BYPASS 0x20000000 /* use external xpcs */ 10273859Sml29623 #define XMAC_XIF_1G_PCS_BYPASS 0x40000000 /* use external pcs */ 10283859Sml29623 #define XMAC_XIF_SEL_CLK_25MHZ 0x80000000 /* 25Mhz clk for 100mbps */ 10293859Sml29623 10303859Sml29623 /* IPG register */ 10313859Sml29623 #define XMAC_IPG_VALUE_MASK 0x00000007 /* IPG in XGMII mode */ 10323859Sml29623 #define XMAC_IPG_VALUE_SHIFT 0 10333859Sml29623 #define XMAC_IPG_VALUE1_MASK 0x0000ff00 /* IPG in GMII/MII mode */ 10343859Sml29623 #define XMAC_IPG_VALUE1_SHIFT 8 10353859Sml29623 #define XMAC_IPG_STRETCH_RATIO_MASK 0x001f0000 10363859Sml29623 #define XMAC_IPG_STRETCH_RATIO_SHIFT 16 10373859Sml29623 #define XMAC_IPG_STRETCH_CONST_MASK 0x00e00000 10383859Sml29623 #define XMAC_IPG_STRETCH_CONST_SHIFT 21 10393859Sml29623 10403859Sml29623 #define IPG_12_15_BYTE 3 10413859Sml29623 #define IPG_16_19_BYTE 4 10423859Sml29623 #define IPG_20_23_BYTE 5 10433859Sml29623 #define IPG1_12_BYTES 10 10443859Sml29623 #define IPG1_13_BYTES 11 10453859Sml29623 #define IPG1_14_BYTES 12 10463859Sml29623 #define IPG1_15_BYTES 13 10473859Sml29623 #define IPG1_16_BYTES 14 10483859Sml29623 10493859Sml29623 10503859Sml29623 #define XMAC_MIN_TX_FRM_SZ_MASK 0x3ff /* Min tx frame size */ 10513859Sml29623 #define XMAC_MIN_TX_FRM_SZ_SHIFT 0 10523859Sml29623 #define XMAC_SLOT_TIME_MASK 0x0003fc00 /* slot time */ 10533859Sml29623 #define XMAC_SLOT_TIME_SHIFT 10 10543859Sml29623 #define XMAC_MIN_RX_FRM_SZ_MASK 0x3ff00000 /* Min rx frame size */ 10553859Sml29623 #define XMAC_MIN_RX_FRM_SZ_SHIFT 20 10563859Sml29623 #define XMAC_MAX_FRM_SZ_MASK 0x00003fff /* max tx frame size */ 10573859Sml29623 10583859Sml29623 /* State Machine Register */ 10593859Sml29623 #define XMAC_SM_TX_LNK_MGMT_MASK 0x00000007 10603859Sml29623 #define XMAC_SM_TX_LNK_MGMT_SHIFT 0 10613859Sml29623 #define XMAC_SM_SOP_DETECT 0x00000008 10623859Sml29623 #define XMAC_SM_LNK_FLT_SIG_MASK 0x00000030 10633859Sml29623 #define XMAC_SM_LNK_FLT_SIG_SHIFT 4 10643859Sml29623 #define XMAC_SM_MII_GMII_MD_RX_LNK 0x00000040 10653859Sml29623 #define XMAC_SM_XGMII_MD_RX_LNK 0x00000080 10663859Sml29623 #define XMAC_SM_XGMII_ONLY_VAL_SIG 0x00000100 10673859Sml29623 #define XMAC_SM_ALT_ADR_N_HSH_FN_SIG 0x00000200 10683859Sml29623 #define XMAC_SM_RXMAC_IPP_STAT_MASK 0x00001c00 10693859Sml29623 #define XMAC_SM_RXMAC_IPP_STAT_SHIFT 10 10703859Sml29623 #define XMAC_SM_RXFIFO_WPTR_CLK_MASK 0x007c0000 10713859Sml29623 #define XMAC_SM_RXFIFO_WPTR_CLK_SHIFT 18 10723859Sml29623 #define XMAC_SM_RXFIFO_RPTR_CLK_MASK 0x0F800000 10733859Sml29623 #define XMAC_SM_RXFIFO_RPTR_CLK_SHIFT 23 10743859Sml29623 #define XMAC_SM_TXFIFO_FULL_CLK 0x10000000 10753859Sml29623 #define XMAC_SM_TXFIFO_EMPTY_CLK 0x20000000 10763859Sml29623 #define XMAC_SM_RXFIFO_FULL_CLK 0x40000000 10773859Sml29623 #define XMAC_SM_RXFIFO_EMPTY_CLK 0x80000000 10783859Sml29623 10793859Sml29623 /* Internal Signals 1 Register */ 10803859Sml29623 #define XMAC_IS1_OPP_TXMAC_STAT_MASK 0x0000000F 10813859Sml29623 #define XMAC_IS1_OPP_TXMAC_STAT_SHIFT 0 10823859Sml29623 #define XMAC_IS1_OPP_TXMAC_ABORT 0x00000010 10833859Sml29623 #define XMAC_IS1_OPP_TXMAC_TAG 0x00000020 10843859Sml29623 #define XMAC_IS1_OPP_TXMAC_ACK 0x00000040 10853859Sml29623 #define XMAC_IS1_TXMAC_OPP_REQ 0x00000080 10863859Sml29623 #define XMAC_IS1_RXMAC_IPP_STAT_MASK 0x0FFFFF00 10873859Sml29623 #define XMAC_IS1_RXMAC_IPP_STAT_SHIFT 8 10883859Sml29623 #define XMAC_IS1_RXMAC_IPP_CTRL 0x10000000 10893859Sml29623 #define XMAC_IS1_RXMAC_IPP_TAG 0x20000000 10903859Sml29623 #define XMAC_IS1_IPP_RXMAC_REQ 0x40000000 10913859Sml29623 #define XMAC_IS1_RXMAC_IPP_ACK 0x80000000 10923859Sml29623 10933859Sml29623 /* Internal Signals 2 Register */ 10943859Sml29623 #define XMAC_IS2_TX_HB_TIMER_MASK 0x0000000F 10953859Sml29623 #define XMAC_IS2_TX_HB_TIMER_SHIFT 0 10963859Sml29623 #define XMAC_IS2_RX_HB_TIMER_MASK 0x000000F0 10973859Sml29623 #define XMAC_IS2_RX_HB_TIMER_SHIFT 4 10983859Sml29623 #define XMAC_IS2_XPCS_RXC_MASK 0x0000FF00 10993859Sml29623 #define XMAC_IS2_XPCS_RXC_SHIFT 8 11003859Sml29623 #define XMAC_IS2_XPCS_TXC_MASK 0x00FF0000 11013859Sml29623 #define XMAC_IS2_XPCS_TXC_SHIFT 16 11023859Sml29623 #define XMAC_IS2_LOCAL_FLT_OC_SYNC 0x01000000 11033859Sml29623 #define XMAC_IS2_RMT_FLT_OC_SYNC 0x02000000 11043859Sml29623 11053859Sml29623 /* Register size masking */ 11063859Sml29623 11073859Sml29623 #define XTXMAC_FRM_CNT_MASK 0xFFFFFFFF 11083859Sml29623 #define XTXMAC_BYTE_CNT_MASK 0xFFFFFFFF 11093859Sml29623 #define XRXMAC_CRC_ER_CNT_MASK 0x000000FF 11103859Sml29623 #define XRXMAC_MPSZER_CNT_MASK 0x000000FF 11113859Sml29623 #define XRXMAC_CD_VIO_CNT_MASK 0x000000FF 11123859Sml29623 #define XRXMAC_BT_CNT_MASK 0xFFFFFFFF 11133859Sml29623 #define XRXMAC_HIST_CNT1_MASK 0x001FFFFF 11143859Sml29623 #define XRXMAC_HIST_CNT2_MASK 0x001FFFFF 11153859Sml29623 #define XRXMAC_HIST_CNT3_MASK 0x000FFFFF 11163859Sml29623 #define XRXMAC_HIST_CNT4_MASK 0x0007FFFF 11173859Sml29623 #define XRXMAC_HIST_CNT5_MASK 0x0003FFFF 11183859Sml29623 #define XRXMAC_HIST_CNT6_MASK 0x0001FFFF 11196075Ssbehera #define XRXMAC_HIST_CNT7_MASK 0x07FFFFFF 11203859Sml29623 #define XRXMAC_BC_FRM_CNT_MASK 0x001FFFFF 11213859Sml29623 #define XRXMAC_MC_FRM_CNT_MASK 0x001FFFFF 11223859Sml29623 #define XRXMAC_FRAG_CNT_MASK 0x001FFFFF 11233859Sml29623 #define XRXMAC_AL_ER_CNT_MASK 0x000000FF 11243859Sml29623 #define XMAC_LINK_FLT_CNT_MASK 0x000000FF 11253859Sml29623 #define BTXMAC_FRM_CNT_MASK 0x001FFFFF 11263859Sml29623 #define BTXMAC_BYTE_CNT_MASK 0x07FFFFFF 11273859Sml29623 #define RXMAC_FRM_CNT_MASK 0x0000FFFF 11283859Sml29623 #define BRXMAC_BYTE_CNT_MASK 0x07FFFFFF 11293859Sml29623 #define BMAC_AL_ER_CNT_MASK 0x0000FFFF 11303859Sml29623 #define MAC_LEN_ER_CNT_MASK 0x0000FFFF 11313859Sml29623 #define BMAC_CRC_ER_CNT_MASK 0x0000FFFF 11323859Sml29623 #define BMAC_CD_VIO_CNT_MASK 0x0000FFFF 11333859Sml29623 #define XMAC_XPCS_DESKEW_ERR_CNT_MASK 0x000000FF 11343859Sml29623 #define XMAC_XPCS_SYM_ERR_CNT_L0_MASK 0x0000FFFF 11353859Sml29623 #define XMAC_XPCS_SYM_ERR_CNT_L1_MASK 0xFFFF0000 11363859Sml29623 #define XMAC_XPCS_SYM_ERR_CNT_L1_SHIFT 16 11373859Sml29623 #define XMAC_XPCS_SYM_ERR_CNT_L2_MASK 0x0000FFFF 11383859Sml29623 #define XMAC_XPCS_SYM_ERR_CNT_L3_MASK 0xFFFF0000 11393859Sml29623 #define XMAC_XPCS_SYM_ERR_CNT_L3_SHIFT 16 11403859Sml29623 11413859Sml29623 /* Alternate MAC address registers */ 11423859Sml29623 #define XMAC_MAX_ALT_ADDR_ENTRY 16 /* 16 alternate MAC addrs */ 11433859Sml29623 #define XMAC_MAX_ADDR_ENTRY (XMAC_MAX_ALT_ADDR_ENTRY + 1) 11443859Sml29623 11453859Sml29623 /* Max / Min parameters for Neptune MAC */ 11463859Sml29623 11473859Sml29623 #define MAC_MAX_ALT_ADDR_ENTRY XMAC_MAX_ALT_ADDR_ENTRY 11483859Sml29623 #define MAC_MAX_HOST_INFO_ENTRY XMAC_MAX_HOST_INFO_ENTRY 11493859Sml29623 11503859Sml29623 /* HostInfo entry for the unique MAC address */ 11513859Sml29623 #define XMAC_UNIQUE_HOST_INFO_ENTRY 17 11523859Sml29623 #define BMAC_UNIQUE_HOST_INFO_ENTRY 0 11533859Sml29623 11543859Sml29623 /* HostInfo entry for the multicat address */ 11553859Sml29623 #define XMAC_MULTI_HOST_INFO_ENTRY 16 11563859Sml29623 #define BMAC_MULTI_HOST_INFO_ENTRY 8 11573859Sml29623 11583859Sml29623 /* XMAC Host Info Register */ 11593859Sml29623 typedef union hostinfo { 11603859Sml29623 11613859Sml29623 uint64_t value; 11623859Sml29623 11633859Sml29623 struct { 11643859Sml29623 #if defined(_BIG_ENDIAN) 11653859Sml29623 uint32_t msw; /* Most significant word */ 11663859Sml29623 uint32_t lsw; /* Least significant word */ 11673859Sml29623 #elif defined(_LITTLE_ENDIAN) 11683859Sml29623 uint32_t lsw; /* Least significant word */ 11693859Sml29623 uint32_t msw; /* Most significant word */ 11703859Sml29623 #endif 11713859Sml29623 } val; 11723859Sml29623 struct { 11733859Sml29623 #if defined(_BIG_ENDIAN) 11743859Sml29623 uint32_t w1; 11753859Sml29623 #endif 11763859Sml29623 struct { 11773859Sml29623 #if defined(_BIT_FIELDS_HTOL) 11783859Sml29623 uint32_t reserved2 : 23; 11793859Sml29623 uint32_t mac_pref : 1; 11803859Sml29623 uint32_t reserved1 : 5; 11813859Sml29623 uint32_t rdc_tbl_num : 3; 11823859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 11833859Sml29623 uint32_t rdc_tbl_num : 3; 11843859Sml29623 uint32_t reserved1 : 5; 11853859Sml29623 uint32_t mac_pref : 1; 11863859Sml29623 uint32_t reserved2 : 23; 11873859Sml29623 #endif 11883859Sml29623 } w0; 11893859Sml29623 11903859Sml29623 #if defined(_LITTLE_ENDIAN) 11913859Sml29623 uint32_t w1; 11923859Sml29623 #endif 11933859Sml29623 } bits; 11943859Sml29623 11953859Sml29623 } hostinfo_t; 11963859Sml29623 11973859Sml29623 typedef union hostinfo *hostinfo_pt; 11983859Sml29623 11993859Sml29623 #define XMAC_HI_RDC_TBL_NUM_MASK 0x00000007 12003859Sml29623 #define XMAC_HI_MAC_PREF 0x00000100 12013859Sml29623 12023859Sml29623 #define XMAC_MAX_HOST_INFO_ENTRY 20 /* 20 host entries */ 12033859Sml29623 12043859Sml29623 /* 12053859Sml29623 * ******************** MIF registers ********************************* 12063859Sml29623 */ 12073859Sml29623 12083859Sml29623 /* 12093859Sml29623 * 32-bit register serves as an instruction register when the MIF is 12103859Sml29623 * programmed in frame mode. load this register w/ a valid instruction 12113859Sml29623 * (as per IEEE 802.3u MII spec). poll this register to check for instruction 12123859Sml29623 * execution completion. during a read operation, this register will also 12133859Sml29623 * contain the 16-bit data returned by the transceiver. unless specified 12143859Sml29623 * otherwise, fields are considered "don't care" when polling for 12153859Sml29623 * completion. 12163859Sml29623 */ 12173859Sml29623 12183859Sml29623 #define MIF_FRAME_START_MASK 0xC0000000 /* start of frame mask */ 12193859Sml29623 #define MIF_FRAME_ST_22 0x40000000 /* STart of frame, Cl 22 */ 12203859Sml29623 #define MIF_FRAME_ST_45 0x00000000 /* STart of frame, Cl 45 */ 12213859Sml29623 #define MIF_FRAME_OPCODE_MASK 0x30000000 /* opcode */ 12223859Sml29623 #define MIF_FRAME_OP_READ_22 0x20000000 /* read OPcode, Cl 22 */ 12233859Sml29623 #define MIF_FRAME_OP_WRITE_22 0x10000000 /* write OPcode, Cl 22 */ 12243859Sml29623 #define MIF_FRAME_OP_ADDR_45 0x00000000 /* addr of reg to access */ 12253859Sml29623 #define MIF_FRAME_OP_READ_45 0x30000000 /* read OPcode, Cl 45 */ 12263859Sml29623 #define MIF_FRAME_OP_WRITE_45 0x10000000 /* write OPcode, Cl 45 */ 12273859Sml29623 #define MIF_FRAME_OP_P_R_I_A_45 0x10000000 /* post-read-inc-addr */ 12283859Sml29623 #define MIF_FRAME_PHY_ADDR_MASK 0x0F800000 /* phy address mask */ 12293859Sml29623 #define MIF_FRAME_PHY_ADDR_SHIFT 23 12303859Sml29623 #define MIF_FRAME_REG_ADDR_MASK 0x007C0000 /* reg addr in Cl 22 */ 12313859Sml29623 /* dev addr in Cl 45 */ 12323859Sml29623 #define MIF_FRAME_REG_ADDR_SHIFT 18 12333859Sml29623 #define MIF_FRAME_TURN_AROUND_MSB 0x00020000 /* turn around, MSB. */ 12343859Sml29623 #define MIF_FRAME_TURN_AROUND_LSB 0x00010000 /* turn around, LSB. */ 12353859Sml29623 #define MIF_FRAME_DATA_MASK 0x0000FFFF /* instruction payload */ 12363859Sml29623 12373859Sml29623 /* Clause 45 frame field values */ 12383859Sml29623 #define FRAME45_ST 0 12393859Sml29623 #define FRAME45_OP_ADDR 0 12403859Sml29623 #define FRAME45_OP_WRITE 1 12413859Sml29623 #define FRAME45_OP_READ_INC 2 12423859Sml29623 #define FRAME45_OP_READ 3 12433859Sml29623 12443859Sml29623 typedef union _mif_frame_t { 12453859Sml29623 12463859Sml29623 uint64_t value; 12473859Sml29623 12483859Sml29623 struct { 12493859Sml29623 #if defined(_BIG_ENDIAN) 12503859Sml29623 uint32_t msw; /* Most significant word */ 12513859Sml29623 uint32_t lsw; /* Least significant word */ 12523859Sml29623 #elif defined(_LITTLE_ENDIAN) 12533859Sml29623 uint32_t lsw; /* Least significant word */ 12543859Sml29623 uint32_t msw; /* Most significant word */ 12553859Sml29623 #endif 12563859Sml29623 } val; 12573859Sml29623 struct { 12583859Sml29623 #if defined(_BIG_ENDIAN) 12593859Sml29623 uint32_t w1; 12603859Sml29623 #endif 12613859Sml29623 struct { 12623859Sml29623 #if defined(_BIT_FIELDS_HTOL) 12633859Sml29623 uint32_t st : 2; 12643859Sml29623 uint32_t op : 2; 12653859Sml29623 uint32_t phyad : 5; 12663859Sml29623 uint32_t regad : 5; 12673859Sml29623 uint32_t ta_msb : 1; 12683859Sml29623 uint32_t ta_lsb : 1; 12693859Sml29623 uint32_t data : 16; 12703859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 12713859Sml29623 uint32_t data : 16; 12723859Sml29623 uint32_t ta_lsb : 1; 12733859Sml29623 uint32_t ta_msb : 1; 12743859Sml29623 uint32_t regad : 5; 12753859Sml29623 uint32_t phyad : 5; 12763859Sml29623 uint32_t op : 2; 12773859Sml29623 uint32_t st : 2; 12783859Sml29623 #endif 12793859Sml29623 } w0; 12803859Sml29623 12813859Sml29623 #if defined(_LITTLE_ENDIAN) 12823859Sml29623 uint32_t w1; 12833859Sml29623 #endif 12843859Sml29623 } bits; 12853859Sml29623 } mif_frame_t; 12863859Sml29623 12873859Sml29623 #define MIF_CFG_POLL_EN 0x00000008 /* enable polling */ 12883859Sml29623 #define MIF_CFG_BB_MODE 0x00000010 /* bit-bang mode */ 12893859Sml29623 #define MIF_CFG_POLL_REG_MASK 0x000003E0 /* reg addr to be polled */ 12903859Sml29623 #define MIF_CFG_POLL_REG_SHIFT 5 12913859Sml29623 #define MIF_CFG_POLL_PHY_MASK 0x00007C00 /* XCVR addr to be polled */ 12923859Sml29623 #define MIF_CFG_POLL_PHY_SHIFT 10 12933859Sml29623 #define MIF_CFG_INDIRECT_MODE 0x0000800 12943859Sml29623 /* used to decide if Cl 22 */ 12953859Sml29623 /* or Cl 45 frame is */ 12963859Sml29623 /* constructed. */ 12973859Sml29623 /* 1 = Clause 45,ST = '00' */ 12983859Sml29623 /* 0 = Clause 22,ST = '01' */ 12993859Sml29623 #define MIF_CFG_ATCE_GE_EN 0x00010000 /* Enable ATCA gigabit mode */ 13003859Sml29623 13013859Sml29623 typedef union _mif_cfg_t { 13023859Sml29623 13033859Sml29623 uint64_t value; 13043859Sml29623 13053859Sml29623 struct { 13063859Sml29623 #if defined(_BIG_ENDIAN) 13073859Sml29623 uint32_t msw; /* Most significant word */ 13083859Sml29623 uint32_t lsw; /* Least significant word */ 13093859Sml29623 13103859Sml29623 #elif defined(_LITTLE_ENDIAN) 13113859Sml29623 uint32_t lsw; /* Least significant word */ 13123859Sml29623 uint32_t msw; /* Most significant word */ 13133859Sml29623 #endif 13143859Sml29623 } val; 13153859Sml29623 struct { 13163859Sml29623 #if defined(_BIG_ENDIAN) 13173859Sml29623 uint32_t w1; 13183859Sml29623 #endif 13193859Sml29623 struct { 13203859Sml29623 #if defined(_BIT_FIELDS_HTOL) 13213859Sml29623 uint32_t res2 : 15; 13223859Sml29623 uint32_t atca_ge : 1; 13233859Sml29623 uint32_t indirect_md : 1; 13243859Sml29623 uint32_t phy_addr : 5; 13253859Sml29623 uint32_t reg_addr : 5; 13263859Sml29623 uint32_t bb_mode : 1; 13273859Sml29623 uint32_t poll_en : 1; 13283859Sml29623 uint32_t res1 : 2; 13293859Sml29623 uint32_t res : 1; 13303859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 13313859Sml29623 uint32_t res : 1; 13323859Sml29623 uint32_t res1 : 2; 13333859Sml29623 uint32_t poll_en : 1; 13343859Sml29623 uint32_t bb_mode : 1; 13353859Sml29623 uint32_t reg_addr : 5; 13363859Sml29623 uint32_t phy_addr : 5; 13373859Sml29623 uint32_t indirect_md : 1; 13383859Sml29623 uint32_t atca_ge : 1; 13393859Sml29623 uint32_t res2 : 15; 13403859Sml29623 #endif 13413859Sml29623 } w0; 13423859Sml29623 13433859Sml29623 #if defined(_LITTLE_ENDIAN) 13443859Sml29623 uint32_t w1; 13453859Sml29623 #endif 13463859Sml29623 } bits; 13473859Sml29623 13483859Sml29623 } mif_cfg_t; 13493859Sml29623 13503859Sml29623 #define MIF_POLL_STATUS_DATA_MASK 0xffff0000 13513859Sml29623 #define MIF_POLL_STATUS_STAT_MASK 0x0000ffff 13523859Sml29623 13533859Sml29623 typedef union _mif_poll_stat_t { 13543859Sml29623 uint64_t value; 13553859Sml29623 13563859Sml29623 struct { 13573859Sml29623 #if defined(_BIG_ENDIAN) 13583859Sml29623 uint32_t msw; /* Most significant word */ 13593859Sml29623 uint32_t lsw; /* Least significant word */ 13603859Sml29623 #elif defined(_LITTLE_ENDIAN) 13613859Sml29623 uint32_t lsw; /* Least significant word */ 13623859Sml29623 uint32_t msw; /* Most significant word */ 13633859Sml29623 #endif 13643859Sml29623 } val; 13653859Sml29623 struct { 13663859Sml29623 #if defined(_BIG_ENDIAN) 13673859Sml29623 uint32_t w1; 13683859Sml29623 #endif 13693859Sml29623 struct { 13703859Sml29623 #if defined(_BIT_FIELDS_HTOL) 13713859Sml29623 uint16_t data; 13723859Sml29623 uint16_t status; 13733859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 13743859Sml29623 uint16_t status; 13753859Sml29623 uint16_t data; 13763859Sml29623 #endif 13773859Sml29623 } w0; 13783859Sml29623 13793859Sml29623 #if defined(_LITTLE_ENDIAN) 13803859Sml29623 uint32_t w1; 13813859Sml29623 #endif 13823859Sml29623 } bits; 13833859Sml29623 } mif_poll_stat_t; 13843859Sml29623 13853859Sml29623 13863859Sml29623 #define MIF_POLL_MASK_MASK 0x0000ffff 13873859Sml29623 13883859Sml29623 typedef union _mif_poll_mask_t { 13893859Sml29623 uint64_t value; 13903859Sml29623 13913859Sml29623 struct { 13923859Sml29623 #if defined(_BIG_ENDIAN) 13933859Sml29623 uint32_t msw; /* Most significant word */ 13943859Sml29623 uint32_t lsw; /* Least significant word */ 13953859Sml29623 #elif defined(_LITTLE_ENDIAN) 13963859Sml29623 uint32_t lsw; /* Least significant word */ 13973859Sml29623 uint32_t msw; /* Most significant word */ 13983859Sml29623 #endif 13993859Sml29623 } val; 14003859Sml29623 struct { 14013859Sml29623 #if defined(_BIG_ENDIAN) 14023859Sml29623 uint32_t w1; 14033859Sml29623 #endif 14043859Sml29623 struct { 14053859Sml29623 #if defined(_BIT_FIELDS_HTOL) 14063859Sml29623 uint16_t rsvd; 14073859Sml29623 uint16_t mask; 14083859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 14093859Sml29623 uint16_t mask; 14103859Sml29623 uint16_t rsvd; 14113859Sml29623 #endif 14123859Sml29623 } w0; 14133859Sml29623 14143859Sml29623 #if defined(_LITTLE_ENDIAN) 14153859Sml29623 uint32_t w1; 14163859Sml29623 #endif 14173859Sml29623 } bits; 14183859Sml29623 } mif_poll_mask_t; 14193859Sml29623 14203859Sml29623 #define MIF_STATUS_INIT_DONE_MASK 0x00000001 14213859Sml29623 #define MIF_STATUS_XGE_ERR0_MASK 0x00000002 14223859Sml29623 #define MIF_STATUS_XGE_ERR1_MASK 0x00000004 14233859Sml29623 #define MIF_STATUS_PEU_ERR_MASK 0x00000008 14243859Sml29623 #define MIF_STATUS_EXT_PHY_INTR0_MASK 0x00000010 14253859Sml29623 #define MIF_STATUS_EXT_PHY_INTR1_MASK 0x00000020 14263859Sml29623 14273859Sml29623 typedef union _mif_stat_t { 14283859Sml29623 uint64_t value; 14293859Sml29623 14303859Sml29623 struct { 14313859Sml29623 #if defined(_BIG_ENDIAN) 14323859Sml29623 uint32_t msw; /* Most significant word */ 14333859Sml29623 uint32_t lsw; /* Least significant word */ 14343859Sml29623 #elif defined(_LITTLE_ENDIAN) 14353859Sml29623 uint32_t lsw; /* Least significant word */ 14363859Sml29623 uint32_t msw; /* Most significant word */ 14373859Sml29623 #endif 14383859Sml29623 } val; 14393859Sml29623 struct { 14403859Sml29623 #if defined(_BIG_ENDIAN) 14413859Sml29623 uint32_t w1; 14423859Sml29623 #endif 14433859Sml29623 struct { 14443859Sml29623 #if defined(_BIT_FIELDS_HTOL) 14453859Sml29623 uint32_t rsvd:26; 14463859Sml29623 uint32_t ext_phy_intr_flag1:1; 14473859Sml29623 uint32_t ext_phy_intr_flag0:1; 14483859Sml29623 uint32_t peu_err:1; 14493859Sml29623 uint32_t xge_err1:1; 14503859Sml29623 uint32_t xge_err0:1; 14513859Sml29623 uint32_t mif_init_done_stat:1; 14523859Sml29623 14533859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 14543859Sml29623 uint32_t mif_init_done_stat:1; 14553859Sml29623 uint32_t xge_err0:1; 14563859Sml29623 uint32_t xge_err1:1; 14573859Sml29623 uint32_t ext_phy_intr_flag0:1; 14583859Sml29623 uint32_t ext_phy_intr_flag1:1; 14593859Sml29623 uint32_t rsvd:26; 14603859Sml29623 #endif 14613859Sml29623 } w0; 14623859Sml29623 14633859Sml29623 #if defined(_LITTLE_ENDIAN) 14643859Sml29623 uint32_t w1; 14653859Sml29623 #endif 14663859Sml29623 } bits; 14673859Sml29623 } mif_stat_t; 14683859Sml29623 14693859Sml29623 /* MIF State Machine Register */ 14703859Sml29623 14713859Sml29623 #define MIF_SM_EXECUTION_MASK 0x0000003f /* execution state */ 14723859Sml29623 #define MIF_SM_EXECUTION_SHIFT 0 14733859Sml29623 #define MIF_SM_CONTROL_MASK 0x000001c0 /* control state */ 14743859Sml29623 #define MIF_SM_CONTROL_MASK_SHIFT 6 14753859Sml29623 #define MIF_SM_MDI 0x00000200 14763859Sml29623 #define MIF_SM_MDO 0x00000400 14773859Sml29623 #define MIF_SM_MDO_EN 0x00000800 14783859Sml29623 #define MIF_SM_MDC 0x00001000 14793859Sml29623 #define MIF_SM_MDI_0 0x00002000 14803859Sml29623 #define MIF_SM_MDI_1 0x00004000 14813859Sml29623 #define MIF_SM_MDI_2 0x00008000 14823859Sml29623 #define MIF_SM_PORT_ADDR_MASK 0x001f0000 14833859Sml29623 #define MIF_SM_PORT_ADDR_SHIFT 16 14843859Sml29623 #define MIF_SM_INT_SIG_MASK 0xffe00000 14853859Sml29623 #define MIF_SM_INT_SIG_SHIFT 21 14863859Sml29623 14873859Sml29623 14883859Sml29623 /* 14893859Sml29623 * ******************** PCS registers ********************************* 14903859Sml29623 */ 14913859Sml29623 14923859Sml29623 /* PCS Registers */ 14933859Sml29623 #define PCS_MII_CTRL_1000_SEL 0x0040 /* reads 1. ignored on wr */ 14943859Sml29623 #define PCS_MII_CTRL_COLLISION_TEST 0x0080 /* COL signal */ 14953859Sml29623 #define PCS_MII_CTRL_DUPLEX 0x0100 /* forced 0x0. */ 14963859Sml29623 #define PCS_MII_RESTART_AUTONEG 0x0200 /* self clearing. */ 14973859Sml29623 #define PCS_MII_ISOLATE 0x0400 /* read 0. ignored on wr */ 14983859Sml29623 #define PCS_MII_POWER_DOWN 0x0800 /* read 0. ignored on wr */ 14993859Sml29623 #define PCS_MII_AUTONEG_EN 0x1000 /* autonegotiation */ 15003859Sml29623 #define PCS_MII_10_100_SEL 0x2000 /* read 0. ignored on wr */ 15013859Sml29623 #define PCS_MII_RESET 0x8000 /* reset PCS. */ 15023859Sml29623 15033859Sml29623 typedef union _pcs_ctrl_t { 15043859Sml29623 uint64_t value; 15053859Sml29623 15063859Sml29623 struct { 15073859Sml29623 #if defined(_BIG_ENDIAN) 15083859Sml29623 uint32_t msw; /* Most significant word */ 15093859Sml29623 uint32_t lsw; /* Least significant word */ 15103859Sml29623 #elif defined(_LITTLE_ENDIAN) 15113859Sml29623 uint32_t lsw; /* Least significant word */ 15123859Sml29623 uint32_t msw; /* Most significant word */ 15133859Sml29623 #endif 15143859Sml29623 } val; 15153859Sml29623 struct { 15163859Sml29623 #if defined(_BIG_ENDIAN) 15173859Sml29623 uint32_t w1; 15183859Sml29623 #endif 15193859Sml29623 struct { 15203859Sml29623 #if defined(_BIT_FIELDS_HTOL) 15213859Sml29623 uint32_t res0 : 16; 15223859Sml29623 uint32_t reset : 1; 15233859Sml29623 uint32_t res1 : 1; 15243859Sml29623 uint32_t sel_10_100 : 1; 15253859Sml29623 uint32_t an_enable : 1; 15263859Sml29623 uint32_t pwr_down : 1; 15273859Sml29623 uint32_t isolate : 1; 15283859Sml29623 uint32_t restart_an : 1; 15293859Sml29623 uint32_t duplex : 1; 15303859Sml29623 uint32_t col_test : 1; 15313859Sml29623 uint32_t sel_1000 : 1; 15323859Sml29623 uint32_t res2 : 6; 15333859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 15343859Sml29623 uint32_t res2 : 6; 15353859Sml29623 uint32_t sel_1000 : 1; 15363859Sml29623 uint32_t col_test : 1; 15373859Sml29623 uint32_t duplex : 1; 15383859Sml29623 uint32_t restart_an : 1; 15393859Sml29623 uint32_t isolate : 1; 15403859Sml29623 uint32_t pwr_down : 1; 15413859Sml29623 uint32_t an_enable : 1; 15423859Sml29623 uint32_t sel_10_100 : 1; 15433859Sml29623 uint32_t res1 : 1; 15443859Sml29623 uint32_t reset : 1; 15453859Sml29623 uint32_t res0 : 16; 15463859Sml29623 #endif 15473859Sml29623 } w0; 15483859Sml29623 15493859Sml29623 #if defined(_LITTLE_ENDIAN) 15503859Sml29623 uint32_t w1; 15513859Sml29623 #endif 15523859Sml29623 } bits; 15533859Sml29623 } pcs_ctrl_t; 15543859Sml29623 15553859Sml29623 #define PCS_MII_STATUS_EXTEND_CAP 0x0001 /* reads 0 */ 15563859Sml29623 #define PCS_MII_STATUS_JABBER_DETECT 0x0002 /* reads 0 */ 15573859Sml29623 #define PCS_MII_STATUS_LINK_STATUS 0x0004 /* link status */ 15583859Sml29623 #define PCS_MII_STATUS_AUTONEG_ABLE 0x0008 /* reads 1 */ 15593859Sml29623 #define PCS_MII_STATUS_REMOTE_FAULT 0x0010 /* remote fault detected */ 15603859Sml29623 #define PCS_MII_STATUS_AUTONEG_COMP 0x0020 /* auto-neg completed */ 15613859Sml29623 #define PCS_MII_STATUS_EXTEND_STATUS 0x0100 /* 1000 Base-X PHY */ 15623859Sml29623 15633859Sml29623 typedef union _pcs_stat_t { 15643859Sml29623 uint64_t value; 15653859Sml29623 15663859Sml29623 struct { 15673859Sml29623 #if defined(_BIG_ENDIAN) 15683859Sml29623 uint32_t msw; /* Most significant word */ 15693859Sml29623 uint32_t lsw; /* Least significant word */ 15703859Sml29623 #elif defined(_LITTLE_ENDIAN) 15713859Sml29623 uint32_t lsw; /* Least significant word */ 15723859Sml29623 uint32_t msw; /* Most significant word */ 15733859Sml29623 #endif 15743859Sml29623 } val; 15753859Sml29623 struct { 15763859Sml29623 #if defined(_BIG_ENDIAN) 15773859Sml29623 uint32_t w1; 15783859Sml29623 #endif 15793859Sml29623 struct { 15803859Sml29623 #if defined(_BIT_FIELDS_HTOL) 15813859Sml29623 uint32_t res0 : 23; 15823859Sml29623 uint32_t ext_stat : 1; 15833859Sml29623 uint32_t res1 : 2; 15843859Sml29623 uint32_t an_complete : 1; 15853859Sml29623 uint32_t remote_fault : 1; 15863859Sml29623 uint32_t an_able : 1; 15873859Sml29623 uint32_t link_stat : 1; 15883859Sml29623 uint32_t jabber_detect : 1; 15893859Sml29623 uint32_t ext_cap : 1; 15903859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 15913859Sml29623 uint32_t ext_cap : 1; 15923859Sml29623 uint32_t jabber_detect : 1; 15933859Sml29623 uint32_t link_stat : 1; 15943859Sml29623 uint32_t an_able : 1; 15953859Sml29623 uint32_t remote_fault : 1; 15963859Sml29623 uint32_t an_complete : 1; 15973859Sml29623 uint32_t res1 : 2; 15983859Sml29623 uint32_t ext_stat : 1; 15993859Sml29623 uint32_t res0 : 23; 16003859Sml29623 #endif 16013859Sml29623 } w0; 16023859Sml29623 16033859Sml29623 #if defined(_LITTLE_ENDIAN) 16043859Sml29623 uint32_t w1; 16053859Sml29623 #endif 16063859Sml29623 } bits; 16073859Sml29623 } pcs_stat_t; 16083859Sml29623 16093859Sml29623 #define PCS_MII_ADVERT_FD 0x0020 /* advertise full duplex */ 16103859Sml29623 #define PCS_MII_ADVERT_HD 0x0040 /* advertise half-duplex */ 16113859Sml29623 #define PCS_MII_ADVERT_SYM_PAUSE 0x0080 /* advertise PAUSE sym */ 16123859Sml29623 #define PCS_MII_ADVERT_ASYM_PAUSE 0x0100 /* advertises PAUSE asym */ 16133859Sml29623 #define PCS_MII_ADVERT_RF_MASK 0x3000 /* remote fault */ 16143859Sml29623 #define PCS_MII_ADVERT_RF_SHIFT 12 16153859Sml29623 #define PCS_MII_ADVERT_ACK 0x4000 /* (ro) */ 16163859Sml29623 #define PCS_MII_ADVERT_NEXT_PAGE 0x8000 /* (ro) forced 0x0 */ 16173859Sml29623 16183859Sml29623 #define PCS_MII_LPA_FD PCS_MII_ADVERT_FD 16193859Sml29623 #define PCS_MII_LPA_HD PCS_MII_ADVERT_HD 16203859Sml29623 #define PCS_MII_LPA_SYM_PAUSE PCS_MII_ADVERT_SYM_PAUSE 16213859Sml29623 #define PCS_MII_LPA_ASYM_PAUSE PCS_MII_ADVERT_ASYM_PAUSE 16223859Sml29623 #define PCS_MII_LPA_RF_MASK PCS_MII_ADVERT_RF_MASK 16233859Sml29623 #define PCS_MII_LPA_RF_SHIFT PCS_MII_ADVERT_RF_SHIFT 16243859Sml29623 #define PCS_MII_LPA_ACK PCS_MII_ADVERT_ACK 16253859Sml29623 #define PCS_MII_LPA_NEXT_PAGE PCS_MII_ADVERT_NEXT_PAGE 16263859Sml29623 16273859Sml29623 typedef union _pcs_anar_t { 16283859Sml29623 uint64_t value; 16293859Sml29623 16303859Sml29623 struct { 16313859Sml29623 #if defined(_BIG_ENDIAN) 16323859Sml29623 uint32_t msw; /* Most significant word */ 16333859Sml29623 uint32_t lsw; /* Least significant word */ 16343859Sml29623 #elif defined(_LITTLE_ENDIAN) 16353859Sml29623 uint32_t lsw; /* Least significant word */ 16363859Sml29623 uint32_t msw; /* Most significant word */ 16373859Sml29623 #endif 16383859Sml29623 } val; 16393859Sml29623 struct { 16403859Sml29623 #if defined(_BIG_ENDIAN) 16413859Sml29623 uint32_t w1; 16423859Sml29623 #endif 16433859Sml29623 struct { 16443859Sml29623 #if defined(_BIT_FIELDS_HTOL) 16453859Sml29623 uint32_t res0 : 16; 16463859Sml29623 uint32_t next_page : 1; 16473859Sml29623 uint32_t ack : 1; 16483859Sml29623 uint32_t remote_fault : 2; 16493859Sml29623 uint32_t res1 : 3; 16503859Sml29623 uint32_t asm_pause : 1; 16513859Sml29623 uint32_t pause : 1; 16523859Sml29623 uint32_t half_duplex : 1; 16533859Sml29623 uint32_t full_duplex : 1; 16543859Sml29623 uint32_t res2 : 5; 16553859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 16563859Sml29623 uint32_t res2 : 5; 16573859Sml29623 uint32_t full_duplex : 1; 16583859Sml29623 uint32_t half_duplex : 1; 16593859Sml29623 uint32_t pause : 1; 16603859Sml29623 uint32_t asm_pause : 1; 16613859Sml29623 uint32_t res1 : 3; 16623859Sml29623 uint32_t remore_fault : 2; 16633859Sml29623 uint32_t ack : 1; 16643859Sml29623 uint32_t next_page : 1; 16653859Sml29623 uint32_t res0 : 16; 16663859Sml29623 #endif 16673859Sml29623 } w0; 16683859Sml29623 16693859Sml29623 #if defined(_LITTLE_ENDIAN) 16703859Sml29623 uint32_t w1; 16713859Sml29623 #endif 16723859Sml29623 } bits; 16733859Sml29623 } pcs_anar_t, *p_pcs_anar_t; 16743859Sml29623 16753859Sml29623 #define PCS_CFG_EN 0x0001 /* enable PCS. */ 16763859Sml29623 #define PCS_CFG_SD_OVERRIDE 0x0002 16773859Sml29623 #define PCS_CFG_SD_ACTIVE_LOW 0x0004 /* sig detect active low */ 16783859Sml29623 #define PCS_CFG_JITTER_STUDY_MASK 0x0018 /* jitter measurements */ 16793859Sml29623 #define PCS_CFG_JITTER_STUDY_SHIFT 4 16803859Sml29623 #define PCS_CFG_10MS_TIMER_OVERRIDE 0x0020 /* shortens autoneg timer */ 16813859Sml29623 #define PCS_CFG_MASK 0x0040 /* PCS global mask bit */ 16823859Sml29623 16833859Sml29623 typedef union _pcs_cfg_t { 16843859Sml29623 uint64_t value; 16853859Sml29623 16863859Sml29623 struct { 16873859Sml29623 #if defined(_BIG_ENDIAN) 16883859Sml29623 uint32_t msw; /* Most significant word */ 16893859Sml29623 uint32_t lsw; /* Least significant word */ 16903859Sml29623 #elif defined(_LITTLE_ENDIAN) 16913859Sml29623 uint32_t lsw; /* Least significant word */ 16923859Sml29623 uint32_t msw; /* Most significant word */ 16933859Sml29623 #endif 16943859Sml29623 } val; 16953859Sml29623 struct { 16963859Sml29623 #if defined(_BIG_ENDIAN) 16973859Sml29623 uint32_t w1; 16983859Sml29623 #endif 16993859Sml29623 struct { 17003859Sml29623 #if defined(_BIT_FIELDS_HTOL) 17013859Sml29623 uint32_t res0 : 25; 17023859Sml29623 uint32_t mask : 1; 17033859Sml29623 uint32_t override_10ms_timer : 1; 17043859Sml29623 uint32_t jitter_study : 2; 17053859Sml29623 uint32_t sig_det_a_low : 1; 17063859Sml29623 uint32_t sig_det_override : 1; 17073859Sml29623 uint32_t enable : 1; 17083859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 17093859Sml29623 uint32_t enable : 1; 17103859Sml29623 uint32_t sig_det_override : 1; 17113859Sml29623 uint32_t sig_det_a_low : 1; 17123859Sml29623 uint32_t jitter_study : 2; 17133859Sml29623 uint32_t override_10ms_timer : 1; 17143859Sml29623 uint32_t mask : 1; 17153859Sml29623 uint32_t res0 : 25; 17163859Sml29623 #endif 17173859Sml29623 } w0; 17183859Sml29623 17193859Sml29623 #if defined(_LITTLE_ENDIAN) 17203859Sml29623 uint32_t w1; 17213859Sml29623 #endif 17223859Sml29623 } bits; 17233859Sml29623 } pcs_cfg_t, *p_pcs_cfg_t; 17243859Sml29623 17253859Sml29623 17263859Sml29623 /* used for diagnostic purposes. bits 20-22 autoclear on read */ 17273859Sml29623 #define PCS_SM_TX_STATE_MASK 0x0000000F /* Tx idle state mask */ 17283859Sml29623 #define PCS_SM_TX_STATE_SHIFT 0 17293859Sml29623 #define PCS_SM_RX_STATE_MASK 0x000000F0 /* Rx idle state mask */ 17303859Sml29623 #define PCS_SM_RX_STATE_SHIFT 4 17313859Sml29623 #define PCS_SM_WORD_SYNC_STATE_MASK 0x00000700 /* loss of sync state mask */ 17323859Sml29623 #define PCS_SM_WORD_SYNC_STATE_SHIFT 8 17333859Sml29623 #define PCS_SM_SEQ_DETECT_STATE_MASK 0x00001800 /* sequence detect */ 17343859Sml29623 #define PCS_SM_SEQ_DETECT_STATE_SHIFT 11 17353859Sml29623 #define PCS_SM_LINK_STATE_MASK 0x0001E000 /* link state */ 17363859Sml29623 #define PCS_SM_LINK_STATE_SHIFT 13 17373859Sml29623 #define PCS_SM_LOSS_LINK_C 0x00100000 /* loss of link */ 17383859Sml29623 #define PCS_SM_LOSS_LINK_SYNC 0x00200000 /* loss of sync */ 17393859Sml29623 #define PCS_SM_LOSS_SIGNAL_DETECT 0x00400000 /* signal detect fail */ 17403859Sml29623 #define PCS_SM_NO_LINK_BREAKLINK 0x01000000 /* receipt of breaklink */ 17413859Sml29623 #define PCS_SM_NO_LINK_SERDES 0x02000000 /* serdes initializing */ 17423859Sml29623 #define PCS_SM_NO_LINK_C 0x04000000 /* C codes not stable */ 17433859Sml29623 #define PCS_SM_NO_LINK_SYNC 0x08000000 /* word sync not achieved */ 17443859Sml29623 #define PCS_SM_NO_LINK_WAIT_C 0x10000000 /* waiting for C codes */ 17453859Sml29623 #define PCS_SM_NO_LINK_NO_IDLE 0x20000000 /* linkpartner send C code */ 17463859Sml29623 17473859Sml29623 typedef union _pcs_stat_mc_t { 17483859Sml29623 uint64_t value; 17493859Sml29623 17503859Sml29623 struct { 17513859Sml29623 #if defined(_BIG_ENDIAN) 17523859Sml29623 uint32_t msw; /* Most significant word */ 17533859Sml29623 uint32_t lsw; /* Least significant word */ 17543859Sml29623 #elif defined(_LITTLE_ENDIAN) 17553859Sml29623 uint32_t lsw; /* Least significant word */ 17563859Sml29623 uint32_t msw; /* Most significant word */ 17573859Sml29623 #endif 17583859Sml29623 } val; 17593859Sml29623 struct { 17603859Sml29623 #if defined(_BIG_ENDIAN) 17613859Sml29623 uint32_t w1; 17623859Sml29623 #endif 17633859Sml29623 struct { 17643859Sml29623 #if defined(_BIT_FIELDS_HTOL) 17653859Sml29623 uint32_t res2 : 2; 17663859Sml29623 uint32_t lnk_dwn_ni : 1; 17673859Sml29623 uint32_t lnk_dwn_wc : 1; 17683859Sml29623 uint32_t lnk_dwn_ls : 1; 17693859Sml29623 uint32_t lnk_dwn_nc : 1; 17703859Sml29623 uint32_t lnk_dwn_ser : 1; 17713859Sml29623 uint32_t lnk_loss_bc : 1; 17723859Sml29623 uint32_t res1 : 1; 17733859Sml29623 uint32_t loss_sd : 1; 17743859Sml29623 uint32_t lnk_loss_sync : 1; 17753859Sml29623 uint32_t lnk_loss_c : 1; 17763859Sml29623 uint32_t res0 : 3; 17773859Sml29623 uint32_t link_cfg_stat : 4; 17783859Sml29623 uint32_t seq_detc_stat : 2; 17793859Sml29623 uint32_t word_sync : 3; 17803859Sml29623 uint32_t rx_ctrl : 4; 17813859Sml29623 uint32_t tx_ctrl : 4; 17823859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 17833859Sml29623 uint32_t tx_ctrl : 4; 17843859Sml29623 uint32_t rx_ctrl : 4; 17853859Sml29623 uint32_t word_sync : 3; 17863859Sml29623 uint32_t seq_detc_stat : 2; 17873859Sml29623 uint32_t link_cfg_stat : 4; 17883859Sml29623 uint32_t res0 : 3; 17893859Sml29623 uint32_t lnk_loss_c : 1; 17903859Sml29623 uint32_t lnk_loss_sync : 1; 17913859Sml29623 uint32_t loss_sd : 1; 17923859Sml29623 uint32_t res1 : 1; 17933859Sml29623 uint32_t lnk_loss_bc : 1; 17943859Sml29623 uint32_t lnk_dwn_ser : 1; 17953859Sml29623 uint32_t lnk_dwn_nc : 1; 17963859Sml29623 uint32_t lnk_dwn_ls : 1; 17973859Sml29623 uint32_t lnk_dwn_wc : 1; 17983859Sml29623 uint32_t lnk_dwn_ni : 1; 17993859Sml29623 uint32_t res2 : 2; 18003859Sml29623 #endif 18013859Sml29623 } w0; 18023859Sml29623 18033859Sml29623 #if defined(_LITTLE_ENDIAN) 18043859Sml29623 uint32_t w1; 18053859Sml29623 #endif 18063859Sml29623 } bits; 18073859Sml29623 } pcs_stat_mc_t, *p_pcs_stat_mc_t; 18083859Sml29623 18093859Sml29623 #define PCS_INTR_STATUS_LINK_CHANGE 0x04 /* link status has changed */ 18103859Sml29623 18113859Sml29623 /* 18123859Sml29623 * control which network interface is used. no more than one bit should 18133859Sml29623 * be set. 18143859Sml29623 */ 18153859Sml29623 #define PCS_DATAPATH_MODE_PCS 0 /* Internal PCS is used */ 18163859Sml29623 #define PCS_DATAPATH_MODE_MII 0x00000002 /* GMII/RGMII is selected. */ 18173859Sml29623 18183859Sml29623 #define PCS_PACKET_COUNT_TX_MASK 0x000007FF /* pkts xmitted by PCS */ 18193859Sml29623 #define PCS_PACKET_COUNT_RX_MASK 0x07FF0000 /* pkts recvd by PCS */ 18203859Sml29623 #define PCS_PACKET_COUNT_RX_SHIFT 16 18213859Sml29623 18223859Sml29623 /* 18233859Sml29623 * ******************** XPCS registers ********************************* 18243859Sml29623 */ 18253859Sml29623 18263859Sml29623 /* XPCS Base 10G Control1 Register */ 18273859Sml29623 #define XPCS_CTRL1_RST 0x8000 /* Self clearing reset. */ 18283859Sml29623 #define XPCS_CTRL1_LOOPBK 0x4000 /* xpcs Loopback */ 18293859Sml29623 #define XPCS_CTRL1_SPEED_SEL_3 0x2000 /* 1 indicates 10G speed */ 18303859Sml29623 #define XPCS_CTRL1_LOW_PWR 0x0800 /* low power mode. */ 18313859Sml29623 #define XPCS_CTRL1_SPEED_SEL_1 0x0040 /* 1 indicates 10G speed */ 18323859Sml29623 #define XPCS_CTRL1_SPEED_SEL_0_MASK 0x003c /* 0 indicates 10G speed. */ 18333859Sml29623 #define XPCS_CTRL1_SPEED_SEL_0_SHIFT 2 18343859Sml29623 18353859Sml29623 18363859Sml29623 18373859Sml29623 typedef union _xpcs_ctrl1_t { 18383859Sml29623 uint64_t value; 18393859Sml29623 18403859Sml29623 struct { 18413859Sml29623 #if defined(_BIG_ENDIAN) 18423859Sml29623 uint32_t msw; /* Most significant word */ 18433859Sml29623 uint32_t lsw; /* Least significant word */ 18443859Sml29623 #elif defined(_LITTLE_ENDIAN) 18453859Sml29623 uint32_t lsw; /* Least significant word */ 18463859Sml29623 uint32_t msw; /* Most significant word */ 18473859Sml29623 #endif 18483859Sml29623 } val; 18493859Sml29623 struct { 18503859Sml29623 #if defined(_BIG_ENDIAN) 18513859Sml29623 uint32_t w1; 18523859Sml29623 #endif 18533859Sml29623 struct { 18543859Sml29623 #if defined(_BIT_FIELDS_HTOL) 18553859Sml29623 uint32_t res3 : 16; 18563859Sml29623 uint32_t reset : 1; 18573859Sml29623 uint32_t csr_lb : 1; 18583859Sml29623 uint32_t csr_speed_sel3 : 1; 18593859Sml29623 uint32_t res2 : 1; 18603859Sml29623 uint32_t csr_low_pwr : 1; 18613859Sml29623 uint32_t res1 : 4; 18623859Sml29623 uint32_t csr_speed_sel1 : 1; 18633859Sml29623 uint32_t csr_speed_sel0 : 4; 18643859Sml29623 uint32_t res0 : 2; 18653859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 18663859Sml29623 uint32_t res0 : 2; 18673859Sml29623 uint32_t csr_speed_sel0 : 4; 18683859Sml29623 uint32_t csr_speed_sel1 : 1; 18693859Sml29623 uint32_t res1 : 4; 18703859Sml29623 uint32_t csr_low_pwr : 1; 18713859Sml29623 uint32_t res2 : 1; 18723859Sml29623 uint32_t csr_speed_sel3 : 1; 18733859Sml29623 uint32_t csr_lb : 1; 18743859Sml29623 uint32_t reset : 1; 18753859Sml29623 uint32_t res3 : 16; 18763859Sml29623 #endif 18773859Sml29623 } w0; 18783859Sml29623 18793859Sml29623 #if defined(_LITTLE_ENDIAN) 18803859Sml29623 uint32_t w1; 18813859Sml29623 #endif 18823859Sml29623 } bits; 18833859Sml29623 } xpcs_ctrl1_t; 18843859Sml29623 18853859Sml29623 18863859Sml29623 /* XPCS Base 10G Status1 Register (Read Only) */ 18873859Sml29623 #define XPCS_STATUS1_FAULT 0x0080 18883859Sml29623 #define XPCS_STATUS1_RX_LINK_STATUS_UP 0x0004 /* Link status interrupt */ 18893859Sml29623 #define XPCS_STATUS1_LOW_POWER_ABILITY 0x0002 /* low power mode */ 18906028Ssbehera #define XPCS_STATUS_RX_LINK_STATUS_UP 0x1000 /* Link status interrupt */ 18913859Sml29623 18923859Sml29623 18933859Sml29623 typedef union _xpcs_stat1_t { 18943859Sml29623 uint64_t value; 18953859Sml29623 18963859Sml29623 struct { 18973859Sml29623 #if defined(_BIG_ENDIAN) 18983859Sml29623 uint32_t msw; /* Most significant word */ 18993859Sml29623 uint32_t lsw; /* Least significant word */ 19003859Sml29623 #elif defined(_LITTLE_ENDIAN) 19013859Sml29623 uint32_t lsw; /* Least significant word */ 19023859Sml29623 uint32_t msw; /* Most significant word */ 19033859Sml29623 #endif 19043859Sml29623 } val; 19053859Sml29623 struct { 19063859Sml29623 #if defined(_BIG_ENDIAN) 19073859Sml29623 uint32_t w1; 19083859Sml29623 #endif 19093859Sml29623 struct { 19103859Sml29623 #if defined(_BIT_FIELDS_HTOL) 19113859Sml29623 uint32_t res4 : 16; 19123859Sml29623 uint32_t res3 : 8; 19133859Sml29623 uint32_t csr_fault : 1; 19143859Sml29623 uint32_t res1 : 4; 19153859Sml29623 uint32_t csr_rx_link_stat : 1; 19163859Sml29623 uint32_t csr_low_pwr_ability : 1; 19173859Sml29623 uint32_t res0 : 1; 19183859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 19193859Sml29623 uint32_t res0 : 1; 19203859Sml29623 uint32_t csr_low_pwr_ability : 1; 19213859Sml29623 uint32_t csr_rx_link_stat : 1; 19223859Sml29623 uint32_t res1 : 4; 19233859Sml29623 uint32_t csr_fault : 1; 19243859Sml29623 uint32_t res3 : 8; 19253859Sml29623 uint32_t res4 : 16; 19263859Sml29623 #endif 19273859Sml29623 } w0; 19283859Sml29623 19293859Sml29623 #if defined(_LITTLE_ENDIAN) 19303859Sml29623 uint32_t w1; 19313859Sml29623 #endif 19323859Sml29623 } bits; 19333859Sml29623 } xpcs_stat1_t; 19343859Sml29623 19353859Sml29623 19363859Sml29623 /* XPCS Base Speed Ability Register. Indicates 10G capability */ 19373859Sml29623 #define XPCS_SPEED_ABILITY_10_GIG 0x0001 19383859Sml29623 19393859Sml29623 19403859Sml29623 typedef union _xpcs_speed_ab_t { 19413859Sml29623 uint64_t value; 19423859Sml29623 19433859Sml29623 struct { 19443859Sml29623 #if defined(_BIG_ENDIAN) 19453859Sml29623 uint32_t msw; /* Most significant word */ 19463859Sml29623 uint32_t lsw; /* Least significant word */ 19473859Sml29623 #elif defined(_LITTLE_ENDIAN) 19483859Sml29623 uint32_t lsw; /* Least significant word */ 19493859Sml29623 uint32_t msw; /* Most significant word */ 19503859Sml29623 #endif 19513859Sml29623 } val; 19523859Sml29623 struct { 19533859Sml29623 #if defined(_BIG_ENDIAN) 19543859Sml29623 uint32_t w1; 19553859Sml29623 #endif 19563859Sml29623 struct { 19573859Sml29623 #if defined(_BIT_FIELDS_HTOL) 19583859Sml29623 uint32_t res1 : 16; 19593859Sml29623 uint32_t res0 : 15; 19603859Sml29623 uint32_t csr_10gig : 1; 19613859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 19623859Sml29623 uint32_t csr_10gig : 1; 19633859Sml29623 uint32_t res0 : 15; 19643859Sml29623 uint32_t res1 : 16; 19653859Sml29623 #endif 19663859Sml29623 } w0; 19673859Sml29623 19683859Sml29623 #if defined(_LITTLE_ENDIAN) 19693859Sml29623 uint32_t w1; 19703859Sml29623 #endif 19713859Sml29623 } bits; 19723859Sml29623 } xpcs_speed_ab_t; 19733859Sml29623 19743859Sml29623 19753859Sml29623 /* XPCS Base 10G Devices in Package Register */ 19763859Sml29623 #define XPCS_DEV_IN_PKG_CSR_VENDOR2 0x80000000 19773859Sml29623 #define XPCS_DEV_IN_PKG_CSR_VENDOR1 0x40000000 19783859Sml29623 #define XPCS_DEV_IN_PKG_DTE_XS 0x00000020 19793859Sml29623 #define XPCS_DEV_IN_PKG_PHY_XS 0x00000010 19803859Sml29623 #define XPCS_DEV_IN_PKG_PCS 0x00000008 19813859Sml29623 #define XPCS_DEV_IN_PKG_WIS 0x00000004 19823859Sml29623 #define XPCS_DEV_IN_PKG_PMD_PMA 0x00000002 19833859Sml29623 #define XPCS_DEV_IN_PKG_CLS_22_REG 0x00000000 19843859Sml29623 19853859Sml29623 19863859Sml29623 19873859Sml29623 typedef union _xpcs_dev_in_pkg_t { 19883859Sml29623 uint64_t value; 19893859Sml29623 19903859Sml29623 struct { 19913859Sml29623 #if defined(_BIG_ENDIAN) 19923859Sml29623 uint32_t msw; /* Most significant word */ 19933859Sml29623 uint32_t lsw; /* Least significant word */ 19943859Sml29623 #elif defined(_LITTLE_ENDIAN) 19953859Sml29623 uint32_t lsw; /* Least significant word */ 19963859Sml29623 uint32_t msw; /* Most significant word */ 19973859Sml29623 #endif 19983859Sml29623 } val; 19993859Sml29623 struct { 20003859Sml29623 #if defined(_BIG_ENDIAN) 20013859Sml29623 uint32_t w1; 20023859Sml29623 #endif 20033859Sml29623 struct { 20043859Sml29623 #if defined(_BIT_FIELDS_HTOL) 20053859Sml29623 uint32_t csr_vendor2 : 1; 20063859Sml29623 uint32_t csr_vendor1 : 1; 20073859Sml29623 uint32_t res1 : 14; 20083859Sml29623 uint32_t res0 : 10; 20093859Sml29623 uint32_t dte_xs : 1; 20103859Sml29623 uint32_t phy_xs : 1; 20113859Sml29623 uint32_t pcs : 1; 20123859Sml29623 uint32_t wis : 1; 20133859Sml29623 uint32_t pmd_pma : 1; 20143859Sml29623 uint32_t clause_22_reg : 1; 20153859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 20163859Sml29623 uint32_t clause_22_reg : 1; 20173859Sml29623 uint32_t pmd_pma : 1; 20183859Sml29623 uint32_t wis : 1; 20193859Sml29623 uint32_t pcs : 1; 20203859Sml29623 uint32_t phy_xs : 1; 20213859Sml29623 uint32_t dte_xs : 1; 20223859Sml29623 uint32_t res0 : 10; 20233859Sml29623 uint32_t res1 : 14; 20243859Sml29623 uint32_t csr_vendor1 : 1; 20253859Sml29623 uint32_t csr_vendor2 : 1; 20263859Sml29623 #endif 20273859Sml29623 } w0; 20283859Sml29623 20293859Sml29623 #if defined(_LITTLE_ENDIAN) 20303859Sml29623 uint32_t w1; 20313859Sml29623 #endif 20323859Sml29623 } bits; 20333859Sml29623 } xpcs_dev_in_pkg_t; 20343859Sml29623 20353859Sml29623 20363859Sml29623 /* XPCS Base 10G Control2 Register */ 20373859Sml29623 #define XPCS_PSC_SEL_MASK 0x0003 20383859Sml29623 #define PSC_SEL_10G_BASE_X_PCS 0x0001 20393859Sml29623 20403859Sml29623 20413859Sml29623 typedef union _xpcs_ctrl2_t { 20423859Sml29623 uint64_t value; 20433859Sml29623 20443859Sml29623 struct { 20453859Sml29623 #if defined(_BIG_ENDIAN) 20463859Sml29623 uint32_t msw; /* Most significant word */ 20473859Sml29623 uint32_t lsw; /* Least significant word */ 20483859Sml29623 #elif defined(_LITTLE_ENDIAN) 20493859Sml29623 uint32_t lsw; /* Least significant word */ 20503859Sml29623 uint32_t msw; /* Most significant word */ 20513859Sml29623 #endif 20523859Sml29623 } val; 20533859Sml29623 struct { 20543859Sml29623 #if defined(_BIG_ENDIAN) 20553859Sml29623 uint32_t w1; 20563859Sml29623 #endif 20573859Sml29623 struct { 20583859Sml29623 #if defined(_BIT_FIELDS_HTOL) 20593859Sml29623 uint32_t res1 : 16; 20603859Sml29623 uint32_t res0 : 14; 20613859Sml29623 uint32_t csr_psc_sel : 2; 20623859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 20633859Sml29623 uint32_t csr_psc_sel : 2; 20643859Sml29623 uint32_t res0 : 14; 20653859Sml29623 uint32_t res1 : 16; 20663859Sml29623 #endif 20673859Sml29623 } w0; 20683859Sml29623 20693859Sml29623 #if defined(_LITTLE_ENDIAN) 20703859Sml29623 uint32_t w1; 20713859Sml29623 #endif 20723859Sml29623 } bits; 20733859Sml29623 } xpcs_ctrl2_t; 20743859Sml29623 20753859Sml29623 20763859Sml29623 /* XPCS Base10G Status2 Register */ 20773859Sml29623 #define XPCS_STATUS2_DEV_PRESENT_MASK 0xc000 /* ?????? */ 20783859Sml29623 #define XPCS_STATUS2_TX_FAULT 0x0800 /* Fault on tx path */ 20793859Sml29623 #define XPCS_STATUS2_RX_FAULT 0x0400 /* Fault on rx path */ 20803859Sml29623 #define XPCS_STATUS2_TEN_GBASE_W 0x0004 /* 10G-Base-W */ 20813859Sml29623 #define XPCS_STATUS2_TEN_GBASE_X 0x0002 /* 10G-Base-X */ 20823859Sml29623 #define XPCS_STATUS2_TEN_GBASE_R 0x0001 /* 10G-Base-R */ 20833859Sml29623 20843859Sml29623 typedef union _xpcs_stat2_t { 20853859Sml29623 uint64_t value; 20863859Sml29623 20873859Sml29623 struct { 20883859Sml29623 #if defined(_BIG_ENDIAN) 20893859Sml29623 uint32_t msw; /* Most significant word */ 20903859Sml29623 uint32_t lsw; /* Least significant word */ 20913859Sml29623 #elif defined(_LITTLE_ENDIAN) 20923859Sml29623 uint32_t lsw; /* Least significant word */ 20933859Sml29623 uint32_t msw; /* Most significant word */ 20943859Sml29623 #endif 20953859Sml29623 } val; 20963859Sml29623 struct { 20973859Sml29623 #if defined(_BIG_ENDIAN) 20983859Sml29623 uint32_t w1; 20993859Sml29623 #endif 21003859Sml29623 struct { 21013859Sml29623 #if defined(_BIT_FIELDS_HTOL) 21023859Sml29623 uint32_t res2 : 16; 21033859Sml29623 uint32_t csr_dev_pres : 2; 21043859Sml29623 uint32_t res1 : 2; 21053859Sml29623 uint32_t csr_tx_fault : 1; 21063859Sml29623 uint32_t csr_rx_fault : 1; 21073859Sml29623 uint32_t res0 : 7; 21083859Sml29623 uint32_t ten_gbase_w : 1; 21093859Sml29623 uint32_t ten_gbase_x : 1; 21103859Sml29623 uint32_t ten_gbase_r : 1; 21113859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 21123859Sml29623 uint32_t ten_gbase_r : 1; 21133859Sml29623 uint32_t ten_gbase_x : 1; 21143859Sml29623 uint32_t ten_gbase_w : 1; 21153859Sml29623 uint32_t res0 : 7; 21163859Sml29623 uint32_t csr_rx_fault : 1; 21173859Sml29623 uint32_t csr_tx_fault : 1; 21183859Sml29623 uint32_t res1 : 2; 21193859Sml29623 uint32_t csr_dev_pres : 2; 21203859Sml29623 uint32_t res2 : 16; 21213859Sml29623 #endif 21223859Sml29623 } w0; 21233859Sml29623 21243859Sml29623 #if defined(_LITTLE_ENDIAN) 21253859Sml29623 uint32_t w1; 21263859Sml29623 #endif 21273859Sml29623 } bits; 21283859Sml29623 } xpcs_stat2_t; 21293859Sml29623 21303859Sml29623 21313859Sml29623 21323859Sml29623 /* XPCS Base10G Status Register */ 21333859Sml29623 #define XPCS_STATUS_LANE_ALIGN 0x1000 /* 10GBaseX PCS rx lanes align */ 21343859Sml29623 #define XPCS_STATUS_PATTERN_TEST_ABLE 0x0800 /* able to generate patterns. */ 21353859Sml29623 #define XPCS_STATUS_LANE3_SYNC 0x0008 /* Lane 3 is synchronized */ 21363859Sml29623 #define XPCS_STATUS_LANE2_SYNC 0x0004 /* Lane 2 is synchronized */ 21373859Sml29623 #define XPCS_STATUS_LANE1_SYNC 0x0002 /* Lane 1 is synchronized */ 21383859Sml29623 #define XPCS_STATUS_LANE0_SYNC 0x0001 /* Lane 0 is synchronized */ 21393859Sml29623 21403859Sml29623 typedef union _xpcs_stat_t { 21413859Sml29623 uint64_t value; 21423859Sml29623 21433859Sml29623 struct { 21443859Sml29623 #if defined(_BIG_ENDIAN) 21453859Sml29623 uint32_t msw; /* Most significant word */ 21463859Sml29623 uint32_t lsw; /* Least significant word */ 21473859Sml29623 #elif defined(_LITTLE_ENDIAN) 21483859Sml29623 uint32_t lsw; /* Least significant word */ 21493859Sml29623 uint32_t msw; /* Most significant word */ 21503859Sml29623 #endif 21513859Sml29623 } val; 21523859Sml29623 struct { 21533859Sml29623 #if defined(_BIG_ENDIAN) 21543859Sml29623 uint32_t w1; 21553859Sml29623 #endif 21563859Sml29623 struct { 21573859Sml29623 #if defined(_BIT_FIELDS_HTOL) 21583859Sml29623 uint32_t res2 : 16; 21593859Sml29623 uint32_t res1 : 3; 21603859Sml29623 uint32_t csr_lane_align : 1; 21613859Sml29623 uint32_t csr_pattern_test_able : 1; 21623859Sml29623 uint32_t res0 : 7; 21633859Sml29623 uint32_t csr_lane3_sync : 1; 21643859Sml29623 uint32_t csr_lane2_sync : 1; 21653859Sml29623 uint32_t csr_lane1_sync : 1; 21663859Sml29623 uint32_t csr_lane0_sync : 1; 21673859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 21683859Sml29623 uint32_t csr_lane0_sync : 1; 21693859Sml29623 uint32_t csr_lane1_sync : 1; 21703859Sml29623 uint32_t csr_lane2_sync : 1; 21713859Sml29623 uint32_t csr_lane3_sync : 1; 21723859Sml29623 uint32_t res0 : 7; 21733859Sml29623 uint32_t csr_pat_test_able : 1; 21743859Sml29623 uint32_t csr_lane_align : 1; 21753859Sml29623 uint32_t res1 : 3; 21763859Sml29623 uint32_t res2 : 16; 21773859Sml29623 #endif 21783859Sml29623 } w0; 21793859Sml29623 21803859Sml29623 #if defined(_LITTLE_ENDIAN) 21813859Sml29623 uint32_t w1; 21823859Sml29623 #endif 21833859Sml29623 } bits; 21843859Sml29623 } xpcs_stat_t; 21853859Sml29623 21863859Sml29623 /* XPCS Base10G Test Control Register */ 21873859Sml29623 #define XPCS_TEST_CTRL_TX_TEST_ENABLE 0x0004 21883859Sml29623 #define XPCS_TEST_CTRL_TEST_PATTERN_SEL_MASK 0x0003 21893859Sml29623 #define TEST_PATTERN_HIGH_FREQ 0 21903859Sml29623 #define TEST_PATTERN_LOW_FREQ 1 21913859Sml29623 #define TEST_PATTERN_MIXED_FREQ 2 21923859Sml29623 21933859Sml29623 typedef union _xpcs_test_ctl_t { 21943859Sml29623 uint64_t value; 21953859Sml29623 21963859Sml29623 struct { 21973859Sml29623 #if defined(_BIG_ENDIAN) 21983859Sml29623 uint32_t msw; /* Most significant word */ 21993859Sml29623 uint32_t lsw; /* Least significant word */ 22003859Sml29623 #elif defined(_LITTLE_ENDIAN) 22013859Sml29623 uint32_t lsw; /* Least significant word */ 22023859Sml29623 uint32_t msw; /* Most significant word */ 22033859Sml29623 #endif 22043859Sml29623 } val; 22053859Sml29623 struct { 22063859Sml29623 #if defined(_BIG_ENDIAN) 22073859Sml29623 uint32_t w1; 22083859Sml29623 #endif 22093859Sml29623 struct { 22103859Sml29623 #if defined(_BIT_FIELDS_HTOL) 22113859Sml29623 uint32_t res1 : 16; 22123859Sml29623 uint32_t res0 : 13; 22133859Sml29623 uint32_t csr_tx_test_en : 1; 22143859Sml29623 uint32_t csr_test_pat_sel : 2; 22153859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 22163859Sml29623 uint32_t csr_test_pat_sel : 2; 22173859Sml29623 uint32_t csr_tx_test_en : 1; 22183859Sml29623 uint32_t res0 : 13; 22193859Sml29623 uint32_t res1 : 16; 22203859Sml29623 #endif 22213859Sml29623 } w0; 22223859Sml29623 22233859Sml29623 #if defined(_LITTLE_ENDIAN) 22243859Sml29623 uint32_t w1; 22253859Sml29623 #endif 22263859Sml29623 } bits; 22273859Sml29623 } xpcs_test_ctl_t; 22283859Sml29623 22293859Sml29623 /* XPCS Base10G Diagnostic Register */ 22303859Sml29623 #define XPCS_DIAG_EB_ALIGN_ERR3 0x40 22313859Sml29623 #define XPCS_DIAG_EB_ALIGN_ERR2 0x20 22323859Sml29623 #define XPCS_DIAG_EB_ALIGN_ERR1 0x10 22333859Sml29623 #define XPCS_DIAG_EB_DESKEW_OK 0x08 22343859Sml29623 #define XPCS_DIAG_EB_ALIGN_DET3 0x04 22353859Sml29623 #define XPCS_DIAG_EB_ALIGN_DET2 0x02 22363859Sml29623 #define XPCS_DIAG_EB_ALIGN_DET1 0x01 22373859Sml29623 #define XPCS_DIAG_EB_DESKEW_LOSS 0 22383859Sml29623 22393859Sml29623 #define XPCS_DIAG_SYNC_3_INVALID 0x8 22403859Sml29623 #define XPCS_DIAG_SYNC_2_INVALID 0x4 22413859Sml29623 #define XPCS_DIAG_SYNC_1_INVALID 0x2 22423859Sml29623 #define XPCS_DIAG_SYNC_IN_SYNC 0x1 22433859Sml29623 #define XPCS_DIAG_SYNC_LOSS_SYNC 0 22443859Sml29623 22453859Sml29623 #define XPCS_RX_SM_RECEIVE_STATE 1 22463859Sml29623 #define XPCS_RX_SM_FAULT_STATE 0 22473859Sml29623 22483859Sml29623 typedef union _xpcs_diag_t { 22493859Sml29623 uint64_t value; 22503859Sml29623 22513859Sml29623 struct { 22523859Sml29623 #if defined(_BIG_ENDIAN) 22533859Sml29623 uint32_t msw; /* Most significant word */ 22543859Sml29623 uint32_t lsw; /* Least significant word */ 22553859Sml29623 #elif defined(_LITTLE_ENDIAN) 22563859Sml29623 uint32_t lsw; /* Least significant word */ 22573859Sml29623 uint32_t msw; /* Most significant word */ 22583859Sml29623 #endif 22593859Sml29623 } val; 22603859Sml29623 struct { 22613859Sml29623 #if defined(_BIG_ENDIAN) 22623859Sml29623 uint32_t w1; 22633859Sml29623 #endif 22643859Sml29623 struct { 22653859Sml29623 #if defined(_BIT_FIELDS_HTOL) 22663859Sml29623 uint32_t res1 : 7; 22673859Sml29623 uint32_t sync_sm_lane3 : 4; 22683859Sml29623 uint32_t sync_sm_lane2 : 4; 22693859Sml29623 uint32_t sync_sm_lane1 : 4; 22703859Sml29623 uint32_t sync_sm_lane0 : 4; 22713859Sml29623 uint32_t elastic_buffer_sm : 8; 22723859Sml29623 uint32_t receive_sm : 1; 22733859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 22743859Sml29623 uint32_t receive_sm : 1; 22753859Sml29623 uint32_t elastic_buffer_sm : 8; 22763859Sml29623 uint32_t sync_sm_lane0 : 4; 22773859Sml29623 uint32_t sync_sm_lane1 : 4; 22783859Sml29623 uint32_t sync_sm_lane2 : 4; 22793859Sml29623 uint32_t sync_sm_lane3 : 4; 22803859Sml29623 uint32_t res1 : 7; 22813859Sml29623 #endif 22823859Sml29623 } w0; 22833859Sml29623 22843859Sml29623 #if defined(_LITTLE_ENDIAN) 22853859Sml29623 uint32_t w1; 22863859Sml29623 #endif 22873859Sml29623 } bits; 22883859Sml29623 } xpcs_diag_t; 22893859Sml29623 22903859Sml29623 /* XPCS Base10G Tx State Machine Register */ 22913859Sml29623 #define XPCS_TX_SM_SEND_UNDERRUN 0x9 22923859Sml29623 #define XPCS_TX_SM_SEND_RANDOM_Q 0x8 22933859Sml29623 #define XPCS_TX_SM_SEND_RANDOM_K 0x7 22943859Sml29623 #define XPCS_TX_SM_SEND_RANDOM_A 0x6 22953859Sml29623 #define XPCS_TX_SM_SEND_RANDOM_R 0x5 22963859Sml29623 #define XPCS_TX_SM_SEND_Q 0x4 22973859Sml29623 #define XPCS_TX_SM_SEND_K 0x3 22983859Sml29623 #define XPCS_TX_SM_SEND_A 0x2 22993859Sml29623 #define XPCS_TX_SM_SEND_SDP 0x1 23003859Sml29623 #define XPCS_TX_SM_SEND_DATA 0 23013859Sml29623 23023859Sml29623 /* XPCS Base10G Configuration Register */ 23033859Sml29623 #define XPCS_CFG_VENDOR_DBG_SEL_MASK 0x78 23043859Sml29623 #define XPCS_CFG_VENDOR_DBG_SEL_SHIFT 3 23053859Sml29623 #define XPCS_CFG_BYPASS_SIG_DETECT 0x0004 23063859Sml29623 #define XPCS_CFG_ENABLE_TX_BUFFERS 0x0002 23073859Sml29623 #define XPCS_CFG_XPCS_ENABLE 0x0001 23083859Sml29623 23093859Sml29623 typedef union _xpcs_config_t { 23103859Sml29623 uint64_t value; 23113859Sml29623 23123859Sml29623 struct { 23133859Sml29623 #if defined(_BIG_ENDIAN) 23143859Sml29623 uint32_t msw; /* Most significant word */ 23153859Sml29623 uint32_t lsw; /* Least significant word */ 23163859Sml29623 #elif defined(_LITTLE_ENDIAN) 23173859Sml29623 uint32_t lsw; /* Least significant word */ 23183859Sml29623 uint32_t msw; /* Most significant word */ 23193859Sml29623 #endif 23203859Sml29623 } val; 23213859Sml29623 struct { 23223859Sml29623 #if defined(_BIG_ENDIAN) 23233859Sml29623 uint32_t w1; 23243859Sml29623 #endif 23253859Sml29623 struct { 23263859Sml29623 #if defined(_BIT_FIELDS_HTOL) 23273859Sml29623 uint32_t res1 : 16; 23283859Sml29623 uint32_t res0 : 9; 23293859Sml29623 uint32_t csr_vendor_dbg_sel : 4; 23303859Sml29623 uint32_t csr_bypass_sig_detect : 1; 23313859Sml29623 uint32_t csr_en_tx_buf : 1; 23323859Sml29623 uint32_t csr_xpcs_en : 1; 23333859Sml29623 #elif defined(_BIT_FIELDS_LTOH) 23343859Sml29623 uint32_t csr_xpcs_en : 1; 23353859Sml29623 uint32_t csr_en_tx_buf : 1; 23363859Sml29623 uint32_t csr_bypass_sig_detect : 1; 23373859Sml29623 uint32_t csr_vendor_dbg_sel : 4; 23383859Sml29623 uint32_t res0 : 9; 23393859Sml29623 uint32_t res1 : 16; 23403859Sml29623 #endif 23413859Sml29623 } w0; 23423859Sml29623 23433859Sml29623 #if defined(_LITTLE_ENDIAN) 23443859Sml29623 uint32_t w1; 23453859Sml29623 #endif 23463859Sml29623 } bits; 23473859Sml29623 } xpcs_config_t; 23483859Sml29623 23493859Sml29623 23503859Sml29623 23513859Sml29623 /* XPCS Base10G Mask1 Register */ 23523859Sml29623 #define XPCS_MASK1_FAULT_MASK 0x0080 /* mask fault interrupt. */ 23533859Sml29623 #define XPCS_MASK1_RX_LINK_STATUS_MASK 0x0040 /* mask linkstat interrupt */ 23543859Sml29623 23553859Sml29623 /* XPCS Base10G Packet Counter */ 23563859Sml29623 #define XPCS_PKT_CNTR_TX_PKT_CNT_MASK 0xffff0000 23573859Sml29623 #define XPCS_PKT_CNTR_TX_PKT_CNT_SHIFT 16 23583859Sml29623 #define XPCS_PKT_CNTR_RX_PKT_CNT_MASK 0x0000ffff 23593859Sml29623 #define XPCS_PKT_CNTR_RX_PKT_CNT_SHIFT 0 23603859Sml29623 23613859Sml29623 /* XPCS Base10G TX State Machine status register */ 23623859Sml29623 #define XPCS_TX_STATE_MC_TX_STATE_MASK 0x0f 23633859Sml29623 #define XPCS_DESKEW_ERR_CNTR_MASK 0xff 23643859Sml29623 23653859Sml29623 /* XPCS Base10G Lane symbol error counters */ 23663859Sml29623 #define XPCS_SYM_ERR_CNT_L1_MASK 0xffff0000 23673859Sml29623 #define XPCS_SYM_ERR_CNT_L0_MASK 0x0000ffff 23683859Sml29623 #define XPCS_SYM_ERR_CNT_L3_MASK 0xffff0000 23693859Sml29623 #define XPCS_SYM_ERR_CNT_L2_MASK 0x0000ffff 23703859Sml29623 23713859Sml29623 #define XPCS_SYM_ERR_CNT_MULTIPLIER 16 23723859Sml29623 23733859Sml29623 /* ESR Reset Register */ 23743859Sml29623 #define ESR_RESET_1 2 23753859Sml29623 #define ESR_RESET_0 1 23763859Sml29623 23773859Sml29623 /* ESR Configuration Register */ 23783859Sml29623 #define ESR_BLUNT_END_LOOPBACK 2 23793859Sml29623 #define ESR_FORCE_SERDES_SERDES_RDY 1 23803859Sml29623 23813859Sml29623 /* ESR Neptune Serdes PLL Configuration */ 23823859Sml29623 #define ESR_PLL_CFG_FBDIV_0 0x1 23833859Sml29623 #define ESR_PLL_CFG_FBDIV_1 0x2 23843859Sml29623 #define ESR_PLL_CFG_FBDIV_2 0x4 23853859Sml29623 #define ESR_PLL_CFG_HALF_RATE_0 0x8 23863859Sml29623 #define ESR_PLL_CFG_HALF_RATE_1 0x10 23873859Sml29623 #define ESR_PLL_CFG_HALF_RATE_2 0x20 23883859Sml29623 #define ESR_PLL_CFG_HALF_RATE_3 0x40 23896028Ssbehera #define ESR_PLL_CFG_1G_SERDES (ESR_PLL_CFG_FBDIV_0 | \ 23906028Ssbehera ESR_PLL_CFG_HALF_RATE_0 | \ 23916028Ssbehera ESR_PLL_CFG_HALF_RATE_1 | \ 23926028Ssbehera ESR_PLL_CFG_HALF_RATE_2 | \ 23935196Ssbehera ESR_PLL_CFG_HALF_RATE_3) 23943859Sml29623 23956028Ssbehera #define ESR_PLL_CFG_10G_SERDES ESR_PLL_CFG_FBDIV_2 23966028Ssbehera 23973859Sml29623 /* ESR Neptune Serdes Control Register */ 23983859Sml29623 #define ESR_CTL_EN_SYNCDET_0 0x00000001 23993859Sml29623 #define ESR_CTL_EN_SYNCDET_1 0x00000002 24003859Sml29623 #define ESR_CTL_EN_SYNCDET_2 0x00000004 24013859Sml29623 #define ESR_CTL_EN_SYNCDET_3 0x00000008 24023859Sml29623 #define ESR_CTL_OUT_EMPH_0_MASK 0x00000070 24033859Sml29623 #define ESR_CTL_OUT_EMPH_0_SHIFT 4 24043859Sml29623 #define ESR_CTL_OUT_EMPH_1_MASK 0x00000380 24053859Sml29623 #define ESR_CTL_OUT_EMPH_1_SHIFT 7 24063859Sml29623 #define ESR_CTL_OUT_EMPH_2_MASK 0x00001c00 24073859Sml29623 #define ESR_CTL_OUT_EMPH_2_SHIFT 10 24083859Sml29623 #define ESR_CTL_OUT_EMPH_3_MASK 0x0000e000 24093859Sml29623 #define ESR_CTL_OUT_EMPH_3_SHIFT 13 24103859Sml29623 #define ESR_CTL_LOSADJ_0_MASK 0x00070000 24113859Sml29623 #define ESR_CTL_LOSADJ_0_SHIFT 16 24123859Sml29623 #define ESR_CTL_LOSADJ_1_MASK 0x00380000 24133859Sml29623 #define ESR_CTL_LOSADJ_1_SHIFT 19 24143859Sml29623 #define ESR_CTL_LOSADJ_2_MASK 0x01c00000 24153859Sml29623 #define ESR_CTL_LOSADJ_2_SHIFT 22 24163859Sml29623 #define ESR_CTL_LOSADJ_3_MASK 0x0e000000 24173859Sml29623 #define ESR_CTL_LOSADJ_3_SHIFT 25 24183859Sml29623 #define ESR_CTL_RXITERM_0 0x10000000 24193859Sml29623 #define ESR_CTL_RXITERM_1 0x20000000 24203859Sml29623 #define ESR_CTL_RXITERM_2 0x40000000 24213859Sml29623 #define ESR_CTL_RXITERM_3 0x80000000 24225196Ssbehera #define ESR_CTL_1G_SERDES (ESR_CTL_EN_SYNCDET_0 | \ 24235196Ssbehera ESR_CTL_EN_SYNCDET_1 | \ 24245196Ssbehera ESR_CTL_EN_SYNCDET_2 | \ 24255196Ssbehera ESR_CTL_EN_SYNCDET_3 | \ 24265196Ssbehera (0x1 << ESR_CTL_OUT_EMPH_0_SHIFT) | \ 24275196Ssbehera (0x1 << ESR_CTL_OUT_EMPH_1_SHIFT) | \ 24285196Ssbehera (0x1 << ESR_CTL_OUT_EMPH_2_SHIFT) | \ 24295196Ssbehera (0x1 << ESR_CTL_OUT_EMPH_3_SHIFT) | \ 24305196Ssbehera (0x1 << ESR_CTL_OUT_EMPH_3_SHIFT) | \ 24315196Ssbehera (0x1 << ESR_CTL_LOSADJ_0_SHIFT) | \ 24325196Ssbehera (0x1 << ESR_CTL_LOSADJ_1_SHIFT) | \ 24335196Ssbehera (0x1 << ESR_CTL_LOSADJ_2_SHIFT) | \ 24345196Ssbehera (0x1 << ESR_CTL_LOSADJ_3_SHIFT)) 24353859Sml29623 24363859Sml29623 /* ESR Neptune Serdes Test Configuration Register */ 24373859Sml29623 #define ESR_TSTCFG_LBTEST_MD_0_MASK 0x00000003 24383859Sml29623 #define ESR_TSTCFG_LBTEST_MD_0_SHIFT 0 24393859Sml29623 #define ESR_TSTCFG_LBTEST_MD_1_MASK 0x0000000c 24403859Sml29623 #define ESR_TSTCFG_LBTEST_MD_1_SHIFT 2 24413859Sml29623 #define ESR_TSTCFG_LBTEST_MD_2_MASK 0x00000030 24423859Sml29623 #define ESR_TSTCFG_LBTEST_MD_2_SHIFT 4 24433859Sml29623 #define ESR_TSTCFG_LBTEST_MD_3_MASK 0x000000c0 24443859Sml29623 #define ESR_TSTCFG_LBTEST_MD_3_SHIFT 6 24455196Ssbehera #define ESR_TSTCFG_LBTEST_PAD (ESR_PAD_LOOPBACK_CH3 | \ 24465196Ssbehera ESR_PAD_LOOPBACK_CH2 | \ 24475196Ssbehera ESR_PAD_LOOPBACK_CH1 | \ 24485196Ssbehera ESR_PAD_LOOPBACK_CH0) 24493859Sml29623 24503859Sml29623 /* ESR Neptune Ethernet RGMII Configuration Register */ 24513859Sml29623 #define ESR_RGMII_PT0_IN_USE 0x00000001 24523859Sml29623 #define ESR_RGMII_PT1_IN_USE 0x00000002 24533859Sml29623 #define ESR_RGMII_PT2_IN_USE 0x00000004 24543859Sml29623 #define ESR_RGMII_PT3_IN_USE 0x00000008 24553859Sml29623 #define ESR_RGMII_REG_RW_TEST 0x00000010 24563859Sml29623 24573859Sml29623 /* ESR Internal Signals Observation Register */ 24583859Sml29623 #define ESR_SIG_MASK 0xFFFFFFFF 24593859Sml29623 #define ESR_SIG_P0_BITS_MASK 0x33E0000F 24603859Sml29623 #define ESR_SIG_P1_BITS_MASK 0x0C1F00F0 24613859Sml29623 #define ESR_SIG_SERDES_RDY0_P0 0x20000000 24623859Sml29623 #define ESR_SIG_DETECT0_P0 0x10000000 24633859Sml29623 #define ESR_SIG_SERDES_RDY0_P1 0x08000000 24643859Sml29623 #define ESR_SIG_DETECT0_P1 0x04000000 24653859Sml29623 #define ESR_SIG_XSERDES_RDY_P0 0x02000000 24663859Sml29623 #define ESR_SIG_XDETECT_P0_CH3 0x01000000 24673859Sml29623 #define ESR_SIG_XDETECT_P0_CH2 0x00800000 24683859Sml29623 #define ESR_SIG_XDETECT_P0_CH1 0x00400000 24693859Sml29623 #define ESR_SIG_XDETECT_P0_CH0 0x00200000 24703859Sml29623 #define ESR_SIG_XSERDES_RDY_P1 0x00100000 24713859Sml29623 #define ESR_SIG_XDETECT_P1_CH3 0x00080000 24723859Sml29623 #define ESR_SIG_XDETECT_P1_CH2 0x00040000 24733859Sml29623 #define ESR_SIG_XDETECT_P1_CH1 0x00020000 24743859Sml29623 #define ESR_SIG_XDETECT_P1_CH0 0x00010000 24753859Sml29623 #define ESR_SIG_LOS_P1_CH3 0x00000080 24763859Sml29623 #define ESR_SIG_LOS_P1_CH2 0x00000040 24773859Sml29623 #define ESR_SIG_LOS_P1_CH1 0x00000020 24783859Sml29623 #define ESR_SIG_LOS_P1_CH0 0x00000010 24793859Sml29623 #define ESR_SIG_LOS_P0_CH3 0x00000008 24803859Sml29623 #define ESR_SIG_LOS_P0_CH2 0x00000004 24813859Sml29623 #define ESR_SIG_LOS_P0_CH1 0x00000002 24823859Sml29623 #define ESR_SIG_LOS_P0_CH0 0x00000001 24835196Ssbehera #define ESR_SIG_P0_BITS_MASK_1G (ESR_SIG_SERDES_RDY0_P0 | \ 24845196Ssbehera ESR_SIG_DETECT0_P0) 24855196Ssbehera #define ESR_SIG_P1_BITS_MASK_1G (ESR_SIG_SERDES_RDY0_P1 | \ 24865196Ssbehera ESR_SIG_DETECT0_P1) 24873859Sml29623 24883859Sml29623 /* ESR Debug Selection Register */ 24893859Sml29623 #define ESR_DEBUG_SEL_MASK 0x00000003f 24903859Sml29623 24913859Sml29623 /* ESR Test Configuration Register */ 24923859Sml29623 #define ESR_NO_LOOPBACK_CH3 (0x0 << 6) 24933859Sml29623 #define ESR_EWRAP_CH3 (0x1 << 6) 24943859Sml29623 #define ESR_PAD_LOOPBACK_CH3 (0x2 << 6) 24953859Sml29623 #define ESR_REVLOOPBACK_CH3 (0x3 << 6) 24963859Sml29623 #define ESR_NO_LOOPBACK_CH2 (0x0 << 4) 24973859Sml29623 #define ESR_EWRAP_CH2 (0x1 << 4) 24983859Sml29623 #define ESR_PAD_LOOPBACK_CH2 (0x2 << 4) 24993859Sml29623 #define ESR_REVLOOPBACK_CH2 (0x3 << 4) 25003859Sml29623 #define ESR_NO_LOOPBACK_CH1 (0x0 << 2) 25013859Sml29623 #define ESR_EWRAP_CH1 (0x1 << 2) 25023859Sml29623 #define ESR_PAD_LOOPBACK_CH1 (0x2 << 2) 25033859Sml29623 #define ESR_REVLOOPBACK_CH1 (0x3 << 2) 25043859Sml29623 #define ESR_NO_LOOPBACK_CH0 0x0 25053859Sml29623 #define ESR_EWRAP_CH0 0x1 25063859Sml29623 #define ESR_PAD_LOOPBACK_CH0 0x2 25073859Sml29623 #define ESR_REVLOOPBACK_CH0 0x3 25083859Sml29623 25093859Sml29623 /* convert values */ 25103859Sml29623 #define NXGE_BASE(x, y) \ 25113859Sml29623 (((y) << (x ## _SHIFT)) & (x ## _MASK)) 25123859Sml29623 25133859Sml29623 #define NXGE_VAL_GET(fieldname, regval) \ 25143859Sml29623 (((regval) & ((fieldname) ## _MASK)) >> ((fieldname) ## _SHIFT)) 25153859Sml29623 25163859Sml29623 #define NXGE_VAL_SET(fieldname, regval, val) \ 25173859Sml29623 { \ 25183859Sml29623 (regval) &= ~((fieldname) ## _MASK); \ 25193859Sml29623 (regval) |= ((val) << (fieldname ## _SHIFT)); \ 25203859Sml29623 } 25213859Sml29623 25223859Sml29623 25233859Sml29623 #ifdef __cplusplus 25243859Sml29623 } 25253859Sml29623 #endif 25263859Sml29623 25273859Sml29623 #endif /* _SYS_MAC_NXGE_MAC_HW_H */ 2528