1/* Synopsys DesignWare Core Enterprise Ethernet (XLGMAC) Driver
2 *
3 * Copyright (c) 2017 Synopsys, Inc. (www.synopsys.com)
4 *
5 * This program is dual-licensed; you may select either version 2 of
6 * the GNU General Public License ("GPL") or BSD license ("BSD").
7 *
8 * This Synopsys DWC XLGMAC software driver and associated documentation
9 * (hereinafter the "Software") is an unsupported proprietary work of
10 * Synopsys, Inc. unless otherwise expressly agreed to in writing between
11 * Synopsys and you. The Software IS NOT an item of Licensed Software or a
12 * Licensed Product under any End User Software License Agreement or
13 * Agreement for Licensed Products with Synopsys or any supplement thereto.
14 * Synopsys is a registered trademark of Synopsys, Inc. Other names included
15 * in the SOFTWARE may be the trademarks of their respective owners.
16 */
17
18#ifndef __DWC_XLGMAC_H__
19#define __DWC_XLGMAC_H__
20
21#include <linux/dma-mapping.h>
22#include <linux/netdevice.h>
23#include <linux/workqueue.h>
24#include <linux/phy.h>
25#include <linux/if_vlan.h>
26#include <linux/bitops.h>
27#include <linux/timecounter.h>
28
29#define XLGMAC_DRV_NAME			"dwc-xlgmac"
30#define XLGMAC_DRV_VERSION		"1.0.0"
31#define XLGMAC_DRV_DESC			"Synopsys DWC XLGMAC Driver"
32
33/* Descriptor related parameters */
34#define XLGMAC_TX_DESC_CNT		1024
35#define XLGMAC_TX_DESC_MIN_FREE		(XLGMAC_TX_DESC_CNT >> 3)
36#define XLGMAC_TX_DESC_MAX_PROC		(XLGMAC_TX_DESC_CNT >> 1)
37#define XLGMAC_RX_DESC_CNT		1024
38#define XLGMAC_RX_DESC_MAX_DIRTY	(XLGMAC_RX_DESC_CNT >> 3)
39
40/* Descriptors required for maximum contiguous TSO/GSO packet */
41#define XLGMAC_TX_MAX_SPLIT	\
42	((GSO_LEGACY_MAX_SIZE / XLGMAC_TX_MAX_BUF_SIZE) + 1)
43
44/* Maximum possible descriptors needed for a SKB */
45#define XLGMAC_TX_MAX_DESC_NR	(MAX_SKB_FRAGS + XLGMAC_TX_MAX_SPLIT + 2)
46
47#define XLGMAC_TX_MAX_BUF_SIZE	(0x3fff & ~(64 - 1))
48#define XLGMAC_RX_MIN_BUF_SIZE	(ETH_FRAME_LEN + ETH_FCS_LEN + VLAN_HLEN)
49#define XLGMAC_RX_BUF_ALIGN	64
50
51/* Maximum Size for Splitting the Header Data
52 * Keep in sync with SKB_ALLOC_SIZE
53 * 3'b000: 64 bytes, 3'b001: 128 bytes
54 * 3'b010: 256 bytes, 3'b011: 512 bytes
55 * 3'b100: 1023 bytes ,   3'b101'3'b111: Reserved
56 */
57#define XLGMAC_SPH_HDSMS_SIZE		3
58#define XLGMAC_SKB_ALLOC_SIZE		512
59
60#define XLGMAC_MAX_FIFO			81920
61
62#define XLGMAC_MAX_DMA_CHANNELS		16
63#define XLGMAC_DMA_STOP_TIMEOUT		5
64#define XLGMAC_DMA_INTERRUPT_MASK	0x31c7
65
66/* Default coalescing parameters */
67#define XLGMAC_INIT_DMA_TX_USECS	1000
68#define XLGMAC_INIT_DMA_TX_FRAMES	25
69#define XLGMAC_INIT_DMA_RX_USECS	30
70#define XLGMAC_INIT_DMA_RX_FRAMES	25
71#define XLGMAC_MAX_DMA_RIWT		0xff
72#define XLGMAC_MIN_DMA_RIWT		0x01
73
74/* Flow control queue count */
75#define XLGMAC_MAX_FLOW_CONTROL_QUEUES	8
76
77/* System clock is 125 MHz */
78#define XLGMAC_SYSCLOCK			125000000
79
80/* Maximum MAC address hash table size (256 bits = 8 bytes) */
81#define XLGMAC_MAC_HASH_TABLE_SIZE	8
82
83/* Receive Side Scaling */
84#define XLGMAC_RSS_HASH_KEY_SIZE	40
85#define XLGMAC_RSS_MAX_TABLE_SIZE	256
86#define XLGMAC_RSS_LOOKUP_TABLE_TYPE	0
87#define XLGMAC_RSS_HASH_KEY_TYPE	1
88
89#define XLGMAC_STD_PACKET_MTU		1500
90#define XLGMAC_JUMBO_PACKET_MTU		9000
91
92/* Helper macro for descriptor handling
93 *  Always use XLGMAC_GET_DESC_DATA to access the descriptor data
94 */
95#define XLGMAC_GET_DESC_DATA(ring, idx) ({				\
96	typeof(ring) _ring = (ring);					\
97	((_ring)->desc_data_head +					\
98	 ((idx) & ((_ring)->dma_desc_count - 1)));			\
99})
100
101#define XLGMAC_GET_REG_BITS(var, pos, len) ({				\
102	typeof(pos) _pos = (pos);					\
103	typeof(len) _len = (len);					\
104	((var) & GENMASK(_pos + _len - 1, _pos)) >> (_pos);		\
105})
106
107#define XLGMAC_GET_REG_BITS_LE(var, pos, len) ({			\
108	typeof(pos) _pos = (pos);					\
109	typeof(len) _len = (len);					\
110	typeof(var) _var = le32_to_cpu((var));				\
111	((_var) & GENMASK(_pos + _len - 1, _pos)) >> (_pos);		\
112})
113
114#define XLGMAC_SET_REG_BITS(var, pos, len, val) ({			\
115	typeof(var) _var = (var);					\
116	typeof(pos) _pos = (pos);					\
117	typeof(len) _len = (len);					\
118	typeof(val) _val = (val);					\
119	_val = (_val << _pos) & GENMASK(_pos + _len - 1, _pos);		\
120	_var = (_var & ~GENMASK(_pos + _len - 1, _pos)) | _val;		\
121})
122
123#define XLGMAC_SET_REG_BITS_LE(var, pos, len, val) ({			\
124	typeof(var) _var = (var);					\
125	typeof(pos) _pos = (pos);					\
126	typeof(len) _len = (len);					\
127	typeof(val) _val = (val);					\
128	_val = (_val << _pos) & GENMASK(_pos + _len - 1, _pos);		\
129	_var = (_var & ~GENMASK(_pos + _len - 1, _pos)) | _val;		\
130	cpu_to_le32(_var);						\
131})
132
133struct xlgmac_pdata;
134
135enum xlgmac_int {
136	XLGMAC_INT_DMA_CH_SR_TI,
137	XLGMAC_INT_DMA_CH_SR_TPS,
138	XLGMAC_INT_DMA_CH_SR_TBU,
139	XLGMAC_INT_DMA_CH_SR_RI,
140	XLGMAC_INT_DMA_CH_SR_RBU,
141	XLGMAC_INT_DMA_CH_SR_RPS,
142	XLGMAC_INT_DMA_CH_SR_TI_RI,
143	XLGMAC_INT_DMA_CH_SR_FBE,
144	XLGMAC_INT_DMA_ALL,
145};
146
147struct xlgmac_stats {
148	/* MMC TX counters */
149	u64 txoctetcount_gb;
150	u64 txframecount_gb;
151	u64 txbroadcastframes_g;
152	u64 txmulticastframes_g;
153	u64 tx64octets_gb;
154	u64 tx65to127octets_gb;
155	u64 tx128to255octets_gb;
156	u64 tx256to511octets_gb;
157	u64 tx512to1023octets_gb;
158	u64 tx1024tomaxoctets_gb;
159	u64 txunicastframes_gb;
160	u64 txmulticastframes_gb;
161	u64 txbroadcastframes_gb;
162	u64 txunderflowerror;
163	u64 txoctetcount_g;
164	u64 txframecount_g;
165	u64 txpauseframes;
166	u64 txvlanframes_g;
167
168	/* MMC RX counters */
169	u64 rxframecount_gb;
170	u64 rxoctetcount_gb;
171	u64 rxoctetcount_g;
172	u64 rxbroadcastframes_g;
173	u64 rxmulticastframes_g;
174	u64 rxcrcerror;
175	u64 rxrunterror;
176	u64 rxjabbererror;
177	u64 rxundersize_g;
178	u64 rxoversize_g;
179	u64 rx64octets_gb;
180	u64 rx65to127octets_gb;
181	u64 rx128to255octets_gb;
182	u64 rx256to511octets_gb;
183	u64 rx512to1023octets_gb;
184	u64 rx1024tomaxoctets_gb;
185	u64 rxunicastframes_g;
186	u64 rxlengtherror;
187	u64 rxoutofrangetype;
188	u64 rxpauseframes;
189	u64 rxfifooverflow;
190	u64 rxvlanframes_gb;
191	u64 rxwatchdogerror;
192
193	/* Extra counters */
194	u64 tx_tso_packets;
195	u64 rx_split_header_packets;
196	u64 tx_process_stopped;
197	u64 rx_process_stopped;
198	u64 tx_buffer_unavailable;
199	u64 rx_buffer_unavailable;
200	u64 fatal_bus_error;
201	u64 tx_vlan_packets;
202	u64 rx_vlan_packets;
203	u64 napi_poll_isr;
204	u64 napi_poll_txtimer;
205};
206
207struct xlgmac_ring_buf {
208	struct sk_buff *skb;
209	dma_addr_t skb_dma;
210	unsigned int skb_len;
211};
212
213/* Common Tx and Rx DMA hardware descriptor */
214struct xlgmac_dma_desc {
215	__le32 desc0;
216	__le32 desc1;
217	__le32 desc2;
218	__le32 desc3;
219};
220
221/* Page allocation related values */
222struct xlgmac_page_alloc {
223	struct page *pages;
224	unsigned int pages_len;
225	unsigned int pages_offset;
226
227	dma_addr_t pages_dma;
228};
229
230/* Ring entry buffer data */
231struct xlgmac_buffer_data {
232	struct xlgmac_page_alloc pa;
233	struct xlgmac_page_alloc pa_unmap;
234
235	dma_addr_t dma_base;
236	unsigned long dma_off;
237	unsigned int dma_len;
238};
239
240/* Tx-related desc data */
241struct xlgmac_tx_desc_data {
242	unsigned int packets;		/* BQL packet count */
243	unsigned int bytes;		/* BQL byte count */
244};
245
246/* Rx-related desc data */
247struct xlgmac_rx_desc_data {
248	struct xlgmac_buffer_data hdr;	/* Header locations */
249	struct xlgmac_buffer_data buf;	/* Payload locations */
250
251	unsigned short hdr_len;		/* Length of received header */
252	unsigned short len;		/* Length of received packet */
253};
254
255struct xlgmac_pkt_info {
256	struct sk_buff *skb;
257
258	unsigned int attributes;
259
260	unsigned int errors;
261
262	/* descriptors needed for this packet */
263	unsigned int desc_count;
264	unsigned int length;
265
266	unsigned int tx_packets;
267	unsigned int tx_bytes;
268
269	unsigned int header_len;
270	unsigned int tcp_header_len;
271	unsigned int tcp_payload_len;
272	unsigned short mss;
273
274	unsigned short vlan_ctag;
275
276	u64 rx_tstamp;
277
278	u32 rss_hash;
279	enum pkt_hash_types rss_hash_type;
280};
281
282struct xlgmac_desc_data {
283	/* dma_desc: Virtual address of descriptor
284	 *  dma_desc_addr: DMA address of descriptor
285	 */
286	struct xlgmac_dma_desc *dma_desc;
287	dma_addr_t dma_desc_addr;
288
289	/* skb: Virtual address of SKB
290	 *  skb_dma: DMA address of SKB data
291	 *  skb_dma_len: Length of SKB DMA area
292	 */
293	struct sk_buff *skb;
294	dma_addr_t skb_dma;
295	unsigned int skb_dma_len;
296
297	/* Tx/Rx -related data */
298	struct xlgmac_tx_desc_data tx;
299	struct xlgmac_rx_desc_data rx;
300
301	unsigned int mapped_as_page;
302
303	/* Incomplete receive save location.  If the budget is exhausted
304	 * or the last descriptor (last normal descriptor or a following
305	 * context descriptor) has not been DMA'd yet the current state
306	 * of the receive processing needs to be saved.
307	 */
308	unsigned int state_saved;
309	struct {
310		struct sk_buff *skb;
311		unsigned int len;
312		unsigned int error;
313	} state;
314};
315
316struct xlgmac_ring {
317	/* Per packet related information */
318	struct xlgmac_pkt_info pkt_info;
319
320	/* Virtual/DMA addresses of DMA descriptor list and the total count */
321	struct xlgmac_dma_desc *dma_desc_head;
322	dma_addr_t dma_desc_head_addr;
323	unsigned int dma_desc_count;
324
325	/* Array of descriptor data corresponding the DMA descriptor
326	 * (always use the XLGMAC_GET_DESC_DATA macro to access this data)
327	 */
328	struct xlgmac_desc_data *desc_data_head;
329
330	/* Page allocation for RX buffers */
331	struct xlgmac_page_alloc rx_hdr_pa;
332	struct xlgmac_page_alloc rx_buf_pa;
333
334	/* Ring index values
335	 *  cur   - Tx: index of descriptor to be used for current transfer
336	 *          Rx: index of descriptor to check for packet availability
337	 *  dirty - Tx: index of descriptor to check for transfer complete
338	 *          Rx: index of descriptor to check for buffer reallocation
339	 */
340	unsigned int cur;
341	unsigned int dirty;
342
343	/* Coalesce frame count used for interrupt bit setting */
344	unsigned int coalesce_count;
345
346	union {
347		struct {
348			unsigned int xmit_more;
349			unsigned int queue_stopped;
350			unsigned short cur_mss;
351			unsigned short cur_vlan_ctag;
352		} tx;
353	};
354} ____cacheline_aligned;
355
356struct xlgmac_channel {
357	char name[16];
358
359	/* Address of private data area for device */
360	struct xlgmac_pdata *pdata;
361
362	/* Queue index and base address of queue's DMA registers */
363	unsigned int queue_index;
364	void __iomem *dma_regs;
365
366	/* Per channel interrupt irq number */
367	int dma_irq;
368	char dma_irq_name[IFNAMSIZ + 32];
369
370	/* Netdev related settings */
371	struct napi_struct napi;
372
373	unsigned int saved_ier;
374
375	unsigned int tx_timer_active;
376	struct timer_list tx_timer;
377
378	struct xlgmac_ring *tx_ring;
379	struct xlgmac_ring *rx_ring;
380} ____cacheline_aligned;
381
382struct xlgmac_desc_ops {
383	int (*alloc_channels_and_rings)(struct xlgmac_pdata *pdata);
384	void (*free_channels_and_rings)(struct xlgmac_pdata *pdata);
385	int (*map_tx_skb)(struct xlgmac_channel *channel,
386			  struct sk_buff *skb);
387	int (*map_rx_buffer)(struct xlgmac_pdata *pdata,
388			     struct xlgmac_ring *ring,
389			struct xlgmac_desc_data *desc_data);
390	void (*unmap_desc_data)(struct xlgmac_pdata *pdata,
391				struct xlgmac_desc_data *desc_data);
392	void (*tx_desc_init)(struct xlgmac_pdata *pdata);
393	void (*rx_desc_init)(struct xlgmac_pdata *pdata);
394};
395
396struct xlgmac_hw_ops {
397	int (*init)(struct xlgmac_pdata *pdata);
398	int (*exit)(struct xlgmac_pdata *pdata);
399
400	int (*tx_complete)(struct xlgmac_dma_desc *dma_desc);
401
402	void (*enable_tx)(struct xlgmac_pdata *pdata);
403	void (*disable_tx)(struct xlgmac_pdata *pdata);
404	void (*enable_rx)(struct xlgmac_pdata *pdata);
405	void (*disable_rx)(struct xlgmac_pdata *pdata);
406
407	int (*enable_int)(struct xlgmac_channel *channel,
408			  enum xlgmac_int int_id);
409	int (*disable_int)(struct xlgmac_channel *channel,
410			   enum xlgmac_int int_id);
411	void (*dev_xmit)(struct xlgmac_channel *channel);
412	int (*dev_read)(struct xlgmac_channel *channel);
413
414	int (*set_mac_address)(struct xlgmac_pdata *pdata, const u8 *addr);
415	int (*config_rx_mode)(struct xlgmac_pdata *pdata);
416	int (*enable_rx_csum)(struct xlgmac_pdata *pdata);
417	int (*disable_rx_csum)(struct xlgmac_pdata *pdata);
418
419	/* For MII speed configuration */
420	int (*set_xlgmii_25000_speed)(struct xlgmac_pdata *pdata);
421	int (*set_xlgmii_40000_speed)(struct xlgmac_pdata *pdata);
422	int (*set_xlgmii_50000_speed)(struct xlgmac_pdata *pdata);
423	int (*set_xlgmii_100000_speed)(struct xlgmac_pdata *pdata);
424
425	/* For descriptor related operation */
426	void (*tx_desc_init)(struct xlgmac_channel *channel);
427	void (*rx_desc_init)(struct xlgmac_channel *channel);
428	void (*tx_desc_reset)(struct xlgmac_desc_data *desc_data);
429	void (*rx_desc_reset)(struct xlgmac_pdata *pdata,
430			      struct xlgmac_desc_data *desc_data,
431			unsigned int index);
432	int (*is_last_desc)(struct xlgmac_dma_desc *dma_desc);
433	int (*is_context_desc)(struct xlgmac_dma_desc *dma_desc);
434	void (*tx_start_xmit)(struct xlgmac_channel *channel,
435			      struct xlgmac_ring *ring);
436
437	/* For Flow Control */
438	int (*config_tx_flow_control)(struct xlgmac_pdata *pdata);
439	int (*config_rx_flow_control)(struct xlgmac_pdata *pdata);
440
441	/* For Vlan related config */
442	int (*enable_rx_vlan_stripping)(struct xlgmac_pdata *pdata);
443	int (*disable_rx_vlan_stripping)(struct xlgmac_pdata *pdata);
444	int (*enable_rx_vlan_filtering)(struct xlgmac_pdata *pdata);
445	int (*disable_rx_vlan_filtering)(struct xlgmac_pdata *pdata);
446	int (*update_vlan_hash_table)(struct xlgmac_pdata *pdata);
447
448	/* For RX coalescing */
449	int (*config_rx_coalesce)(struct xlgmac_pdata *pdata);
450	int (*config_tx_coalesce)(struct xlgmac_pdata *pdata);
451	unsigned int (*usec_to_riwt)(struct xlgmac_pdata *pdata,
452				     unsigned int usec);
453	unsigned int (*riwt_to_usec)(struct xlgmac_pdata *pdata,
454				     unsigned int riwt);
455
456	/* For RX and TX threshold config */
457	int (*config_rx_threshold)(struct xlgmac_pdata *pdata,
458				   unsigned int val);
459	int (*config_tx_threshold)(struct xlgmac_pdata *pdata,
460				   unsigned int val);
461
462	/* For RX and TX Store and Forward Mode config */
463	int (*config_rsf_mode)(struct xlgmac_pdata *pdata,
464			       unsigned int val);
465	int (*config_tsf_mode)(struct xlgmac_pdata *pdata,
466			       unsigned int val);
467
468	/* For TX DMA Operate on Second Frame config */
469	int (*config_osp_mode)(struct xlgmac_pdata *pdata);
470
471	/* For RX and TX PBL config */
472	int (*config_rx_pbl_val)(struct xlgmac_pdata *pdata);
473	int (*get_rx_pbl_val)(struct xlgmac_pdata *pdata);
474	int (*config_tx_pbl_val)(struct xlgmac_pdata *pdata);
475	int (*get_tx_pbl_val)(struct xlgmac_pdata *pdata);
476	int (*config_pblx8)(struct xlgmac_pdata *pdata);
477
478	/* For MMC statistics */
479	void (*rx_mmc_int)(struct xlgmac_pdata *pdata);
480	void (*tx_mmc_int)(struct xlgmac_pdata *pdata);
481	void (*read_mmc_stats)(struct xlgmac_pdata *pdata);
482
483	/* For Receive Side Scaling */
484	int (*enable_rss)(struct xlgmac_pdata *pdata);
485	int (*disable_rss)(struct xlgmac_pdata *pdata);
486	int (*set_rss_hash_key)(struct xlgmac_pdata *pdata,
487				const u8 *key);
488	int (*set_rss_lookup_table)(struct xlgmac_pdata *pdata,
489				    const u32 *table);
490};
491
492/* This structure contains flags that indicate what hardware features
493 * or configurations are present in the device.
494 */
495struct xlgmac_hw_features {
496	/* HW Version */
497	unsigned int version;
498
499	/* HW Feature Register0 */
500	unsigned int phyifsel;		/* PHY interface support */
501	unsigned int vlhash;		/* VLAN Hash Filter */
502	unsigned int sma;		/* SMA(MDIO) Interface */
503	unsigned int rwk;		/* PMT remote wake-up packet */
504	unsigned int mgk;		/* PMT magic packet */
505	unsigned int mmc;		/* RMON module */
506	unsigned int aoe;		/* ARP Offload */
507	unsigned int ts;		/* IEEE 1588-2008 Advanced Timestamp */
508	unsigned int eee;		/* Energy Efficient Ethernet */
509	unsigned int tx_coe;		/* Tx Checksum Offload */
510	unsigned int rx_coe;		/* Rx Checksum Offload */
511	unsigned int addn_mac;		/* Additional MAC Addresses */
512	unsigned int ts_src;		/* Timestamp Source */
513	unsigned int sa_vlan_ins;	/* Source Address or VLAN Insertion */
514
515	/* HW Feature Register1 */
516	unsigned int rx_fifo_size;	/* MTL Receive FIFO Size */
517	unsigned int tx_fifo_size;	/* MTL Transmit FIFO Size */
518	unsigned int adv_ts_hi;		/* Advance Timestamping High Word */
519	unsigned int dma_width;		/* DMA width */
520	unsigned int dcb;		/* DCB Feature */
521	unsigned int sph;		/* Split Header Feature */
522	unsigned int tso;		/* TCP Segmentation Offload */
523	unsigned int dma_debug;		/* DMA Debug Registers */
524	unsigned int rss;		/* Receive Side Scaling */
525	unsigned int tc_cnt;		/* Number of Traffic Classes */
526	unsigned int hash_table_size;	/* Hash Table Size */
527	unsigned int l3l4_filter_num;	/* Number of L3-L4 Filters */
528
529	/* HW Feature Register2 */
530	unsigned int rx_q_cnt;		/* Number of MTL Receive Queues */
531	unsigned int tx_q_cnt;		/* Number of MTL Transmit Queues */
532	unsigned int rx_ch_cnt;		/* Number of DMA Receive Channels */
533	unsigned int tx_ch_cnt;		/* Number of DMA Transmit Channels */
534	unsigned int pps_out_num;	/* Number of PPS outputs */
535	unsigned int aux_snap_num;	/* Number of Aux snapshot inputs */
536};
537
538struct xlgmac_resources {
539	void __iomem *addr;
540	int irq;
541};
542
543struct xlgmac_pdata {
544	struct net_device *netdev;
545	struct device *dev;
546
547	struct xlgmac_hw_ops hw_ops;
548	struct xlgmac_desc_ops desc_ops;
549
550	/* Device statistics */
551	struct xlgmac_stats stats;
552
553	u32 msg_enable;
554
555	/* MAC registers base */
556	void __iomem *mac_regs;
557
558	/* Hardware features of the device */
559	struct xlgmac_hw_features hw_feat;
560
561	struct work_struct restart_work;
562
563	/* Rings for Tx/Rx on a DMA channel */
564	struct xlgmac_channel *channel_head;
565	unsigned int channel_count;
566	unsigned int tx_ring_count;
567	unsigned int rx_ring_count;
568	unsigned int tx_desc_count;
569	unsigned int rx_desc_count;
570	unsigned int tx_q_count;
571	unsigned int rx_q_count;
572
573	/* Tx/Rx common settings */
574	unsigned int pblx8;
575
576	/* Tx settings */
577	unsigned int tx_sf_mode;
578	unsigned int tx_threshold;
579	unsigned int tx_pbl;
580	unsigned int tx_osp_mode;
581
582	/* Rx settings */
583	unsigned int rx_sf_mode;
584	unsigned int rx_threshold;
585	unsigned int rx_pbl;
586
587	/* Tx coalescing settings */
588	unsigned int tx_usecs;
589	unsigned int tx_frames;
590
591	/* Rx coalescing settings */
592	unsigned int rx_riwt;
593	unsigned int rx_usecs;
594	unsigned int rx_frames;
595
596	/* Current Rx buffer size */
597	unsigned int rx_buf_size;
598
599	/* Flow control settings */
600	unsigned int tx_pause;
601	unsigned int rx_pause;
602
603	/* Device interrupt number */
604	int dev_irq;
605	unsigned int per_channel_irq;
606	int channel_irq[XLGMAC_MAX_DMA_CHANNELS];
607
608	/* Netdev related settings */
609	unsigned char mac_addr[ETH_ALEN];
610	netdev_features_t netdev_features;
611	struct napi_struct napi;
612
613	/* Filtering support */
614	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
615
616	/* Device clocks */
617	unsigned long sysclk_rate;
618
619	/* RSS addressing mutex */
620	struct mutex rss_mutex;
621
622	/* Receive Side Scaling settings */
623	u8 rss_key[XLGMAC_RSS_HASH_KEY_SIZE];
624	u32 rss_table[XLGMAC_RSS_MAX_TABLE_SIZE];
625	u32 rss_options;
626
627	int phy_speed;
628
629	char drv_name[32];
630	char drv_ver[32];
631};
632
633void xlgmac_init_desc_ops(struct xlgmac_desc_ops *desc_ops);
634void xlgmac_init_hw_ops(struct xlgmac_hw_ops *hw_ops);
635const struct net_device_ops *xlgmac_get_netdev_ops(void);
636const struct ethtool_ops *xlgmac_get_ethtool_ops(void);
637void xlgmac_dump_tx_desc(struct xlgmac_pdata *pdata,
638			 struct xlgmac_ring *ring,
639			 unsigned int idx,
640			 unsigned int count,
641			 unsigned int flag);
642void xlgmac_dump_rx_desc(struct xlgmac_pdata *pdata,
643			 struct xlgmac_ring *ring,
644			 unsigned int idx);
645void xlgmac_print_pkt(struct net_device *netdev,
646		      struct sk_buff *skb, bool tx_rx);
647void xlgmac_get_all_hw_features(struct xlgmac_pdata *pdata);
648void xlgmac_print_all_hw_features(struct xlgmac_pdata *pdata);
649int xlgmac_drv_probe(struct device *dev,
650		     struct xlgmac_resources *res);
651int xlgmac_drv_remove(struct device *dev);
652
653/* For debug prints */
654#ifdef XLGMAC_DEBUG
655#define XLGMAC_PR(fmt, args...) \
656	pr_alert("[%s,%d]:" fmt, __func__, __LINE__, ## args)
657#else
658#define XLGMAC_PR(x...)		do { } while (0)
659#endif
660
661#endif /* __DWC_XLGMAC_H__ */
662