1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/module.h>
20#include <linux/ioport.h>
21#include <linux/netdevice.h>
22#include <linux/etherdevice.h>
23#include <linux/init.h>
24#include <linux/skbuff.h>
25#include <linux/spinlock.h>
26#include <linux/crc32.h>
27#include <linux/mii.h>
28#include <linux/ethtool.h>
29#include <linux/delay.h>
30#include <linux/platform_device.h>
31#include <linux/irq.h>
32#include <linux/io.h>
33#include <linux/slab.h>
34
35#include <asm/irq.h>
36
37#include <mach/regs-switch.h>
38#include <mach/regs-misc.h>
39#include <asm/mach/irq.h>
40#include <mach/regs-irq.h>
41
42#include "ks8695net.h"
43
44#define MODULENAME "ks8695_ether"
45#define MODULEVERSION "1.02"
46
47
48
49
50static int watchdog = 5000;
51
52
53
54
55
56
57
58
59
60
61struct rx_ring_desc {
62 __le32 status;
63 __le32 length;
64 __le32 data_ptr;
65 __le32 next_desc;
66};
67
68
69
70
71
72
73
74
75struct tx_ring_desc {
76 __le32 owner;
77 __le32 status;
78 __le32 data_ptr;
79 __le32 next_desc;
80};
81
82
83
84
85
86
87
88struct ks8695_skbuff {
89 struct sk_buff *skb;
90 dma_addr_t dma_ptr;
91 u32 length;
92};
93
94
95
96#define MAX_TX_DESC 8
97#define MAX_TX_DESC_MASK 0x7
98#define MAX_RX_DESC 16
99#define MAX_RX_DESC_MASK 0xf
100
101
102#define NAPI_WEIGHT 64
103
104#define MAX_RXBUF_SIZE 0x700
105
106#define TX_RING_DMA_SIZE (sizeof(struct tx_ring_desc) * MAX_TX_DESC)
107#define RX_RING_DMA_SIZE (sizeof(struct rx_ring_desc) * MAX_RX_DESC)
108#define RING_DMA_SIZE (TX_RING_DMA_SIZE + RX_RING_DMA_SIZE)
109
110
111
112
113
114
115
116enum ks8695_dtype {
117 KS8695_DTYPE_WAN,
118 KS8695_DTYPE_LAN,
119 KS8695_DTYPE_HPNA,
120};
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156struct ks8695_priv {
157 int in_suspend;
158 struct net_device *ndev;
159 struct device *dev;
160 enum ks8695_dtype dtype;
161 void __iomem *io_regs;
162
163 struct napi_struct napi;
164
165 const char *rx_irq_name, *tx_irq_name, *link_irq_name;
166 int rx_irq, tx_irq, link_irq;
167
168 struct resource *regs_req, *phyiface_req;
169 void __iomem *phyiface_regs;
170
171 void *ring_base;
172 dma_addr_t ring_base_dma;
173
174 struct tx_ring_desc *tx_ring;
175 int tx_ring_used;
176 int tx_ring_next_slot;
177 dma_addr_t tx_ring_dma;
178 struct ks8695_skbuff tx_buffers[MAX_TX_DESC];
179 spinlock_t txq_lock;
180
181 struct rx_ring_desc *rx_ring;
182 dma_addr_t rx_ring_dma;
183 struct ks8695_skbuff rx_buffers[MAX_RX_DESC];
184 int next_rx_desc_read;
185 spinlock_t rx_lock;
186
187 int msg_enable;
188};
189
190
191
192
193
194
195
196
197static inline u32
198ks8695_readreg(struct ks8695_priv *ksp, int reg)
199{
200 return readl(ksp->io_regs + reg);
201}
202
203
204
205
206
207
208
209static inline void
210ks8695_writereg(struct ks8695_priv *ksp, int reg, u32 value)
211{
212 writel(value, ksp->io_regs + reg);
213}
214
215
216
217
218
219
220
221
222
223
224static const char *
225ks8695_port_type(struct ks8695_priv *ksp)
226{
227 switch (ksp->dtype) {
228 case KS8695_DTYPE_LAN:
229 return "LAN";
230 case KS8695_DTYPE_WAN:
231 return "WAN";
232 case KS8695_DTYPE_HPNA:
233 return "HPNA";
234 }
235
236 return "UNKNOWN";
237}
238
239
240
241
242
243
244
245
246static void
247ks8695_update_mac(struct ks8695_priv *ksp)
248{
249
250 struct net_device *ndev = ksp->ndev;
251 u32 machigh, maclow;
252
253 maclow = ((ndev->dev_addr[2] << 24) | (ndev->dev_addr[3] << 16) |
254 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5] << 0));
255 machigh = ((ndev->dev_addr[0] << 8) | (ndev->dev_addr[1] << 0));
256
257 ks8695_writereg(ksp, KS8695_MAL, maclow);
258 ks8695_writereg(ksp, KS8695_MAH, machigh);
259
260}
261
262
263
264
265
266
267
268
269
270
271static void
272ks8695_refill_rxbuffers(struct ks8695_priv *ksp)
273{
274
275 int buff_n;
276
277 for (buff_n = 0; buff_n < MAX_RX_DESC; ++buff_n) {
278 if (!ksp->rx_buffers[buff_n].skb) {
279 struct sk_buff *skb = dev_alloc_skb(MAX_RXBUF_SIZE);
280 dma_addr_t mapping;
281
282 ksp->rx_buffers[buff_n].skb = skb;
283 if (skb == NULL) {
284
285
286
287 break;
288 }
289
290 mapping = dma_map_single(ksp->dev, skb->data,
291 MAX_RXBUF_SIZE,
292 DMA_FROM_DEVICE);
293 if (unlikely(dma_mapping_error(ksp->dev, mapping))) {
294
295 dev_kfree_skb_irq(skb);
296 ksp->rx_buffers[buff_n].skb = NULL;
297 break;
298 }
299 ksp->rx_buffers[buff_n].dma_ptr = mapping;
300 skb->dev = ksp->ndev;
301 ksp->rx_buffers[buff_n].length = MAX_RXBUF_SIZE;
302
303
304 ksp->rx_ring[buff_n].data_ptr = cpu_to_le32(mapping);
305 ksp->rx_ring[buff_n].length =
306 cpu_to_le32(MAX_RXBUF_SIZE);
307
308 wmb();
309
310
311 ksp->rx_ring[buff_n].status = cpu_to_le32(RDES_OWN);
312 }
313 }
314}
315
316
317#define KS8695_NR_ADDRESSES 16
318
319
320
321
322
323
324
325
326
327
328
329static void
330ks8695_init_partial_multicast(struct ks8695_priv *ksp,
331 struct net_device *ndev)
332{
333 u32 low, high;
334 int i;
335 struct dev_mc_list *dmi;
336
337 i = 0;
338 netdev_for_each_mc_addr(dmi, ndev) {
339
340 BUG_ON(i == KS8695_NR_ADDRESSES);
341
342 low = (dmi->dmi_addr[2] << 24) | (dmi->dmi_addr[3] << 16) |
343 (dmi->dmi_addr[4] << 8) | (dmi->dmi_addr[5]);
344 high = (dmi->dmi_addr[0] << 8) | (dmi->dmi_addr[1]);
345
346 ks8695_writereg(ksp, KS8695_AAL_(i), low);
347 ks8695_writereg(ksp, KS8695_AAH_(i), AAH_E | high);
348 i++;
349 }
350
351
352 for (; i < KS8695_NR_ADDRESSES; i++) {
353 ks8695_writereg(ksp, KS8695_AAL_(i), 0);
354 ks8695_writereg(ksp, KS8695_AAH_(i), 0);
355 }
356}
357
358
359
360
361
362
363
364
365
366
367
368
369static irqreturn_t
370ks8695_tx_irq(int irq, void *dev_id)
371{
372 struct net_device *ndev = (struct net_device *)dev_id;
373 struct ks8695_priv *ksp = netdev_priv(ndev);
374 int buff_n;
375
376 for (buff_n = 0; buff_n < MAX_TX_DESC; ++buff_n) {
377 if (ksp->tx_buffers[buff_n].skb &&
378 !(ksp->tx_ring[buff_n].owner & cpu_to_le32(TDES_OWN))) {
379 rmb();
380
381
382 ndev->stats.tx_packets++;
383 ndev->stats.tx_bytes += ksp->tx_buffers[buff_n].length;
384
385
386 ksp->tx_ring[buff_n].data_ptr = 0;
387
388
389 dma_unmap_single(ksp->dev,
390 ksp->tx_buffers[buff_n].dma_ptr,
391 ksp->tx_buffers[buff_n].length,
392 DMA_TO_DEVICE);
393 dev_kfree_skb_irq(ksp->tx_buffers[buff_n].skb);
394 ksp->tx_buffers[buff_n].skb = NULL;
395 ksp->tx_ring_used--;
396 }
397 }
398
399 netif_wake_queue(ndev);
400
401 return IRQ_HANDLED;
402}
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418static inline u32 ks8695_get_rx_enable_bit(struct ks8695_priv *ksp)
419{
420 return ksp->rx_irq;
421}
422
423
424
425
426
427
428
429
430
431static irqreturn_t
432ks8695_rx_irq(int irq, void *dev_id)
433{
434 struct net_device *ndev = (struct net_device *)dev_id;
435 struct ks8695_priv *ksp = netdev_priv(ndev);
436
437 spin_lock(&ksp->rx_lock);
438
439 if (napi_schedule_prep(&ksp->napi)) {
440 unsigned long status = readl(KS8695_IRQ_VA + KS8695_INTEN);
441 unsigned long mask_bit = 1 << ks8695_get_rx_enable_bit(ksp);
442
443 status &= ~mask_bit;
444 writel(status , KS8695_IRQ_VA + KS8695_INTEN);
445 __napi_schedule(&ksp->napi);
446 }
447
448 spin_unlock(&ksp->rx_lock);
449 return IRQ_HANDLED;
450}
451
452
453
454
455
456
457static int ks8695_rx(struct ks8695_priv *ksp, int budget)
458{
459 struct net_device *ndev = ksp->ndev;
460 struct sk_buff *skb;
461 int buff_n;
462 u32 flags;
463 int pktlen;
464 int received = 0;
465
466 buff_n = ksp->next_rx_desc_read;
467 while (received < budget
468 && ksp->rx_buffers[buff_n].skb
469 && (!(ksp->rx_ring[buff_n].status &
470 cpu_to_le32(RDES_OWN)))) {
471 rmb();
472 flags = le32_to_cpu(ksp->rx_ring[buff_n].status);
473
474
475
476
477 if ((flags & (RDES_FS | RDES_LS)) !=
478 (RDES_FS | RDES_LS)) {
479
480
481
482
483
484 goto rx_failure;
485 }
486
487 if (flags & (RDES_ES | RDES_RE)) {
488
489 ndev->stats.rx_errors++;
490 if (flags & RDES_TL)
491 ndev->stats.rx_length_errors++;
492 if (flags & RDES_RF)
493 ndev->stats.rx_length_errors++;
494 if (flags & RDES_CE)
495 ndev->stats.rx_crc_errors++;
496 if (flags & RDES_RE)
497 ndev->stats.rx_missed_errors++;
498
499 goto rx_failure;
500 }
501
502 pktlen = flags & RDES_FLEN;
503 pktlen -= 4;
504
505
506 skb = ksp->rx_buffers[buff_n].skb;
507
508
509 ksp->rx_buffers[buff_n].skb = NULL;
510 ksp->rx_ring[buff_n].data_ptr = 0;
511
512
513 dma_unmap_single(ksp->dev,
514 ksp->rx_buffers[buff_n].dma_ptr,
515 ksp->rx_buffers[buff_n].length,
516 DMA_FROM_DEVICE);
517
518
519 skb_put(skb, pktlen);
520 skb->protocol = eth_type_trans(skb, ndev);
521 netif_receive_skb(skb);
522
523
524 ndev->stats.rx_packets++;
525 ndev->stats.rx_bytes += pktlen;
526 goto rx_finished;
527
528rx_failure:
529
530
531
532
533 ksp->rx_ring[buff_n].status = cpu_to_le32(RDES_OWN);
534rx_finished:
535 received++;
536 buff_n = (buff_n + 1) & MAX_RX_DESC_MASK;
537 }
538
539
540 ksp->next_rx_desc_read = buff_n;
541
542
543 ks8695_refill_rxbuffers(ksp);
544
545
546 ks8695_writereg(ksp, KS8695_DRSC, 0);
547
548 return received;
549}
550
551
552
553
554
555
556
557
558
559
560static int ks8695_poll(struct napi_struct *napi, int budget)
561{
562 struct ks8695_priv *ksp = container_of(napi, struct ks8695_priv, napi);
563 unsigned long work_done;
564
565 unsigned long isr = readl(KS8695_IRQ_VA + KS8695_INTEN);
566 unsigned long mask_bit = 1 << ks8695_get_rx_enable_bit(ksp);
567
568 work_done = ks8695_rx(ksp, budget);
569
570 if (work_done < budget) {
571 unsigned long flags;
572 spin_lock_irqsave(&ksp->rx_lock, flags);
573 __napi_complete(napi);
574
575 writel(isr | mask_bit, KS8695_IRQ_VA + KS8695_INTEN);
576 spin_unlock_irqrestore(&ksp->rx_lock, flags);
577 }
578 return work_done;
579}
580
581
582
583
584
585
586
587
588
589static irqreturn_t
590ks8695_link_irq(int irq, void *dev_id)
591{
592 struct net_device *ndev = (struct net_device *)dev_id;
593 struct ks8695_priv *ksp = netdev_priv(ndev);
594 u32 ctrl;
595
596 ctrl = readl(ksp->phyiface_regs + KS8695_WMC);
597 if (ctrl & WMC_WLS) {
598 netif_carrier_on(ndev);
599 if (netif_msg_link(ksp))
600 dev_info(ksp->dev,
601 "%s: Link is now up (10%sMbps/%s-duplex)\n",
602 ndev->name,
603 (ctrl & WMC_WSS) ? "0" : "",
604 (ctrl & WMC_WDS) ? "Full" : "Half");
605 } else {
606 netif_carrier_off(ndev);
607 if (netif_msg_link(ksp))
608 dev_info(ksp->dev, "%s: Link is now down.\n",
609 ndev->name);
610 }
611
612 return IRQ_HANDLED;
613}
614
615
616
617
618
619
620
621
622
623
624
625static void
626ks8695_reset(struct ks8695_priv *ksp)
627{
628 int reset_timeout = watchdog;
629
630 ks8695_writereg(ksp, KS8695_DTXC, DTXC_TRST);
631 while (reset_timeout--) {
632 if (!(ks8695_readreg(ksp, KS8695_DTXC) & DTXC_TRST))
633 break;
634 msleep(1);
635 }
636
637 if (reset_timeout < 0) {
638 dev_crit(ksp->dev,
639 "Timeout waiting for DMA engines to reset\n");
640
641 }
642
643
644
645
646 msleep(10);
647
648
649 ks8695_writereg(ksp, KS8695_DRXC, DRXC_RU | DRXC_RB);
650
651 ks8695_writereg(ksp, KS8695_DTXC, DTXC_TEP | DTXC_TAC);
652}
653
654
655
656
657
658
659
660
661
662static void
663ks8695_shutdown(struct ks8695_priv *ksp)
664{
665 u32 ctrl;
666 int buff_n;
667
668
669 ctrl = ks8695_readreg(ksp, KS8695_DTXC);
670 ks8695_writereg(ksp, KS8695_DTXC, ctrl & ~DTXC_TE);
671
672
673 ctrl = ks8695_readreg(ksp, KS8695_DRXC);
674 ks8695_writereg(ksp, KS8695_DRXC, ctrl & ~DRXC_RE);
675
676
677 free_irq(ksp->rx_irq, ksp->ndev);
678 free_irq(ksp->tx_irq, ksp->ndev);
679 if (ksp->link_irq != -1)
680 free_irq(ksp->link_irq, ksp->ndev);
681
682
683 for (buff_n = 0; buff_n < MAX_TX_DESC; ++buff_n) {
684 if (ksp->tx_buffers[buff_n].skb) {
685
686 ksp->tx_ring[buff_n].owner = 0;
687 ksp->tx_ring[buff_n].status = 0;
688 ksp->tx_ring[buff_n].data_ptr = 0;
689
690
691 dma_unmap_single(ksp->dev,
692 ksp->tx_buffers[buff_n].dma_ptr,
693 ksp->tx_buffers[buff_n].length,
694 DMA_TO_DEVICE);
695 dev_kfree_skb_irq(ksp->tx_buffers[buff_n].skb);
696 ksp->tx_buffers[buff_n].skb = NULL;
697 }
698 }
699
700
701 for (buff_n = 0; buff_n < MAX_RX_DESC; ++buff_n) {
702 if (ksp->rx_buffers[buff_n].skb) {
703
704 ksp->rx_ring[buff_n].status = 0;
705 ksp->rx_ring[buff_n].data_ptr = 0;
706
707
708 dma_unmap_single(ksp->dev,
709 ksp->rx_buffers[buff_n].dma_ptr,
710 ksp->rx_buffers[buff_n].length,
711 DMA_FROM_DEVICE);
712 dev_kfree_skb_irq(ksp->rx_buffers[buff_n].skb);
713 ksp->rx_buffers[buff_n].skb = NULL;
714 }
715 }
716}
717
718
719
720
721
722
723
724
725
726
727
728static int
729ks8695_setup_irq(int irq, const char *irq_name,
730 irq_handler_t handler, struct net_device *ndev)
731{
732 int ret;
733
734 ret = request_irq(irq, handler, IRQF_SHARED, irq_name, ndev);
735
736 if (ret) {
737 dev_err(&ndev->dev, "failure to request IRQ %d\n", irq);
738 return ret;
739 }
740
741 return 0;
742}
743
744
745
746
747
748
749
750
751
752static int
753ks8695_init_net(struct ks8695_priv *ksp)
754{
755 int ret;
756 u32 ctrl;
757
758 ks8695_refill_rxbuffers(ksp);
759
760
761 ks8695_writereg(ksp, KS8695_RDLB, (u32) ksp->rx_ring_dma);
762 ks8695_writereg(ksp, KS8695_TDLB, (u32) ksp->tx_ring_dma);
763
764
765 ret = ks8695_setup_irq(ksp->rx_irq, ksp->rx_irq_name,
766 ks8695_rx_irq, ksp->ndev);
767 if (ret)
768 return ret;
769 ret = ks8695_setup_irq(ksp->tx_irq, ksp->tx_irq_name,
770 ks8695_tx_irq, ksp->ndev);
771 if (ret)
772 return ret;
773 if (ksp->link_irq != -1) {
774 ret = ks8695_setup_irq(ksp->link_irq, ksp->link_irq_name,
775 ks8695_link_irq, ksp->ndev);
776 if (ret)
777 return ret;
778 }
779
780
781 ksp->next_rx_desc_read = 0;
782 ksp->tx_ring_next_slot = 0;
783 ksp->tx_ring_used = 0;
784
785
786 ctrl = ks8695_readreg(ksp, KS8695_DTXC);
787
788 ks8695_writereg(ksp, KS8695_DTXC, ctrl | DTXC_TE);
789
790
791 ctrl = ks8695_readreg(ksp, KS8695_DRXC);
792
793 ks8695_writereg(ksp, KS8695_DRXC, ctrl | DRXC_RE);
794
795 ks8695_writereg(ksp, KS8695_DRSC, 0);
796
797
798 return 0;
799}
800
801
802
803
804
805
806
807
808static void
809ks8695_release_device(struct ks8695_priv *ksp)
810{
811
812 iounmap(ksp->io_regs);
813 if (ksp->phyiface_regs)
814 iounmap(ksp->phyiface_regs);
815
816
817 release_resource(ksp->regs_req);
818 kfree(ksp->regs_req);
819 if (ksp->phyiface_req) {
820 release_resource(ksp->phyiface_req);
821 kfree(ksp->phyiface_req);
822 }
823
824
825 dma_free_coherent(ksp->dev, RING_DMA_SIZE,
826 ksp->ring_base, ksp->ring_base_dma);
827}
828
829
830
831
832
833
834
835static u32
836ks8695_get_msglevel(struct net_device *ndev)
837{
838 struct ks8695_priv *ksp = netdev_priv(ndev);
839
840 return ksp->msg_enable;
841}
842
843
844
845
846
847
848static void
849ks8695_set_msglevel(struct net_device *ndev, u32 value)
850{
851 struct ks8695_priv *ksp = netdev_priv(ndev);
852
853 ksp->msg_enable = value;
854}
855
856
857
858
859
860
861static int
862ks8695_get_settings(struct net_device *ndev, struct ethtool_cmd *cmd)
863{
864 struct ks8695_priv *ksp = netdev_priv(ndev);
865 u32 ctrl;
866
867
868 cmd->supported = (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full |
869 SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |
870 SUPPORTED_TP | SUPPORTED_MII);
871 cmd->transceiver = XCVR_INTERNAL;
872
873
874 switch (ksp->dtype) {
875 case KS8695_DTYPE_HPNA:
876 cmd->phy_address = 0;
877
878 cmd->autoneg = AUTONEG_DISABLE;
879
880
881
882
883
884
885
886 return -EOPNOTSUPP;
887 case KS8695_DTYPE_WAN:
888 cmd->advertising = ADVERTISED_TP | ADVERTISED_MII;
889 cmd->port = PORT_MII;
890 cmd->supported |= (SUPPORTED_Autoneg | SUPPORTED_Pause);
891 cmd->phy_address = 0;
892
893 ctrl = readl(ksp->phyiface_regs + KS8695_WMC);
894 if ((ctrl & WMC_WAND) == 0) {
895
896 cmd->advertising |= ADVERTISED_Autoneg;
897 if (ctrl & WMC_WANA100F)
898 cmd->advertising |= ADVERTISED_100baseT_Full;
899 if (ctrl & WMC_WANA100H)
900 cmd->advertising |= ADVERTISED_100baseT_Half;
901 if (ctrl & WMC_WANA10F)
902 cmd->advertising |= ADVERTISED_10baseT_Full;
903 if (ctrl & WMC_WANA10H)
904 cmd->advertising |= ADVERTISED_10baseT_Half;
905 if (ctrl & WMC_WANAP)
906 cmd->advertising |= ADVERTISED_Pause;
907 cmd->autoneg = AUTONEG_ENABLE;
908
909 cmd->speed = (ctrl & WMC_WSS) ? SPEED_100 : SPEED_10;
910 cmd->duplex = (ctrl & WMC_WDS) ?
911 DUPLEX_FULL : DUPLEX_HALF;
912 } else {
913
914 cmd->autoneg = AUTONEG_DISABLE;
915
916 cmd->speed = (ctrl & WMC_WANF100) ?
917 SPEED_100 : SPEED_10;
918 cmd->duplex = (ctrl & WMC_WANFF) ?
919 DUPLEX_FULL : DUPLEX_HALF;
920 }
921 break;
922 case KS8695_DTYPE_LAN:
923 return -EOPNOTSUPP;
924 }
925
926 return 0;
927}
928
929
930
931
932
933
934static int
935ks8695_set_settings(struct net_device *ndev, struct ethtool_cmd *cmd)
936{
937 struct ks8695_priv *ksp = netdev_priv(ndev);
938 u32 ctrl;
939
940 if ((cmd->speed != SPEED_10) && (cmd->speed != SPEED_100))
941 return -EINVAL;
942 if ((cmd->duplex != DUPLEX_HALF) && (cmd->duplex != DUPLEX_FULL))
943 return -EINVAL;
944 if (cmd->port != PORT_MII)
945 return -EINVAL;
946 if (cmd->transceiver != XCVR_INTERNAL)
947 return -EINVAL;
948 if ((cmd->autoneg != AUTONEG_DISABLE) &&
949 (cmd->autoneg != AUTONEG_ENABLE))
950 return -EINVAL;
951
952 if (cmd->autoneg == AUTONEG_ENABLE) {
953 if ((cmd->advertising & (ADVERTISED_10baseT_Half |
954 ADVERTISED_10baseT_Full |
955 ADVERTISED_100baseT_Half |
956 ADVERTISED_100baseT_Full)) == 0)
957 return -EINVAL;
958
959 switch (ksp->dtype) {
960 case KS8695_DTYPE_HPNA:
961
962 return -EINVAL;
963 case KS8695_DTYPE_WAN:
964 ctrl = readl(ksp->phyiface_regs + KS8695_WMC);
965
966 ctrl &= ~(WMC_WAND | WMC_WANA100F | WMC_WANA100H |
967 WMC_WANA10F | WMC_WANA10H);
968 if (cmd->advertising & ADVERTISED_100baseT_Full)
969 ctrl |= WMC_WANA100F;
970 if (cmd->advertising & ADVERTISED_100baseT_Half)
971 ctrl |= WMC_WANA100H;
972 if (cmd->advertising & ADVERTISED_10baseT_Full)
973 ctrl |= WMC_WANA10F;
974 if (cmd->advertising & ADVERTISED_10baseT_Half)
975 ctrl |= WMC_WANA10H;
976
977
978 ctrl |= WMC_WANR;
979 writel(ctrl, ksp->phyiface_regs + KS8695_WMC);
980 break;
981 case KS8695_DTYPE_LAN:
982 return -EOPNOTSUPP;
983 }
984
985 } else {
986 switch (ksp->dtype) {
987 case KS8695_DTYPE_HPNA:
988
989
990
991
992
993
994
995
996
997
998
999
1000 return -EOPNOTSUPP;
1001 case KS8695_DTYPE_WAN:
1002 ctrl = readl(ksp->phyiface_regs + KS8695_WMC);
1003
1004
1005 ctrl |= WMC_WAND;
1006 ctrl &= ~(WMC_WANF100 | WMC_WANFF);
1007
1008 if (cmd->speed == SPEED_100)
1009 ctrl |= WMC_WANF100;
1010 if (cmd->duplex == DUPLEX_FULL)
1011 ctrl |= WMC_WANFF;
1012
1013 writel(ctrl, ksp->phyiface_regs + KS8695_WMC);
1014 break;
1015 case KS8695_DTYPE_LAN:
1016 return -EOPNOTSUPP;
1017 }
1018 }
1019
1020 return 0;
1021}
1022
1023
1024
1025
1026
1027static int
1028ks8695_nwayreset(struct net_device *ndev)
1029{
1030 struct ks8695_priv *ksp = netdev_priv(ndev);
1031 u32 ctrl;
1032
1033 switch (ksp->dtype) {
1034 case KS8695_DTYPE_HPNA:
1035
1036 return -EINVAL;
1037 case KS8695_DTYPE_WAN:
1038 ctrl = readl(ksp->phyiface_regs + KS8695_WMC);
1039
1040 if ((ctrl & WMC_WAND) == 0)
1041 writel(ctrl | WMC_WANR,
1042 ksp->phyiface_regs + KS8695_WMC);
1043 else
1044
1045 return -EINVAL;
1046 break;
1047 case KS8695_DTYPE_LAN:
1048 return -EOPNOTSUPP;
1049 }
1050
1051 return 0;
1052}
1053
1054
1055
1056
1057
1058static u32
1059ks8695_get_link(struct net_device *ndev)
1060{
1061 struct ks8695_priv *ksp = netdev_priv(ndev);
1062 u32 ctrl;
1063
1064 switch (ksp->dtype) {
1065 case KS8695_DTYPE_HPNA:
1066
1067 return 1;
1068 case KS8695_DTYPE_WAN:
1069
1070 ctrl = readl(ksp->phyiface_regs + KS8695_WMC);
1071 return ctrl & WMC_WLS;
1072 case KS8695_DTYPE_LAN:
1073 return -EOPNOTSUPP;
1074 }
1075 return 0;
1076}
1077
1078
1079
1080
1081
1082
1083static void
1084ks8695_get_pause(struct net_device *ndev, struct ethtool_pauseparam *param)
1085{
1086 struct ks8695_priv *ksp = netdev_priv(ndev);
1087 u32 ctrl;
1088
1089 switch (ksp->dtype) {
1090 case KS8695_DTYPE_HPNA:
1091
1092 return;
1093 case KS8695_DTYPE_WAN:
1094 ctrl = readl(ksp->phyiface_regs + KS8695_WMC);
1095
1096
1097 param->autoneg = (ctrl & WMC_WANAP);
1098
1099
1100 ctrl = ks8695_readreg(ksp, KS8695_DRXC);
1101 param->rx_pause = (ctrl & DRXC_RFCE);
1102
1103
1104 ctrl = ks8695_readreg(ksp, KS8695_DTXC);
1105 param->tx_pause = (ctrl & DTXC_TFCE);
1106 break;
1107 case KS8695_DTYPE_LAN:
1108
1109 return;
1110 }
1111}
1112
1113
1114
1115
1116
1117
1118
1119
1120static int
1121ks8695_set_pause(struct net_device *ndev, struct ethtool_pauseparam *param)
1122{
1123 return -EOPNOTSUPP;
1124}
1125
1126
1127
1128
1129
1130
1131static void
1132ks8695_get_drvinfo(struct net_device *ndev, struct ethtool_drvinfo *info)
1133{
1134 strlcpy(info->driver, MODULENAME, sizeof(info->driver));
1135 strlcpy(info->version, MODULEVERSION, sizeof(info->version));
1136 strlcpy(info->bus_info, dev_name(ndev->dev.parent),
1137 sizeof(info->bus_info));
1138}
1139
1140static const struct ethtool_ops ks8695_ethtool_ops = {
1141 .get_msglevel = ks8695_get_msglevel,
1142 .set_msglevel = ks8695_set_msglevel,
1143 .get_settings = ks8695_get_settings,
1144 .set_settings = ks8695_set_settings,
1145 .nway_reset = ks8695_nwayreset,
1146 .get_link = ks8695_get_link,
1147 .get_pauseparam = ks8695_get_pause,
1148 .set_pauseparam = ks8695_set_pause,
1149 .get_drvinfo = ks8695_get_drvinfo,
1150};
1151
1152
1153
1154
1155
1156
1157
1158
1159static int
1160ks8695_set_mac(struct net_device *ndev, void *addr)
1161{
1162 struct ks8695_priv *ksp = netdev_priv(ndev);
1163 struct sockaddr *address = addr;
1164
1165 if (!is_valid_ether_addr(address->sa_data))
1166 return -EADDRNOTAVAIL;
1167
1168 memcpy(ndev->dev_addr, address->sa_data, ndev->addr_len);
1169
1170 ks8695_update_mac(ksp);
1171
1172 dev_dbg(ksp->dev, "%s: Updated MAC address to %pM\n",
1173 ndev->name, ndev->dev_addr);
1174
1175 return 0;
1176}
1177
1178
1179
1180
1181
1182
1183
1184
1185static void
1186ks8695_set_multicast(struct net_device *ndev)
1187{
1188 struct ks8695_priv *ksp = netdev_priv(ndev);
1189 u32 ctrl;
1190
1191 ctrl = ks8695_readreg(ksp, KS8695_DRXC);
1192
1193 if (ndev->flags & IFF_PROMISC) {
1194
1195 ctrl |= DRXC_RA;
1196 } else if (ndev->flags & ~IFF_PROMISC) {
1197
1198 ctrl &= ~DRXC_RA;
1199 }
1200
1201 if (ndev->flags & IFF_ALLMULTI) {
1202
1203 ctrl |= DRXC_RM;
1204 } else if (netdev_mc_count(ndev) > KS8695_NR_ADDRESSES) {
1205
1206
1207
1208 ctrl |= DRXC_RM;
1209 } else {
1210
1211 ctrl &= ~DRXC_RM;
1212 ks8695_init_partial_multicast(ksp, ndev);
1213 }
1214
1215 ks8695_writereg(ksp, KS8695_DRXC, ctrl);
1216}
1217
1218
1219
1220
1221
1222
1223
1224static void
1225ks8695_timeout(struct net_device *ndev)
1226{
1227 struct ks8695_priv *ksp = netdev_priv(ndev);
1228
1229 netif_stop_queue(ndev);
1230 ks8695_shutdown(ksp);
1231
1232 ks8695_reset(ksp);
1233
1234 ks8695_update_mac(ksp);
1235
1236
1237
1238
1239 ks8695_init_net(ksp);
1240
1241
1242 ks8695_set_multicast(ndev);
1243
1244
1245 netif_start_queue(ndev);
1246}
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257static int
1258ks8695_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1259{
1260 struct ks8695_priv *ksp = netdev_priv(ndev);
1261 int buff_n;
1262 dma_addr_t dmap;
1263
1264 spin_lock_irq(&ksp->txq_lock);
1265
1266 if (ksp->tx_ring_used == MAX_TX_DESC) {
1267
1268 spin_unlock_irq(&ksp->txq_lock);
1269 return NETDEV_TX_BUSY;
1270 }
1271
1272 buff_n = ksp->tx_ring_next_slot;
1273
1274 BUG_ON(ksp->tx_buffers[buff_n].skb);
1275
1276 dmap = dma_map_single(ksp->dev, skb->data, skb->len, DMA_TO_DEVICE);
1277 if (unlikely(dma_mapping_error(ksp->dev, dmap))) {
1278
1279 spin_unlock_irq(&ksp->txq_lock);
1280 dev_dbg(ksp->dev, "%s: Could not map DMA memory for "\
1281 "transmission, trying later\n", ndev->name);
1282 return NETDEV_TX_BUSY;
1283 }
1284
1285 ksp->tx_buffers[buff_n].dma_ptr = dmap;
1286
1287 ksp->tx_buffers[buff_n].skb = skb;
1288 ksp->tx_buffers[buff_n].length = skb->len;
1289
1290
1291 ksp->tx_ring[buff_n].data_ptr =
1292 cpu_to_le32(ksp->tx_buffers[buff_n].dma_ptr);
1293 ksp->tx_ring[buff_n].status =
1294 cpu_to_le32(TDES_IC | TDES_FS | TDES_LS |
1295 (skb->len & TDES_TBS));
1296
1297 wmb();
1298
1299
1300 ksp->tx_ring[buff_n].owner = cpu_to_le32(TDES_OWN);
1301
1302 if (++ksp->tx_ring_used == MAX_TX_DESC)
1303 netif_stop_queue(ndev);
1304
1305 ndev->trans_start = jiffies;
1306
1307
1308 ks8695_writereg(ksp, KS8695_DTSC, 0);
1309
1310
1311 ksp->tx_ring_next_slot = (buff_n + 1) & MAX_TX_DESC_MASK;
1312
1313 spin_unlock_irq(&ksp->txq_lock);
1314 return NETDEV_TX_OK;
1315}
1316
1317
1318
1319
1320
1321
1322
1323
1324static int
1325ks8695_stop(struct net_device *ndev)
1326{
1327 struct ks8695_priv *ksp = netdev_priv(ndev);
1328
1329 netif_stop_queue(ndev);
1330 napi_disable(&ksp->napi);
1331
1332 ks8695_shutdown(ksp);
1333
1334 return 0;
1335}
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345static int
1346ks8695_open(struct net_device *ndev)
1347{
1348 struct ks8695_priv *ksp = netdev_priv(ndev);
1349 int ret;
1350
1351 if (!is_valid_ether_addr(ndev->dev_addr))
1352 return -EADDRNOTAVAIL;
1353
1354 ks8695_reset(ksp);
1355
1356 ks8695_update_mac(ksp);
1357
1358 ret = ks8695_init_net(ksp);
1359 if (ret) {
1360 ks8695_shutdown(ksp);
1361 return ret;
1362 }
1363
1364 napi_enable(&ksp->napi);
1365 netif_start_queue(ndev);
1366
1367 return 0;
1368}
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379static void __devinit
1380ks8695_init_switch(struct ks8695_priv *ksp)
1381{
1382 u32 ctrl;
1383
1384
1385 ctrl = 0x40819e00;
1386
1387
1388 ctrl &= ~(SEC0_LLED1S | SEC0_LLED0S);
1389 ctrl |= (LLED0S_LINK | LLED1S_LINK_ACTIVITY);
1390
1391
1392 ctrl |= SEC0_ENABLE;
1393
1394 writel(ctrl, ksp->phyiface_regs + KS8695_SEC0);
1395
1396
1397 writel(0x9400100, ksp->phyiface_regs + KS8695_SEC1);
1398}
1399
1400
1401
1402
1403
1404
1405
1406
1407static void __devinit
1408ks8695_init_wan_phy(struct ks8695_priv *ksp)
1409{
1410 u32 ctrl;
1411
1412
1413 ctrl = (WMC_WANAP | WMC_WANA100F | WMC_WANA100H |
1414 WMC_WANA10F | WMC_WANA10H);
1415
1416
1417 ctrl |= (WLED0S_ACTIVITY | WLED1S_LINK);
1418
1419
1420 ctrl |= WMC_WANR;
1421
1422 writel(ctrl, ksp->phyiface_regs + KS8695_WMC);
1423
1424 writel(0, ksp->phyiface_regs + KS8695_WPPM);
1425 writel(0, ksp->phyiface_regs + KS8695_PPS);
1426}
1427
1428static const struct net_device_ops ks8695_netdev_ops = {
1429 .ndo_open = ks8695_open,
1430 .ndo_stop = ks8695_stop,
1431 .ndo_start_xmit = ks8695_start_xmit,
1432 .ndo_tx_timeout = ks8695_timeout,
1433 .ndo_set_mac_address = ks8695_set_mac,
1434 .ndo_validate_addr = eth_validate_addr,
1435 .ndo_set_multicast_list = ks8695_set_multicast,
1436};
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451static int __devinit
1452ks8695_probe(struct platform_device *pdev)
1453{
1454 struct ks8695_priv *ksp;
1455 struct net_device *ndev;
1456 struct resource *regs_res, *phyiface_res;
1457 struct resource *rxirq_res, *txirq_res, *linkirq_res;
1458 int ret = 0;
1459 int buff_n;
1460 u32 machigh, maclow;
1461
1462
1463 ndev = alloc_etherdev(sizeof(struct ks8695_priv));
1464 if (!ndev) {
1465 dev_err(&pdev->dev, "could not allocate device.\n");
1466 return -ENOMEM;
1467 }
1468
1469 SET_NETDEV_DEV(ndev, &pdev->dev);
1470
1471 dev_dbg(&pdev->dev, "ks8695_probe() called\n");
1472
1473
1474 ksp = netdev_priv(ndev);
1475 memset(ksp, 0, sizeof(struct ks8695_priv));
1476
1477 ksp->dev = &pdev->dev;
1478 ksp->ndev = ndev;
1479 ksp->msg_enable = NETIF_MSG_LINK;
1480
1481
1482 regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1483 phyiface_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1484
1485 rxirq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1486 txirq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 1);
1487 linkirq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 2);
1488
1489 if (!(regs_res && rxirq_res && txirq_res)) {
1490 dev_err(ksp->dev, "insufficient resources\n");
1491 ret = -ENOENT;
1492 goto failure;
1493 }
1494
1495 ksp->regs_req = request_mem_region(regs_res->start,
1496 resource_size(regs_res),
1497 pdev->name);
1498
1499 if (!ksp->regs_req) {
1500 dev_err(ksp->dev, "cannot claim register space\n");
1501 ret = -EIO;
1502 goto failure;
1503 }
1504
1505 ksp->io_regs = ioremap(regs_res->start, resource_size(regs_res));
1506
1507 if (!ksp->io_regs) {
1508 dev_err(ksp->dev, "failed to ioremap registers\n");
1509 ret = -EINVAL;
1510 goto failure;
1511 }
1512
1513 if (phyiface_res) {
1514 ksp->phyiface_req =
1515 request_mem_region(phyiface_res->start,
1516 resource_size(phyiface_res),
1517 phyiface_res->name);
1518
1519 if (!ksp->phyiface_req) {
1520 dev_err(ksp->dev,
1521 "cannot claim switch register space\n");
1522 ret = -EIO;
1523 goto failure;
1524 }
1525
1526 ksp->phyiface_regs = ioremap(phyiface_res->start,
1527 resource_size(phyiface_res));
1528
1529 if (!ksp->phyiface_regs) {
1530 dev_err(ksp->dev,
1531 "failed to ioremap switch registers\n");
1532 ret = -EINVAL;
1533 goto failure;
1534 }
1535 }
1536
1537 ksp->rx_irq = rxirq_res->start;
1538 ksp->rx_irq_name = rxirq_res->name ? rxirq_res->name : "Ethernet RX";
1539 ksp->tx_irq = txirq_res->start;
1540 ksp->tx_irq_name = txirq_res->name ? txirq_res->name : "Ethernet TX";
1541 ksp->link_irq = (linkirq_res ? linkirq_res->start : -1);
1542 ksp->link_irq_name = (linkirq_res && linkirq_res->name) ?
1543 linkirq_res->name : "Ethernet Link";
1544
1545
1546 ndev->netdev_ops = &ks8695_netdev_ops;
1547 SET_ETHTOOL_OPS(ndev, &ks8695_ethtool_ops);
1548 ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
1549
1550 netif_napi_add(ndev, &ksp->napi, ks8695_poll, NAPI_WEIGHT);
1551
1552
1553
1554
1555 machigh = ks8695_readreg(ksp, KS8695_MAH);
1556 maclow = ks8695_readreg(ksp, KS8695_MAL);
1557
1558 ndev->dev_addr[0] = (machigh >> 8) & 0xFF;
1559 ndev->dev_addr[1] = machigh & 0xFF;
1560 ndev->dev_addr[2] = (maclow >> 24) & 0xFF;
1561 ndev->dev_addr[3] = (maclow >> 16) & 0xFF;
1562 ndev->dev_addr[4] = (maclow >> 8) & 0xFF;
1563 ndev->dev_addr[5] = maclow & 0xFF;
1564
1565 if (!is_valid_ether_addr(ndev->dev_addr))
1566 dev_warn(ksp->dev, "%s: Invalid ethernet MAC address. Please "
1567 "set using ifconfig\n", ndev->name);
1568
1569
1570
1571
1572 ksp->ring_base = dma_alloc_coherent(&pdev->dev, RING_DMA_SIZE,
1573 &ksp->ring_base_dma, GFP_KERNEL);
1574 if (!ksp->ring_base) {
1575 ret = -ENOMEM;
1576 goto failure;
1577 }
1578
1579
1580 ksp->tx_ring = ksp->ring_base;
1581 ksp->tx_ring_dma = ksp->ring_base_dma;
1582
1583
1584 spin_lock_init(&ksp->txq_lock);
1585 spin_lock_init(&ksp->rx_lock);
1586
1587
1588 ksp->rx_ring = ksp->ring_base + TX_RING_DMA_SIZE;
1589 ksp->rx_ring_dma = ksp->ring_base_dma + TX_RING_DMA_SIZE;
1590
1591
1592 memset(ksp->tx_ring, 0, TX_RING_DMA_SIZE);
1593 memset(ksp->rx_ring, 0, RX_RING_DMA_SIZE);
1594
1595
1596 for (buff_n = 0; buff_n < MAX_TX_DESC; ++buff_n) {
1597 ksp->tx_ring[buff_n].next_desc =
1598 cpu_to_le32(ksp->tx_ring_dma +
1599 (sizeof(struct tx_ring_desc) *
1600 ((buff_n + 1) & MAX_TX_DESC_MASK)));
1601 }
1602
1603 for (buff_n = 0; buff_n < MAX_RX_DESC; ++buff_n) {
1604 ksp->rx_ring[buff_n].next_desc =
1605 cpu_to_le32(ksp->rx_ring_dma +
1606 (sizeof(struct rx_ring_desc) *
1607 ((buff_n + 1) & MAX_RX_DESC_MASK)));
1608 }
1609
1610
1611 if (ksp->phyiface_regs && ksp->link_irq == -1) {
1612 ks8695_init_switch(ksp);
1613 ksp->dtype = KS8695_DTYPE_LAN;
1614 } else if (ksp->phyiface_regs && ksp->link_irq != -1) {
1615 ks8695_init_wan_phy(ksp);
1616 ksp->dtype = KS8695_DTYPE_WAN;
1617 } else {
1618
1619 ksp->dtype = KS8695_DTYPE_HPNA;
1620 }
1621
1622
1623 platform_set_drvdata(pdev, ndev);
1624 ret = register_netdev(ndev);
1625
1626 if (ret == 0) {
1627 dev_info(ksp->dev, "ks8695 ethernet (%s) MAC: %pM\n",
1628 ks8695_port_type(ksp), ndev->dev_addr);
1629 } else {
1630
1631 dev_err(ksp->dev, "ks8695net: failed to register netdev.\n");
1632 goto failure;
1633 }
1634
1635
1636 return 0;
1637
1638
1639failure:
1640 ks8695_release_device(ksp);
1641 free_netdev(ndev);
1642
1643 return ret;
1644}
1645
1646
1647
1648
1649
1650
1651
1652
1653static int
1654ks8695_drv_suspend(struct platform_device *pdev, pm_message_t state)
1655{
1656 struct net_device *ndev = platform_get_drvdata(pdev);
1657 struct ks8695_priv *ksp = netdev_priv(ndev);
1658
1659 ksp->in_suspend = 1;
1660
1661 if (netif_running(ndev)) {
1662 netif_device_detach(ndev);
1663 ks8695_shutdown(ksp);
1664 }
1665
1666 return 0;
1667}
1668
1669
1670
1671
1672
1673
1674
1675
1676static int
1677ks8695_drv_resume(struct platform_device *pdev)
1678{
1679 struct net_device *ndev = platform_get_drvdata(pdev);
1680 struct ks8695_priv *ksp = netdev_priv(ndev);
1681
1682 if (netif_running(ndev)) {
1683 ks8695_reset(ksp);
1684 ks8695_init_net(ksp);
1685 ks8695_set_multicast(ndev);
1686 netif_device_attach(ndev);
1687 }
1688
1689 ksp->in_suspend = 0;
1690
1691 return 0;
1692}
1693
1694
1695
1696
1697
1698
1699
1700static int __devexit
1701ks8695_drv_remove(struct platform_device *pdev)
1702{
1703 struct net_device *ndev = platform_get_drvdata(pdev);
1704 struct ks8695_priv *ksp = netdev_priv(ndev);
1705
1706 platform_set_drvdata(pdev, NULL);
1707 netif_napi_del(&ksp->napi);
1708
1709 unregister_netdev(ndev);
1710 ks8695_release_device(ksp);
1711 free_netdev(ndev);
1712
1713 dev_dbg(&pdev->dev, "released and freed device\n");
1714 return 0;
1715}
1716
1717static struct platform_driver ks8695_driver = {
1718 .driver = {
1719 .name = MODULENAME,
1720 .owner = THIS_MODULE,
1721 },
1722 .probe = ks8695_probe,
1723 .remove = __devexit_p(ks8695_drv_remove),
1724 .suspend = ks8695_drv_suspend,
1725 .resume = ks8695_drv_resume,
1726};
1727
1728
1729
1730static int __init
1731ks8695_init(void)
1732{
1733 printk(KERN_INFO "%s Ethernet driver, V%s\n",
1734 MODULENAME, MODULEVERSION);
1735
1736 return platform_driver_register(&ks8695_driver);
1737}
1738
1739static void __exit
1740ks8695_cleanup(void)
1741{
1742 platform_driver_unregister(&ks8695_driver);
1743}
1744
1745module_init(ks8695_init);
1746module_exit(ks8695_cleanup);
1747
1748MODULE_AUTHOR("Simtec Electronics")
1749MODULE_DESCRIPTION("Micrel KS8695 (Centaur) Ethernet driver");
1750MODULE_LICENSE("GPL");
1751MODULE_ALIAS("platform:" MODULENAME);
1752
1753module_param(watchdog, int, 0400);
1754MODULE_PARM_DESC(watchdog, "transmit timeout in milliseconds");
1755