xref: /f-stack/dpdk/drivers/net/axgbe/axgbe_ethdev.h (revision 2d9fd380)
1d30ea906Sjfb8856606 /*   SPDX-License-Identifier: BSD-3-Clause
2d30ea906Sjfb8856606  *   Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved.
3d30ea906Sjfb8856606  *   Copyright(c) 2018 Synopsys, Inc. All rights reserved.
4d30ea906Sjfb8856606  */
5d30ea906Sjfb8856606 
6d30ea906Sjfb8856606 #ifndef RTE_ETH_AXGBE_H_
7d30ea906Sjfb8856606 #define RTE_ETH_AXGBE_H_
8d30ea906Sjfb8856606 
9d30ea906Sjfb8856606 #include <rte_mempool.h>
10d30ea906Sjfb8856606 #include <rte_lcore.h>
11d30ea906Sjfb8856606 #include "axgbe_common.h"
12*2d9fd380Sjfb8856606 #include "rte_time.h"
13d30ea906Sjfb8856606 
14d30ea906Sjfb8856606 #define IRQ				0xff
15d30ea906Sjfb8856606 #define VLAN_HLEN			4
16d30ea906Sjfb8856606 
17d30ea906Sjfb8856606 #define AXGBE_TX_MAX_BUF_SIZE		(0x3fff & ~(64 - 1))
18d30ea906Sjfb8856606 #define AXGBE_RX_MAX_BUF_SIZE		(0x3fff & ~(64 - 1))
194418919fSjohnjiang #define AXGBE_RX_MIN_BUF_SIZE		(RTE_ETHER_MAX_LEN + VLAN_HLEN)
20*2d9fd380Sjfb8856606 #define AXGBE_MAX_MAC_ADDRS		32
21*2d9fd380Sjfb8856606 #define AXGBE_MAX_HASH_MAC_ADDRS	256
22d30ea906Sjfb8856606 
23d30ea906Sjfb8856606 #define AXGBE_RX_BUF_ALIGN		64
24d30ea906Sjfb8856606 
25d30ea906Sjfb8856606 #define AXGBE_MAX_DMA_CHANNELS		16
26d30ea906Sjfb8856606 #define AXGBE_MAX_QUEUES		16
27d30ea906Sjfb8856606 #define AXGBE_PRIORITY_QUEUES		8
28d30ea906Sjfb8856606 #define AXGBE_DMA_STOP_TIMEOUT		1
29d30ea906Sjfb8856606 
30d30ea906Sjfb8856606 /* DMA cache settings - Outer sharable, write-back, write-allocate */
31d30ea906Sjfb8856606 #define AXGBE_DMA_OS_AXDOMAIN		0x2
32d30ea906Sjfb8856606 #define AXGBE_DMA_OS_ARCACHE		0xb
33d30ea906Sjfb8856606 #define AXGBE_DMA_OS_AWCACHE		0xf
34d30ea906Sjfb8856606 
35d30ea906Sjfb8856606 /* DMA cache settings - System, no caches used */
36d30ea906Sjfb8856606 #define AXGBE_DMA_SYS_AXDOMAIN		0x3
37d30ea906Sjfb8856606 #define AXGBE_DMA_SYS_ARCACHE		0x0
38d30ea906Sjfb8856606 #define AXGBE_DMA_SYS_AWCACHE		0x0
39d30ea906Sjfb8856606 
40d30ea906Sjfb8856606 /* DMA channel interrupt modes */
41d30ea906Sjfb8856606 #define AXGBE_IRQ_MODE_EDGE		0
42d30ea906Sjfb8856606 #define AXGBE_IRQ_MODE_LEVEL		1
43d30ea906Sjfb8856606 
44d30ea906Sjfb8856606 #define AXGBE_DMA_INTERRUPT_MASK	0x31c7
45d30ea906Sjfb8856606 
46d30ea906Sjfb8856606 #define AXGMAC_MIN_PACKET		60
47d30ea906Sjfb8856606 #define AXGMAC_STD_PACKET_MTU		1500
48d30ea906Sjfb8856606 #define AXGMAC_MAX_STD_PACKET		1518
49d30ea906Sjfb8856606 #define AXGMAC_JUMBO_PACKET_MTU		9000
50d30ea906Sjfb8856606 #define AXGMAC_MAX_JUMBO_PACKET		9018
51d30ea906Sjfb8856606 /* Inter-frame gap + preamble */
52d30ea906Sjfb8856606 #define AXGMAC_ETH_PREAMBLE		(12 + 8)
53d30ea906Sjfb8856606 
54d30ea906Sjfb8856606 #define AXGMAC_PFC_DATA_LEN		46
55d30ea906Sjfb8856606 #define AXGMAC_PFC_DELAYS		14000
56d30ea906Sjfb8856606 
57d30ea906Sjfb8856606 /* PCI BAR mapping */
58d30ea906Sjfb8856606 #define AXGBE_AXGMAC_BAR		0
59d30ea906Sjfb8856606 #define AXGBE_XPCS_BAR			1
60d30ea906Sjfb8856606 #define AXGBE_MAC_PROP_OFFSET		0x1d000
61d30ea906Sjfb8856606 #define AXGBE_I2C_CTRL_OFFSET		0x1e000
62d30ea906Sjfb8856606 
63d30ea906Sjfb8856606 /* PCI clock frequencies */
64d30ea906Sjfb8856606 #define AXGBE_V2_DMA_CLOCK_FREQ		500000000
65d30ea906Sjfb8856606 #define AXGBE_V2_PTP_CLOCK_FREQ		125000000
66d30ea906Sjfb8856606 
67*2d9fd380Sjfb8856606 /* Timestamp support - values based on 50MHz PTP clock
68*2d9fd380Sjfb8856606  *   50MHz => 20 nsec
69*2d9fd380Sjfb8856606  */
70*2d9fd380Sjfb8856606 #define AXGBE_TSTAMP_SSINC       20
71*2d9fd380Sjfb8856606 #define AXGBE_TSTAMP_SNSINC      0
72*2d9fd380Sjfb8856606 #define AXGBE_CYCLECOUNTER_MASK 0xffffffffffffffffULL
73*2d9fd380Sjfb8856606 
74d30ea906Sjfb8856606 #define AXGMAC_FIFO_MIN_ALLOC		2048
75d30ea906Sjfb8856606 #define AXGMAC_FIFO_UNIT		256
76d30ea906Sjfb8856606 #define AXGMAC_FIFO_ALIGN(_x)                            \
77d30ea906Sjfb8856606 	(((_x) + AXGMAC_FIFO_UNIT - 1) & ~(XGMAC_FIFO_UNIT - 1))
78d30ea906Sjfb8856606 #define AXGMAC_FIFO_FC_OFF		2048
79d30ea906Sjfb8856606 #define AXGMAC_FIFO_FC_MIN		4096
80d30ea906Sjfb8856606 
81d30ea906Sjfb8856606 #define AXGBE_TC_MIN_QUANTUM		10
82d30ea906Sjfb8856606 
83d30ea906Sjfb8856606 /* Flow control queue count */
84d30ea906Sjfb8856606 #define AXGMAC_MAX_FLOW_CONTROL_QUEUES	8
85d30ea906Sjfb8856606 
86d30ea906Sjfb8856606 /* Flow control threshold units */
87d30ea906Sjfb8856606 #define AXGMAC_FLOW_CONTROL_UNIT	512
88d30ea906Sjfb8856606 #define AXGMAC_FLOW_CONTROL_ALIGN(_x)				\
89d30ea906Sjfb8856606 	(((_x) + AXGMAC_FLOW_CONTROL_UNIT - 1) &		\
90d30ea906Sjfb8856606 	~(AXGMAC_FLOW_CONTROL_UNIT - 1))
91d30ea906Sjfb8856606 #define AXGMAC_FLOW_CONTROL_VALUE(_x)				\
92d30ea906Sjfb8856606 	(((_x) < 1024) ? 0 : ((_x) / AXGMAC_FLOW_CONTROL_UNIT) - 2)
93d30ea906Sjfb8856606 #define AXGMAC_FLOW_CONTROL_MAX		33280
94d30ea906Sjfb8856606 
95*2d9fd380Sjfb8856606 /* Maximum MAC address hash table size (256 bits = 8 dword) */
96d30ea906Sjfb8856606 #define AXGBE_MAC_HASH_TABLE_SIZE	8
97d30ea906Sjfb8856606 
98d30ea906Sjfb8856606 /* Receive Side Scaling */
99d30ea906Sjfb8856606 #define AXGBE_RSS_OFFLOAD  ( \
100d30ea906Sjfb8856606 	ETH_RSS_IPV4 | \
101d30ea906Sjfb8856606 	ETH_RSS_NONFRAG_IPV4_TCP | \
102d30ea906Sjfb8856606 	ETH_RSS_NONFRAG_IPV4_UDP | \
103d30ea906Sjfb8856606 	ETH_RSS_IPV6 | \
104d30ea906Sjfb8856606 	ETH_RSS_NONFRAG_IPV6_TCP | \
105d30ea906Sjfb8856606 	ETH_RSS_NONFRAG_IPV6_UDP)
106d30ea906Sjfb8856606 
107d30ea906Sjfb8856606 #define AXGBE_RSS_HASH_KEY_SIZE		40
108d30ea906Sjfb8856606 #define AXGBE_RSS_MAX_TABLE_SIZE	256
109d30ea906Sjfb8856606 #define AXGBE_RSS_LOOKUP_TABLE_TYPE	0
110d30ea906Sjfb8856606 #define AXGBE_RSS_HASH_KEY_TYPE		1
111d30ea906Sjfb8856606 
112d30ea906Sjfb8856606 /* Auto-negotiation */
113d30ea906Sjfb8856606 #define AXGBE_AN_MS_TIMEOUT		500
114d30ea906Sjfb8856606 #define AXGBE_LINK_TIMEOUT		5
115d30ea906Sjfb8856606 
116d30ea906Sjfb8856606 #define AXGBE_SGMII_AN_LINK_STATUS	BIT(1)
117d30ea906Sjfb8856606 #define AXGBE_SGMII_AN_LINK_SPEED	(BIT(2) | BIT(3))
118d30ea906Sjfb8856606 #define AXGBE_SGMII_AN_LINK_SPEED_100	0x04
119d30ea906Sjfb8856606 #define AXGBE_SGMII_AN_LINK_SPEED_1000	0x08
120d30ea906Sjfb8856606 #define AXGBE_SGMII_AN_LINK_DUPLEX	BIT(4)
121d30ea906Sjfb8856606 
122d30ea906Sjfb8856606 /* ECC correctable error notification window (seconds) */
123d30ea906Sjfb8856606 #define AXGBE_ECC_LIMIT			60
124d30ea906Sjfb8856606 
125d30ea906Sjfb8856606 /* MDIO port types */
126d30ea906Sjfb8856606 #define AXGMAC_MAX_C22_PORT		3
127d30ea906Sjfb8856606 
128d30ea906Sjfb8856606 /* Helper macro for descriptor handling
129d30ea906Sjfb8856606  *  Always use AXGBE_GET_DESC_DATA to access the descriptor data
130d30ea906Sjfb8856606  *  since the index is free-running and needs to be and-ed
131d30ea906Sjfb8856606  *  with the descriptor count value of the ring to index to
132d30ea906Sjfb8856606  *  the proper descriptor data.
133d30ea906Sjfb8856606  */
134d30ea906Sjfb8856606 #define AXGBE_GET_DESC_DATA(_ring, _idx)			\
135d30ea906Sjfb8856606 	((_ring)->rdata +					\
136d30ea906Sjfb8856606 	 ((_idx) & ((_ring)->rdesc_count - 1)))
137d30ea906Sjfb8856606 
138d30ea906Sjfb8856606 struct axgbe_port;
139d30ea906Sjfb8856606 
140d30ea906Sjfb8856606 enum axgbe_state {
141d30ea906Sjfb8856606 	AXGBE_DOWN,
142d30ea906Sjfb8856606 	AXGBE_LINK_INIT,
143d30ea906Sjfb8856606 	AXGBE_LINK_ERR,
144d30ea906Sjfb8856606 	AXGBE_STOPPED,
145d30ea906Sjfb8856606 };
146d30ea906Sjfb8856606 
147d30ea906Sjfb8856606 enum axgbe_int {
148d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_TI,
149d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_TPS,
150d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_TBU,
151d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_RI,
152d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_RBU,
153d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_RPS,
154d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_TI_RI,
155d30ea906Sjfb8856606 	AXGMAC_INT_DMA_CH_SR_FBE,
156d30ea906Sjfb8856606 	AXGMAC_INT_DMA_ALL,
157d30ea906Sjfb8856606 };
158d30ea906Sjfb8856606 
159d30ea906Sjfb8856606 enum axgbe_int_state {
160d30ea906Sjfb8856606 	AXGMAC_INT_STATE_SAVE,
161d30ea906Sjfb8856606 	AXGMAC_INT_STATE_RESTORE,
162d30ea906Sjfb8856606 };
163d30ea906Sjfb8856606 
164d30ea906Sjfb8856606 enum axgbe_ecc_sec {
165d30ea906Sjfb8856606 	AXGBE_ECC_SEC_TX,
166d30ea906Sjfb8856606 	AXGBE_ECC_SEC_RX,
167d30ea906Sjfb8856606 	AXGBE_ECC_SEC_DESC,
168d30ea906Sjfb8856606 };
169d30ea906Sjfb8856606 
170d30ea906Sjfb8856606 enum axgbe_speed {
171d30ea906Sjfb8856606 	AXGBE_SPEED_1000 = 0,
172d30ea906Sjfb8856606 	AXGBE_SPEED_2500,
173d30ea906Sjfb8856606 	AXGBE_SPEED_10000,
174d30ea906Sjfb8856606 	AXGBE_SPEEDS,
175d30ea906Sjfb8856606 };
176d30ea906Sjfb8856606 
177d30ea906Sjfb8856606 enum axgbe_xpcs_access {
178d30ea906Sjfb8856606 	AXGBE_XPCS_ACCESS_V1 = 0,
179d30ea906Sjfb8856606 	AXGBE_XPCS_ACCESS_V2,
180d30ea906Sjfb8856606 };
181d30ea906Sjfb8856606 
182d30ea906Sjfb8856606 enum axgbe_an_mode {
183d30ea906Sjfb8856606 	AXGBE_AN_MODE_CL73 = 0,
184d30ea906Sjfb8856606 	AXGBE_AN_MODE_CL73_REDRV,
185d30ea906Sjfb8856606 	AXGBE_AN_MODE_CL37,
186d30ea906Sjfb8856606 	AXGBE_AN_MODE_CL37_SGMII,
187d30ea906Sjfb8856606 	AXGBE_AN_MODE_NONE,
188d30ea906Sjfb8856606 };
189d30ea906Sjfb8856606 
190d30ea906Sjfb8856606 enum axgbe_an {
191d30ea906Sjfb8856606 	AXGBE_AN_READY = 0,
192d30ea906Sjfb8856606 	AXGBE_AN_PAGE_RECEIVED,
193d30ea906Sjfb8856606 	AXGBE_AN_INCOMPAT_LINK,
194d30ea906Sjfb8856606 	AXGBE_AN_COMPLETE,
195d30ea906Sjfb8856606 	AXGBE_AN_NO_LINK,
196d30ea906Sjfb8856606 	AXGBE_AN_ERROR,
197d30ea906Sjfb8856606 };
198d30ea906Sjfb8856606 
199d30ea906Sjfb8856606 enum axgbe_rx {
200d30ea906Sjfb8856606 	AXGBE_RX_BPA = 0,
201d30ea906Sjfb8856606 	AXGBE_RX_XNP,
202d30ea906Sjfb8856606 	AXGBE_RX_COMPLETE,
203d30ea906Sjfb8856606 	AXGBE_RX_ERROR,
204d30ea906Sjfb8856606 };
205d30ea906Sjfb8856606 
206d30ea906Sjfb8856606 enum axgbe_mode {
207d30ea906Sjfb8856606 	AXGBE_MODE_KX_1000 = 0,
208d30ea906Sjfb8856606 	AXGBE_MODE_KX_2500,
209d30ea906Sjfb8856606 	AXGBE_MODE_KR,
210d30ea906Sjfb8856606 	AXGBE_MODE_X,
211d30ea906Sjfb8856606 	AXGBE_MODE_SGMII_100,
212d30ea906Sjfb8856606 	AXGBE_MODE_SGMII_1000,
213d30ea906Sjfb8856606 	AXGBE_MODE_SFI,
214d30ea906Sjfb8856606 	AXGBE_MODE_UNKNOWN,
215d30ea906Sjfb8856606 };
216d30ea906Sjfb8856606 
217d30ea906Sjfb8856606 enum axgbe_speedset {
218d30ea906Sjfb8856606 	AXGBE_SPEEDSET_1000_10000 = 0,
219d30ea906Sjfb8856606 	AXGBE_SPEEDSET_2500_10000,
220d30ea906Sjfb8856606 };
221d30ea906Sjfb8856606 
222d30ea906Sjfb8856606 enum axgbe_mdio_mode {
223d30ea906Sjfb8856606 	AXGBE_MDIO_MODE_NONE = 0,
224d30ea906Sjfb8856606 	AXGBE_MDIO_MODE_CL22,
225d30ea906Sjfb8856606 	AXGBE_MDIO_MODE_CL45,
226d30ea906Sjfb8856606 };
227d30ea906Sjfb8856606 
228d30ea906Sjfb8856606 struct axgbe_phy {
229d30ea906Sjfb8856606 	uint32_t supported;
230d30ea906Sjfb8856606 	uint32_t advertising;
231d30ea906Sjfb8856606 	uint32_t lp_advertising;
232d30ea906Sjfb8856606 
233d30ea906Sjfb8856606 	int address;
234d30ea906Sjfb8856606 
235d30ea906Sjfb8856606 	int autoneg;
236d30ea906Sjfb8856606 	int speed;
237d30ea906Sjfb8856606 	int duplex;
238d30ea906Sjfb8856606 
239d30ea906Sjfb8856606 	int link;
240d30ea906Sjfb8856606 
241d30ea906Sjfb8856606 	int pause_autoneg;
242d30ea906Sjfb8856606 	int tx_pause;
243d30ea906Sjfb8856606 	int rx_pause;
244d30ea906Sjfb8856606 };
245d30ea906Sjfb8856606 
246d30ea906Sjfb8856606 enum axgbe_i2c_cmd {
247d30ea906Sjfb8856606 	AXGBE_I2C_CMD_READ = 0,
248d30ea906Sjfb8856606 	AXGBE_I2C_CMD_WRITE,
249d30ea906Sjfb8856606 };
250d30ea906Sjfb8856606 
251d30ea906Sjfb8856606 struct axgbe_i2c_op {
252d30ea906Sjfb8856606 	enum axgbe_i2c_cmd cmd;
253d30ea906Sjfb8856606 
254d30ea906Sjfb8856606 	unsigned int target;
255d30ea906Sjfb8856606 
256d30ea906Sjfb8856606 	uint8_t *buf;
257d30ea906Sjfb8856606 	unsigned int len;
258d30ea906Sjfb8856606 };
259d30ea906Sjfb8856606 
260d30ea906Sjfb8856606 struct axgbe_i2c_op_state {
261d30ea906Sjfb8856606 	struct axgbe_i2c_op *op;
262d30ea906Sjfb8856606 
263d30ea906Sjfb8856606 	unsigned int tx_len;
264d30ea906Sjfb8856606 	unsigned char *tx_buf;
265d30ea906Sjfb8856606 
266d30ea906Sjfb8856606 	unsigned int rx_len;
267d30ea906Sjfb8856606 	unsigned char *rx_buf;
268d30ea906Sjfb8856606 
269d30ea906Sjfb8856606 	unsigned int tx_abort_source;
270d30ea906Sjfb8856606 
271d30ea906Sjfb8856606 	int ret;
272d30ea906Sjfb8856606 };
273d30ea906Sjfb8856606 
274d30ea906Sjfb8856606 struct axgbe_i2c {
275d30ea906Sjfb8856606 	unsigned int started;
276d30ea906Sjfb8856606 	unsigned int max_speed_mode;
277d30ea906Sjfb8856606 	unsigned int rx_fifo_size;
278d30ea906Sjfb8856606 	unsigned int tx_fifo_size;
279d30ea906Sjfb8856606 
280d30ea906Sjfb8856606 	struct axgbe_i2c_op_state op_state;
281d30ea906Sjfb8856606 };
282d30ea906Sjfb8856606 
283d30ea906Sjfb8856606 struct axgbe_hw_if {
284d30ea906Sjfb8856606 	void (*config_flow_control)(struct axgbe_port *);
285d30ea906Sjfb8856606 	int (*config_rx_mode)(struct axgbe_port *);
286d30ea906Sjfb8856606 
287d30ea906Sjfb8856606 	int (*init)(struct axgbe_port *);
288d30ea906Sjfb8856606 
289d30ea906Sjfb8856606 	int (*read_mmd_regs)(struct axgbe_port *, int, int);
290d30ea906Sjfb8856606 	void (*write_mmd_regs)(struct axgbe_port *, int, int, int);
291d30ea906Sjfb8856606 	int (*set_speed)(struct axgbe_port *, int);
292d30ea906Sjfb8856606 
293d30ea906Sjfb8856606 	int (*set_ext_mii_mode)(struct axgbe_port *, unsigned int,
294d30ea906Sjfb8856606 				enum axgbe_mdio_mode);
295d30ea906Sjfb8856606 	int (*read_ext_mii_regs)(struct axgbe_port *, int, int);
296d30ea906Sjfb8856606 	int (*write_ext_mii_regs)(struct axgbe_port *, int, int, uint16_t);
297d30ea906Sjfb8856606 
298d30ea906Sjfb8856606 	/* For FLOW ctrl */
299d30ea906Sjfb8856606 	int (*config_tx_flow_control)(struct axgbe_port *);
300d30ea906Sjfb8856606 	int (*config_rx_flow_control)(struct axgbe_port *);
301d30ea906Sjfb8856606 
302d30ea906Sjfb8856606 	int (*exit)(struct axgbe_port *);
303d30ea906Sjfb8856606 };
304d30ea906Sjfb8856606 
305d30ea906Sjfb8856606 /* This structure represents implementation specific routines for an
306d30ea906Sjfb8856606  * implementation of a PHY. All routines are required unless noted below.
307d30ea906Sjfb8856606  *   Optional routines:
308d30ea906Sjfb8856606  *     kr_training_pre, kr_training_post
309d30ea906Sjfb8856606  */
310d30ea906Sjfb8856606 struct axgbe_phy_impl_if {
311d30ea906Sjfb8856606 	/* Perform Setup/teardown actions */
312d30ea906Sjfb8856606 	int (*init)(struct axgbe_port *);
313d30ea906Sjfb8856606 	void (*exit)(struct axgbe_port *);
314d30ea906Sjfb8856606 
315d30ea906Sjfb8856606 	/* Perform start/stop specific actions */
316d30ea906Sjfb8856606 	int (*reset)(struct axgbe_port *);
317d30ea906Sjfb8856606 	int (*start)(struct axgbe_port *);
318d30ea906Sjfb8856606 	void (*stop)(struct axgbe_port *);
319d30ea906Sjfb8856606 
320d30ea906Sjfb8856606 	/* Return the link status */
321d30ea906Sjfb8856606 	int (*link_status)(struct axgbe_port *, int *);
322d30ea906Sjfb8856606 
323d30ea906Sjfb8856606 	/* Indicate if a particular speed is valid */
324d30ea906Sjfb8856606 	int (*valid_speed)(struct axgbe_port *, int);
325d30ea906Sjfb8856606 
326d30ea906Sjfb8856606 	/* Check if the specified mode can/should be used */
327d30ea906Sjfb8856606 	bool (*use_mode)(struct axgbe_port *, enum axgbe_mode);
328d30ea906Sjfb8856606 	/* Switch the PHY into various modes */
329d30ea906Sjfb8856606 	void (*set_mode)(struct axgbe_port *, enum axgbe_mode);
330d30ea906Sjfb8856606 	/* Retrieve mode needed for a specific speed */
331d30ea906Sjfb8856606 	enum axgbe_mode (*get_mode)(struct axgbe_port *, int);
332d30ea906Sjfb8856606 	/* Retrieve new/next mode when trying to auto-negotiate */
333d30ea906Sjfb8856606 	enum axgbe_mode (*switch_mode)(struct axgbe_port *);
334d30ea906Sjfb8856606 	/* Retrieve current mode */
335d30ea906Sjfb8856606 	enum axgbe_mode (*cur_mode)(struct axgbe_port *);
336d30ea906Sjfb8856606 
337d30ea906Sjfb8856606 	/* Retrieve current auto-negotiation mode */
338d30ea906Sjfb8856606 	enum axgbe_an_mode (*an_mode)(struct axgbe_port *);
339d30ea906Sjfb8856606 
340d30ea906Sjfb8856606 	/* Configure auto-negotiation settings */
341d30ea906Sjfb8856606 	int (*an_config)(struct axgbe_port *);
342d30ea906Sjfb8856606 
343d30ea906Sjfb8856606 	/* Set/override auto-negotiation advertisement settings */
344d30ea906Sjfb8856606 	unsigned int (*an_advertising)(struct axgbe_port *port);
345d30ea906Sjfb8856606 
346d30ea906Sjfb8856606 	/* Process results of auto-negotiation */
347d30ea906Sjfb8856606 	enum axgbe_mode (*an_outcome)(struct axgbe_port *);
348d30ea906Sjfb8856606 
349d30ea906Sjfb8856606 	/* Pre/Post auto-negotiation support */
350d30ea906Sjfb8856606 	void (*an_pre)(struct axgbe_port *port);
351d30ea906Sjfb8856606 	void (*an_post)(struct axgbe_port *port);
352d30ea906Sjfb8856606 
353d30ea906Sjfb8856606 	/* Pre/Post KR training enablement support */
354d30ea906Sjfb8856606 	void (*kr_training_pre)(struct axgbe_port *);
355d30ea906Sjfb8856606 	void (*kr_training_post)(struct axgbe_port *);
356d30ea906Sjfb8856606 };
357d30ea906Sjfb8856606 
358d30ea906Sjfb8856606 struct axgbe_phy_if {
359d30ea906Sjfb8856606 	/* For PHY setup/teardown */
360d30ea906Sjfb8856606 	int (*phy_init)(struct axgbe_port *);
361d30ea906Sjfb8856606 	void (*phy_exit)(struct axgbe_port *);
362d30ea906Sjfb8856606 
363d30ea906Sjfb8856606 	/* For PHY support when setting device up/down */
364d30ea906Sjfb8856606 	int (*phy_reset)(struct axgbe_port *);
365d30ea906Sjfb8856606 	int (*phy_start)(struct axgbe_port *);
366d30ea906Sjfb8856606 	void (*phy_stop)(struct axgbe_port *);
367d30ea906Sjfb8856606 
368d30ea906Sjfb8856606 	/* For PHY support while device is up */
369d30ea906Sjfb8856606 	void (*phy_status)(struct axgbe_port *);
370d30ea906Sjfb8856606 	int (*phy_config_aneg)(struct axgbe_port *);
371d30ea906Sjfb8856606 
372d30ea906Sjfb8856606 	/* For PHY settings validation */
373d30ea906Sjfb8856606 	int (*phy_valid_speed)(struct axgbe_port *, int);
374d30ea906Sjfb8856606 	/* For single interrupt support */
375d30ea906Sjfb8856606 	void (*an_isr)(struct axgbe_port *);
376d30ea906Sjfb8856606 	/* PHY implementation specific services */
377d30ea906Sjfb8856606 	struct axgbe_phy_impl_if phy_impl;
378d30ea906Sjfb8856606 };
379d30ea906Sjfb8856606 
380d30ea906Sjfb8856606 struct axgbe_i2c_if {
381d30ea906Sjfb8856606 	/* For initial I2C setup */
382d30ea906Sjfb8856606 	int (*i2c_init)(struct axgbe_port *);
383d30ea906Sjfb8856606 
384d30ea906Sjfb8856606 	/* For I2C support when setting device up/down */
385d30ea906Sjfb8856606 	int (*i2c_start)(struct axgbe_port *);
386d30ea906Sjfb8856606 	void (*i2c_stop)(struct axgbe_port *);
387d30ea906Sjfb8856606 
388d30ea906Sjfb8856606 	/* For performing I2C operations */
389d30ea906Sjfb8856606 	int (*i2c_xfer)(struct axgbe_port *, struct axgbe_i2c_op *);
390d30ea906Sjfb8856606 };
391d30ea906Sjfb8856606 
392d30ea906Sjfb8856606 /* This structure contains flags that indicate what hardware features
393d30ea906Sjfb8856606  * or configurations are present in the device.
394d30ea906Sjfb8856606  */
395d30ea906Sjfb8856606 struct axgbe_hw_features {
396d30ea906Sjfb8856606 	/* HW Version */
397d30ea906Sjfb8856606 	unsigned int version;
398d30ea906Sjfb8856606 
399d30ea906Sjfb8856606 	/* HW Feature Register0 */
400d30ea906Sjfb8856606 	unsigned int gmii;		/* 1000 Mbps support */
401d30ea906Sjfb8856606 	unsigned int vlhash;		/* VLAN Hash Filter */
402d30ea906Sjfb8856606 	unsigned int sma;		/* SMA(MDIO) Interface */
403d30ea906Sjfb8856606 	unsigned int rwk;		/* PMT remote wake-up packet */
404d30ea906Sjfb8856606 	unsigned int mgk;		/* PMT magic packet */
405d30ea906Sjfb8856606 	unsigned int mmc;		/* RMON module */
406d30ea906Sjfb8856606 	unsigned int aoe;		/* ARP Offload */
407d30ea906Sjfb8856606 	unsigned int ts;		/* IEEE 1588-2008 Advanced Timestamp */
408d30ea906Sjfb8856606 	unsigned int eee;		/* Energy Efficient Ethernet */
409d30ea906Sjfb8856606 	unsigned int tx_coe;		/* Tx Checksum Offload */
410d30ea906Sjfb8856606 	unsigned int rx_coe;		/* Rx Checksum Offload */
411d30ea906Sjfb8856606 	unsigned int addn_mac;		/* Additional MAC Addresses */
412d30ea906Sjfb8856606 	unsigned int ts_src;		/* Timestamp Source */
413d30ea906Sjfb8856606 	unsigned int sa_vlan_ins;	/* Source Address or VLAN Insertion */
414d30ea906Sjfb8856606 
415d30ea906Sjfb8856606 	/* HW Feature Register1 */
416d30ea906Sjfb8856606 	unsigned int rx_fifo_size;	/* MTL Receive FIFO Size */
417d30ea906Sjfb8856606 	unsigned int tx_fifo_size;	/* MTL Transmit FIFO Size */
418d30ea906Sjfb8856606 	unsigned int adv_ts_hi;		/* Advance Timestamping High Word */
419d30ea906Sjfb8856606 	unsigned int dma_width;		/* DMA width */
420d30ea906Sjfb8856606 	unsigned int dcb;		/* DCB Feature */
421d30ea906Sjfb8856606 	unsigned int sph;		/* Split Header Feature */
422d30ea906Sjfb8856606 	unsigned int tso;		/* TCP Segmentation Offload */
423d30ea906Sjfb8856606 	unsigned int dma_debug;		/* DMA Debug Registers */
424d30ea906Sjfb8856606 	unsigned int rss;		/* Receive Side Scaling */
425d30ea906Sjfb8856606 	unsigned int tc_cnt;		/* Number of Traffic Classes */
426d30ea906Sjfb8856606 	unsigned int hash_table_size;	/* Hash Table Size */
427d30ea906Sjfb8856606 	unsigned int l3l4_filter_num;	/* Number of L3-L4 Filters */
428d30ea906Sjfb8856606 
429d30ea906Sjfb8856606 	/* HW Feature Register2 */
430d30ea906Sjfb8856606 	unsigned int rx_q_cnt;		/* Number of MTL Receive Queues */
431d30ea906Sjfb8856606 	unsigned int tx_q_cnt;		/* Number of MTL Transmit Queues */
432d30ea906Sjfb8856606 	unsigned int rx_ch_cnt;		/* Number of DMA Receive Channels */
433d30ea906Sjfb8856606 	unsigned int tx_ch_cnt;		/* Number of DMA Transmit Channels */
434d30ea906Sjfb8856606 	unsigned int pps_out_num;	/* Number of PPS outputs */
435d30ea906Sjfb8856606 	unsigned int aux_snap_num;	/* Number of Aux snapshot inputs */
436d30ea906Sjfb8856606 };
437d30ea906Sjfb8856606 
438d30ea906Sjfb8856606 struct axgbe_version_data {
439d30ea906Sjfb8856606 	void (*init_function_ptrs_phy_impl)(struct axgbe_phy_if *);
440d30ea906Sjfb8856606 	enum axgbe_xpcs_access xpcs_access;
441d30ea906Sjfb8856606 	unsigned int mmc_64bit;
442d30ea906Sjfb8856606 	unsigned int tx_max_fifo_size;
443d30ea906Sjfb8856606 	unsigned int rx_max_fifo_size;
444d30ea906Sjfb8856606 	unsigned int tx_tstamp_workaround;
445d30ea906Sjfb8856606 	unsigned int ecc_support;
446d30ea906Sjfb8856606 	unsigned int i2c_support;
447d30ea906Sjfb8856606 	unsigned int an_cdr_workaround;
448d30ea906Sjfb8856606 };
449d30ea906Sjfb8856606 
450*2d9fd380Sjfb8856606 struct axgbe_mmc_stats {
451*2d9fd380Sjfb8856606 	/* Tx Stats */
452*2d9fd380Sjfb8856606 	uint64_t txoctetcount_gb;
453*2d9fd380Sjfb8856606 	uint64_t txframecount_gb;
454*2d9fd380Sjfb8856606 	uint64_t txbroadcastframes_g;
455*2d9fd380Sjfb8856606 	uint64_t txmulticastframes_g;
456*2d9fd380Sjfb8856606 	uint64_t tx64octets_gb;
457*2d9fd380Sjfb8856606 	uint64_t tx65to127octets_gb;
458*2d9fd380Sjfb8856606 	uint64_t tx128to255octets_gb;
459*2d9fd380Sjfb8856606 	uint64_t tx256to511octets_gb;
460*2d9fd380Sjfb8856606 	uint64_t tx512to1023octets_gb;
461*2d9fd380Sjfb8856606 	uint64_t tx1024tomaxoctets_gb;
462*2d9fd380Sjfb8856606 	uint64_t txunicastframes_gb;
463*2d9fd380Sjfb8856606 	uint64_t txmulticastframes_gb;
464*2d9fd380Sjfb8856606 	uint64_t txbroadcastframes_gb;
465*2d9fd380Sjfb8856606 	uint64_t txunderflowerror;
466*2d9fd380Sjfb8856606 	uint64_t txoctetcount_g;
467*2d9fd380Sjfb8856606 	uint64_t txframecount_g;
468*2d9fd380Sjfb8856606 	uint64_t txpauseframes;
469*2d9fd380Sjfb8856606 	uint64_t txvlanframes_g;
470*2d9fd380Sjfb8856606 
471*2d9fd380Sjfb8856606 	/* Rx Stats */
472*2d9fd380Sjfb8856606 	uint64_t rxframecount_gb;
473*2d9fd380Sjfb8856606 	uint64_t rxoctetcount_gb;
474*2d9fd380Sjfb8856606 	uint64_t rxoctetcount_g;
475*2d9fd380Sjfb8856606 	uint64_t rxbroadcastframes_g;
476*2d9fd380Sjfb8856606 	uint64_t rxmulticastframes_g;
477*2d9fd380Sjfb8856606 	uint64_t rxcrcerror;
478*2d9fd380Sjfb8856606 	uint64_t rxrunterror;
479*2d9fd380Sjfb8856606 	uint64_t rxjabbererror;
480*2d9fd380Sjfb8856606 	uint64_t rxundersize_g;
481*2d9fd380Sjfb8856606 	uint64_t rxoversize_g;
482*2d9fd380Sjfb8856606 	uint64_t rx64octets_gb;
483*2d9fd380Sjfb8856606 	uint64_t rx65to127octets_gb;
484*2d9fd380Sjfb8856606 	uint64_t rx128to255octets_gb;
485*2d9fd380Sjfb8856606 	uint64_t rx256to511octets_gb;
486*2d9fd380Sjfb8856606 	uint64_t rx512to1023octets_gb;
487*2d9fd380Sjfb8856606 	uint64_t rx1024tomaxoctets_gb;
488*2d9fd380Sjfb8856606 	uint64_t rxunicastframes_g;
489*2d9fd380Sjfb8856606 	uint64_t rxlengtherror;
490*2d9fd380Sjfb8856606 	uint64_t rxoutofrangetype;
491*2d9fd380Sjfb8856606 	uint64_t rxpauseframes;
492*2d9fd380Sjfb8856606 	uint64_t rxfifooverflow;
493*2d9fd380Sjfb8856606 	uint64_t rxvlanframes_gb;
494*2d9fd380Sjfb8856606 	uint64_t rxwatchdogerror;
495*2d9fd380Sjfb8856606 };
496*2d9fd380Sjfb8856606 
497*2d9fd380Sjfb8856606 /* Flow control parameters */
498*2d9fd380Sjfb8856606 struct xgbe_fc_info {
499*2d9fd380Sjfb8856606 	uint32_t high_water[AXGBE_PRIORITY_QUEUES];
500*2d9fd380Sjfb8856606 	uint32_t low_water[AXGBE_PRIORITY_QUEUES];
501*2d9fd380Sjfb8856606 	uint16_t pause_time[AXGBE_PRIORITY_QUEUES];
502*2d9fd380Sjfb8856606 	uint16_t send_xon;
503*2d9fd380Sjfb8856606 	enum rte_eth_fc_mode mode;
504*2d9fd380Sjfb8856606 	uint8_t autoneg;
505*2d9fd380Sjfb8856606 };
506*2d9fd380Sjfb8856606 
507d30ea906Sjfb8856606 /*
508d30ea906Sjfb8856606  * Structure to store private data for each port.
509d30ea906Sjfb8856606  */
510d30ea906Sjfb8856606 struct axgbe_port {
511d30ea906Sjfb8856606 	/*  Ethdev where port belongs*/
512d30ea906Sjfb8856606 	struct rte_eth_dev *eth_dev;
513d30ea906Sjfb8856606 	/* Pci dev info */
514d30ea906Sjfb8856606 	const struct rte_pci_device *pci_dev;
515d30ea906Sjfb8856606 	/* Version related data */
516d30ea906Sjfb8856606 	struct axgbe_version_data *vdata;
517d30ea906Sjfb8856606 
518d30ea906Sjfb8856606 	/* AXGMAC/XPCS related mmio registers */
519d30ea906Sjfb8856606 	void *xgmac_regs;	/* AXGMAC CSRs */
520d30ea906Sjfb8856606 	void *xpcs_regs;	/* XPCS MMD registers */
521d30ea906Sjfb8856606 	void *xprop_regs;	/* AXGBE property registers */
522d30ea906Sjfb8856606 	void *xi2c_regs;	/* AXGBE I2C CSRs */
523d30ea906Sjfb8856606 
524d30ea906Sjfb8856606 	bool cdr_track_early;
525d30ea906Sjfb8856606 	/* XPCS indirect addressing lock */
526d30ea906Sjfb8856606 	unsigned int xpcs_window_def_reg;
527d30ea906Sjfb8856606 	unsigned int xpcs_window_sel_reg;
528d30ea906Sjfb8856606 	unsigned int xpcs_window;
529d30ea906Sjfb8856606 	unsigned int xpcs_window_size;
530d30ea906Sjfb8856606 	unsigned int xpcs_window_mask;
531d30ea906Sjfb8856606 
532d30ea906Sjfb8856606 	/* Flags representing axgbe_state */
533*2d9fd380Sjfb8856606 	uint32_t dev_state;
534d30ea906Sjfb8856606 
535d30ea906Sjfb8856606 	struct axgbe_hw_if hw_if;
536d30ea906Sjfb8856606 	struct axgbe_phy_if phy_if;
537d30ea906Sjfb8856606 	struct axgbe_i2c_if i2c_if;
538d30ea906Sjfb8856606 
539d30ea906Sjfb8856606 	/* AXI DMA settings */
540d30ea906Sjfb8856606 	unsigned int coherent;
541d30ea906Sjfb8856606 	unsigned int axdomain;
542d30ea906Sjfb8856606 	unsigned int arcache;
543d30ea906Sjfb8856606 	unsigned int awcache;
544d30ea906Sjfb8856606 
545d30ea906Sjfb8856606 	unsigned int tx_max_channel_count;
546d30ea906Sjfb8856606 	unsigned int rx_max_channel_count;
547d30ea906Sjfb8856606 	unsigned int channel_count;
548d30ea906Sjfb8856606 	unsigned int tx_ring_count;
549d30ea906Sjfb8856606 	unsigned int tx_desc_count;
550d30ea906Sjfb8856606 	unsigned int rx_ring_count;
551d30ea906Sjfb8856606 	unsigned int rx_desc_count;
552d30ea906Sjfb8856606 
553d30ea906Sjfb8856606 	unsigned int tx_max_q_count;
554d30ea906Sjfb8856606 	unsigned int rx_max_q_count;
555d30ea906Sjfb8856606 	unsigned int tx_q_count;
556d30ea906Sjfb8856606 	unsigned int rx_q_count;
557d30ea906Sjfb8856606 
558d30ea906Sjfb8856606 	/* Tx/Rx common settings */
559d30ea906Sjfb8856606 	unsigned int pblx8;
560d30ea906Sjfb8856606 
561d30ea906Sjfb8856606 	/* Tx settings */
562d30ea906Sjfb8856606 	unsigned int tx_sf_mode;
563d30ea906Sjfb8856606 	unsigned int tx_threshold;
564d30ea906Sjfb8856606 	unsigned int tx_pbl;
565d30ea906Sjfb8856606 	unsigned int tx_osp_mode;
566d30ea906Sjfb8856606 	unsigned int tx_max_fifo_size;
567d30ea906Sjfb8856606 
568d30ea906Sjfb8856606 	/* Rx settings */
569d30ea906Sjfb8856606 	unsigned int rx_sf_mode;
570d30ea906Sjfb8856606 	unsigned int rx_threshold;
571d30ea906Sjfb8856606 	unsigned int rx_pbl;
572d30ea906Sjfb8856606 	unsigned int rx_max_fifo_size;
573d30ea906Sjfb8856606 	unsigned int rx_buf_size;
574d30ea906Sjfb8856606 
575d30ea906Sjfb8856606 	/* Device clocks */
576d30ea906Sjfb8856606 	unsigned long sysclk_rate;
577d30ea906Sjfb8856606 	unsigned long ptpclk_rate;
578d30ea906Sjfb8856606 
579d30ea906Sjfb8856606 	/* Keeps track of power mode */
580d30ea906Sjfb8856606 	unsigned int power_down;
581d30ea906Sjfb8856606 
582d30ea906Sjfb8856606 	/* Current PHY settings */
583d30ea906Sjfb8856606 	int phy_link;
584d30ea906Sjfb8856606 	int phy_speed;
585d30ea906Sjfb8856606 
586d30ea906Sjfb8856606 	pthread_mutex_t xpcs_mutex;
587d30ea906Sjfb8856606 	pthread_mutex_t i2c_mutex;
588d30ea906Sjfb8856606 	pthread_mutex_t an_mutex;
589d30ea906Sjfb8856606 	pthread_mutex_t phy_mutex;
590d30ea906Sjfb8856606 
591d30ea906Sjfb8856606 	/* Flow control settings */
592d30ea906Sjfb8856606 	unsigned int pause_autoneg;
593d30ea906Sjfb8856606 	unsigned int tx_pause;
594d30ea906Sjfb8856606 	unsigned int rx_pause;
595d30ea906Sjfb8856606 	unsigned int rx_rfa[AXGBE_MAX_QUEUES];
596d30ea906Sjfb8856606 	unsigned int rx_rfd[AXGBE_MAX_QUEUES];
597d30ea906Sjfb8856606 	unsigned int fifo;
598*2d9fd380Sjfb8856606 	unsigned int pfc_map[AXGBE_MAX_QUEUES];
599d30ea906Sjfb8856606 
600d30ea906Sjfb8856606 	/* Receive Side Scaling settings */
601d30ea906Sjfb8856606 	u8 rss_key[AXGBE_RSS_HASH_KEY_SIZE];
602d30ea906Sjfb8856606 	uint32_t rss_table[AXGBE_RSS_MAX_TABLE_SIZE];
603d30ea906Sjfb8856606 	uint32_t rss_options;
604d30ea906Sjfb8856606 	int rss_enable;
605*2d9fd380Sjfb8856606 	uint64_t rss_hf;
606d30ea906Sjfb8856606 
607d30ea906Sjfb8856606 	/* Hardware features of the device */
608d30ea906Sjfb8856606 	struct axgbe_hw_features hw_feat;
609d30ea906Sjfb8856606 
6104418919fSjohnjiang 	struct rte_ether_addr mac_addr;
611d30ea906Sjfb8856606 
612d30ea906Sjfb8856606 	/* Software Tx/Rx structure pointers*/
613d30ea906Sjfb8856606 	void **rx_queues;
614d30ea906Sjfb8856606 	void **tx_queues;
615d30ea906Sjfb8856606 
616d30ea906Sjfb8856606 	/* MDIO/PHY related settings */
617d30ea906Sjfb8856606 	unsigned int phy_started;
618d30ea906Sjfb8856606 	void *phy_data;
619d30ea906Sjfb8856606 	struct axgbe_phy phy;
620d30ea906Sjfb8856606 	int mdio_mmd;
621d30ea906Sjfb8856606 	unsigned long link_check;
622d30ea906Sjfb8856606 	volatile int mdio_completion;
623d30ea906Sjfb8856606 
624d30ea906Sjfb8856606 	unsigned int kr_redrv;
625d30ea906Sjfb8856606 
626d30ea906Sjfb8856606 	/* Auto-negotiation atate machine support */
627d30ea906Sjfb8856606 	unsigned int an_int;
628d30ea906Sjfb8856606 	unsigned int an_status;
629d30ea906Sjfb8856606 	enum axgbe_an an_result;
630d30ea906Sjfb8856606 	enum axgbe_an an_state;
631d30ea906Sjfb8856606 	enum axgbe_rx kr_state;
632d30ea906Sjfb8856606 	enum axgbe_rx kx_state;
633d30ea906Sjfb8856606 	unsigned int an_supported;
634d30ea906Sjfb8856606 	unsigned int parallel_detect;
635d30ea906Sjfb8856606 	unsigned int fec_ability;
636d30ea906Sjfb8856606 	unsigned long an_start;
637d30ea906Sjfb8856606 	enum axgbe_an_mode an_mode;
638d30ea906Sjfb8856606 
639d30ea906Sjfb8856606 	/* I2C support */
640d30ea906Sjfb8856606 	struct axgbe_i2c i2c;
641d30ea906Sjfb8856606 	volatile int i2c_complete;
642d30ea906Sjfb8856606 
643d30ea906Sjfb8856606 	/* CRC stripping by H/w for Rx packet*/
644d30ea906Sjfb8856606 	int crc_strip_enable;
645d30ea906Sjfb8856606 	/* csum enable to hardware */
646d30ea906Sjfb8856606 	uint32_t rx_csum_enable;
647*2d9fd380Sjfb8856606 
648*2d9fd380Sjfb8856606 	struct axgbe_mmc_stats mmc_stats;
649*2d9fd380Sjfb8856606 	struct xgbe_fc_info fc;
650*2d9fd380Sjfb8856606 
651*2d9fd380Sjfb8856606 	/* Hash filtering */
652*2d9fd380Sjfb8856606 	unsigned int hash_table_shift;
653*2d9fd380Sjfb8856606 	unsigned int hash_table_count;
654*2d9fd380Sjfb8856606 	unsigned int uc_hash_mac_addr;
655*2d9fd380Sjfb8856606 	unsigned int uc_hash_table[AXGBE_MAC_HASH_TABLE_SIZE];
656*2d9fd380Sjfb8856606 
657*2d9fd380Sjfb8856606 	/* For IEEE1588 PTP */
658*2d9fd380Sjfb8856606 	struct rte_timecounter systime_tc;
659*2d9fd380Sjfb8856606 	struct rte_timecounter tx_tstamp;
660*2d9fd380Sjfb8856606 	unsigned int tstamp_addend;
661*2d9fd380Sjfb8856606 
662d30ea906Sjfb8856606 };
663d30ea906Sjfb8856606 
664d30ea906Sjfb8856606 void axgbe_init_function_ptrs_dev(struct axgbe_hw_if *hw_if);
665d30ea906Sjfb8856606 void axgbe_init_function_ptrs_phy(struct axgbe_phy_if *phy_if);
666d30ea906Sjfb8856606 void axgbe_init_function_ptrs_phy_v2(struct axgbe_phy_if *phy_if);
667d30ea906Sjfb8856606 void axgbe_init_function_ptrs_i2c(struct axgbe_i2c_if *i2c_if);
668*2d9fd380Sjfb8856606 void axgbe_set_mac_addn_addr(struct axgbe_port *pdata, u8 *addr,
669*2d9fd380Sjfb8856606 			     uint32_t index);
670*2d9fd380Sjfb8856606 void axgbe_set_mac_hash_table(struct axgbe_port *pdata, u8 *addr, bool add);
671*2d9fd380Sjfb8856606 int axgbe_write_rss_lookup_table(struct axgbe_port *pdata);
672*2d9fd380Sjfb8856606 int axgbe_write_rss_hash_key(struct axgbe_port *pdata);
673d30ea906Sjfb8856606 
674d30ea906Sjfb8856606 #endif /* RTE_ETH_AXGBE_H_ */
675