diff options
Diffstat (limited to 'drivers/net/gianfar.h')
-rw-r--r-- | drivers/net/gianfar.h | 96 |
1 files changed, 91 insertions, 5 deletions
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h index 79e8471584ea..5ae769df1d81 100644 --- a/drivers/net/gianfar.h +++ b/drivers/net/gianfar.h | |||
@@ -75,6 +75,10 @@ | |||
75 | extern const char gfar_driver_name[]; | 75 | extern const char gfar_driver_name[]; |
76 | extern const char gfar_driver_version[]; | 76 | extern const char gfar_driver_version[]; |
77 | 77 | ||
78 | /* MAXIMUM NUMBER OF QUEUES SUPPORTED */ | ||
79 | #define MAX_TX_QS 0x8 | ||
80 | #define MAX_RX_QS 0x8 | ||
81 | |||
78 | /* These need to be powers of 2 for this driver */ | 82 | /* These need to be powers of 2 for this driver */ |
79 | #define DEFAULT_TX_RING_SIZE 256 | 83 | #define DEFAULT_TX_RING_SIZE 256 |
80 | #define DEFAULT_RX_RING_SIZE 256 | 84 | #define DEFAULT_RX_RING_SIZE 256 |
@@ -172,12 +176,63 @@ extern const char gfar_driver_version[]; | |||
172 | 176 | ||
173 | #define MINFLR_INIT_SETTINGS 0x00000040 | 177 | #define MINFLR_INIT_SETTINGS 0x00000040 |
174 | 178 | ||
179 | /* Tqueue control */ | ||
180 | #define TQUEUE_EN0 0x00008000 | ||
181 | #define TQUEUE_EN1 0x00004000 | ||
182 | #define TQUEUE_EN2 0x00002000 | ||
183 | #define TQUEUE_EN3 0x00001000 | ||
184 | #define TQUEUE_EN4 0x00000800 | ||
185 | #define TQUEUE_EN5 0x00000400 | ||
186 | #define TQUEUE_EN6 0x00000200 | ||
187 | #define TQUEUE_EN7 0x00000100 | ||
188 | #define TQUEUE_EN_ALL 0x0000FF00 | ||
189 | |||
190 | #define TR03WT_WT0_MASK 0xFF000000 | ||
191 | #define TR03WT_WT1_MASK 0x00FF0000 | ||
192 | #define TR03WT_WT2_MASK 0x0000FF00 | ||
193 | #define TR03WT_WT3_MASK 0x000000FF | ||
194 | |||
195 | #define TR47WT_WT4_MASK 0xFF000000 | ||
196 | #define TR47WT_WT5_MASK 0x00FF0000 | ||
197 | #define TR47WT_WT6_MASK 0x0000FF00 | ||
198 | #define TR47WT_WT7_MASK 0x000000FF | ||
199 | |||
200 | /* Rqueue control */ | ||
201 | #define RQUEUE_EX0 0x00800000 | ||
202 | #define RQUEUE_EX1 0x00400000 | ||
203 | #define RQUEUE_EX2 0x00200000 | ||
204 | #define RQUEUE_EX3 0x00100000 | ||
205 | #define RQUEUE_EX4 0x00080000 | ||
206 | #define RQUEUE_EX5 0x00040000 | ||
207 | #define RQUEUE_EX6 0x00020000 | ||
208 | #define RQUEUE_EX7 0x00010000 | ||
209 | #define RQUEUE_EX_ALL 0x00FF0000 | ||
210 | |||
211 | #define RQUEUE_EN0 0x00000080 | ||
212 | #define RQUEUE_EN1 0x00000040 | ||
213 | #define RQUEUE_EN2 0x00000020 | ||
214 | #define RQUEUE_EN3 0x00000010 | ||
215 | #define RQUEUE_EN4 0x00000008 | ||
216 | #define RQUEUE_EN5 0x00000004 | ||
217 | #define RQUEUE_EN6 0x00000002 | ||
218 | #define RQUEUE_EN7 0x00000001 | ||
219 | #define RQUEUE_EN_ALL 0x000000FF | ||
220 | |||
175 | /* Init to do tx snooping for buffers and descriptors */ | 221 | /* Init to do tx snooping for buffers and descriptors */ |
176 | #define DMACTRL_INIT_SETTINGS 0x000000c3 | 222 | #define DMACTRL_INIT_SETTINGS 0x000000c3 |
177 | #define DMACTRL_GRS 0x00000010 | 223 | #define DMACTRL_GRS 0x00000010 |
178 | #define DMACTRL_GTS 0x00000008 | 224 | #define DMACTRL_GTS 0x00000008 |
179 | 225 | ||
180 | #define TSTAT_CLEAR_THALT 0x80000000 | 226 | #define TSTAT_CLEAR_THALT_ALL 0xFF000000 |
227 | #define TSTAT_CLEAR_THALT 0x80000000 | ||
228 | #define TSTAT_CLEAR_THALT0 0x80000000 | ||
229 | #define TSTAT_CLEAR_THALT1 0x40000000 | ||
230 | #define TSTAT_CLEAR_THALT2 0x20000000 | ||
231 | #define TSTAT_CLEAR_THALT3 0x10000000 | ||
232 | #define TSTAT_CLEAR_THALT4 0x08000000 | ||
233 | #define TSTAT_CLEAR_THALT5 0x04000000 | ||
234 | #define TSTAT_CLEAR_THALT6 0x02000000 | ||
235 | #define TSTAT_CLEAR_THALT7 0x01000000 | ||
181 | 236 | ||
182 | /* Interrupt coalescing macros */ | 237 | /* Interrupt coalescing macros */ |
183 | #define IC_ICEN 0x80000000 | 238 | #define IC_ICEN 0x80000000 |
@@ -228,6 +283,13 @@ extern const char gfar_driver_version[]; | |||
228 | #define TCTRL_IPCSEN 0x00004000 | 283 | #define TCTRL_IPCSEN 0x00004000 |
229 | #define TCTRL_TUCSEN 0x00002000 | 284 | #define TCTRL_TUCSEN 0x00002000 |
230 | #define TCTRL_VLINS 0x00001000 | 285 | #define TCTRL_VLINS 0x00001000 |
286 | #define TCTRL_THDF 0x00000800 | ||
287 | #define TCTRL_RFCPAUSE 0x00000010 | ||
288 | #define TCTRL_TFCPAUSE 0x00000008 | ||
289 | #define TCTRL_TXSCHED_MASK 0x00000006 | ||
290 | #define TCTRL_TXSCHED_INIT 0x00000000 | ||
291 | #define TCTRL_TXSCHED_PRIO 0x00000002 | ||
292 | #define TCTRL_TXSCHED_WRRS 0x00000004 | ||
231 | #define TCTRL_INIT_CSUM (TCTRL_TUCSEN | TCTRL_IPCSEN) | 293 | #define TCTRL_INIT_CSUM (TCTRL_TUCSEN | TCTRL_IPCSEN) |
232 | 294 | ||
233 | #define IEVENT_INIT_CLEAR 0xffffffff | 295 | #define IEVENT_INIT_CLEAR 0xffffffff |
@@ -700,6 +762,8 @@ struct gfar { | |||
700 | #define FSL_GIANFAR_DEV_HAS_BD_STASHING 0x00000200 | 762 | #define FSL_GIANFAR_DEV_HAS_BD_STASHING 0x00000200 |
701 | #define FSL_GIANFAR_DEV_HAS_BUF_STASHING 0x00000400 | 763 | #define FSL_GIANFAR_DEV_HAS_BUF_STASHING 0x00000400 |
702 | 764 | ||
765 | #define DEFAULT_MAPPING 0xFF | ||
766 | |||
703 | /** | 767 | /** |
704 | * struct gfar_priv_tx_q - per tx queue structure | 768 | * struct gfar_priv_tx_q - per tx queue structure |
705 | * @txlock: per queue tx spin lock | 769 | * @txlock: per queue tx spin lock |
@@ -743,7 +807,6 @@ struct gfar_priv_tx_q { | |||
743 | /** | 807 | /** |
744 | * struct gfar_priv_rx_q - per rx queue structure | 808 | * struct gfar_priv_rx_q - per rx queue structure |
745 | * @rxlock: per queue rx spin lock | 809 | * @rxlock: per queue rx spin lock |
746 | * @napi: the napi poll function | ||
747 | * @rx_skbuff: skb pointers | 810 | * @rx_skbuff: skb pointers |
748 | * @skb_currx: currently use skb pointer | 811 | * @skb_currx: currently use skb pointer |
749 | * @rx_bd_base: First rx buffer descriptor | 812 | * @rx_bd_base: First rx buffer descriptor |
@@ -757,8 +820,8 @@ struct gfar_priv_tx_q { | |||
757 | 820 | ||
758 | struct gfar_priv_rx_q { | 821 | struct gfar_priv_rx_q { |
759 | spinlock_t rxlock __attribute__ ((aligned (SMP_CACHE_BYTES))); | 822 | spinlock_t rxlock __attribute__ ((aligned (SMP_CACHE_BYTES))); |
760 | struct napi_struct napi; | ||
761 | struct sk_buff ** rx_skbuff; | 823 | struct sk_buff ** rx_skbuff; |
824 | dma_addr_t rx_bd_dma_base; | ||
762 | struct rxbd8 *rx_bd_base; | 825 | struct rxbd8 *rx_bd_base; |
763 | struct rxbd8 *cur_rx; | 826 | struct rxbd8 *cur_rx; |
764 | struct net_device *dev; | 827 | struct net_device *dev; |
@@ -772,6 +835,7 @@ struct gfar_priv_rx_q { | |||
772 | 835 | ||
773 | /** | 836 | /** |
774 | * struct gfar_priv_grp - per group structure | 837 | * struct gfar_priv_grp - per group structure |
838 | * @napi: the napi poll function | ||
775 | * @priv: back pointer to the priv structure | 839 | * @priv: back pointer to the priv structure |
776 | * @regs: the ioremapped register space for this group | 840 | * @regs: the ioremapped register space for this group |
777 | * @grp_id: group id for this group | 841 | * @grp_id: group id for this group |
@@ -785,8 +849,17 @@ struct gfar_priv_rx_q { | |||
785 | 849 | ||
786 | struct gfar_priv_grp { | 850 | struct gfar_priv_grp { |
787 | spinlock_t grplock __attribute__ ((aligned (SMP_CACHE_BYTES))); | 851 | spinlock_t grplock __attribute__ ((aligned (SMP_CACHE_BYTES))); |
852 | struct napi_struct napi; | ||
788 | struct gfar_private *priv; | 853 | struct gfar_private *priv; |
789 | struct gfar __iomem *regs; | 854 | struct gfar __iomem *regs; |
855 | unsigned int rx_bit_map; | ||
856 | unsigned int tx_bit_map; | ||
857 | unsigned int num_tx_queues; | ||
858 | unsigned int num_rx_queues; | ||
859 | unsigned int rstat; | ||
860 | unsigned int tstat; | ||
861 | unsigned int imask; | ||
862 | unsigned int ievent; | ||
790 | unsigned int interruptTransmit; | 863 | unsigned int interruptTransmit; |
791 | unsigned int interruptReceive; | 864 | unsigned int interruptReceive; |
792 | unsigned int interruptError; | 865 | unsigned int interruptError; |
@@ -807,13 +880,21 @@ struct gfar_priv_grp { | |||
807 | */ | 880 | */ |
808 | struct gfar_private { | 881 | struct gfar_private { |
809 | 882 | ||
883 | /* Indicates how many tx, rx queues are enabled */ | ||
884 | unsigned int num_tx_queues; | ||
885 | unsigned int num_rx_queues; | ||
886 | |||
887 | /* The total tx and rx ring size for the enabled queues */ | ||
888 | unsigned int total_tx_ring_size; | ||
889 | unsigned int total_rx_ring_size; | ||
890 | |||
810 | struct device_node *node; | 891 | struct device_node *node; |
811 | struct net_device *ndev; | 892 | struct net_device *ndev; |
812 | struct of_device *ofdev; | 893 | struct of_device *ofdev; |
813 | 894 | ||
814 | struct gfar_priv_grp gfargrp; | 895 | struct gfar_priv_grp gfargrp; |
815 | struct gfar_priv_tx_q *tx_queue; | 896 | struct gfar_priv_tx_q *tx_queue[MAX_TX_QS]; |
816 | struct gfar_priv_rx_q *rx_queue; | 897 | struct gfar_priv_rx_q *rx_queue[MAX_RX_QS]; |
817 | 898 | ||
818 | /* RX per device parameters */ | 899 | /* RX per device parameters */ |
819 | unsigned int rx_buffer_size; | 900 | unsigned int rx_buffer_size; |
@@ -844,6 +925,7 @@ struct gfar_private { | |||
844 | unsigned char rx_csum_enable:1, | 925 | unsigned char rx_csum_enable:1, |
845 | extended_hash:1, | 926 | extended_hash:1, |
846 | bd_stash_en:1, | 927 | bd_stash_en:1, |
928 | rx_filer_enable:1, | ||
847 | wol_en:1; /* Wake-on-LAN enabled */ | 929 | wol_en:1; /* Wake-on-LAN enabled */ |
848 | unsigned short padding; | 930 | unsigned short padding; |
849 | 931 | ||
@@ -874,6 +956,10 @@ static inline void gfar_write(volatile unsigned __iomem *addr, u32 val) | |||
874 | out_be32(addr, val); | 956 | out_be32(addr, val); |
875 | } | 957 | } |
876 | 958 | ||
959 | extern void lock_rx_qs(struct gfar_private *priv); | ||
960 | extern void lock_tx_qs(struct gfar_private *priv); | ||
961 | extern void unlock_rx_qs(struct gfar_private *priv); | ||
962 | extern void unlock_tx_qs(struct gfar_private *priv); | ||
877 | extern irqreturn_t gfar_receive(int irq, void *dev_id); | 963 | extern irqreturn_t gfar_receive(int irq, void *dev_id); |
878 | extern int startup_gfar(struct net_device *dev); | 964 | extern int startup_gfar(struct net_device *dev); |
879 | extern void stop_gfar(struct net_device *dev); | 965 | extern void stop_gfar(struct net_device *dev); |