18691632fSRavi Kumar /* SPDX-License-Identifier: BSD-3-Clause 28691632fSRavi Kumar * Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved. 38691632fSRavi Kumar * Copyright(c) 2018 Synopsys, Inc. All rights reserved. 48691632fSRavi Kumar */ 58691632fSRavi Kumar 68691632fSRavi Kumar #ifndef RTE_ETH_AXGBE_H_ 78691632fSRavi Kumar #define RTE_ETH_AXGBE_H_ 88691632fSRavi Kumar 98691632fSRavi Kumar #include <rte_mempool.h> 108691632fSRavi Kumar #include <rte_lcore.h> 118691632fSRavi Kumar #include "axgbe_common.h" 12e0444948SSelwin Sebastian #include "rte_time.h" 138691632fSRavi Kumar 149e890103SRavi Kumar #define IRQ 0xff 159e890103SRavi Kumar 169e890103SRavi Kumar #define AXGBE_TX_MAX_BUF_SIZE (0x3fff & ~(64 - 1)) 179e890103SRavi Kumar #define AXGBE_RX_MAX_BUF_SIZE (0x3fff & ~(64 - 1)) 1825cf2630SFerruh Yigit #define AXGBE_RX_MIN_BUF_SIZE (RTE_ETHER_MAX_LEN + RTE_VLAN_HLEN) 1949a5e622SChandu Babu N #define AXGBE_MAX_MAC_ADDRS 32 20e01d9b2eSChandu Babu N #define AXGBE_MAX_HASH_MAC_ADDRS 256 219e890103SRavi Kumar 229e890103SRavi Kumar #define AXGBE_RX_BUF_ALIGN 64 239e890103SRavi Kumar 24572890efSRavi Kumar #define AXGBE_MAX_DMA_CHANNELS 16 25572890efSRavi Kumar #define AXGBE_MAX_QUEUES 16 26572890efSRavi Kumar #define AXGBE_PRIORITY_QUEUES 8 27572890efSRavi Kumar #define AXGBE_DMA_STOP_TIMEOUT 1 28572890efSRavi Kumar 29572890efSRavi Kumar /* DMA cache settings - Outer sharable, write-back, write-allocate */ 30572890efSRavi Kumar #define AXGBE_DMA_OS_AXDOMAIN 0x2 31572890efSRavi Kumar #define AXGBE_DMA_OS_ARCACHE 0xb 32572890efSRavi Kumar #define AXGBE_DMA_OS_AWCACHE 0xf 33572890efSRavi Kumar 34572890efSRavi Kumar /* DMA cache settings - System, no caches used */ 35572890efSRavi Kumar #define AXGBE_DMA_SYS_AXDOMAIN 0x3 36572890efSRavi Kumar #define AXGBE_DMA_SYS_ARCACHE 0x0 37572890efSRavi Kumar #define AXGBE_DMA_SYS_AWCACHE 0x0 38572890efSRavi Kumar 399e890103SRavi Kumar /* DMA channel interrupt modes */ 409e890103SRavi Kumar #define AXGBE_IRQ_MODE_EDGE 0 419e890103SRavi Kumar #define AXGBE_IRQ_MODE_LEVEL 1 429e890103SRavi Kumar 439e890103SRavi Kumar #define AXGBE_DMA_INTERRUPT_MASK 0x31c7 449e890103SRavi Kumar 459e890103SRavi Kumar #define AXGMAC_MIN_PACKET 60 469e890103SRavi Kumar #define AXGMAC_STD_PACKET_MTU 1500 479e890103SRavi Kumar #define AXGMAC_MAX_STD_PACKET 1518 489e890103SRavi Kumar #define AXGMAC_JUMBO_PACKET_MTU 9000 499e890103SRavi Kumar #define AXGMAC_MAX_JUMBO_PACKET 9018 509e890103SRavi Kumar /* Inter-frame gap + preamble */ 519e890103SRavi Kumar #define AXGMAC_ETH_PREAMBLE (12 + 8) 529e890103SRavi Kumar 539e890103SRavi Kumar #define AXGMAC_PFC_DATA_LEN 46 549e890103SRavi Kumar #define AXGMAC_PFC_DELAYS 14000 559e890103SRavi Kumar 56572890efSRavi Kumar /* PCI BAR mapping */ 57572890efSRavi Kumar #define AXGBE_AXGMAC_BAR 0 58572890efSRavi Kumar #define AXGBE_XPCS_BAR 1 59572890efSRavi Kumar #define AXGBE_MAC_PROP_OFFSET 0x1d000 60572890efSRavi Kumar #define AXGBE_I2C_CTRL_OFFSET 0x1e000 61572890efSRavi Kumar 62572890efSRavi Kumar /* PCI clock frequencies */ 63572890efSRavi Kumar #define AXGBE_V2_DMA_CLOCK_FREQ 500000000 64572890efSRavi Kumar #define AXGBE_V2_PTP_CLOCK_FREQ 125000000 65572890efSRavi Kumar 66e0444948SSelwin Sebastian /* Timestamp support - values based on 50MHz PTP clock 67e0444948SSelwin Sebastian * 50MHz => 20 nsec 68e0444948SSelwin Sebastian */ 69e0444948SSelwin Sebastian #define AXGBE_TSTAMP_SSINC 20 70e0444948SSelwin Sebastian #define AXGBE_TSTAMP_SNSINC 0 71e0444948SSelwin Sebastian #define AXGBE_CYCLECOUNTER_MASK 0xffffffffffffffffULL 72e0444948SSelwin Sebastian 73572890efSRavi Kumar #define AXGMAC_FIFO_MIN_ALLOC 2048 74572890efSRavi Kumar #define AXGMAC_FIFO_UNIT 256 75572890efSRavi Kumar #define AXGMAC_FIFO_ALIGN(_x) \ 76572890efSRavi Kumar (((_x) + AXGMAC_FIFO_UNIT - 1) & ~(XGMAC_FIFO_UNIT - 1)) 77572890efSRavi Kumar #define AXGMAC_FIFO_FC_OFF 2048 78572890efSRavi Kumar #define AXGMAC_FIFO_FC_MIN 4096 79572890efSRavi Kumar 80572890efSRavi Kumar #define AXGBE_TC_MIN_QUANTUM 10 81572890efSRavi Kumar 82572890efSRavi Kumar /* Flow control queue count */ 83572890efSRavi Kumar #define AXGMAC_MAX_FLOW_CONTROL_QUEUES 8 84572890efSRavi Kumar 85572890efSRavi Kumar /* Flow control threshold units */ 86572890efSRavi Kumar #define AXGMAC_FLOW_CONTROL_UNIT 512 87572890efSRavi Kumar #define AXGMAC_FLOW_CONTROL_ALIGN(_x) \ 88572890efSRavi Kumar (((_x) + AXGMAC_FLOW_CONTROL_UNIT - 1) & \ 89572890efSRavi Kumar ~(AXGMAC_FLOW_CONTROL_UNIT - 1)) 90572890efSRavi Kumar #define AXGMAC_FLOW_CONTROL_VALUE(_x) \ 91572890efSRavi Kumar (((_x) < 1024) ? 0 : ((_x) / AXGMAC_FLOW_CONTROL_UNIT) - 2) 92572890efSRavi Kumar #define AXGMAC_FLOW_CONTROL_MAX 33280 93572890efSRavi Kumar 94e01d9b2eSChandu Babu N /* Maximum MAC address hash table size (256 bits = 8 dword) */ 95572890efSRavi Kumar #define AXGBE_MAC_HASH_TABLE_SIZE 8 96572890efSRavi Kumar 97572890efSRavi Kumar /* Receive Side Scaling */ 98572890efSRavi Kumar #define AXGBE_RSS_OFFLOAD ( \ 99295968d1SFerruh Yigit RTE_ETH_RSS_IPV4 | \ 100295968d1SFerruh Yigit RTE_ETH_RSS_NONFRAG_IPV4_TCP | \ 101295968d1SFerruh Yigit RTE_ETH_RSS_NONFRAG_IPV4_UDP | \ 102295968d1SFerruh Yigit RTE_ETH_RSS_IPV6 | \ 103295968d1SFerruh Yigit RTE_ETH_RSS_NONFRAG_IPV6_TCP | \ 104295968d1SFerruh Yigit RTE_ETH_RSS_NONFRAG_IPV6_UDP) 105572890efSRavi Kumar 106572890efSRavi Kumar #define AXGBE_RSS_HASH_KEY_SIZE 40 107572890efSRavi Kumar #define AXGBE_RSS_MAX_TABLE_SIZE 256 108572890efSRavi Kumar #define AXGBE_RSS_LOOKUP_TABLE_TYPE 0 109572890efSRavi Kumar #define AXGBE_RSS_HASH_KEY_TYPE 1 110572890efSRavi Kumar 111572890efSRavi Kumar /* Auto-negotiation */ 112572890efSRavi Kumar #define AXGBE_AN_MS_TIMEOUT 500 113572890efSRavi Kumar #define AXGBE_LINK_TIMEOUT 5 114323e8c91SVenkat Kumar Ande #define AXGBE_KR_TRAINING_WAIT_ITER 50 115572890efSRavi Kumar 116572890efSRavi Kumar #define AXGBE_SGMII_AN_LINK_STATUS BIT(1) 117572890efSRavi Kumar #define AXGBE_SGMII_AN_LINK_SPEED (BIT(2) | BIT(3)) 1181f9d2d3aSVenkat Kumar Ande #define AXGBE_SGMII_AN_LINK_SPEED_10 0x00 119572890efSRavi Kumar #define AXGBE_SGMII_AN_LINK_SPEED_100 0x04 120572890efSRavi Kumar #define AXGBE_SGMII_AN_LINK_SPEED_1000 0x08 121572890efSRavi Kumar #define AXGBE_SGMII_AN_LINK_DUPLEX BIT(4) 122572890efSRavi Kumar 123572890efSRavi Kumar /* ECC correctable error notification window (seconds) */ 124572890efSRavi Kumar #define AXGBE_ECC_LIMIT 60 125572890efSRavi Kumar 126572890efSRavi Kumar /* MDIO port types */ 127572890efSRavi Kumar #define AXGMAC_MAX_C22_PORT 3 128572890efSRavi Kumar 1292570c033SSteve Yang /* The max frame size with default MTU */ 1302570c033SSteve Yang #define AXGBE_ETH_MAX_LEN ( \ 1312570c033SSteve Yang RTE_ETHER_MTU + \ 1322570c033SSteve Yang RTE_ETHER_HDR_LEN + \ 1332570c033SSteve Yang RTE_ETHER_CRC_LEN) 1342570c033SSteve Yang 135572890efSRavi Kumar /* Helper macro for descriptor handling 136572890efSRavi Kumar * Always use AXGBE_GET_DESC_DATA to access the descriptor data 137572890efSRavi Kumar * since the index is free-running and needs to be and-ed 138572890efSRavi Kumar * with the descriptor count value of the ring to index to 139572890efSRavi Kumar * the proper descriptor data. 140572890efSRavi Kumar */ 141572890efSRavi Kumar #define AXGBE_GET_DESC_DATA(_ring, _idx) \ 142572890efSRavi Kumar ((_ring)->rdata + \ 143572890efSRavi Kumar ((_idx) & ((_ring)->rdesc_count - 1))) 144572890efSRavi Kumar 145572890efSRavi Kumar struct axgbe_port; 146572890efSRavi Kumar 147572890efSRavi Kumar enum axgbe_state { 148572890efSRavi Kumar AXGBE_DOWN, 149572890efSRavi Kumar AXGBE_LINK_INIT, 150572890efSRavi Kumar AXGBE_LINK_ERR, 151572890efSRavi Kumar AXGBE_STOPPED, 152572890efSRavi Kumar }; 153572890efSRavi Kumar 154572890efSRavi Kumar enum axgbe_int { 155572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_TI, 156572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_TPS, 157572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_TBU, 158572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_RI, 159572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_RBU, 160572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_RPS, 161572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_TI_RI, 162572890efSRavi Kumar AXGMAC_INT_DMA_CH_SR_FBE, 163572890efSRavi Kumar AXGMAC_INT_DMA_ALL, 164572890efSRavi Kumar }; 165572890efSRavi Kumar 166572890efSRavi Kumar enum axgbe_int_state { 167572890efSRavi Kumar AXGMAC_INT_STATE_SAVE, 168572890efSRavi Kumar AXGMAC_INT_STATE_RESTORE, 169572890efSRavi Kumar }; 170572890efSRavi Kumar 171572890efSRavi Kumar enum axgbe_ecc_sec { 172572890efSRavi Kumar AXGBE_ECC_SEC_TX, 173572890efSRavi Kumar AXGBE_ECC_SEC_RX, 174572890efSRavi Kumar AXGBE_ECC_SEC_DESC, 175572890efSRavi Kumar }; 176572890efSRavi Kumar 177572890efSRavi Kumar enum axgbe_speed { 178572890efSRavi Kumar AXGBE_SPEED_1000 = 0, 179572890efSRavi Kumar AXGBE_SPEED_2500, 180572890efSRavi Kumar AXGBE_SPEED_10000, 181572890efSRavi Kumar AXGBE_SPEEDS, 182572890efSRavi Kumar }; 183572890efSRavi Kumar 184572890efSRavi Kumar enum axgbe_xpcs_access { 185572890efSRavi Kumar AXGBE_XPCS_ACCESS_V1 = 0, 186572890efSRavi Kumar AXGBE_XPCS_ACCESS_V2, 187572890efSRavi Kumar }; 188572890efSRavi Kumar 189572890efSRavi Kumar enum axgbe_an_mode { 190572890efSRavi Kumar AXGBE_AN_MODE_CL73 = 0, 191572890efSRavi Kumar AXGBE_AN_MODE_CL73_REDRV, 192572890efSRavi Kumar AXGBE_AN_MODE_CL37, 193572890efSRavi Kumar AXGBE_AN_MODE_CL37_SGMII, 194572890efSRavi Kumar AXGBE_AN_MODE_NONE, 195572890efSRavi Kumar }; 196572890efSRavi Kumar 197572890efSRavi Kumar enum axgbe_an { 198572890efSRavi Kumar AXGBE_AN_READY = 0, 199572890efSRavi Kumar AXGBE_AN_PAGE_RECEIVED, 200572890efSRavi Kumar AXGBE_AN_INCOMPAT_LINK, 201572890efSRavi Kumar AXGBE_AN_COMPLETE, 202572890efSRavi Kumar AXGBE_AN_NO_LINK, 203572890efSRavi Kumar AXGBE_AN_ERROR, 204572890efSRavi Kumar }; 205572890efSRavi Kumar 206572890efSRavi Kumar enum axgbe_rx { 207572890efSRavi Kumar AXGBE_RX_BPA = 0, 208572890efSRavi Kumar AXGBE_RX_XNP, 209572890efSRavi Kumar AXGBE_RX_COMPLETE, 210572890efSRavi Kumar AXGBE_RX_ERROR, 211572890efSRavi Kumar }; 212572890efSRavi Kumar 213572890efSRavi Kumar enum axgbe_mode { 214572890efSRavi Kumar AXGBE_MODE_KX_1000 = 0, 215572890efSRavi Kumar AXGBE_MODE_KX_2500, 216572890efSRavi Kumar AXGBE_MODE_KR, 217572890efSRavi Kumar AXGBE_MODE_X, 2181f9d2d3aSVenkat Kumar Ande AXGBE_MODE_SGMII_10, 219572890efSRavi Kumar AXGBE_MODE_SGMII_100, 220572890efSRavi Kumar AXGBE_MODE_SGMII_1000, 221572890efSRavi Kumar AXGBE_MODE_SFI, 222572890efSRavi Kumar AXGBE_MODE_UNKNOWN, 223572890efSRavi Kumar }; 224572890efSRavi Kumar 225572890efSRavi Kumar enum axgbe_speedset { 226572890efSRavi Kumar AXGBE_SPEEDSET_1000_10000 = 0, 227572890efSRavi Kumar AXGBE_SPEEDSET_2500_10000, 228572890efSRavi Kumar }; 229572890efSRavi Kumar 230572890efSRavi Kumar enum axgbe_mdio_mode { 231572890efSRavi Kumar AXGBE_MDIO_MODE_NONE = 0, 232572890efSRavi Kumar AXGBE_MDIO_MODE_CL22, 233572890efSRavi Kumar AXGBE_MDIO_MODE_CL45, 234572890efSRavi Kumar }; 235572890efSRavi Kumar 236cf96031aSVenkat Kumar Ande enum axgbe_mb_cmd { 237cf96031aSVenkat Kumar Ande AXGBE_MB_CMD_POWER_OFF = 0, 238cf96031aSVenkat Kumar Ande AXGBE_MB_CMD_SET_1G, 239cf96031aSVenkat Kumar Ande AXGBE_MB_CMD_SET_2_5G, 240cf96031aSVenkat Kumar Ande AXGBE_MB_CMD_SET_10G_SFI, 241cf96031aSVenkat Kumar Ande AXGBE_MB_CMD_SET_10G_KR, 242cf96031aSVenkat Kumar Ande AXGBE_MB_CMD_RRC 243cf96031aSVenkat Kumar Ande }; 244cf96031aSVenkat Kumar Ande 245cf96031aSVenkat Kumar Ande enum axgbe_mb_subcmd { 246cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_NONE = 0, 2476c04898fSVenkat Kumar Ande AXGBE_MB_SUBCMD_RX_ADAP, 248cf96031aSVenkat Kumar Ande 249cf96031aSVenkat Kumar Ande /* 10GbE SFP subcommands */ 250cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_ACTIVE = 0, 251cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_PASSIVE_1M, 252cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_PASSIVE_3M, 253cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_PASSIVE_OTHER, 254cf96031aSVenkat Kumar Ande 255cf96031aSVenkat Kumar Ande /* 1GbE Mode subcommands */ 256cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_10MBITS = 0, 257cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_100MBITS, 258cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_1G_SGMII, 259cf96031aSVenkat Kumar Ande AXGBE_MB_SUBCMD_1G_KX 260cf96031aSVenkat Kumar Ande }; 261cf96031aSVenkat Kumar Ande 2624ac7516bSRavi Kumar struct axgbe_phy { 2634ac7516bSRavi Kumar uint32_t supported; 2644ac7516bSRavi Kumar uint32_t advertising; 2654ac7516bSRavi Kumar uint32_t lp_advertising; 2664ac7516bSRavi Kumar 2674ac7516bSRavi Kumar int address; 2684ac7516bSRavi Kumar 2694ac7516bSRavi Kumar int autoneg; 2704ac7516bSRavi Kumar int speed; 2714ac7516bSRavi Kumar int duplex; 2724ac7516bSRavi Kumar 2734ac7516bSRavi Kumar int link; 2744ac7516bSRavi Kumar 2754ac7516bSRavi Kumar int pause_autoneg; 2764ac7516bSRavi Kumar int tx_pause; 2774ac7516bSRavi Kumar int rx_pause; 2784ac7516bSRavi Kumar }; 2794ac7516bSRavi Kumar 2804ac7516bSRavi Kumar enum axgbe_i2c_cmd { 2814ac7516bSRavi Kumar AXGBE_I2C_CMD_READ = 0, 2824ac7516bSRavi Kumar AXGBE_I2C_CMD_WRITE, 2834ac7516bSRavi Kumar }; 2844ac7516bSRavi Kumar 2854ac7516bSRavi Kumar struct axgbe_i2c_op { 2864ac7516bSRavi Kumar enum axgbe_i2c_cmd cmd; 2874ac7516bSRavi Kumar 2884ac7516bSRavi Kumar unsigned int target; 2894ac7516bSRavi Kumar 2904ac7516bSRavi Kumar uint8_t *buf; 2914ac7516bSRavi Kumar unsigned int len; 2924ac7516bSRavi Kumar }; 2934ac7516bSRavi Kumar 2944ac7516bSRavi Kumar struct axgbe_i2c_op_state { 2954ac7516bSRavi Kumar struct axgbe_i2c_op *op; 2964ac7516bSRavi Kumar 2974ac7516bSRavi Kumar unsigned int tx_len; 2984ac7516bSRavi Kumar unsigned char *tx_buf; 2994ac7516bSRavi Kumar 3004ac7516bSRavi Kumar unsigned int rx_len; 3014ac7516bSRavi Kumar unsigned char *rx_buf; 3024ac7516bSRavi Kumar 3034ac7516bSRavi Kumar unsigned int tx_abort_source; 3044ac7516bSRavi Kumar 3054ac7516bSRavi Kumar int ret; 3064ac7516bSRavi Kumar }; 3074ac7516bSRavi Kumar 3084ac7516bSRavi Kumar struct axgbe_i2c { 3094ac7516bSRavi Kumar unsigned int started; 3104ac7516bSRavi Kumar unsigned int max_speed_mode; 3114ac7516bSRavi Kumar unsigned int rx_fifo_size; 3124ac7516bSRavi Kumar unsigned int tx_fifo_size; 3134ac7516bSRavi Kumar 3144ac7516bSRavi Kumar struct axgbe_i2c_op_state op_state; 3154ac7516bSRavi Kumar }; 3164ac7516bSRavi Kumar 317572890efSRavi Kumar struct axgbe_hw_if { 318572890efSRavi Kumar void (*config_flow_control)(struct axgbe_port *); 319572890efSRavi Kumar int (*config_rx_mode)(struct axgbe_port *); 320572890efSRavi Kumar 321572890efSRavi Kumar int (*init)(struct axgbe_port *); 322572890efSRavi Kumar 323572890efSRavi Kumar int (*read_mmd_regs)(struct axgbe_port *, int, int); 324572890efSRavi Kumar void (*write_mmd_regs)(struct axgbe_port *, int, int, int); 325572890efSRavi Kumar int (*set_speed)(struct axgbe_port *, int); 326572890efSRavi Kumar 327572890efSRavi Kumar int (*set_ext_mii_mode)(struct axgbe_port *, unsigned int, 328572890efSRavi Kumar enum axgbe_mdio_mode); 329627ab524SVenkat Kumar Ande int (*read_ext_mii_regs_c22)(struct axgbe_port *pdata, int addr, int reg); 330627ab524SVenkat Kumar Ande int (*write_ext_mii_regs_c22)(struct axgbe_port *pdata, int addr, int reg, uint16_t val); 331627ab524SVenkat Kumar Ande int (*read_ext_mii_regs_c45)(struct axgbe_port *pdata, int addr, int devad, int reg); 332627ab524SVenkat Kumar Ande int (*write_ext_mii_regs_c45)(struct axgbe_port *pdata, int addr, int devad, 333627ab524SVenkat Kumar Ande int reg, uint16_t val); 334572890efSRavi Kumar 335572890efSRavi Kumar /* For FLOW ctrl */ 336572890efSRavi Kumar int (*config_tx_flow_control)(struct axgbe_port *); 337572890efSRavi Kumar int (*config_rx_flow_control)(struct axgbe_port *); 338572890efSRavi Kumar 33986578516SGirish Nandibasappa /* vlan */ 34086578516SGirish Nandibasappa int (*enable_rx_vlan_stripping)(struct axgbe_port *); 34186578516SGirish Nandibasappa int (*disable_rx_vlan_stripping)(struct axgbe_port *); 34286578516SGirish Nandibasappa int (*enable_rx_vlan_filtering)(struct axgbe_port *); 34386578516SGirish Nandibasappa int (*disable_rx_vlan_filtering)(struct axgbe_port *); 34486578516SGirish Nandibasappa int (*update_vlan_hash_table)(struct axgbe_port *); 34586578516SGirish Nandibasappa 346572890efSRavi Kumar int (*exit)(struct axgbe_port *); 347572890efSRavi Kumar }; 348572890efSRavi Kumar 3494ac7516bSRavi Kumar /* This structure represents implementation specific routines for an 3504ac7516bSRavi Kumar * implementation of a PHY. All routines are required unless noted below. 3514ac7516bSRavi Kumar * Optional routines: 3524ac7516bSRavi Kumar * kr_training_pre, kr_training_post 3534ac7516bSRavi Kumar */ 3544ac7516bSRavi Kumar struct axgbe_phy_impl_if { 3554ac7516bSRavi Kumar /* Perform Setup/teardown actions */ 3564ac7516bSRavi Kumar int (*init)(struct axgbe_port *); 3574ac7516bSRavi Kumar void (*exit)(struct axgbe_port *); 3584ac7516bSRavi Kumar 3594ac7516bSRavi Kumar /* Perform start/stop specific actions */ 3604ac7516bSRavi Kumar int (*reset)(struct axgbe_port *); 3614ac7516bSRavi Kumar int (*start)(struct axgbe_port *); 3624ac7516bSRavi Kumar void (*stop)(struct axgbe_port *); 3634ac7516bSRavi Kumar 3644ac7516bSRavi Kumar /* Return the link status */ 3654ac7516bSRavi Kumar int (*link_status)(struct axgbe_port *, int *); 3664ac7516bSRavi Kumar 3674ac7516bSRavi Kumar /* Indicate if a particular speed is valid */ 3684ac7516bSRavi Kumar int (*valid_speed)(struct axgbe_port *, int); 3694ac7516bSRavi Kumar 3704ac7516bSRavi Kumar /* Check if the specified mode can/should be used */ 3714ac7516bSRavi Kumar bool (*use_mode)(struct axgbe_port *, enum axgbe_mode); 3724ac7516bSRavi Kumar /* Switch the PHY into various modes */ 3734ac7516bSRavi Kumar void (*set_mode)(struct axgbe_port *, enum axgbe_mode); 3744ac7516bSRavi Kumar /* Retrieve mode needed for a specific speed */ 3754ac7516bSRavi Kumar enum axgbe_mode (*get_mode)(struct axgbe_port *, int); 3764ac7516bSRavi Kumar /* Retrieve new/next mode when trying to auto-negotiate */ 3774ac7516bSRavi Kumar enum axgbe_mode (*switch_mode)(struct axgbe_port *); 3784ac7516bSRavi Kumar /* Retrieve current mode */ 3794ac7516bSRavi Kumar enum axgbe_mode (*cur_mode)(struct axgbe_port *); 3804ac7516bSRavi Kumar 3814ac7516bSRavi Kumar /* Retrieve current auto-negotiation mode */ 3824ac7516bSRavi Kumar enum axgbe_an_mode (*an_mode)(struct axgbe_port *); 3834ac7516bSRavi Kumar 3844ac7516bSRavi Kumar /* Configure auto-negotiation settings */ 3854ac7516bSRavi Kumar int (*an_config)(struct axgbe_port *); 3864ac7516bSRavi Kumar 3874ac7516bSRavi Kumar /* Set/override auto-negotiation advertisement settings */ 3884ac7516bSRavi Kumar unsigned int (*an_advertising)(struct axgbe_port *port); 3894ac7516bSRavi Kumar 3904ac7516bSRavi Kumar /* Process results of auto-negotiation */ 3914ac7516bSRavi Kumar enum axgbe_mode (*an_outcome)(struct axgbe_port *); 3924ac7516bSRavi Kumar 39300072056SRavi Kumar /* Pre/Post auto-negotiation support */ 39400072056SRavi Kumar void (*an_pre)(struct axgbe_port *port); 39500072056SRavi Kumar void (*an_post)(struct axgbe_port *port); 39600072056SRavi Kumar 3974ac7516bSRavi Kumar /* Pre/Post KR training enablement support */ 3984ac7516bSRavi Kumar void (*kr_training_pre)(struct axgbe_port *); 3994ac7516bSRavi Kumar void (*kr_training_post)(struct axgbe_port *); 4004ac7516bSRavi Kumar }; 4014ac7516bSRavi Kumar 4024ac7516bSRavi Kumar struct axgbe_phy_if { 4034ac7516bSRavi Kumar /* For PHY setup/teardown */ 4044ac7516bSRavi Kumar int (*phy_init)(struct axgbe_port *); 4054ac7516bSRavi Kumar void (*phy_exit)(struct axgbe_port *); 4064ac7516bSRavi Kumar 4074ac7516bSRavi Kumar /* For PHY support when setting device up/down */ 4084ac7516bSRavi Kumar int (*phy_reset)(struct axgbe_port *); 4094ac7516bSRavi Kumar int (*phy_start)(struct axgbe_port *); 4104ac7516bSRavi Kumar void (*phy_stop)(struct axgbe_port *); 4114ac7516bSRavi Kumar 4124ac7516bSRavi Kumar /* For PHY support while device is up */ 4134ac7516bSRavi Kumar void (*phy_status)(struct axgbe_port *); 4144ac7516bSRavi Kumar int (*phy_config_aneg)(struct axgbe_port *); 4154ac7516bSRavi Kumar 4164ac7516bSRavi Kumar /* For PHY settings validation */ 4174ac7516bSRavi Kumar int (*phy_valid_speed)(struct axgbe_port *, int); 4184ac7516bSRavi Kumar /* For single interrupt support */ 4194ac7516bSRavi Kumar void (*an_isr)(struct axgbe_port *); 4204ac7516bSRavi Kumar /* PHY implementation specific services */ 4214ac7516bSRavi Kumar struct axgbe_phy_impl_if phy_impl; 4224ac7516bSRavi Kumar }; 4234ac7516bSRavi Kumar 4244ac7516bSRavi Kumar struct axgbe_i2c_if { 4254ac7516bSRavi Kumar /* For initial I2C setup */ 4264ac7516bSRavi Kumar int (*i2c_init)(struct axgbe_port *); 4274ac7516bSRavi Kumar 4284ac7516bSRavi Kumar /* For I2C support when setting device up/down */ 4294ac7516bSRavi Kumar int (*i2c_start)(struct axgbe_port *); 4304ac7516bSRavi Kumar void (*i2c_stop)(struct axgbe_port *); 4314ac7516bSRavi Kumar 4324ac7516bSRavi Kumar /* For performing I2C operations */ 4334ac7516bSRavi Kumar int (*i2c_xfer)(struct axgbe_port *, struct axgbe_i2c_op *); 4344ac7516bSRavi Kumar }; 4354ac7516bSRavi Kumar 436572890efSRavi Kumar /* This structure contains flags that indicate what hardware features 437572890efSRavi Kumar * or configurations are present in the device. 438572890efSRavi Kumar */ 439572890efSRavi Kumar struct axgbe_hw_features { 440572890efSRavi Kumar /* HW Version */ 441572890efSRavi Kumar unsigned int version; 442572890efSRavi Kumar 443572890efSRavi Kumar /* HW Feature Register0 */ 444572890efSRavi Kumar unsigned int gmii; /* 1000 Mbps support */ 445572890efSRavi Kumar unsigned int vlhash; /* VLAN Hash Filter */ 446572890efSRavi Kumar unsigned int sma; /* SMA(MDIO) Interface */ 447572890efSRavi Kumar unsigned int rwk; /* PMT remote wake-up packet */ 448572890efSRavi Kumar unsigned int mgk; /* PMT magic packet */ 449572890efSRavi Kumar unsigned int mmc; /* RMON module */ 450572890efSRavi Kumar unsigned int aoe; /* ARP Offload */ 451572890efSRavi Kumar unsigned int ts; /* IEEE 1588-2008 Advanced Timestamp */ 452572890efSRavi Kumar unsigned int eee; /* Energy Efficient Ethernet */ 453572890efSRavi Kumar unsigned int tx_coe; /* Tx Checksum Offload */ 454572890efSRavi Kumar unsigned int rx_coe; /* Rx Checksum Offload */ 455572890efSRavi Kumar unsigned int addn_mac; /* Additional MAC Addresses */ 456572890efSRavi Kumar unsigned int ts_src; /* Timestamp Source */ 457572890efSRavi Kumar unsigned int sa_vlan_ins; /* Source Address or VLAN Insertion */ 458572890efSRavi Kumar 459572890efSRavi Kumar /* HW Feature Register1 */ 460572890efSRavi Kumar unsigned int rx_fifo_size; /* MTL Receive FIFO Size */ 461572890efSRavi Kumar unsigned int tx_fifo_size; /* MTL Transmit FIFO Size */ 462572890efSRavi Kumar unsigned int adv_ts_hi; /* Advance Timestamping High Word */ 463572890efSRavi Kumar unsigned int dma_width; /* DMA width */ 464572890efSRavi Kumar unsigned int dcb; /* DCB Feature */ 465572890efSRavi Kumar unsigned int sph; /* Split Header Feature */ 466572890efSRavi Kumar unsigned int tso; /* TCP Segmentation Offload */ 467572890efSRavi Kumar unsigned int dma_debug; /* DMA Debug Registers */ 468572890efSRavi Kumar unsigned int rss; /* Receive Side Scaling */ 469572890efSRavi Kumar unsigned int tc_cnt; /* Number of Traffic Classes */ 470572890efSRavi Kumar unsigned int hash_table_size; /* Hash Table Size */ 471572890efSRavi Kumar unsigned int l3l4_filter_num; /* Number of L3-L4 Filters */ 472572890efSRavi Kumar 473572890efSRavi Kumar /* HW Feature Register2 */ 474572890efSRavi Kumar unsigned int rx_q_cnt; /* Number of MTL Receive Queues */ 475572890efSRavi Kumar unsigned int tx_q_cnt; /* Number of MTL Transmit Queues */ 476572890efSRavi Kumar unsigned int rx_ch_cnt; /* Number of DMA Receive Channels */ 477572890efSRavi Kumar unsigned int tx_ch_cnt; /* Number of DMA Transmit Channels */ 478572890efSRavi Kumar unsigned int pps_out_num; /* Number of PPS outputs */ 479572890efSRavi Kumar unsigned int aux_snap_num; /* Number of Aux snapshot inputs */ 48086578516SGirish Nandibasappa 48186578516SGirish Nandibasappa /* HW Feature Register3 */ 48286578516SGirish Nandibasappa unsigned int tx_q_vlan_tag_ins; /* Queue/Channel based VLAN tag */ 48386578516SGirish Nandibasappa /* insertion on Tx Enable */ 48486578516SGirish Nandibasappa unsigned int no_of_vlan_extn; /* Number of Extended VLAN Tag */ 48586578516SGirish Nandibasappa /* Filters Enabled */ 486572890efSRavi Kumar }; 487572890efSRavi Kumar 488572890efSRavi Kumar struct axgbe_version_data { 4894ac7516bSRavi Kumar void (*init_function_ptrs_phy_impl)(struct axgbe_phy_if *); 490572890efSRavi Kumar enum axgbe_xpcs_access xpcs_access; 491572890efSRavi Kumar unsigned int mmc_64bit; 492572890efSRavi Kumar unsigned int tx_max_fifo_size; 493572890efSRavi Kumar unsigned int rx_max_fifo_size; 494572890efSRavi Kumar unsigned int tx_tstamp_workaround; 495572890efSRavi Kumar unsigned int ecc_support; 496572890efSRavi Kumar unsigned int i2c_support; 49700072056SRavi Kumar unsigned int an_cdr_workaround; 498e82b0fe0SVenkat Kumar Ande unsigned int enable_rrc; 499572890efSRavi Kumar }; 500572890efSRavi Kumar 5019d1ef6b2SChandu Babu N struct axgbe_mmc_stats { 5029d1ef6b2SChandu Babu N /* Tx Stats */ 5039d1ef6b2SChandu Babu N uint64_t txoctetcount_gb; 5049d1ef6b2SChandu Babu N uint64_t txframecount_gb; 5059d1ef6b2SChandu Babu N uint64_t txbroadcastframes_g; 5069d1ef6b2SChandu Babu N uint64_t txmulticastframes_g; 5079d1ef6b2SChandu Babu N uint64_t tx64octets_gb; 5089d1ef6b2SChandu Babu N uint64_t tx65to127octets_gb; 5099d1ef6b2SChandu Babu N uint64_t tx128to255octets_gb; 5109d1ef6b2SChandu Babu N uint64_t tx256to511octets_gb; 5119d1ef6b2SChandu Babu N uint64_t tx512to1023octets_gb; 5129d1ef6b2SChandu Babu N uint64_t tx1024tomaxoctets_gb; 5139d1ef6b2SChandu Babu N uint64_t txunicastframes_gb; 5149d1ef6b2SChandu Babu N uint64_t txmulticastframes_gb; 5159d1ef6b2SChandu Babu N uint64_t txbroadcastframes_gb; 5169d1ef6b2SChandu Babu N uint64_t txunderflowerror; 5179d1ef6b2SChandu Babu N uint64_t txoctetcount_g; 5189d1ef6b2SChandu Babu N uint64_t txframecount_g; 5199d1ef6b2SChandu Babu N uint64_t txpauseframes; 5209d1ef6b2SChandu Babu N uint64_t txvlanframes_g; 5219d1ef6b2SChandu Babu N 5229d1ef6b2SChandu Babu N /* Rx Stats */ 5239d1ef6b2SChandu Babu N uint64_t rxframecount_gb; 5249d1ef6b2SChandu Babu N uint64_t rxoctetcount_gb; 5259d1ef6b2SChandu Babu N uint64_t rxoctetcount_g; 5269d1ef6b2SChandu Babu N uint64_t rxbroadcastframes_g; 5279d1ef6b2SChandu Babu N uint64_t rxmulticastframes_g; 5289d1ef6b2SChandu Babu N uint64_t rxcrcerror; 5299d1ef6b2SChandu Babu N uint64_t rxrunterror; 5309d1ef6b2SChandu Babu N uint64_t rxjabbererror; 5319d1ef6b2SChandu Babu N uint64_t rxundersize_g; 5329d1ef6b2SChandu Babu N uint64_t rxoversize_g; 5339d1ef6b2SChandu Babu N uint64_t rx64octets_gb; 5349d1ef6b2SChandu Babu N uint64_t rx65to127octets_gb; 5359d1ef6b2SChandu Babu N uint64_t rx128to255octets_gb; 5369d1ef6b2SChandu Babu N uint64_t rx256to511octets_gb; 5379d1ef6b2SChandu Babu N uint64_t rx512to1023octets_gb; 5389d1ef6b2SChandu Babu N uint64_t rx1024tomaxoctets_gb; 5399d1ef6b2SChandu Babu N uint64_t rxunicastframes_g; 5409d1ef6b2SChandu Babu N uint64_t rxlengtherror; 5419d1ef6b2SChandu Babu N uint64_t rxoutofrangetype; 5429d1ef6b2SChandu Babu N uint64_t rxpauseframes; 5439d1ef6b2SChandu Babu N uint64_t rxfifooverflow; 5449d1ef6b2SChandu Babu N uint64_t rxvlanframes_gb; 5459d1ef6b2SChandu Babu N uint64_t rxwatchdogerror; 5469d1ef6b2SChandu Babu N }; 5479d1ef6b2SChandu Babu N 548cf97f33eSAmaranath Somalapuram /* Flow control parameters */ 549cf97f33eSAmaranath Somalapuram struct xgbe_fc_info { 550cf97f33eSAmaranath Somalapuram uint32_t high_water[AXGBE_PRIORITY_QUEUES]; 551cf97f33eSAmaranath Somalapuram uint32_t low_water[AXGBE_PRIORITY_QUEUES]; 552cf97f33eSAmaranath Somalapuram uint16_t pause_time[AXGBE_PRIORITY_QUEUES]; 553cf97f33eSAmaranath Somalapuram uint16_t send_xon; 554cf97f33eSAmaranath Somalapuram enum rte_eth_fc_mode mode; 555cf97f33eSAmaranath Somalapuram uint8_t autoneg; 556cf97f33eSAmaranath Somalapuram }; 557cf97f33eSAmaranath Somalapuram 5588691632fSRavi Kumar /* 5598691632fSRavi Kumar * Structure to store private data for each port. 5608691632fSRavi Kumar */ 5618691632fSRavi Kumar struct axgbe_port { 5628691632fSRavi Kumar /* Ethdev where port belongs*/ 5638691632fSRavi Kumar struct rte_eth_dev *eth_dev; 5648691632fSRavi Kumar /* Pci dev info */ 5658691632fSRavi Kumar const struct rte_pci_device *pci_dev; 566572890efSRavi Kumar /* Version related data */ 567572890efSRavi Kumar struct axgbe_version_data *vdata; 568572890efSRavi Kumar 569572890efSRavi Kumar /* AXGMAC/XPCS related mmio registers */ 5707784d0d3SRavi Kumar void *xgmac_regs; /* AXGMAC CSRs */ 5717784d0d3SRavi Kumar void *xpcs_regs; /* XPCS MMD registers */ 5727784d0d3SRavi Kumar void *xprop_regs; /* AXGBE property registers */ 5737784d0d3SRavi Kumar void *xi2c_regs; /* AXGBE I2C CSRs */ 574572890efSRavi Kumar 575a3ec01b4SVenkat Kumar Ande /* Port property registers */ 576a3ec01b4SVenkat Kumar Ande unsigned int pp0; 577a3ec01b4SVenkat Kumar Ande unsigned int pp1; 578a3ec01b4SVenkat Kumar Ande unsigned int pp2; 579a3ec01b4SVenkat Kumar Ande unsigned int pp3; 580a3ec01b4SVenkat Kumar Ande unsigned int pp4; 581a3ec01b4SVenkat Kumar Ande 58200072056SRavi Kumar bool cdr_track_early; 583572890efSRavi Kumar /* XPCS indirect addressing lock */ 584572890efSRavi Kumar unsigned int xpcs_window_def_reg; 585572890efSRavi Kumar unsigned int xpcs_window_sel_reg; 586572890efSRavi Kumar unsigned int xpcs_window; 587572890efSRavi Kumar unsigned int xpcs_window_size; 588572890efSRavi Kumar unsigned int xpcs_window_mask; 589572890efSRavi Kumar 590572890efSRavi Kumar /* Flags representing axgbe_state */ 5914693ae4aSJoyce Kong uint32_t dev_state; 592572890efSRavi Kumar 593572890efSRavi Kumar struct axgbe_hw_if hw_if; 5944ac7516bSRavi Kumar struct axgbe_phy_if phy_if; 5954ac7516bSRavi Kumar struct axgbe_i2c_if i2c_if; 596572890efSRavi Kumar 597572890efSRavi Kumar /* AXI DMA settings */ 598572890efSRavi Kumar unsigned int coherent; 599572890efSRavi Kumar unsigned int axdomain; 600572890efSRavi Kumar unsigned int arcache; 601572890efSRavi Kumar unsigned int awcache; 602572890efSRavi Kumar 603572890efSRavi Kumar unsigned int tx_max_channel_count; 604572890efSRavi Kumar unsigned int rx_max_channel_count; 605572890efSRavi Kumar unsigned int channel_count; 606572890efSRavi Kumar unsigned int tx_ring_count; 607572890efSRavi Kumar unsigned int tx_desc_count; 608572890efSRavi Kumar unsigned int rx_ring_count; 609572890efSRavi Kumar unsigned int rx_desc_count; 610572890efSRavi Kumar 611572890efSRavi Kumar unsigned int tx_max_q_count; 612572890efSRavi Kumar unsigned int rx_max_q_count; 613572890efSRavi Kumar unsigned int tx_q_count; 614572890efSRavi Kumar unsigned int rx_q_count; 615572890efSRavi Kumar 616572890efSRavi Kumar /* Tx/Rx common settings */ 617572890efSRavi Kumar unsigned int pblx8; 618572890efSRavi Kumar 619572890efSRavi Kumar /* Tx settings */ 620572890efSRavi Kumar unsigned int tx_sf_mode; 621572890efSRavi Kumar unsigned int tx_threshold; 622572890efSRavi Kumar unsigned int tx_pbl; 623572890efSRavi Kumar unsigned int tx_osp_mode; 624572890efSRavi Kumar unsigned int tx_max_fifo_size; 62593bffd8fSBhagyada Modali unsigned int multi_segs_tx; 626*186f8e8cSJesna K E unsigned int tso_tx; 627572890efSRavi Kumar 628572890efSRavi Kumar /* Rx settings */ 629572890efSRavi Kumar unsigned int rx_sf_mode; 630572890efSRavi Kumar unsigned int rx_threshold; 631572890efSRavi Kumar unsigned int rx_pbl; 632572890efSRavi Kumar unsigned int rx_max_fifo_size; 633572890efSRavi Kumar unsigned int rx_buf_size; 634572890efSRavi Kumar 635572890efSRavi Kumar /* Device clocks */ 636572890efSRavi Kumar unsigned long sysclk_rate; 637572890efSRavi Kumar unsigned long ptpclk_rate; 638572890efSRavi Kumar 639572890efSRavi Kumar /* Keeps track of power mode */ 640572890efSRavi Kumar unsigned int power_down; 641572890efSRavi Kumar 642572890efSRavi Kumar /* Current PHY settings */ 643572890efSRavi Kumar int phy_link; 644572890efSRavi Kumar int phy_speed; 645572890efSRavi Kumar 646572890efSRavi Kumar pthread_mutex_t xpcs_mutex; 647572890efSRavi Kumar pthread_mutex_t i2c_mutex; 648572890efSRavi Kumar pthread_mutex_t an_mutex; 649572890efSRavi Kumar pthread_mutex_t phy_mutex; 650572890efSRavi Kumar 651572890efSRavi Kumar /* Flow control settings */ 652572890efSRavi Kumar unsigned int pause_autoneg; 653572890efSRavi Kumar unsigned int tx_pause; 654572890efSRavi Kumar unsigned int rx_pause; 655572890efSRavi Kumar unsigned int rx_rfa[AXGBE_MAX_QUEUES]; 656572890efSRavi Kumar unsigned int rx_rfd[AXGBE_MAX_QUEUES]; 657572890efSRavi Kumar unsigned int fifo; 658e0543d4eSAmaranath Somalapuram unsigned int pfc_map[AXGBE_MAX_QUEUES]; 659572890efSRavi Kumar 660572890efSRavi Kumar /* Receive Side Scaling settings */ 661572890efSRavi Kumar u8 rss_key[AXGBE_RSS_HASH_KEY_SIZE]; 662572890efSRavi Kumar uint32_t rss_table[AXGBE_RSS_MAX_TABLE_SIZE]; 663572890efSRavi Kumar uint32_t rss_options; 664572890efSRavi Kumar int rss_enable; 66576d7664dSChandu Babu N uint64_t rss_hf; 666572890efSRavi Kumar 667572890efSRavi Kumar /* Hardware features of the device */ 668572890efSRavi Kumar struct axgbe_hw_features hw_feat; 669572890efSRavi Kumar 6706d13ea8eSOlivier Matz struct rte_ether_addr mac_addr; 6714ac7516bSRavi Kumar 6729e890103SRavi Kumar /* Software Tx/Rx structure pointers*/ 6739e890103SRavi Kumar void **rx_queues; 6749e890103SRavi Kumar void **tx_queues; 6759e890103SRavi Kumar 6764ac7516bSRavi Kumar /* MDIO/PHY related settings */ 6774ac7516bSRavi Kumar unsigned int phy_started; 6784ac7516bSRavi Kumar void *phy_data; 6794ac7516bSRavi Kumar struct axgbe_phy phy; 6804ac7516bSRavi Kumar int mdio_mmd; 6814ac7516bSRavi Kumar unsigned long link_check; 6824ac7516bSRavi Kumar volatile int mdio_completion; 6834ac7516bSRavi Kumar 6844ac7516bSRavi Kumar unsigned int kr_redrv; 6854ac7516bSRavi Kumar 6867be78d02SJosh Soref /* Auto-negotiation state machine support */ 6874ac7516bSRavi Kumar unsigned int an_int; 6884ac7516bSRavi Kumar unsigned int an_status; 6894ac7516bSRavi Kumar enum axgbe_an an_result; 6904ac7516bSRavi Kumar enum axgbe_an an_state; 6914ac7516bSRavi Kumar enum axgbe_rx kr_state; 6924ac7516bSRavi Kumar enum axgbe_rx kx_state; 693a770d00aSVenkat Kumar Ande unsigned int an_again; 6944ac7516bSRavi Kumar unsigned int an_supported; 6954ac7516bSRavi Kumar unsigned int parallel_detect; 6964ac7516bSRavi Kumar unsigned int fec_ability; 6974ac7516bSRavi Kumar unsigned long an_start; 698323e8c91SVenkat Kumar Ande unsigned long kr_start_time; 6994ac7516bSRavi Kumar enum axgbe_an_mode an_mode; 7004ac7516bSRavi Kumar 7014ac7516bSRavi Kumar /* I2C support */ 7024ac7516bSRavi Kumar struct axgbe_i2c i2c; 7034ac7516bSRavi Kumar volatile int i2c_complete; 7049e890103SRavi Kumar 7059e890103SRavi Kumar /* CRC stripping by H/w for Rx packet*/ 7069e890103SRavi Kumar int crc_strip_enable; 7079e890103SRavi Kumar /* csum enable to hardware */ 7089e890103SRavi Kumar uint32_t rx_csum_enable; 7099d1ef6b2SChandu Babu N 7109d1ef6b2SChandu Babu N struct axgbe_mmc_stats mmc_stats; 711cf97f33eSAmaranath Somalapuram struct xgbe_fc_info fc; 712e01d9b2eSChandu Babu N 713e01d9b2eSChandu Babu N /* Hash filtering */ 714e01d9b2eSChandu Babu N unsigned int hash_table_shift; 715e01d9b2eSChandu Babu N unsigned int hash_table_count; 716e01d9b2eSChandu Babu N unsigned int uc_hash_mac_addr; 717e01d9b2eSChandu Babu N unsigned int uc_hash_table[AXGBE_MAC_HASH_TABLE_SIZE]; 718e0444948SSelwin Sebastian 71986578516SGirish Nandibasappa /* Filtering support */ 72086578516SGirish Nandibasappa unsigned long active_vlans[VLAN_TABLE_SIZE]; 72186578516SGirish Nandibasappa 722e0444948SSelwin Sebastian /* For IEEE1588 PTP */ 723e0444948SSelwin Sebastian struct rte_timecounter systime_tc; 724e0444948SSelwin Sebastian struct rte_timecounter tx_tstamp; 725e0444948SSelwin Sebastian unsigned int tstamp_addend; 726e0444948SSelwin Sebastian 7276c04898fSVenkat Kumar Ande bool en_rx_adap; 7286c04898fSVenkat Kumar Ande int rx_adapt_retries; 7296c04898fSVenkat Kumar Ande bool rx_adapt_done; 7306c04898fSVenkat Kumar Ande bool mode_set; 7318691632fSRavi Kumar }; 7328691632fSRavi Kumar 733572890efSRavi Kumar void axgbe_init_function_ptrs_dev(struct axgbe_hw_if *hw_if); 7344ac7516bSRavi Kumar void axgbe_init_function_ptrs_phy(struct axgbe_phy_if *phy_if); 7354ac7516bSRavi Kumar void axgbe_init_function_ptrs_phy_v2(struct axgbe_phy_if *phy_if); 7364ac7516bSRavi Kumar void axgbe_init_function_ptrs_i2c(struct axgbe_i2c_if *i2c_if); 73749a5e622SChandu Babu N void axgbe_set_mac_addn_addr(struct axgbe_port *pdata, u8 *addr, 73849a5e622SChandu Babu N uint32_t index); 739e01d9b2eSChandu Babu N void axgbe_set_mac_hash_table(struct axgbe_port *pdata, u8 *addr, bool add); 74076d7664dSChandu Babu N int axgbe_write_rss_lookup_table(struct axgbe_port *pdata); 74176d7664dSChandu Babu N int axgbe_write_rss_hash_key(struct axgbe_port *pdata); 7424ac7516bSRavi Kumar 7438691632fSRavi Kumar #endif /* RTE_ETH_AXGBE_H_ */ 744