xref: /dpdk/drivers/net/axgbe/axgbe_ethdev.h (revision 186f8e8c336158942d9dceae03db89266dddaa97)
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