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 /* 22*6495Sspeer * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 233859Sml29623 * Use is subject to license terms. 243859Sml29623 */ 253859Sml29623 263859Sml29623 #ifndef _NPI_MAC_H 273859Sml29623 #define _NPI_MAC_H 283859Sml29623 293859Sml29623 #pragma ident "%Z%%M% %I% %E% SMI" 303859Sml29623 313859Sml29623 #ifdef __cplusplus 323859Sml29623 extern "C" { 333859Sml29623 #endif 343859Sml29623 353859Sml29623 #include <npi.h> 363859Sml29623 #include <nxge_mac_hw.h> 373859Sml29623 #include <nxge_mii.h> 383859Sml29623 393859Sml29623 typedef struct _npi_mac_addr { 403859Sml29623 uint16_t w0; 413859Sml29623 uint16_t w1; 423859Sml29623 uint16_t w2; 433859Sml29623 } npi_mac_addr_t; 443859Sml29623 453859Sml29623 typedef enum npi_mac_attr { 463859Sml29623 MAC_PORT_MODE = 0, 473859Sml29623 MAC_PORT_FRAME_SIZE, 483859Sml29623 MAC_PORT_ADDR, 493859Sml29623 MAC_PORT_ADDR_FILTER, 503859Sml29623 MAC_PORT_ADDR_FILTER_MASK, 513859Sml29623 XMAC_PORT_IPG, 523859Sml29623 XMAC_10G_PORT_IPG, 533859Sml29623 BMAC_PORT_MAX_BURST_SIZE, 543859Sml29623 BMAC_PORT_PA_SIZE, 553859Sml29623 BMAC_PORT_CTRL_TYPE 563859Sml29623 } npi_mac_attr_t; 573859Sml29623 583859Sml29623 /* MAC Mode options */ 593859Sml29623 603859Sml29623 typedef enum npi_mac_mode_e { 613859Sml29623 MAC_MII_MODE = 0, 623859Sml29623 MAC_GMII_MODE, 633859Sml29623 MAC_XGMII_MODE 643859Sml29623 } npi_mac_mode_t; 653859Sml29623 663859Sml29623 typedef enum npi_mac_reset_e { 673859Sml29623 TX_MAC_RESET = 1, 683859Sml29623 RX_MAC_RESET, 693859Sml29623 XTX_MAC_REG_RESET, 703859Sml29623 XRX_MAC_REG_RESET, 713859Sml29623 XTX_MAC_LOGIC_RESET, 723859Sml29623 XRX_MAC_LOGIC_RESET, 733859Sml29623 XTX_MAC_RESET_ALL, 743859Sml29623 XRX_MAC_RESET_ALL, 753859Sml29623 BMAC_RESET_ALL, 763859Sml29623 XMAC_RESET_ALL 773859Sml29623 } npi_mac_reset_t; 783859Sml29623 793859Sml29623 typedef enum xmac_tx_iconfig_e { 803859Sml29623 ICFG_XMAC_TX_FRAME_XMIT = XMAC_TX_FRAME_XMIT, 813859Sml29623 ICFG_XMAC_TX_UNDERRUN = XMAC_TX_UNDERRUN, 823859Sml29623 ICFG_XMAC_TX_MAX_PACKET_ERR = XMAC_TX_MAX_PACKET_ERR, 833859Sml29623 ICFG_XMAC_TX_OVERFLOW = XMAC_TX_OVERFLOW, 843859Sml29623 ICFG_XMAC_TX_FIFO_XFR_ERR = XMAC_TX_FIFO_XFR_ERR, 853859Sml29623 ICFG_XMAC_TX_BYTE_CNT_EXP = XMAC_TX_BYTE_CNT_EXP, 863859Sml29623 ICFG_XMAC_TX_FRAME_CNT_EXP = XMAC_TX_FRAME_CNT_EXP, 873859Sml29623 ICFG_XMAC_TX_ALL = (XMAC_TX_FRAME_XMIT | XMAC_TX_UNDERRUN | 883859Sml29623 XMAC_TX_MAX_PACKET_ERR | XMAC_TX_OVERFLOW | 893859Sml29623 XMAC_TX_FIFO_XFR_ERR | XMAC_TX_BYTE_CNT_EXP | 903859Sml29623 XMAC_TX_FRAME_CNT_EXP) 913859Sml29623 } xmac_tx_iconfig_t; 923859Sml29623 933859Sml29623 typedef enum xmac_rx_iconfig_e { 943859Sml29623 ICFG_XMAC_RX_FRAME_RCVD = XMAC_RX_FRAME_RCVD, 953859Sml29623 ICFG_XMAC_RX_OVERFLOW = XMAC_RX_OVERFLOW, 963859Sml29623 ICFG_XMAC_RX_UNDERFLOW = XMAC_RX_UNDERFLOW, 973859Sml29623 ICFG_XMAC_RX_CRC_ERR_CNT_EXP = XMAC_RX_CRC_ERR_CNT_EXP, 983859Sml29623 ICFG_XMAC_RX_LEN_ERR_CNT_EXP = XMAC_RX_LEN_ERR_CNT_EXP, 993859Sml29623 ICFG_XMAC_RX_VIOL_ERR_CNT_EXP = XMAC_RX_VIOL_ERR_CNT_EXP, 1003859Sml29623 ICFG_XMAC_RX_OCT_CNT_EXP = XMAC_RX_OCT_CNT_EXP, 1013859Sml29623 ICFG_XMAC_RX_HST_CNT1_EXP = XMAC_RX_HST_CNT1_EXP, 1023859Sml29623 ICFG_XMAC_RX_HST_CNT2_EXP = XMAC_RX_HST_CNT2_EXP, 1033859Sml29623 ICFG_XMAC_RX_HST_CNT3_EXP = XMAC_RX_HST_CNT3_EXP, 1043859Sml29623 ICFG_XMAC_RX_HST_CNT4_EXP = XMAC_RX_HST_CNT4_EXP, 1053859Sml29623 ICFG_XMAC_RX_HST_CNT5_EXP = XMAC_RX_HST_CNT5_EXP, 1063859Sml29623 ICFG_XMAC_RX_HST_CNT6_EXP = XMAC_RX_HST_CNT6_EXP, 1073859Sml29623 ICFG_XMAC_RX_BCAST_CNT_EXP = XMAC_RX_BCAST_CNT_EXP, 1083859Sml29623 ICFG_XMAC_RX_MCAST_CNT_EXP = XMAC_RX_MCAST_CNT_EXP, 1093859Sml29623 ICFG_XMAC_RX_FRAG_CNT_EXP = XMAC_RX_FRAG_CNT_EXP, 1103859Sml29623 ICFG_XMAC_RX_ALIGNERR_CNT_EXP = XMAC_RX_ALIGNERR_CNT_EXP, 1113859Sml29623 ICFG_XMAC_RX_LINK_FLT_CNT_EXP = XMAC_RX_LINK_FLT_CNT_EXP, 1123859Sml29623 ICFG_XMAC_RX_HST_CNT7_EXP = XMAC_RX_HST_CNT7_EXP, 1133859Sml29623 ICFG_XMAC_RX_REMOTE_FLT_DET = XMAC_RX_REMOTE_FLT_DET, 1143859Sml29623 ICFG_XMAC_RX_LOCAL_FLT_DET = XMAC_RX_LOCAL_FLT_DET, 1153859Sml29623 ICFG_XMAC_RX_ALL = (XMAC_RX_FRAME_RCVD | XMAC_RX_OVERFLOW | 1163859Sml29623 XMAC_RX_UNDERFLOW | XMAC_RX_CRC_ERR_CNT_EXP | 1173859Sml29623 XMAC_RX_LEN_ERR_CNT_EXP | 1183859Sml29623 XMAC_RX_VIOL_ERR_CNT_EXP | 1193859Sml29623 XMAC_RX_OCT_CNT_EXP | XMAC_RX_HST_CNT1_EXP | 1203859Sml29623 XMAC_RX_HST_CNT2_EXP | XMAC_RX_HST_CNT3_EXP | 1213859Sml29623 XMAC_RX_HST_CNT4_EXP | XMAC_RX_HST_CNT5_EXP | 1223859Sml29623 XMAC_RX_HST_CNT6_EXP | XMAC_RX_BCAST_CNT_EXP | 1233859Sml29623 XMAC_RX_MCAST_CNT_EXP | XMAC_RX_FRAG_CNT_EXP | 1243859Sml29623 XMAC_RX_ALIGNERR_CNT_EXP | 1253859Sml29623 XMAC_RX_LINK_FLT_CNT_EXP | 1263859Sml29623 XMAC_RX_HST_CNT7_EXP | 1273859Sml29623 XMAC_RX_REMOTE_FLT_DET | XMAC_RX_LOCAL_FLT_DET) 1283859Sml29623 } xmac_rx_iconfig_t; 1293859Sml29623 1303859Sml29623 typedef enum xmac_ctl_iconfig_e { 1313859Sml29623 ICFG_XMAC_CTRL_PAUSE_RCVD = XMAC_CTRL_PAUSE_RCVD, 1323859Sml29623 ICFG_XMAC_CTRL_PAUSE_STATE = XMAC_CTRL_PAUSE_STATE, 1333859Sml29623 ICFG_XMAC_CTRL_NOPAUSE_STATE = XMAC_CTRL_NOPAUSE_STATE, 1343859Sml29623 ICFG_XMAC_CTRL_ALL = (XMAC_CTRL_PAUSE_RCVD | XMAC_CTRL_PAUSE_STATE | 1353859Sml29623 XMAC_CTRL_NOPAUSE_STATE) 1363859Sml29623 } xmac_ctl_iconfig_t; 1373859Sml29623 1383859Sml29623 1393859Sml29623 typedef enum bmac_tx_iconfig_e { 1403859Sml29623 ICFG_BMAC_TX_FRAME_SENT = MAC_TX_FRAME_XMIT, 1413859Sml29623 ICFG_BMAC_TX_UNDERFLOW = MAC_TX_UNDERRUN, 1423859Sml29623 ICFG_BMAC_TX_MAXPKTSZ_ERR = MAC_TX_MAX_PACKET_ERR, 1433859Sml29623 ICFG_BMAC_TX_BYTE_CNT_EXP = MAC_TX_BYTE_CNT_EXP, 1443859Sml29623 ICFG_BMAC_TX_FRAME_CNT_EXP = MAC_TX_FRAME_CNT_EXP, 1453859Sml29623 ICFG_BMAC_TX_ALL = (MAC_TX_FRAME_XMIT | MAC_TX_UNDERRUN | 1463859Sml29623 MAC_TX_MAX_PACKET_ERR | MAC_TX_BYTE_CNT_EXP | 1473859Sml29623 MAC_TX_FRAME_CNT_EXP) 1483859Sml29623 } bmac_tx_iconfig_t; 1493859Sml29623 1503859Sml29623 typedef enum bmac_rx_iconfig_e { 1513859Sml29623 ICFG_BMAC_RX_FRAME_RCVD = MAC_RX_FRAME_RECV, 1523859Sml29623 ICFG_BMAC_RX_OVERFLOW = MAC_RX_OVERFLOW, 1533859Sml29623 ICFG_BMAC_RX_FRAME_CNT_EXP = MAC_RX_FRAME_COUNT, 1543859Sml29623 ICFG_BMAC_RX_CRC_ERR_CNT_EXP = MAC_RX_ALIGN_ERR, 1553859Sml29623 ICFG_BMAC_RX_LEN_ERR_CNT_EXP = MAC_RX_CRC_ERR, 1563859Sml29623 ICFG_BMAC_RX_VIOL_ERR_CNT_EXP = MAC_RX_LEN_ERR, 1573859Sml29623 ICFG_BMAC_RX_BYTE_CNT_EXP = MAC_RX_VIOL_ERR, 1583859Sml29623 ICFG_BMAC_RX_ALIGNERR_CNT_EXP = MAC_RX_BYTE_CNT_EXP, 1593859Sml29623 ICFG_BMAC_RX_ALL = (MAC_RX_FRAME_RECV | MAC_RX_OVERFLOW | 1603859Sml29623 MAC_RX_FRAME_COUNT | MAC_RX_ALIGN_ERR | 1613859Sml29623 MAC_RX_CRC_ERR | MAC_RX_LEN_ERR | 1623859Sml29623 MAC_RX_VIOL_ERR | MAC_RX_BYTE_CNT_EXP) 1633859Sml29623 } bmac_rx_iconfig_t; 1643859Sml29623 1653859Sml29623 typedef enum bmac_ctl_iconfig_e { 1663859Sml29623 ICFG_BMAC_CTL_RCVPAUSE = MAC_CTRL_PAUSE_RECEIVED, 1673859Sml29623 ICFG_BMAC_CTL_INPAUSE_ST = MAC_CTRL_PAUSE_STATE, 1683859Sml29623 ICFG_BMAC_CTL_INNOTPAUSE_ST = MAC_CTRL_NOPAUSE_STATE, 1693859Sml29623 ICFG_BMAC_CTL_ALL = (MAC_CTRL_PAUSE_RECEIVED | MAC_CTRL_PAUSE_STATE | 1703859Sml29623 MAC_CTRL_NOPAUSE_STATE) 1713859Sml29623 } bmac_ctl_iconfig_t; 1723859Sml29623 1733859Sml29623 typedef enum xmac_tx_config_e { 1743859Sml29623 CFG_XMAC_TX = 0x00000001, 1753859Sml29623 CFG_XMAC_TX_STRETCH_MODE = 0x00000002, 1763859Sml29623 CFG_XMAC_VAR_IPG = 0x00000004, 1773859Sml29623 CFG_XMAC_TX_CRC = 0x00000008, 1783859Sml29623 CFG_XMAC_TX_ALL = 0x0000000F 1793859Sml29623 } xmac_tx_config_t; 1803859Sml29623 1813859Sml29623 typedef enum xmac_rx_config_e { 1823859Sml29623 CFG_XMAC_RX = 0x00000001, 1833859Sml29623 CFG_XMAC_RX_PROMISCUOUS = 0x00000002, 1843859Sml29623 CFG_XMAC_RX_PROMISCUOUSGROUP = 0x00000004, 1853859Sml29623 CFG_XMAC_RX_ERRCHK = 0x00000008, 1863859Sml29623 CFG_XMAC_RX_CRC_CHK = 0x00000010, 1873859Sml29623 CFG_XMAC_RX_RESV_MULTICAST = 0x00000020, 1883859Sml29623 CFG_XMAC_RX_CODE_VIO_CHK = 0x00000040, 1893859Sml29623 CFG_XMAC_RX_HASH_FILTER = 0x00000080, 1903859Sml29623 CFG_XMAC_RX_ADDR_FILTER = 0x00000100, 1913859Sml29623 CFG_XMAC_RX_STRIP_CRC = 0x00000200, 1923859Sml29623 CFG_XMAC_RX_PAUSE = 0x00000400, 1933859Sml29623 CFG_XMAC_RX_PASS_FC_FRAME = 0x00000800, 1943859Sml29623 CFG_XMAC_RX_MAC2IPP_PKT_CNT = 0x00001000, 1953859Sml29623 CFG_XMAC_RX_ALL = 0x00001FFF 1963859Sml29623 } xmac_rx_config_t; 1973859Sml29623 1983859Sml29623 typedef enum xmac_xif_config_e { 1993859Sml29623 CFG_XMAC_XIF_LED_FORCE = 0x00000001, 2003859Sml29623 CFG_XMAC_XIF_LED_POLARITY = 0x00000002, 2013859Sml29623 CFG_XMAC_XIF_SEL_POR_CLK_SRC = 0x00000004, 2023859Sml29623 CFG_XMAC_XIF_TX_OUTPUT = 0x00000008, 2033859Sml29623 CFG_XMAC_XIF_LOOPBACK = 0x00000010, 2043859Sml29623 CFG_XMAC_XIF_LFS = 0x00000020, 2053859Sml29623 CFG_XMAC_XIF_XPCS_BYPASS = 0x00000040, 2063859Sml29623 CFG_XMAC_XIF_1G_PCS_BYPASS = 0x00000080, 2073859Sml29623 CFG_XMAC_XIF_SEL_CLK_25MHZ = 0x00000100, 2083859Sml29623 CFG_XMAC_XIF_ALL = 0x000001FF 2093859Sml29623 } xmac_xif_config_t; 2103859Sml29623 2113859Sml29623 typedef enum bmac_tx_config_e { 2123859Sml29623 CFG_BMAC_TX = 0x00000001, 2133859Sml29623 CFG_BMAC_TX_CRC = 0x00000002, 2143859Sml29623 CFG_BMAC_TX_ALL = 0x00000003 2153859Sml29623 } bmac_tx_config_t; 2163859Sml29623 2173859Sml29623 typedef enum bmac_rx_config_e { 2183859Sml29623 CFG_BMAC_RX = 0x00000001, 2193859Sml29623 CFG_BMAC_RX_STRIP_PAD = 0x00000002, 2203859Sml29623 CFG_BMAC_RX_STRIP_CRC = 0x00000004, 2213859Sml29623 CFG_BMAC_RX_PROMISCUOUS = 0x00000008, 2223859Sml29623 CFG_BMAC_RX_PROMISCUOUSGROUP = 0x00000010, 2233859Sml29623 CFG_BMAC_RX_HASH_FILTER = 0x00000020, 2243859Sml29623 CFG_BMAC_RX_ADDR_FILTER = 0x00000040, 2253859Sml29623 CFG_BMAC_RX_DISCARD_ON_ERR = 0x00000080, 2263859Sml29623 CFG_BMAC_RX_ALL = 0x000000FF 2273859Sml29623 } bmac_rx_config_t; 2283859Sml29623 2293859Sml29623 typedef enum bmac_xif_config_e { 2303859Sml29623 CFG_BMAC_XIF_TX_OUTPUT = 0x00000001, 2313859Sml29623 CFG_BMAC_XIF_LOOPBACK = 0x00000002, 2323859Sml29623 CFG_BMAC_XIF_GMII_MODE = 0x00000008, 2333859Sml29623 CFG_BMAC_XIF_LINKLED = 0x00000020, 2343859Sml29623 CFG_BMAC_XIF_LED_POLARITY = 0x00000040, 2353859Sml29623 CFG_BMAC_XIF_SEL_CLK_25MHZ = 0x00000080, 2363859Sml29623 CFG_BMAC_XIF_ALL = 0x000000FF 2373859Sml29623 } bmac_xif_config_t; 2383859Sml29623 2393859Sml29623 2403859Sml29623 typedef enum xmac_ipg_e { 2413859Sml29623 XGMII_IPG_12_15 = 0, 2423859Sml29623 XGMII_IPG_16_19, 2433859Sml29623 XGMII_IPG_20_23, 2443859Sml29623 MII_GMII_IPG_12, 2453859Sml29623 MII_GMII_IPG_13, 2463859Sml29623 MII_GMII_IPG_14, 2473859Sml29623 MII_GMII_IPG_15, 2483859Sml29623 MII_GMII_IPG_16 2493859Sml29623 } xmac_ipg_t; 2503859Sml29623 2513859Sml29623 typedef enum xpcs_reg_e { 2523859Sml29623 XPCS_REG_CONTROL1, 2533859Sml29623 XPCS_REG_STATUS1, 2543859Sml29623 XPCS_REG_DEVICE_ID, 2553859Sml29623 XPCS_REG_SPEED_ABILITY, 2563859Sml29623 XPCS_REG_DEVICE_IN_PKG, 2573859Sml29623 XPCS_REG_CONTROL2, 2583859Sml29623 XPCS_REG_STATUS2, 2593859Sml29623 XPCS_REG_PKG_ID, 2603859Sml29623 XPCS_REG_STATUS, 2613859Sml29623 XPCS_REG_TEST_CONTROL, 2623859Sml29623 XPCS_REG_CONFIG_VENDOR1, 2633859Sml29623 XPCS_REG_DIAG_VENDOR2, 2643859Sml29623 XPCS_REG_MASK1, 2653859Sml29623 XPCS_REG_PACKET_COUNTER, 2663859Sml29623 XPCS_REG_TX_STATEMACHINE, 2673859Sml29623 XPCS_REG_DESCWERR_COUNTER, 2683859Sml29623 XPCS_REG_SYMBOL_ERR_L0_1_COUNTER, 2693859Sml29623 XPCS_REG_SYMBOL_ERR_L2_3_COUNTER, 2703859Sml29623 XPCS_REG_TRAINING_VECTOR 2713859Sml29623 } xpcs_reg_t; 2723859Sml29623 2733859Sml29623 #define IS_XMAC_PORT_NUM_VALID(portn)\ 2743859Sml29623 ((portn == XMAC_PORT_0) || (portn == XMAC_PORT_1)) 2753859Sml29623 2763859Sml29623 #define IS_BMAC_PORT_NUM_VALID(portn)\ 2773859Sml29623 ((portn == BMAC_PORT_0) || (portn == BMAC_PORT_1)) 2783859Sml29623 2793859Sml29623 #define XMAC_REG_WR(handle, portn, reg, val)\ 2803859Sml29623 NXGE_REG_WR64(handle, XMAC_REG_ADDR((portn), (reg)), (val)) 2813859Sml29623 2823859Sml29623 #define XMAC_REG_RD(handle, portn, reg, val_p)\ 2833859Sml29623 NXGE_REG_RD64(handle, XMAC_REG_ADDR((portn), (reg)), (val_p)) 2843859Sml29623 2853859Sml29623 #define BMAC_REG_WR(handle, portn, reg, val)\ 2863859Sml29623 NXGE_REG_WR64(handle, BMAC_REG_ADDR((portn), (reg)), (val)) 2873859Sml29623 2883859Sml29623 #define BMAC_REG_RD(handle, portn, reg, val_p)\ 2893859Sml29623 NXGE_REG_RD64(handle, BMAC_REG_ADDR((portn), (reg)), (val_p)) 2903859Sml29623 2913859Sml29623 #define PCS_REG_WR(handle, portn, reg, val)\ 2923859Sml29623 NXGE_REG_WR64(handle, PCS_REG_ADDR((portn), (reg)), (val)) 2933859Sml29623 2943859Sml29623 #define PCS_REG_RD(handle, portn, reg, val_p)\ 2953859Sml29623 NXGE_REG_RD64(handle, PCS_REG_ADDR((portn), (reg)), (val_p)) 2963859Sml29623 2973859Sml29623 #define XPCS_REG_WR(handle, portn, reg, val)\ 2983859Sml29623 NXGE_REG_WR64(handle, XPCS_ADDR((portn), (reg)), (val)) 2993859Sml29623 3003859Sml29623 #define XPCS_REG_RD(handle, portn, reg, val_p)\ 3013859Sml29623 NXGE_REG_RD64(handle, XPCS_ADDR((portn), (reg)), (val_p)) 3023859Sml29623 3033859Sml29623 #define MIF_REG_WR(handle, reg, val)\ 3043859Sml29623 NXGE_REG_WR64(handle, MIF_ADDR((reg)), (val)) 3053859Sml29623 3063859Sml29623 #define MIF_REG_RD(handle, reg, val_p)\ 3073859Sml29623 NXGE_REG_RD64(handle, MIF_ADDR((reg)), (val_p)) 3083859Sml29623 3093859Sml29623 3103859Sml29623 /* 3113859Sml29623 * When MIF_REG_RD is called inside a poll loop and if the poll takes 3123859Sml29623 * very long time to complete, then each poll will print a rt_show_reg 3133859Sml29623 * result on the screen and the rtrace "register show" result may 3143859Sml29623 * become too messy to read. The solution is to call MIF_REG_RD_NO_SHOW 3153859Sml29623 * instead of MIF_REG_RD in a polling loop. When COSIM or REG_SHOW is 3163859Sml29623 * not defined, this macro is the same as MIF_REG_RD. When both COSIM 3173859Sml29623 * and REG_SHOW are defined, this macro calls NXGE_REG_RD64_NO_SHOW 3183859Sml29623 * which does not call rt_show_reg. 3193859Sml29623 */ 3203859Sml29623 #if defined(COSIM) && defined(REG_SHOW) 3213859Sml29623 #define MIF_REG_RD_NO_SHOW(handle, reg, val_p)\ 3223859Sml29623 NXGE_REG_RD64_NO_SHOW(handle, MIF_ADDR((reg)), (val_p)) 3233859Sml29623 #else 3243859Sml29623 /* If not COSIM or REG_SHOW, still show */ 3253859Sml29623 #define MIF_REG_RD_NO_SHOW(handle, reg, val_p)\ 3263859Sml29623 NXGE_REG_RD64(handle, MIF_ADDR((reg)), (val_p)) 3273859Sml29623 #endif 3283859Sml29623 3293859Sml29623 #define ESR_REG_WR(handle, reg, val)\ 3303859Sml29623 NXGE_REG_WR64(handle, ESR_ADDR((reg)), (val)) 3313859Sml29623 3323859Sml29623 #define ESR_REG_RD(handle, reg, val_p)\ 3333859Sml29623 NXGE_REG_RD64(handle, ESR_ADDR((reg)), (val_p)) 3343859Sml29623 3353859Sml29623 /* Macros to read/modify MAC attributes */ 3363859Sml29623 3373859Sml29623 #define SET_MAC_ATTR1(handle, p, portn, attr, val, stat) {\ 3383859Sml29623 p.type = attr;\ 3393859Sml29623 p.idata[0] = (uint32_t)val;\ 3403859Sml29623 stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\ 3413859Sml29623 } 3423859Sml29623 3433859Sml29623 #define SET_MAC_ATTR2(handle, p, portn, attr, val0, val1, stat) {\ 3443859Sml29623 p.type = attr;\ 3453859Sml29623 p.idata[0] = (uint32_t)val0;\ 3463859Sml29623 p.idata[1] = (uint32_t)val1;\ 3473859Sml29623 stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\ 3483859Sml29623 } 3493859Sml29623 3503859Sml29623 #define SET_MAC_ATTR3(handle, p, portn, attr, val0, val1, val2, stat) {\ 3513859Sml29623 p.type = attr;\ 3523859Sml29623 p.idata[0] = (uint32_t)val0;\ 3533859Sml29623 p.idata[1] = (uint32_t)val1;\ 3543859Sml29623 p.idata[2] = (uint32_t)val2;\ 3553859Sml29623 stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\ 3563859Sml29623 } 3573859Sml29623 3583859Sml29623 #define SET_MAC_ATTR4(handle, p, portn, attr, val0, val1, val2, val3, stat) {\ 3593859Sml29623 p.type = attr;\ 3603859Sml29623 p.idata[0] = (uint32_t)val0;\ 3613859Sml29623 p.idata[1] = (uint32_t)val1;\ 3623859Sml29623 p.idata[2] = (uint32_t)val2;\ 3633859Sml29623 p.idata[3] = (uint32_t)val3;\ 3643859Sml29623 stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\ 3653859Sml29623 } 3663859Sml29623 3673859Sml29623 #define GET_MAC_ATTR1(handle, p, portn, attr, val, stat) {\ 3683859Sml29623 p.type = attr;\ 3693859Sml29623 if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \ 3703859Sml29623 (npi_attr_t *)&p)) == NPI_SUCCESS) {\ 3713859Sml29623 val = p.odata[0];\ 3723859Sml29623 }\ 3733859Sml29623 } 3743859Sml29623 3753859Sml29623 #define GET_MAC_ATTR2(handle, p, portn, attr, val0, val1, stat) {\ 3763859Sml29623 p.type = attr;\ 3773859Sml29623 if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \ 3783859Sml29623 (npi_attr_t *)&p)) == NPI_SUCCESS) {\ 3793859Sml29623 val0 = p.odata[0];\ 3803859Sml29623 val1 = p.odata[1];\ 3813859Sml29623 }\ 3823859Sml29623 } 3833859Sml29623 3843859Sml29623 #define GET_MAC_ATTR3(handle, p, portn, attr, val0, val1, \ 3853859Sml29623 val2, stat) {\ 3863859Sml29623 p.type = attr;\ 3873859Sml29623 if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \ 3883859Sml29623 (npi_attr_t *)&p)) == NPI_SUCCESS) {\ 3893859Sml29623 val0 = p.odata[0];\ 3903859Sml29623 val1 = p.odata[1];\ 3913859Sml29623 val2 = p.odata[2];\ 3923859Sml29623 }\ 3933859Sml29623 } 3943859Sml29623 3953859Sml29623 #define GET_MAC_ATTR4(handle, p, portn, attr, val0, val1, \ 3963859Sml29623 val2, val3, stat) {\ 3973859Sml29623 p.type = attr;\ 3983859Sml29623 if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \ 3993859Sml29623 (npi_attr_t *)&p)) == NPI_SUCCESS) {\ 4003859Sml29623 val0 = p.odata[0];\ 4013859Sml29623 val1 = p.odata[1];\ 4023859Sml29623 val2 = p.odata[2];\ 4033859Sml29623 val3 = p.odata[3];\ 4043859Sml29623 }\ 4053859Sml29623 } 4063859Sml29623 4073859Sml29623 /* MAC specific errors */ 4083859Sml29623 4093859Sml29623 #define MAC_PORT_ATTR_INVALID 0x50 4103859Sml29623 #define MAC_RESET_MODE_INVALID 0x51 4113859Sml29623 #define MAC_HASHTAB_ENTRY_INVALID 0x52 4123859Sml29623 #define MAC_HOSTINFO_ENTRY_INVALID 0x53 4133859Sml29623 #define MAC_ALT_ADDR_ENTRY_INVALID 0x54 4143859Sml29623 4153859Sml29623 /* MAC error return macros */ 4163859Sml29623 4173859Sml29623 #define NPI_MAC_PORT_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4183859Sml29623 PORT_INVALID | IS_PORT | (portn << 12)) 4193859Sml29623 #define NPI_MAC_OPCODE_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4203859Sml29623 OPCODE_INVALID |\ 4213859Sml29623 IS_PORT | (portn << 12)) 4223859Sml29623 #define NPI_MAC_HASHTAB_ENTRY_INVALID(portn)\ 4233859Sml29623 ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4243859Sml29623 MAC_HASHTAB_ENTRY_INVALID |\ 4253859Sml29623 IS_PORT | (portn << 12)) 4263859Sml29623 #define NPI_MAC_HOSTINFO_ENTRY_INVALID(portn)\ 4273859Sml29623 ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4283859Sml29623 MAC_HOSTINFO_ENTRY_INVALID |\ 4293859Sml29623 IS_PORT | (portn << 12)) 4303859Sml29623 #define NPI_MAC_ALT_ADDR_ENTRY_INVALID(portn)\ 4313859Sml29623 ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4323859Sml29623 MAC_ALT_ADDR_ENTRY_INVALID |\ 4333859Sml29623 IS_PORT | (portn << 12)) 4343859Sml29623 #define NPI_MAC_PORT_ATTR_INVALID(portn)\ 4353859Sml29623 ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4363859Sml29623 MAC_PORT_ATTR_INVALID |\ 4373859Sml29623 IS_PORT | (portn << 12)) 4383859Sml29623 #define NPI_MAC_RESET_MODE_INVALID(portn)\ 4393859Sml29623 ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4403859Sml29623 MAC_RESET_MODE_INVALID |\ 4413859Sml29623 IS_PORT | (portn << 12)) 4423859Sml29623 #define NPI_MAC_PCS_REG_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4433859Sml29623 REGISTER_INVALID |\ 4443859Sml29623 IS_PORT | (portn << 12)) 4453859Sml29623 #define NPI_TXMAC_RESET_FAILED(portn) ((TXMAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4463859Sml29623 RESET_FAILED | IS_PORT | (portn << 12)) 4473859Sml29623 #define NPI_RXMAC_RESET_FAILED(portn) ((RXMAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4483859Sml29623 RESET_FAILED | IS_PORT | (portn << 12)) 4493859Sml29623 #define NPI_MAC_CONFIG_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4503859Sml29623 CONFIG_INVALID |\ 4513859Sml29623 IS_PORT | (portn << 12)) 4523859Sml29623 #define NPI_MAC_REG_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4533859Sml29623 REGISTER_INVALID |\ 4543859Sml29623 IS_PORT | (portn << 12)) 4553859Sml29623 #define NPI_MAC_MII_READ_FAILED(portn) ((MIF_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4563859Sml29623 READ_FAILED | IS_PORT | (portn << 12)) 4573859Sml29623 #define NPI_MAC_MII_WRITE_FAILED(portn) ((MIF_BLK_ID << NPI_BLOCK_ID_SHIFT) |\ 4583859Sml29623 WRITE_FAILED | IS_PORT | (portn << 12)) 4593859Sml29623 4603859Sml29623 /* library functions prototypes */ 4613859Sml29623 4623859Sml29623 /* general mac functions */ 4633859Sml29623 npi_status_t npi_mac_hashtab_entry(npi_handle_t, io_op_t, 4643859Sml29623 uint8_t, uint8_t, uint16_t *); 4653859Sml29623 npi_status_t npi_mac_hostinfo_entry(npi_handle_t, io_op_t, 4663859Sml29623 uint8_t, uint8_t, 4673859Sml29623 hostinfo_t *); 4683859Sml29623 npi_status_t npi_mac_altaddr_enable(npi_handle_t, uint8_t, 4693859Sml29623 uint8_t); 470*6495Sspeer npi_status_t npi_mac_altaddr_disable(npi_handle_t, uint8_t, 4713859Sml29623 uint8_t); 4723859Sml29623 npi_status_t npi_mac_altaddr_entry(npi_handle_t, io_op_t, 4733859Sml29623 uint8_t, uint8_t, 4743859Sml29623 npi_mac_addr_t *); 4753859Sml29623 npi_status_t npi_mac_port_attr(npi_handle_t, io_op_t, uint8_t, 4763859Sml29623 npi_attr_t *); 4773859Sml29623 npi_status_t npi_mac_get_link_status(npi_handle_t, uint8_t, 4783859Sml29623 boolean_t *); 4793859Sml29623 npi_status_t npi_mac_get_10g_link_status(npi_handle_t, uint8_t, 4803859Sml29623 boolean_t *); 4813859Sml29623 npi_status_t npi_mac_mif_mii_read(npi_handle_t, uint8_t, 4823859Sml29623 uint8_t, uint16_t *); 4833859Sml29623 npi_status_t npi_mac_mif_mii_write(npi_handle_t, uint8_t, 4843859Sml29623 uint8_t, uint16_t); 4853859Sml29623 npi_status_t npi_mac_mif_link_intr_enable(npi_handle_t, uint8_t, 4863859Sml29623 uint8_t, uint16_t); 4873859Sml29623 npi_status_t npi_mac_mif_mdio_read(npi_handle_t, uint8_t, 4883859Sml29623 uint8_t, uint16_t, 4893859Sml29623 uint16_t *); 4903859Sml29623 npi_status_t npi_mac_mif_mdio_write(npi_handle_t, uint8_t, 4913859Sml29623 uint8_t, uint16_t, 4923859Sml29623 uint16_t); 4933859Sml29623 npi_status_t npi_mac_mif_mdio_link_intr_enable(npi_handle_t, 4943859Sml29623 uint8_t, uint8_t, 4953859Sml29623 uint16_t, uint16_t); 4963859Sml29623 npi_status_t npi_mac_mif_link_intr_disable(npi_handle_t, uint8_t); 4973859Sml29623 npi_status_t npi_mac_pcs_mii_read(npi_handle_t, uint8_t, 4983859Sml29623 uint8_t, uint16_t *); 4993859Sml29623 npi_status_t npi_mac_pcs_mii_write(npi_handle_t, uint8_t, 5003859Sml29623 uint8_t, uint16_t); 5013859Sml29623 npi_status_t npi_mac_pcs_link_intr_enable(npi_handle_t, uint8_t); 5023859Sml29623 npi_status_t npi_mac_pcs_link_intr_disable(npi_handle_t, uint8_t); 5033859Sml29623 npi_status_t npi_mac_pcs_reset(npi_handle_t, uint8_t); 5043859Sml29623 5053859Sml29623 /* xmac functions */ 5063859Sml29623 npi_status_t npi_xmac_reset(npi_handle_t, uint8_t, 5073859Sml29623 npi_mac_reset_t); 5083859Sml29623 npi_status_t npi_xmac_xif_config(npi_handle_t, config_op_t, 5093859Sml29623 uint8_t, xmac_xif_config_t); 5103859Sml29623 npi_status_t npi_xmac_tx_config(npi_handle_t, config_op_t, 5113859Sml29623 uint8_t, xmac_tx_config_t); 5123859Sml29623 npi_status_t npi_xmac_rx_config(npi_handle_t, config_op_t, 5133859Sml29623 uint8_t, xmac_rx_config_t); 5143859Sml29623 npi_status_t npi_xmac_tx_iconfig(npi_handle_t, config_op_t, 5153859Sml29623 uint8_t, xmac_tx_iconfig_t); 5163859Sml29623 npi_status_t npi_xmac_rx_iconfig(npi_handle_t, config_op_t, 5173859Sml29623 uint8_t, xmac_rx_iconfig_t); 5183859Sml29623 npi_status_t npi_xmac_ctl_iconfig(npi_handle_t, config_op_t, 5193859Sml29623 uint8_t, xmac_ctl_iconfig_t); 5203859Sml29623 npi_status_t npi_xmac_tx_get_istatus(npi_handle_t, uint8_t, 5213859Sml29623 xmac_tx_iconfig_t *); 5223859Sml29623 npi_status_t npi_xmac_rx_get_istatus(npi_handle_t, uint8_t, 5233859Sml29623 xmac_rx_iconfig_t *); 5243859Sml29623 npi_status_t npi_xmac_ctl_get_istatus(npi_handle_t, uint8_t, 5253859Sml29623 xmac_ctl_iconfig_t *); 5263859Sml29623 npi_status_t npi_xmac_xpcs_reset(npi_handle_t, uint8_t); 5273859Sml29623 npi_status_t npi_xmac_xpcs_enable(npi_handle_t, uint8_t); 5283859Sml29623 npi_status_t npi_xmac_xpcs_disable(npi_handle_t, uint8_t); 5293859Sml29623 npi_status_t npi_xmac_xpcs_read(npi_handle_t, uint8_t, 5303859Sml29623 uint8_t, uint32_t *); 5313859Sml29623 npi_status_t npi_xmac_xpcs_write(npi_handle_t, uint8_t, 5323859Sml29623 uint8_t, uint32_t); 5333859Sml29623 npi_status_t npi_xmac_xpcs_link_intr_enable(npi_handle_t, uint8_t); 5343859Sml29623 npi_status_t npi_xmac_xpcs_link_intr_disable(npi_handle_t, 5353859Sml29623 uint8_t); 5363859Sml29623 npi_status_t npi_xmac_xif_led(npi_handle_t, uint8_t, 5373859Sml29623 boolean_t); 5383859Sml29623 npi_status_t npi_xmac_zap_tx_counters(npi_handle_t, uint8_t); 5393859Sml29623 npi_status_t npi_xmac_zap_rx_counters(npi_handle_t, uint8_t); 5403859Sml29623 5413859Sml29623 /* bmac functions */ 5423859Sml29623 npi_status_t npi_bmac_reset(npi_handle_t, uint8_t, 5433859Sml29623 npi_mac_reset_t mode); 5443859Sml29623 npi_status_t npi_bmac_tx_config(npi_handle_t, config_op_t, 5453859Sml29623 uint8_t, bmac_tx_config_t); 5463859Sml29623 npi_status_t npi_bmac_rx_config(npi_handle_t, config_op_t, 5473859Sml29623 uint8_t, bmac_rx_config_t); 5483859Sml29623 npi_status_t npi_bmac_rx_iconfig(npi_handle_t, config_op_t, 5493859Sml29623 uint8_t, bmac_rx_iconfig_t); 5503859Sml29623 npi_status_t npi_bmac_xif_config(npi_handle_t, config_op_t, 5513859Sml29623 uint8_t, bmac_xif_config_t); 5523859Sml29623 npi_status_t npi_bmac_tx_iconfig(npi_handle_t, config_op_t, 5533859Sml29623 uint8_t, bmac_tx_iconfig_t); 5543859Sml29623 npi_status_t npi_bmac_ctl_iconfig(npi_handle_t, config_op_t, 5553859Sml29623 uint8_t, bmac_ctl_iconfig_t); 5563859Sml29623 npi_status_t npi_bmac_tx_get_istatus(npi_handle_t, uint8_t, 5573859Sml29623 bmac_tx_iconfig_t *); 5583859Sml29623 npi_status_t npi_bmac_rx_get_istatus(npi_handle_t, uint8_t, 5593859Sml29623 bmac_rx_iconfig_t *); 5603859Sml29623 npi_status_t npi_bmac_ctl_get_istatus(npi_handle_t, uint8_t, 5613859Sml29623 bmac_ctl_iconfig_t *); 5623859Sml29623 npi_status_t npi_bmac_send_pause(npi_handle_t, uint8_t, 5633859Sml29623 uint16_t); 5643859Sml29623 npi_status_t npi_mac_dump_regs(npi_handle_t, uint8_t); 5653859Sml29623 5663859Sml29623 /* MIF common functions */ 5673859Sml29623 void npi_mac_mif_set_indirect_mode(npi_handle_t, boolean_t); 5685196Ssbehera void npi_mac_mif_set_atca_mode(npi_handle_t, boolean_t); 5693859Sml29623 5703859Sml29623 #ifdef __cplusplus 5713859Sml29623 } 5723859Sml29623 #endif 5733859Sml29623 5743859Sml29623 #endif /* _NPI_MAC_H */ 575