aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/gianfar.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/gianfar.h')
-rw-r--r--drivers/net/gianfar.h436
1 files changed, 373 insertions, 63 deletions
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h
index 2cd94338b5d3..17d25e714236 100644
--- a/drivers/net/gianfar.h
+++ b/drivers/net/gianfar.h
@@ -7,8 +7,9 @@
7 * 7 *
8 * Author: Andy Fleming 8 * Author: Andy Fleming
9 * Maintainer: Kumar Gala 9 * Maintainer: Kumar Gala
10 * Modifier: Sandeep Gopalpet <sandeep.kumar@freescale.com>
10 * 11 *
11 * Copyright (c) 2002-2004 Freescale Semiconductor, Inc. 12 * Copyright 2002-2009 Freescale Semiconductor, Inc.
12 * 13 *
13 * This program is free software; you can redistribute it and/or modify it 14 * This program is free software; you can redistribute it and/or modify it
14 * under the terms of the GNU General Public License as published by the 15 * under the terms of the GNU General Public License as published by the
@@ -74,6 +75,13 @@
74extern const char gfar_driver_name[]; 75extern const char gfar_driver_name[];
75extern const char gfar_driver_version[]; 76extern const char gfar_driver_version[];
76 77
78/* MAXIMUM NUMBER OF QUEUES SUPPORTED */
79#define MAX_TX_QS 0x8
80#define MAX_RX_QS 0x8
81
82/* MAXIMUM NUMBER OF GROUPS SUPPORTED */
83#define MAXGROUPS 0x2
84
77/* These need to be powers of 2 for this driver */ 85/* These need to be powers of 2 for this driver */
78#define DEFAULT_TX_RING_SIZE 256 86#define DEFAULT_TX_RING_SIZE 256
79#define DEFAULT_RX_RING_SIZE 256 87#define DEFAULT_RX_RING_SIZE 256
@@ -171,12 +179,63 @@ extern const char gfar_driver_version[];
171 179
172#define MINFLR_INIT_SETTINGS 0x00000040 180#define MINFLR_INIT_SETTINGS 0x00000040
173 181
182/* Tqueue control */
183#define TQUEUE_EN0 0x00008000
184#define TQUEUE_EN1 0x00004000
185#define TQUEUE_EN2 0x00002000
186#define TQUEUE_EN3 0x00001000
187#define TQUEUE_EN4 0x00000800
188#define TQUEUE_EN5 0x00000400
189#define TQUEUE_EN6 0x00000200
190#define TQUEUE_EN7 0x00000100
191#define TQUEUE_EN_ALL 0x0000FF00
192
193#define TR03WT_WT0_MASK 0xFF000000
194#define TR03WT_WT1_MASK 0x00FF0000
195#define TR03WT_WT2_MASK 0x0000FF00
196#define TR03WT_WT3_MASK 0x000000FF
197
198#define TR47WT_WT4_MASK 0xFF000000
199#define TR47WT_WT5_MASK 0x00FF0000
200#define TR47WT_WT6_MASK 0x0000FF00
201#define TR47WT_WT7_MASK 0x000000FF
202
203/* Rqueue control */
204#define RQUEUE_EX0 0x00800000
205#define RQUEUE_EX1 0x00400000
206#define RQUEUE_EX2 0x00200000
207#define RQUEUE_EX3 0x00100000
208#define RQUEUE_EX4 0x00080000
209#define RQUEUE_EX5 0x00040000
210#define RQUEUE_EX6 0x00020000
211#define RQUEUE_EX7 0x00010000
212#define RQUEUE_EX_ALL 0x00FF0000
213
214#define RQUEUE_EN0 0x00000080
215#define RQUEUE_EN1 0x00000040
216#define RQUEUE_EN2 0x00000020
217#define RQUEUE_EN3 0x00000010
218#define RQUEUE_EN4 0x00000008
219#define RQUEUE_EN5 0x00000004
220#define RQUEUE_EN6 0x00000002
221#define RQUEUE_EN7 0x00000001
222#define RQUEUE_EN_ALL 0x000000FF
223
174/* Init to do tx snooping for buffers and descriptors */ 224/* Init to do tx snooping for buffers and descriptors */
175#define DMACTRL_INIT_SETTINGS 0x000000c3 225#define DMACTRL_INIT_SETTINGS 0x000000c3
176#define DMACTRL_GRS 0x00000010 226#define DMACTRL_GRS 0x00000010
177#define DMACTRL_GTS 0x00000008 227#define DMACTRL_GTS 0x00000008
178 228
179#define TSTAT_CLEAR_THALT 0x80000000 229#define TSTAT_CLEAR_THALT_ALL 0xFF000000
230#define TSTAT_CLEAR_THALT 0x80000000
231#define TSTAT_CLEAR_THALT0 0x80000000
232#define TSTAT_CLEAR_THALT1 0x40000000
233#define TSTAT_CLEAR_THALT2 0x20000000
234#define TSTAT_CLEAR_THALT3 0x10000000
235#define TSTAT_CLEAR_THALT4 0x08000000
236#define TSTAT_CLEAR_THALT5 0x04000000
237#define TSTAT_CLEAR_THALT6 0x02000000
238#define TSTAT_CLEAR_THALT7 0x01000000
180 239
181/* Interrupt coalescing macros */ 240/* Interrupt coalescing macros */
182#define IC_ICEN 0x80000000 241#define IC_ICEN 0x80000000
@@ -227,6 +286,13 @@ extern const char gfar_driver_version[];
227#define TCTRL_IPCSEN 0x00004000 286#define TCTRL_IPCSEN 0x00004000
228#define TCTRL_TUCSEN 0x00002000 287#define TCTRL_TUCSEN 0x00002000
229#define TCTRL_VLINS 0x00001000 288#define TCTRL_VLINS 0x00001000
289#define TCTRL_THDF 0x00000800
290#define TCTRL_RFCPAUSE 0x00000010
291#define TCTRL_TFCPAUSE 0x00000008
292#define TCTRL_TXSCHED_MASK 0x00000006
293#define TCTRL_TXSCHED_INIT 0x00000000
294#define TCTRL_TXSCHED_PRIO 0x00000002
295#define TCTRL_TXSCHED_WRRS 0x00000004
230#define TCTRL_INIT_CSUM (TCTRL_TUCSEN | TCTRL_IPCSEN) 296#define TCTRL_INIT_CSUM (TCTRL_TUCSEN | TCTRL_IPCSEN)
231 297
232#define IEVENT_INIT_CLEAR 0xffffffff 298#define IEVENT_INIT_CLEAR 0xffffffff
@@ -267,7 +333,7 @@ extern const char gfar_driver_version[];
267#define IMASK_BSY 0x20000000 333#define IMASK_BSY 0x20000000
268#define IMASK_EBERR 0x10000000 334#define IMASK_EBERR 0x10000000
269#define IMASK_MSRO 0x04000000 335#define IMASK_MSRO 0x04000000
270#define IMASK_GRSC 0x02000000 336#define IMASK_GTSC 0x02000000
271#define IMASK_BABT 0x01000000 337#define IMASK_BABT 0x01000000
272#define IMASK_TXC 0x00800000 338#define IMASK_TXC 0x00800000
273#define IMASK_TXEEN 0x00400000 339#define IMASK_TXEEN 0x00400000
@@ -278,7 +344,7 @@ extern const char gfar_driver_version[];
278#define IMASK_XFUN 0x00010000 344#define IMASK_XFUN 0x00010000
279#define IMASK_RXB0 0x00008000 345#define IMASK_RXB0 0x00008000
280#define IMASK_MAG 0x00000800 346#define IMASK_MAG 0x00000800
281#define IMASK_GTSC 0x00000100 347#define IMASK_GRSC 0x00000100
282#define IMASK_RXFEN0 0x00000080 348#define IMASK_RXFEN0 0x00000080
283#define IMASK_FIR 0x00000008 349#define IMASK_FIR 0x00000008
284#define IMASK_FIQ 0x00000004 350#define IMASK_FIQ 0x00000004
@@ -315,6 +381,88 @@ extern const char gfar_driver_version[];
315#define BD_LFLAG(flags) ((flags) << 16) 381#define BD_LFLAG(flags) ((flags) << 16)
316#define BD_LENGTH_MASK 0x0000ffff 382#define BD_LENGTH_MASK 0x0000ffff
317 383
384#define CLASS_CODE_UNRECOG 0x00
385#define CLASS_CODE_DUMMY1 0x01
386#define CLASS_CODE_ETHERTYPE1 0x02
387#define CLASS_CODE_ETHERTYPE2 0x03
388#define CLASS_CODE_USER_PROG1 0x04
389#define CLASS_CODE_USER_PROG2 0x05
390#define CLASS_CODE_USER_PROG3 0x06
391#define CLASS_CODE_USER_PROG4 0x07
392#define CLASS_CODE_TCP_IPV4 0x08
393#define CLASS_CODE_UDP_IPV4 0x09
394#define CLASS_CODE_AH_ESP_IPV4 0x0a
395#define CLASS_CODE_SCTP_IPV4 0x0b
396#define CLASS_CODE_TCP_IPV6 0x0c
397#define CLASS_CODE_UDP_IPV6 0x0d
398#define CLASS_CODE_AH_ESP_IPV6 0x0e
399#define CLASS_CODE_SCTP_IPV6 0x0f
400
401#define FPR_FILER_MASK 0xFFFFFFFF
402#define MAX_FILER_IDX 0xFF
403
404/* This default RIR value directly corresponds
405 * to the 3-bit hash value generated */
406#define DEFAULT_RIR0 0x05397700
407
408/* RQFCR register bits */
409#define RQFCR_GPI 0x80000000
410#define RQFCR_HASHTBL_Q 0x00000000
411#define RQFCR_HASHTBL_0 0x00020000
412#define RQFCR_HASHTBL_1 0x00040000
413#define RQFCR_HASHTBL_2 0x00060000
414#define RQFCR_HASHTBL_3 0x00080000
415#define RQFCR_HASH 0x00010000
416#define RQFCR_CLE 0x00000200
417#define RQFCR_RJE 0x00000100
418#define RQFCR_AND 0x00000080
419#define RQFCR_CMP_EXACT 0x00000000
420#define RQFCR_CMP_MATCH 0x00000020
421#define RQFCR_CMP_NOEXACT 0x00000040
422#define RQFCR_CMP_NOMATCH 0x00000060
423
424/* RQFCR PID values */
425#define RQFCR_PID_MASK 0x00000000
426#define RQFCR_PID_PARSE 0x00000001
427#define RQFCR_PID_ARB 0x00000002
428#define RQFCR_PID_DAH 0x00000003
429#define RQFCR_PID_DAL 0x00000004
430#define RQFCR_PID_SAH 0x00000005
431#define RQFCR_PID_SAL 0x00000006
432#define RQFCR_PID_ETY 0x00000007
433#define RQFCR_PID_VID 0x00000008
434#define RQFCR_PID_PRI 0x00000009
435#define RQFCR_PID_TOS 0x0000000A
436#define RQFCR_PID_L4P 0x0000000B
437#define RQFCR_PID_DIA 0x0000000C
438#define RQFCR_PID_SIA 0x0000000D
439#define RQFCR_PID_DPT 0x0000000E
440#define RQFCR_PID_SPT 0x0000000F
441
442/* RQFPR when PID is 0x0001 */
443#define RQFPR_HDR_GE_512 0x00200000
444#define RQFPR_LERR 0x00100000
445#define RQFPR_RAR 0x00080000
446#define RQFPR_RARQ 0x00040000
447#define RQFPR_AR 0x00020000
448#define RQFPR_ARQ 0x00010000
449#define RQFPR_EBC 0x00008000
450#define RQFPR_VLN 0x00004000
451#define RQFPR_CFI 0x00002000
452#define RQFPR_JUM 0x00001000
453#define RQFPR_IPF 0x00000800
454#define RQFPR_FIF 0x00000400
455#define RQFPR_IPV4 0x00000200
456#define RQFPR_IPV6 0x00000100
457#define RQFPR_ICC 0x00000080
458#define RQFPR_ICV 0x00000040
459#define RQFPR_TCP 0x00000020
460#define RQFPR_UDP 0x00000010
461#define RQFPR_TUC 0x00000008
462#define RQFPR_TUV 0x00000004
463#define RQFPR_PER 0x00000002
464#define RQFPR_EER 0x00000001
465
318/* TxBD status field bits */ 466/* TxBD status field bits */
319#define TXBD_READY 0x8000 467#define TXBD_READY 0x8000
320#define TXBD_PADCRC 0x4000 468#define TXBD_PADCRC 0x4000
@@ -418,6 +566,12 @@ struct rxfcb {
418 u16 vlctl; /* VLAN control word */ 566 u16 vlctl; /* VLAN control word */
419}; 567};
420 568
569struct gianfar_skb_cb {
570 int alignamount;
571};
572
573#define GFAR_CB(skb) ((struct gianfar_skb_cb *)((skb)->cb))
574
421struct rmon_mib 575struct rmon_mib
422{ 576{
423 u32 tr64; /* 0x.680 - Transmit and Receive 64-byte Frame Counter */ 577 u32 tr64; /* 0x.680 - Transmit and Receive 64-byte Frame Counter */
@@ -503,25 +657,32 @@ struct gfar_stats {
503 657
504struct gfar { 658struct gfar {
505 u32 tsec_id; /* 0x.000 - Controller ID register */ 659 u32 tsec_id; /* 0x.000 - Controller ID register */
506 u8 res1[12]; 660 u32 tsec_id2; /* 0x.004 - Controller ID2 register */
661 u8 res1[8];
507 u32 ievent; /* 0x.010 - Interrupt Event Register */ 662 u32 ievent; /* 0x.010 - Interrupt Event Register */
508 u32 imask; /* 0x.014 - Interrupt Mask Register */ 663 u32 imask; /* 0x.014 - Interrupt Mask Register */
509 u32 edis; /* 0x.018 - Error Disabled Register */ 664 u32 edis; /* 0x.018 - Error Disabled Register */
510 u8 res2[4]; 665 u32 emapg; /* 0x.01c - Group Error mapping register */
511 u32 ecntrl; /* 0x.020 - Ethernet Control Register */ 666 u32 ecntrl; /* 0x.020 - Ethernet Control Register */
512 u32 minflr; /* 0x.024 - Minimum Frame Length Register */ 667 u32 minflr; /* 0x.024 - Minimum Frame Length Register */
513 u32 ptv; /* 0x.028 - Pause Time Value Register */ 668 u32 ptv; /* 0x.028 - Pause Time Value Register */
514 u32 dmactrl; /* 0x.02c - DMA Control Register */ 669 u32 dmactrl; /* 0x.02c - DMA Control Register */
515 u32 tbipa; /* 0x.030 - TBI PHY Address Register */ 670 u32 tbipa; /* 0x.030 - TBI PHY Address Register */
516 u8 res3[88]; 671 u8 res2[28];
672 u32 fifo_rx_pause; /* 0x.050 - FIFO receive pause start threshold
673 register */
674 u32 fifo_rx_pause_shutoff; /* x.054 - FIFO receive starve shutoff
675 register */
676 u32 fifo_rx_alarm; /* 0x.058 - FIFO receive alarm start threshold
677 register */
678 u32 fifo_rx_alarm_shutoff; /*0x.05c - FIFO receive alarm starve
679 shutoff register */
680 u8 res3[44];
517 u32 fifo_tx_thr; /* 0x.08c - FIFO transmit threshold register */ 681 u32 fifo_tx_thr; /* 0x.08c - FIFO transmit threshold register */
518 u8 res4[8]; 682 u8 res4[8];
519 u32 fifo_tx_starve; /* 0x.098 - FIFO transmit starve register */ 683 u32 fifo_tx_starve; /* 0x.098 - FIFO transmit starve register */
520 u32 fifo_tx_starve_shutoff; /* 0x.09c - FIFO transmit starve shutoff register */ 684 u32 fifo_tx_starve_shutoff; /* 0x.09c - FIFO transmit starve shutoff register */
521 u8 res5[4]; 685 u8 res5[96];
522 u32 fifo_rx_pause; /* 0x.0a4 - FIFO receive pause threshold register */
523 u32 fifo_rx_alarm; /* 0x.0a8 - FIFO receive alarm threshold register */
524 u8 res6[84];
525 u32 tctrl; /* 0x.100 - Transmit Control Register */ 686 u32 tctrl; /* 0x.100 - Transmit Control Register */
526 u32 tstat; /* 0x.104 - Transmit Status Register */ 687 u32 tstat; /* 0x.104 - Transmit Status Register */
527 u32 dfvlan; /* 0x.108 - Default VLAN Control word */ 688 u32 dfvlan; /* 0x.108 - Default VLAN Control word */
@@ -572,7 +733,11 @@ struct gfar {
572 u8 res12[8]; 733 u8 res12[8];
573 u32 rxic; /* 0x.310 - Receive Interrupt Coalescing Configuration Register */ 734 u32 rxic; /* 0x.310 - Receive Interrupt Coalescing Configuration Register */
574 u32 rqueue; /* 0x.314 - Receive queue control register */ 735 u32 rqueue; /* 0x.314 - Receive queue control register */
575 u8 res13[24]; 736 u32 rir0; /* 0x.318 - Ring mapping register 0 */
737 u32 rir1; /* 0x.31c - Ring mapping register 1 */
738 u32 rir2; /* 0x.320 - Ring mapping register 2 */
739 u32 rir3; /* 0x.324 - Ring mapping register 3 */
740 u8 res13[8];
576 u32 rbifx; /* 0x.330 - Receive bit field extract control register */ 741 u32 rbifx; /* 0x.330 - Receive bit field extract control register */
577 u32 rqfar; /* 0x.334 - Receive queue filing table address register */ 742 u32 rqfar; /* 0x.334 - Receive queue filing table address register */
578 u32 rqfcr; /* 0x.338 - Receive queue filing table control register */ 743 u32 rqfcr; /* 0x.338 - Receive queue filing table control register */
@@ -621,7 +786,7 @@ struct gfar {
621 u32 maxfrm; /* 0x.510 - Maximum Frame Length Register */ 786 u32 maxfrm; /* 0x.510 - Maximum Frame Length Register */
622 u8 res18[12]; 787 u8 res18[12];
623 u8 gfar_mii_regs[24]; /* See gianfar_phy.h */ 788 u8 gfar_mii_regs[24]; /* See gianfar_phy.h */
624 u8 res19[4]; 789 u32 ifctrl; /* 0x.538 - Interface control register */
625 u32 ifstat; /* 0x.53c - Interface Status Register */ 790 u32 ifstat; /* 0x.53c - Interface Status Register */
626 u32 macstnaddr1; /* 0x.540 - Station Address Part 1 Register */ 791 u32 macstnaddr1; /* 0x.540 - Station Address Part 1 Register */
627 u32 macstnaddr2; /* 0x.544 - Station Address Part 2 Register */ 792 u32 macstnaddr2; /* 0x.544 - Station Address Part 2 Register */
@@ -682,8 +847,30 @@ struct gfar {
682 u8 res23c[248]; 847 u8 res23c[248];
683 u32 attr; /* 0x.bf8 - Attributes Register */ 848 u32 attr; /* 0x.bf8 - Attributes Register */
684 u32 attreli; /* 0x.bfc - Attributes Extract Length and Extract Index Register */ 849 u32 attreli; /* 0x.bfc - Attributes Extract Length and Extract Index Register */
685 u8 res24[1024]; 850 u8 res24[688];
686 851 u32 isrg0; /* 0x.eb0 - Interrupt steering group 0 register */
852 u32 isrg1; /* 0x.eb4 - Interrupt steering group 1 register */
853 u32 isrg2; /* 0x.eb8 - Interrupt steering group 2 register */
854 u32 isrg3; /* 0x.ebc - Interrupt steering group 3 register */
855 u8 res25[16];
856 u32 rxic0; /* 0x.ed0 - Ring 0 Rx interrupt coalescing */
857 u32 rxic1; /* 0x.ed4 - Ring 1 Rx interrupt coalescing */
858 u32 rxic2; /* 0x.ed8 - Ring 2 Rx interrupt coalescing */
859 u32 rxic3; /* 0x.edc - Ring 3 Rx interrupt coalescing */
860 u32 rxic4; /* 0x.ee0 - Ring 4 Rx interrupt coalescing */
861 u32 rxic5; /* 0x.ee4 - Ring 5 Rx interrupt coalescing */
862 u32 rxic6; /* 0x.ee8 - Ring 6 Rx interrupt coalescing */
863 u32 rxic7; /* 0x.eec - Ring 7 Rx interrupt coalescing */
864 u8 res26[32];
865 u32 txic0; /* 0x.f10 - Ring 0 Tx interrupt coalescing */
866 u32 txic1; /* 0x.f14 - Ring 1 Tx interrupt coalescing */
867 u32 txic2; /* 0x.f18 - Ring 2 Tx interrupt coalescing */
868 u32 txic3; /* 0x.f1c - Ring 3 Tx interrupt coalescing */
869 u32 txic4; /* 0x.f20 - Ring 4 Tx interrupt coalescing */
870 u32 txic5; /* 0x.f24 - Ring 5 Tx interrupt coalescing */
871 u32 txic6; /* 0x.f28 - Ring 6 Tx interrupt coalescing */
872 u32 txic7; /* 0x.f2c - Ring 7 Tx interrupt coalescing */
873 u8 res27[208];
687}; 874};
688 875
689/* Flags related to gianfar device features */ 876/* Flags related to gianfar device features */
@@ -699,6 +886,143 @@ struct gfar {
699#define FSL_GIANFAR_DEV_HAS_BD_STASHING 0x00000200 886#define FSL_GIANFAR_DEV_HAS_BD_STASHING 0x00000200
700#define FSL_GIANFAR_DEV_HAS_BUF_STASHING 0x00000400 887#define FSL_GIANFAR_DEV_HAS_BUF_STASHING 0x00000400
701 888
889#if (MAXGROUPS == 2)
890#define DEFAULT_MAPPING 0xAA
891#else
892#define DEFAULT_MAPPING 0xFF
893#endif
894
895#define ISRG_SHIFT_TX 0x10
896#define ISRG_SHIFT_RX 0x18
897
898/* The same driver can operate in two modes */
899/* SQ_SG_MODE: Single Queue Single Group Mode
900 * (Backward compatible mode)
901 * MQ_MG_MODE: Multi Queue Multi Group mode
902 */
903enum {
904 SQ_SG_MODE = 0,
905 MQ_MG_MODE
906};
907
908/**
909 * struct gfar_priv_tx_q - per tx queue structure
910 * @txlock: per queue tx spin lock
911 * @tx_skbuff:skb pointers
912 * @skb_curtx: to be used skb pointer
913 * @skb_dirtytx:the last used skb pointer
914 * @qindex: index of this queue
915 * @dev: back pointer to the dev structure
916 * @grp: back pointer to the group to which this queue belongs
917 * @tx_bd_base: First tx buffer descriptor
918 * @cur_tx: Next free ring entry
919 * @dirty_tx: First buffer in line to be transmitted
920 * @tx_ring_size: Tx ring size
921 * @num_txbdfree: number of free TxBds
922 * @txcoalescing: enable/disable tx coalescing
923 * @txic: transmit interrupt coalescing value
924 * @txcount: coalescing value if based on tx frame count
925 * @txtime: coalescing value if based on time
926 */
927struct gfar_priv_tx_q {
928 spinlock_t txlock __attribute__ ((aligned (SMP_CACHE_BYTES)));
929 struct sk_buff ** tx_skbuff;
930 /* Buffer descriptor pointers */
931 dma_addr_t tx_bd_dma_base;
932 struct txbd8 *tx_bd_base;
933 struct txbd8 *cur_tx;
934 struct txbd8 *dirty_tx;
935 struct net_device *dev;
936 struct gfar_priv_grp *grp;
937 u16 skb_curtx;
938 u16 skb_dirtytx;
939 u16 qindex;
940 unsigned int tx_ring_size;
941 unsigned int num_txbdfree;
942 /* Configuration info for the coalescing features */
943 unsigned char txcoalescing;
944 unsigned long txic;
945 unsigned short txcount;
946 unsigned short txtime;
947};
948
949/*
950 * Per RX queue stats
951 */
952struct rx_q_stats {
953 unsigned long rx_packets;
954 unsigned long rx_bytes;
955 unsigned long rx_dropped;
956};
957
958/**
959 * struct gfar_priv_rx_q - per rx queue structure
960 * @rxlock: per queue rx spin lock
961 * @rx_skbuff: skb pointers
962 * @skb_currx: currently use skb pointer
963 * @rx_bd_base: First rx buffer descriptor
964 * @cur_rx: Next free rx ring entry
965 * @qindex: index of this queue
966 * @dev: back pointer to the dev structure
967 * @rx_ring_size: Rx ring size
968 * @rxcoalescing: enable/disable rx-coalescing
969 * @rxic: receive interrupt coalescing vlaue
970 */
971
972struct gfar_priv_rx_q {
973 spinlock_t rxlock __attribute__ ((aligned (SMP_CACHE_BYTES)));
974 struct sk_buff ** rx_skbuff;
975 dma_addr_t rx_bd_dma_base;
976 struct rxbd8 *rx_bd_base;
977 struct rxbd8 *cur_rx;
978 struct net_device *dev;
979 struct gfar_priv_grp *grp;
980 struct rx_q_stats stats;
981 u16 skb_currx;
982 u16 qindex;
983 unsigned int rx_ring_size;
984 /* RX Coalescing values */
985 unsigned char rxcoalescing;
986 unsigned long rxic;
987};
988
989/**
990 * struct gfar_priv_grp - per group structure
991 * @napi: the napi poll function
992 * @priv: back pointer to the priv structure
993 * @regs: the ioremapped register space for this group
994 * @grp_id: group id for this group
995 * @interruptTransmit: The TX interrupt number for this group
996 * @interruptReceive: The RX interrupt number for this group
997 * @interruptError: The ERROR interrupt number for this group
998 * @int_name_tx: tx interrupt name for this group
999 * @int_name_rx: rx interrupt name for this group
1000 * @int_name_er: er interrupt name for this group
1001 */
1002
1003struct gfar_priv_grp {
1004 spinlock_t grplock __attribute__ ((aligned (SMP_CACHE_BYTES)));
1005 struct napi_struct napi;
1006 struct gfar_private *priv;
1007 struct gfar __iomem *regs;
1008 unsigned int grp_id;
1009 unsigned long rx_bit_map;
1010 unsigned long tx_bit_map;
1011 unsigned long num_tx_queues;
1012 unsigned long num_rx_queues;
1013 unsigned int rstat;
1014 unsigned int tstat;
1015 unsigned int imask;
1016 unsigned int ievent;
1017 unsigned int interruptTransmit;
1018 unsigned int interruptReceive;
1019 unsigned int interruptError;
1020
1021 char int_name_tx[GFAR_INT_NAME_MAX];
1022 char int_name_rx[GFAR_INT_NAME_MAX];
1023 char int_name_er[GFAR_INT_NAME_MAX];
1024};
1025
702/* Struct stolen almost completely (and shamelessly) from the FCC enet source 1026/* Struct stolen almost completely (and shamelessly) from the FCC enet source
703 * (Ok, that's not so true anymore, but there is a family resemblence) 1027 * (Ok, that's not so true anymore, but there is a family resemblence)
704 * The GFAR buffer descriptors track the ring buffers. The rx_bd_base 1028 * The GFAR buffer descriptors track the ring buffers. The rx_bd_base
@@ -709,62 +1033,36 @@ struct gfar {
709 * the buffer descriptor determines the actual condition. 1033 * the buffer descriptor determines the actual condition.
710 */ 1034 */
711struct gfar_private { 1035struct gfar_private {
712 /* Fields controlled by TX lock */
713 spinlock_t txlock;
714 1036
715 /* Pointer to the array of skbuffs */ 1037 /* Indicates how many tx, rx queues are enabled */
716 struct sk_buff ** tx_skbuff; 1038 unsigned int num_tx_queues;
1039 unsigned int num_rx_queues;
1040 unsigned int num_grps;
1041 unsigned int mode;
717 1042
718 /* next free skb in the array */ 1043 /* The total tx and rx ring size for the enabled queues */
719 u16 skb_curtx; 1044 unsigned int total_tx_ring_size;
720 1045 unsigned int total_rx_ring_size;
721 /* First skb in line to be transmitted */
722 u16 skb_dirtytx;
723
724 /* Configuration info for the coalescing features */
725 unsigned char txcoalescing;
726 unsigned long txic;
727
728 /* Buffer descriptor pointers */
729 struct txbd8 *tx_bd_base; /* First tx buffer descriptor */
730 struct txbd8 *cur_tx; /* Next free ring entry */
731 struct txbd8 *dirty_tx; /* First buffer in line
732 to be transmitted */
733 unsigned int tx_ring_size;
734 unsigned int num_txbdfree; /* number of TxBDs free */
735
736 /* RX Locked fields */
737 spinlock_t rxlock;
738 1046
739 struct device_node *node; 1047 struct device_node *node;
740 struct net_device *ndev; 1048 struct net_device *ndev;
741 struct of_device *ofdev; 1049 struct of_device *ofdev;
742 struct napi_struct napi;
743 1050
744 /* skb array and index */ 1051 struct gfar_priv_grp gfargrp[MAXGROUPS];
745 struct sk_buff ** rx_skbuff; 1052 struct gfar_priv_tx_q *tx_queue[MAX_TX_QS];
746 u16 skb_currx; 1053 struct gfar_priv_rx_q *rx_queue[MAX_RX_QS];
747 1054
748 /* RX Coalescing values */ 1055 /* RX per device parameters */
749 unsigned char rxcoalescing;
750 unsigned long rxic;
751
752 struct rxbd8 *rx_bd_base; /* First Rx buffers */
753 struct rxbd8 *cur_rx; /* Next free rx ring entry */
754
755 /* RX parameters */
756 unsigned int rx_ring_size;
757 unsigned int rx_buffer_size; 1056 unsigned int rx_buffer_size;
758 unsigned int rx_stash_size; 1057 unsigned int rx_stash_size;
759 unsigned int rx_stash_index; 1058 unsigned int rx_stash_index;
760 1059
1060 u32 cur_filer_idx;
1061
761 struct sk_buff_head rx_recycle; 1062 struct sk_buff_head rx_recycle;
762 1063
763 struct vlan_group *vlgrp; 1064 struct vlan_group *vlgrp;
764 1065
765 /* Unprotected fields */
766 /* Pointer to the GFAR memory mapped Registers */
767 struct gfar __iomem *regs;
768 1066
769 /* Hash registers and their width */ 1067 /* Hash registers and their width */
770 u32 __iomem *hash_regs[16]; 1068 u32 __iomem *hash_regs[16];
@@ -785,13 +1083,10 @@ struct gfar_private {
785 unsigned char rx_csum_enable:1, 1083 unsigned char rx_csum_enable:1,
786 extended_hash:1, 1084 extended_hash:1,
787 bd_stash_en:1, 1085 bd_stash_en:1,
1086 rx_filer_enable:1,
788 wol_en:1; /* Wake-on-LAN enabled */ 1087 wol_en:1; /* Wake-on-LAN enabled */
789 unsigned short padding; 1088 unsigned short padding;
790 1089
791 unsigned int interruptTransmit;
792 unsigned int interruptReceive;
793 unsigned int interruptError;
794
795 /* PHY stuff */ 1090 /* PHY stuff */
796 struct phy_device *phydev; 1091 struct phy_device *phydev;
797 struct mii_bus *mii_bus; 1092 struct mii_bus *mii_bus;
@@ -803,14 +1098,13 @@ struct gfar_private {
803 1098
804 struct work_struct reset_task; 1099 struct work_struct reset_task;
805 1100
806 char int_name_tx[GFAR_INT_NAME_MAX];
807 char int_name_rx[GFAR_INT_NAME_MAX];
808 char int_name_er[GFAR_INT_NAME_MAX];
809
810 /* Network Statistics */ 1101 /* Network Statistics */
811 struct gfar_extra_stats extra_stats; 1102 struct gfar_extra_stats extra_stats;
812}; 1103};
813 1104
1105extern unsigned int ftp_rqfpr[MAX_FILER_IDX + 1];
1106extern unsigned int ftp_rqfcr[MAX_FILER_IDX + 1];
1107
814static inline u32 gfar_read(volatile unsigned __iomem *addr) 1108static inline u32 gfar_read(volatile unsigned __iomem *addr)
815{ 1109{
816 u32 val; 1110 u32 val;
@@ -823,12 +1117,28 @@ static inline void gfar_write(volatile unsigned __iomem *addr, u32 val)
823 out_be32(addr, val); 1117 out_be32(addr, val);
824} 1118}
825 1119
1120static inline void gfar_write_filer(struct gfar_private *priv,
1121 unsigned int far, unsigned int fcr, unsigned int fpr)
1122{
1123 struct gfar __iomem *regs = priv->gfargrp[0].regs;
1124
1125 gfar_write(&regs->rqfar, far);
1126 gfar_write(&regs->rqfcr, fcr);
1127 gfar_write(&regs->rqfpr, fpr);
1128}
1129
1130extern void lock_rx_qs(struct gfar_private *priv);
1131extern void lock_tx_qs(struct gfar_private *priv);
1132extern void unlock_rx_qs(struct gfar_private *priv);
1133extern void unlock_tx_qs(struct gfar_private *priv);
826extern irqreturn_t gfar_receive(int irq, void *dev_id); 1134extern irqreturn_t gfar_receive(int irq, void *dev_id);
827extern int startup_gfar(struct net_device *dev); 1135extern int startup_gfar(struct net_device *dev);
828extern void stop_gfar(struct net_device *dev); 1136extern void stop_gfar(struct net_device *dev);
829extern void gfar_halt(struct net_device *dev); 1137extern void gfar_halt(struct net_device *dev);
830extern void gfar_phy_test(struct mii_bus *bus, struct phy_device *phydev, 1138extern void gfar_phy_test(struct mii_bus *bus, struct phy_device *phydev,
831 int enable, u32 regnum, u32 read); 1139 int enable, u32 regnum, u32 read);
1140extern void gfar_configure_coalescing(struct gfar_private *priv,
1141 unsigned long tx_mask, unsigned long rx_mask);
832void gfar_init_sysfs(struct net_device *dev); 1142void gfar_init_sysfs(struct net_device *dev);
833 1143
834extern const struct ethtool_ops gfar_ethtool_ops; 1144extern const struct ethtool_ops gfar_ethtool_ops;