1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26static const char rcsid[] = "$Id: sk_g16.c,v 1.1 1994/06/30 16:25:15 root Exp $";
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61#include <linux/module.h>
62#include <linux/kernel.h>
63#include <linux/sched.h>
64#include <linux/ptrace.h>
65#include <linux/fcntl.h>
66#include <linux/ioport.h>
67#include <linux/interrupt.h>
68#include <linux/slab.h>
69#include <linux/string.h>
70#include <linux/delay.h>
71#include <asm/system.h>
72#include <asm/io.h>
73#include <asm/bitops.h>
74#include <linux/errno.h>
75#include <linux/init.h>
76#include <linux/spinlock.h>
77
78#include <linux/netdevice.h>
79#include <linux/etherdevice.h>
80#include <linux/skbuff.h>
81
82#include "sk_g16.h"
83
84
85
86
87
88
89#define SK_NAME "SK_G16"
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115#define SK_BOOT_ROM 1
116
117#define SK_ADDR 0xcc000
118
119
120
121
122
123
124
125#define POS_ADDR (rom_addr>>14)
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142#define SK_IO_PORTS { 0x100, 0x180, 0x208, 0x220, 0x288, 0x320, 0x328, 0x390, 0 }
143
144#define SK_IRQS { 3, 5, 9, 11, 0 }
145
146#define SK_BOOT_ROM_LOCATIONS { 0xc0000, 0xc4000, 0xc8000, 0xcc000, 0xd0000, 0xd4000, 0xd8000, 0xdc000, 0 }
147
148#define SK_BOOT_ROM_ID { 0x55, 0xaa, 0x10, 0x50, 0x06, 0x33 }
149
150
151
152
153
154
155
156
157
158
159
160
161
162#define SK_POS_SIZE 8
163
164#define SK_POS0 ioaddr
165#define SK_POS1 ioaddr+1
166#define SK_POS2 ioaddr+2
167#define SK_POS3 ioaddr+3
168#define SK_POS4 ioaddr+4
169
170
171
172
173
174
175
176
177
178
179
180
181
182#define SK_MAC0 0x00
183#define SK_MAC1 0x00
184#define SK_MAC2 0x5a
185
186
187
188
189
190
191
192
193
194
195
196#define SK_IDLOW 0xfd
197#define SK_IDHIGH 0x6a
198
199
200
201
202
203
204
205#define SK_ROM_RAM_ON (POS2_CARD)
206#define SK_ROM_RAM_OFF (POS2_EPROM)
207#define SK_ROM_ON (inb(SK_POS2) & POS2_CARD)
208#define SK_ROM_OFF (inb(SK_POS2) | POS2_EPROM)
209#define SK_RAM_ON (inb(SK_POS2) | POS2_CARD)
210#define SK_RAM_OFF (inb(SK_POS2) & POS2_EPROM)
211
212#define POS2_CARD 0x0001
213#define POS2_EPROM 0x0002
214
215
216
217
218
219
220
221#define SK_IOREG (&board->ioreg)
222#define SK_PORT (&board->port)
223#define SK_IOCOM (&board->iocom)
224
225
226
227
228
229
230
231
232
233
234
235
236#define SK_IORUN 0x20
237
238
239
240
241
242#define SK_IRQ 0x10
243
244#define SK_RESET 0x08
245#define SK_RW 0x02
246#define SK_ADR 0x01
247
248
249#define SK_RREG SK_RW
250#define SK_WREG 0
251#define SK_RAP SK_ADR
252#define SK_RDATA 0
253
254
255
256
257
258
259
260
261
262
263
264#define SK_DOIO 0x80
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284#define CSR0 0x00
285#define CSR1 0x01
286#define CSR2 0x02
287#define CSR3 0x03
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302#define LC_LOG_TX_BUFFERS 1
303#define LC_LOG_RX_BUFFERS 3
304
305
306
307#define TMDNUM (1 << (LC_LOG_TX_BUFFERS))
308#define RMDNUM (1 << (LC_LOG_RX_BUFFERS))
309
310
311
312#define TMDNUMMASK (LC_LOG_TX_BUFFERS << 29)
313#define RMDNUMMASK (LC_LOG_RX_BUFFERS << 29)
314
315
316
317
318
319#define PKT_BUF_SZ 1518
320
321
322
323
324
325#define ETHERCARD_TOTAL_SIZE SK_POS_SIZE
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355#undef SK_DEBUG
356#undef SK_DEBUG2
357
358#ifdef SK_DEBUG
359#define PRINTK(x) printk x
360#else
361#define PRINTK(x)
362#endif
363
364#ifdef SK_DEBUG2
365#define PRINTK2(x) printk x
366#else
367#define PRINTK2(x)
368#endif
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404typedef struct
405{
406 unsigned char ram[0x3fc0];
407 unsigned char rom[0x0020];
408 unsigned char res1[0x0010];
409 unsigned volatile short ioreg;
410 unsigned volatile char port;
411 unsigned char iocom;
412} SK_RAM;
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428struct SK_ram
429{
430 struct init_block ib;
431 struct tmd tmde[TMDNUM];
432 struct rmd rmde[RMDNUM];
433 char tmdbuf[TMDNUM][PKT_BUF_SZ];
434 char rmdbuf[RMDNUM][PKT_BUF_SZ];
435};
436
437
438
439
440
441
442struct priv
443{
444 struct SK_ram *ram;
445 struct rmd *rmdhead;
446 struct tmd *tmdhead;
447 int rmdnum;
448 int tmdnum;
449 int tmdlast;
450 void *rmdbufs[RMDNUM];
451 void *tmdbufs[TMDNUM];
452 struct net_device_stats stats;
453};
454
455
456
457
458
459
460
461static SK_RAM *board;
462static struct net_device *SK_dev;
463unsigned long SK_ioaddr;
464static spinlock_t SK_lock = SPIN_LOCK_UNLOCKED;
465
466
467
468
469
470
471
472
473
474
475
476
477int SK_init(struct net_device *dev);
478static int SK_probe(struct net_device *dev, short ioaddr);
479
480static void SK_timeout(struct net_device *dev);
481static int SK_open(struct net_device *dev);
482static int SK_send_packet(struct sk_buff *skb, struct net_device *dev);
483static void SK_interrupt(int irq, void *dev_id, struct pt_regs * regs);
484static void SK_rxintr(struct net_device *dev);
485static void SK_txintr(struct net_device *dev);
486static int SK_close(struct net_device *dev);
487
488static struct net_device_stats *SK_get_stats(struct net_device *dev);
489
490unsigned int SK_rom_addr(void);
491
492static void set_multicast_list(struct net_device *dev);
493
494
495
496
497
498
499static int SK_lance_init(struct net_device *dev, unsigned short mode);
500void SK_reset_board(void);
501void SK_set_RAP(int reg_number);
502int SK_read_reg(int reg_number);
503int SK_rread_reg(void);
504void SK_write_reg(int reg_number, int value);
505
506
507
508
509
510
511void SK_print_pos(struct net_device *dev, char *text);
512void SK_print_dev(struct net_device *dev, char *text);
513void SK_print_ram(struct net_device *dev);
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541int __init SK_init(struct net_device *dev)
542{
543 int ioaddr;
544 int *port, ports[] = SK_IO_PORTS;
545 static unsigned version_printed;
546
547
548 int base_addr = dev->base_addr;
549
550 if (version_printed++ == 0)
551 PRINTK(("%s: %s", SK_NAME, rcsid));
552
553 if (base_addr > 0x0ff)
554 {
555 int rc = -ENODEV;
556
557 ioaddr = base_addr;
558
559
560 if (!request_region(ioaddr, ETHERCARD_TOTAL_SIZE, "sk_g16"))
561 return -EBUSY;
562
563 if ( (inb(SK_POS0) == SK_IDLOW) ||
564 (inb(SK_POS1) == SK_IDHIGH) )
565 {
566 rc = SK_probe(dev, ioaddr);
567 }
568
569 if (rc)
570 release_region(ioaddr, ETHERCARD_TOTAL_SIZE);
571 return rc;
572 }
573 else if (base_addr > 0)
574 {
575 return -ENXIO;
576 }
577
578
579
580 for (port = &ports[0]; *port; port++)
581 {
582 ioaddr = *port;
583
584
585
586 if (!request_region(ioaddr, ETHERCARD_TOTAL_SIZE, "sk_g16"))
587 {
588 continue;
589 }
590
591
592
593 if ( !(inb(SK_POS0) == SK_IDLOW) ||
594 !(inb(SK_POS1) == SK_IDHIGH) )
595 {
596 release_region(ioaddr, ETHERCARD_TOTAL_SIZE);
597 continue;
598 }
599
600 dev->base_addr = ioaddr;
601
602 if (SK_probe(dev, ioaddr) == 0)
603 {
604 return 0;
605 }
606
607 release_region(ioaddr, ETHERCARD_TOTAL_SIZE);
608 }
609
610 dev->base_addr = base_addr;
611
612 return -ENODEV;
613
614}
615
616
617MODULE_AUTHOR("Patrick J.D. Weichmann");
618MODULE_DESCRIPTION("Schneider & Koch G16 Ethernet Device Driver");
619MODULE_LICENSE("GPL");
620MODULE_PARM(io, "i");
621MODULE_PARM_DESC(io, "0 to probe common ports (unsafe), or the I/O base of the board");
622
623
624#ifdef MODULE
625static int io;
626
627static int __init SK_init_module (void)
628{
629 int rc;
630
631 SK_dev = init_etherdev (NULL, 0);
632 if (!SK_dev)
633 return -ENOMEM;
634
635 SK_dev->base_addr = io;
636
637 rc = SK_init (SK_dev);
638 if (rc) {
639 unregister_netdev (SK_dev);
640 kfree (SK_dev);
641 SK_dev = NULL;
642 }
643
644 return rc;
645}
646#endif
647
648
649static void __exit SK_cleanup_module (void)
650{
651 if (SK_dev) {
652 if (SK_dev->priv) {
653 kfree(SK_dev->priv);
654 SK_dev->priv = NULL;
655 }
656 unregister_netdev(SK_dev);
657 kfree(SK_dev);
658 SK_dev = NULL;
659 }
660 if (SK_ioaddr) {
661 release_region(SK_ioaddr, ETHERCARD_TOTAL_SIZE);
662 SK_ioaddr = 0;
663 }
664
665}
666
667
668#ifdef MODULE
669module_init(SK_init_module);
670#endif
671module_exit(SK_cleanup_module);
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694int __init SK_probe(struct net_device *dev, short ioaddr)
695{
696 int i,j;
697 int sk_addr_flag = 0;
698 unsigned int rom_addr;
699
700 struct priv *p;
701
702 if (SK_ADDR & 0x3fff || SK_ADDR < 0xa0000)
703 {
704
705 sk_addr_flag = 1;
706
707
708
709
710
711 }
712
713 if (SK_BOOT_ROM)
714 {
715 PRINTK(("## %s: SK_BOOT_ROM is set.\n", SK_NAME));
716
717 rom_addr = SK_rom_addr();
718
719 if (rom_addr == 0)
720 {
721 if (sk_addr_flag)
722 {
723 printk("%s: SK_ADDR %#08x is not valid. Check configuration.\n",
724 dev->name, SK_ADDR);
725 return -1;
726 }
727
728 rom_addr = SK_ADDR;
729
730 PRINTK(("## %s: NO Bootrom found \n", SK_NAME));
731
732 outb(SK_ROM_RAM_OFF, SK_POS2);
733 outb(POS_ADDR, SK_POS3);
734 outb(SK_RAM_ON, SK_POS2);
735 }
736 else if (rom_addr == SK_ADDR)
737 {
738 printk("%s: RAM + ROM are set to the same address %#08x\n"
739 " Check configuration. Now switching off Boot_ROM\n",
740 SK_NAME, rom_addr);
741
742 outb(SK_ROM_RAM_OFF, SK_POS2);
743 outb(POS_ADDR, SK_POS3);
744 outb(SK_RAM_ON, SK_POS2);
745 }
746 else
747 {
748 PRINTK(("## %s: Found ROM at %#08x\n", SK_NAME, rom_addr));
749 PRINTK(("## %s: Keeping Boot_ROM on\n", SK_NAME));
750
751 if (sk_addr_flag)
752 {
753 printk("%s: SK_ADDR %#08x is not valid. Check configuration.\n",
754 dev->name, SK_ADDR);
755 return -1;
756 }
757
758 rom_addr = SK_ADDR;
759
760 outb(SK_ROM_RAM_OFF, SK_POS2);
761 outb(POS_ADDR, SK_POS3);
762 outb(SK_ROM_RAM_ON, SK_POS2);
763 }
764 }
765 else
766 {
767 PRINTK(("## %s: SK_BOOT_ROM is not set.\n", SK_NAME));
768
769 if (sk_addr_flag)
770 {
771 printk("%s: SK_ADDR %#08x is not valid. Check configuration.\n",
772 dev->name, SK_ADDR);
773 return -1;
774 }
775
776 rom_addr = SK_rom_addr();
777
778
779
780 outb(SK_ROM_RAM_OFF, SK_POS2);
781
782
783
784
785
786 if (rom_addr)
787 {
788 printk("%s: We found Boot_ROM at %#08x. Now setting RAM on"
789 "that address\n", SK_NAME, rom_addr);
790
791 outb(POS_ADDR, SK_POS3);
792 }
793 else
794 {
795 if (sk_addr_flag)
796 {
797 printk("%s: SK_ADDR %#08x is not valid. Check configuration.\n",
798 dev->name, SK_ADDR);
799 return -1;
800 }
801
802 rom_addr = SK_ADDR;
803
804 outb(POS_ADDR, SK_POS3);
805 }
806 outb(SK_RAM_ON, SK_POS2);
807 }
808
809#ifdef SK_DEBUG
810 SK_print_pos(dev, "POS registers after ROM, RAM config");
811#endif
812
813 board = (SK_RAM *) bus_to_virt(rom_addr);
814
815
816 for (i = 0, j = 0; i < ETH_ALEN; i++, j+=2)
817 {
818 dev->dev_addr[i] = readb(board->rom+j);
819 }
820
821
822 if (!(dev->dev_addr[0] == SK_MAC0 &&
823 dev->dev_addr[1] == SK_MAC1 &&
824 dev->dev_addr[2] == SK_MAC2) )
825 {
826 PRINTK(("## %s: We did not find SK_G16 at RAM location.\n",
827 SK_NAME));
828 return -ENODEV;
829 }
830
831 printk("%s: %s found at %#3x, HW addr: %#04x:%02x:%02x:%02x:%02x:%02x\n",
832 dev->name,
833 "Schneider & Koch Netcard",
834 (unsigned int) dev->base_addr,
835 dev->dev_addr[0],
836 dev->dev_addr[1],
837 dev->dev_addr[2],
838 dev->dev_addr[3],
839 dev->dev_addr[4],
840 dev->dev_addr[5]);
841
842
843 p = dev->priv = (void *) kmalloc(sizeof(struct priv), GFP_KERNEL);
844 if (p == NULL) {
845 printk("%s: ERROR - no memory for driver data!\n", dev->name);
846 return -ENOMEM;
847 }
848 memset((char *) dev->priv, 0, sizeof(struct priv));
849
850
851
852 dev->open = SK_open;
853 dev->stop = SK_close;
854 dev->hard_start_xmit = SK_send_packet;
855 dev->get_stats = SK_get_stats;
856 dev->set_multicast_list = set_multicast_list;
857 dev->tx_timeout = SK_timeout;
858 dev->watchdog_timeo = HZ/7;
859
860
861
862
863 ether_setup(dev);
864
865 dev->flags &= ~IFF_MULTICAST;
866
867
868
869 p->ram = (struct SK_ram *) rom_addr;
870 p->tmdhead = &(p->ram)->tmde[0];
871 p->rmdhead = &(p->ram)->rmde[0];
872
873
874
875 for (i = 0; i < TMDNUM; i++)
876 {
877 p->tmdbufs[i] = &(p->ram)->tmdbuf[i];
878 }
879
880 for (i = 0; i < RMDNUM; i++)
881 {
882 p->rmdbufs[i] = &(p->ram)->rmdbuf[i];
883 }
884
885#ifdef SK_DEBUG
886 SK_print_pos(dev, "End of SK_probe");
887 SK_print_ram(dev);
888#endif
889
890 SK_dev = dev;
891 SK_ioaddr = ioaddr;
892
893 return 0;
894
895}
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922static int SK_open(struct net_device *dev)
923{
924 int i = 0;
925 int irqval = 0;
926 int ioaddr = dev->base_addr;
927
928 int irqtab[] = SK_IRQS;
929
930 struct priv *p = (struct priv *)dev->priv;
931
932 PRINTK(("## %s: At beginning of SK_open(). CSR0: %#06x\n",
933 SK_NAME, SK_read_reg(CSR0)));
934
935 if (dev->irq == 0)
936 {
937 i = 0;
938
939
940
941
942
943
944
945
946
947
948 do
949 {
950 irqval = request_irq(irqtab[i], &SK_interrupt, 0, "sk_g16", dev);
951 i++;
952 } while (irqval && irqtab[i]);
953
954 if (irqval)
955 {
956 printk("%s: unable to get an IRQ\n", dev->name);
957 return -EAGAIN;
958 }
959
960 dev->irq = irqtab[--i];
961
962 outb(i<<2, SK_POS4);
963
964 }
965 else if (dev->irq == 2)
966 {
967 if (request_irq(9, &SK_interrupt, 0, "sk_g16", dev))
968 {
969 printk("%s: unable to get IRQ 9\n", dev->name);
970 return -EAGAIN;
971 }
972 dev->irq = 9;
973
974
975
976
977
978
979 outb(0x08, SK_POS4);
980
981 }
982 else
983 {
984 int i = 0;
985
986
987
988 if (request_irq(dev->irq, &SK_interrupt, 0, "sk_g16", dev))
989 {
990 printk("%s: unable to get selected IRQ\n", dev->name);
991 return -EAGAIN;
992 }
993
994 switch(dev->irq)
995 {
996 case 3: i = 0;
997 break;
998 case 5: i = 1;
999 break;
1000 case 2: i = 2;
1001 break;
1002 case 11:i = 3;
1003 break;
1004 default:
1005 printk("%s: Preselected IRQ %d is invalid for %s boards",
1006 dev->name,
1007 dev->irq,
1008 SK_NAME);
1009 return -EAGAIN;
1010 }
1011
1012 outb(i<<2, SK_POS4);
1013 }
1014
1015 printk("%s: Schneider & Koch G16 at %#3x, IRQ %d, shared mem at %#08x\n",
1016 dev->name, (unsigned int)dev->base_addr,
1017 (int) dev->irq, (unsigned int) p->ram);
1018
1019 if (!(i = SK_lance_init(dev, 0)))
1020 {
1021 netif_start_queue(dev);
1022
1023#ifdef SK_DEBUG
1024
1025
1026
1027
1028
1029
1030
1031 printk("## %s: After lance init. CSR0: %#06x\n",
1032 SK_NAME, SK_read_reg(CSR0));
1033 SK_write_reg(CSR0, CSR0_STOP);
1034 printk("## %s: LANCE stopped. CSR0: %#06x\n",
1035 SK_NAME, SK_read_reg(CSR0));
1036 SK_lance_init(dev, MODE_DTX | MODE_DRX);
1037 printk("## %s: Reinit with DTX + DRX off. CSR0: %#06x\n",
1038 SK_NAME, SK_read_reg(CSR0));
1039 SK_write_reg(CSR0, CSR0_STOP);
1040 printk("## %s: LANCE stopped. CSR0: %#06x\n",
1041 SK_NAME, SK_read_reg(CSR0));
1042 SK_lance_init(dev, MODE_NORMAL);
1043 printk("## %s: LANCE back to normal mode. CSR0: %#06x\n",
1044 SK_NAME, SK_read_reg(CSR0));
1045 SK_print_pos(dev, "POS regs before returning OK");
1046
1047#endif
1048
1049 return 0;
1050 }
1051 else
1052 {
1053
1054 PRINTK(("## %s: LANCE init failed: CSR0: %#06x\n",
1055 SK_NAME, SK_read_reg(CSR0)));
1056
1057 return -EAGAIN;
1058 }
1059
1060}
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080static int SK_lance_init(struct net_device *dev, unsigned short mode)
1081{
1082 int i;
1083 unsigned long flags;
1084 struct priv *p = (struct priv *) dev->priv;
1085 struct tmd *tmdp;
1086 struct rmd *rmdp;
1087
1088 PRINTK(("## %s: At beginning of LANCE init. CSR0: %#06x\n",
1089 SK_NAME, SK_read_reg(CSR0)));
1090
1091
1092 SK_reset_board();
1093
1094
1095 p->tmdnum = 0;
1096 p->tmdlast = 0;
1097
1098 for (i = 0; i < TMDNUM; i++)
1099 {
1100 tmdp = p->tmdhead + i;
1101
1102 writel((unsigned long) p->tmdbufs[i], tmdp->u.buffer);
1103
1104
1105 writeb(TX_STP | TX_ENP, &tmdp->u.s.status);
1106 }
1107
1108
1109
1110
1111 p->rmdnum = 0;
1112
1113 for (i = 0; i < RMDNUM; i++)
1114 {
1115 rmdp = p->rmdhead + i;
1116
1117
1118 writel((unsigned long) p->rmdbufs[i], rmdp->u.buffer);
1119
1120
1121
1122
1123
1124
1125 writeb(RX_OWN, &rmdp->u.s.status);
1126
1127 writew(-PKT_BUF_SZ, &rmdp->blen);
1128
1129 writeb(0, &rmdp->mlen);
1130
1131 }
1132
1133
1134
1135 writew(mode, (&((p->ram)->ib.mode)));
1136
1137 for (i = 0; i < ETH_ALEN; i++)
1138 {
1139 writeb(dev->dev_addr[i], (&((p->ram)->ib.paddr[i])));
1140 }
1141
1142 for (i = 0; i < 8; i++)
1143 {
1144 writeb(0, (&((p->ram)->ib.laddr[i])));
1145 }
1146
1147
1148
1149 writel((int)p->rmdhead | RMDNUMMASK, (&((p->ram)->ib.rdrp)));
1150 writel((int)p->tmdhead | TMDNUMMASK, (&((p->ram)->ib.tdrp)));
1151
1152
1153
1154 spin_lock_irqsave(&SK_lock, flags);
1155
1156 SK_write_reg(CSR3, CSR3_ACON);
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173 SK_write_reg(CSR1, 0);
1174 SK_write_reg(CSR2, 0);
1175
1176
1177 PRINTK(("## %s: After setting CSR1-3. CSR0: %#06x\n",
1178 SK_NAME, SK_read_reg(CSR0)));
1179
1180
1181
1182
1183
1184
1185
1186
1187 SK_write_reg(CSR0, CSR0_INIT);
1188
1189 spin_unlock_irqrestore(&SK_lock, flags);
1190
1191
1192
1193 SK_set_RAP(CSR0);
1194
1195 for (i = 0; (i < 100) && !(SK_rread_reg() & CSR0_IDON); i++)
1196 ;
1197
1198 if (i >= 100)
1199 {
1200 printk("%s: can't init am7990, status: %04x "
1201 "init_block: %#08x\n",
1202 dev->name, (int) SK_read_reg(CSR0),
1203 (unsigned int) &(p->ram)->ib);
1204
1205#ifdef SK_DEBUG
1206 SK_print_pos(dev, "LANCE INIT failed");
1207 SK_print_dev(dev,"Device Structure:");
1208#endif
1209
1210 return -1;
1211 }
1212
1213 PRINTK(("## %s: init done after %d ticks\n", SK_NAME, i));
1214
1215
1216
1217 SK_write_reg(CSR0, CSR0_IDON | CSR0_INEA | CSR0_STRT);
1218
1219 PRINTK(("## %s: LANCE started. CSR0: %#06x\n", SK_NAME,
1220 SK_read_reg(CSR0)));
1221
1222 return 0;
1223
1224}
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247static void SK_timeout(struct net_device *dev)
1248{
1249 printk(KERN_WARNING "%s: xmitter timed out, try to restart!\n", dev->name);
1250 SK_lance_init(dev, MODE_NORMAL);
1251 netif_wake_queue(dev);
1252 dev->trans_start = jiffies;
1253}
1254
1255static int SK_send_packet(struct sk_buff *skb, struct net_device *dev)
1256{
1257 struct priv *p = (struct priv *) dev->priv;
1258 struct tmd *tmdp;
1259
1260 PRINTK2(("## %s: SK_send_packet() called, CSR0 %#04x.\n",
1261 SK_NAME, SK_read_reg(CSR0)));
1262
1263
1264
1265
1266
1267
1268
1269 netif_stop_queue (dev);
1270
1271 {
1272
1273
1274 short len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
1275
1276 tmdp = p->tmdhead + p->tmdnum;
1277
1278
1279
1280
1281
1282 memcpy_toio((tmdp->u.buffer & 0x00ffffff), skb->data, skb->len);
1283
1284 writew(-len, &tmdp->blen);
1285
1286
1287
1288
1289
1290
1291
1292 writeb(TX_OWN | TX_STP | TX_ENP, &tmdp->u.s.status);
1293
1294
1295 SK_write_reg(CSR0, CSR0_TDMD | CSR0_INEA);
1296
1297 dev->trans_start = jiffies;
1298
1299
1300 p->tmdnum++;
1301 p->tmdnum &= TMDNUM-1;
1302
1303
1304 if (! (readb(&((p->tmdhead + p->tmdnum)->u.s.status)) & TX_OWN) )
1305 {
1306
1307
1308
1309
1310 netif_start_queue(dev);
1311 }
1312
1313 p->stats.tx_bytes += skb->len;
1314
1315 }
1316
1317 dev_kfree_skb(skb);
1318 return 0;
1319}
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339static void SK_interrupt(int irq, void *dev_id, struct pt_regs * regs)
1340{
1341 int csr0;
1342 struct net_device *dev = dev_id;
1343 struct priv *p = (struct priv *) dev->priv;
1344
1345
1346 PRINTK2(("## %s: SK_interrupt(). status: %#06x\n",
1347 SK_NAME, SK_read_reg(CSR0)));
1348
1349 if (dev == NULL)
1350 {
1351 printk("SK_interrupt(): IRQ %d for unknown device.\n", irq);
1352 }
1353
1354 spin_lock (&SK_lock);
1355
1356 csr0 = SK_read_reg(CSR0);
1357
1358
1359
1360
1361
1362
1363 SK_write_reg(CSR0, csr0 & CSR0_CLRALL);
1364
1365 if (csr0 & CSR0_ERR)
1366 {
1367 printk("%s: error: %04x\n", dev->name, csr0);
1368
1369 if (csr0 & CSR0_MISS)
1370 {
1371 p->stats.rx_dropped++;
1372 }
1373 }
1374
1375 if (csr0 & CSR0_RINT)
1376 {
1377 SK_rxintr(dev);
1378 }
1379
1380 if (csr0 & CSR0_TINT)
1381 {
1382 SK_txintr(dev);
1383 }
1384
1385 SK_write_reg(CSR0, CSR0_INEA);
1386
1387 spin_unlock (&SK_lock);
1388}
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408static void SK_txintr(struct net_device *dev)
1409{
1410 int tmdstat;
1411 struct tmd *tmdp;
1412 struct priv *p = (struct priv *) dev->priv;
1413
1414
1415 PRINTK2(("## %s: SK_txintr() status: %#06x\n",
1416 SK_NAME, SK_read_reg(CSR0)));
1417
1418 tmdp = p->tmdhead + p->tmdlast;
1419
1420
1421 p->tmdlast++;
1422 p->tmdlast &= TMDNUM-1;
1423
1424 tmdstat = readb(&tmdp->u.s.status);
1425
1426
1427
1428
1429
1430 if (tmdstat & TX_ERR)
1431 {
1432 int stat2 = readw(&tmdp->status2);
1433
1434 printk("%s: TX error: %04x %04x\n", dev->name, tmdstat, stat2);
1435
1436 if (stat2 & TX_TDR)
1437 {
1438 printk("%s: tdr-problems \n", dev->name);
1439 }
1440
1441 if (stat2 & TX_RTRY)
1442 p->stats.tx_aborted_errors++;
1443 if (stat2 & TX_LCOL)
1444 p->stats.tx_window_errors++;
1445 if (stat2 & TX_LCAR)
1446 p->stats.tx_carrier_errors++;
1447 if (stat2 & TX_UFLO)
1448 {
1449 p->stats.tx_fifo_errors++;
1450
1451
1452
1453
1454
1455
1456 SK_lance_init(dev, MODE_NORMAL);
1457 }
1458
1459 p->stats.tx_errors++;
1460
1461 writew(0, &tmdp->status2);
1462 }
1463 else if (tmdstat & TX_MORE)
1464 {
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477 p->stats.collisions++;
1478 }
1479 else
1480 {
1481 p->stats.tx_packets++;
1482 }
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501 netif_wake_queue(dev);
1502
1503}
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521static void SK_rxintr(struct net_device *dev)
1522{
1523
1524 struct rmd *rmdp;
1525 int rmdstat;
1526 struct priv *p = (struct priv *) dev->priv;
1527
1528 PRINTK2(("## %s: SK_rxintr(). CSR0: %#06x\n",
1529 SK_NAME, SK_read_reg(CSR0)));
1530
1531 rmdp = p->rmdhead + p->rmdnum;
1532
1533
1534
1535
1536
1537 while (!( (rmdstat = readb(&rmdp->u.s.status)) & RX_OWN))
1538 {
1539
1540
1541
1542
1543
1544
1545
1546
1547 if ((rmdstat & (RX_STP | RX_ENP)) != (RX_STP | RX_ENP))
1548 {
1549
1550
1551 if (rmdstat & RX_STP)
1552 {
1553 p->stats.rx_errors++;
1554 p->stats.rx_length_errors++;
1555
1556 printk("%s: packet too long\n", dev->name);
1557 }
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567 writeb(RX_OWN, &rmdp->u.s.status);
1568
1569 }
1570 else if (rmdstat & RX_ERR)
1571 {
1572 printk("%s: RX error: %04x\n", dev->name, (int) rmdstat);
1573
1574 p->stats.rx_errors++;
1575
1576 if (rmdstat & RX_FRAM) p->stats.rx_frame_errors++;
1577 if (rmdstat & RX_CRC) p->stats.rx_crc_errors++;
1578
1579 writeb(RX_OWN, &rmdp->u.s.status);
1580
1581 }
1582 else
1583 {
1584
1585 int len = readw(&rmdp->mlen) & 0x0fff;
1586 struct sk_buff *skb;
1587
1588 skb = dev_alloc_skb(len+2);
1589
1590 if (skb == NULL)
1591 {
1592
1593
1594
1595
1596
1597
1598 writeb(RX_OWN, &rmdp->u.s.status);
1599 printk("%s: Couldn't allocate sk_buff, deferring packet.\n",
1600 dev->name);
1601 p->stats.rx_dropped++;
1602
1603 break;
1604 }
1605
1606
1607
1608 skb->dev = dev;
1609 skb_reserve(skb,2);
1610
1611
1612
1613
1614
1615
1616
1617
1618 memcpy_fromio(skb_put(skb,len), (rmdp->u.buffer & 0x00ffffff), len);
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628 skb->protocol=eth_type_trans(skb,dev);
1629 netif_rx(skb);
1630
1631
1632
1633
1634
1635
1636 writeb(RX_OWN, &rmdp->u.s.status);
1637 dev->last_rx = jiffies;
1638 p->stats.rx_packets++;
1639 p->stats.rx_bytes += len;
1640
1641
1642 p->rmdnum++;
1643 p->rmdnum %= RMDNUM;
1644
1645 rmdp = p->rmdhead + p->rmdnum;
1646 }
1647 }
1648}
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671static int SK_close(struct net_device *dev)
1672{
1673
1674 PRINTK(("## %s: SK_close(). CSR0: %#06x\n",
1675 SK_NAME, SK_read_reg(CSR0)));
1676
1677 netif_stop_queue(dev);
1678
1679 printk("%s: Shutting %s down CSR0 %#06x\n", dev->name, SK_NAME,
1680 (int) SK_read_reg(CSR0));
1681
1682 SK_write_reg(CSR0, CSR0_STOP);
1683
1684 free_irq(dev->irq, dev);
1685
1686 return 0;
1687
1688}
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707static struct net_device_stats *SK_get_stats(struct net_device *dev)
1708{
1709
1710 struct priv *p = (struct priv *) dev->priv;
1711
1712 PRINTK(("## %s: SK_get_stats(). CSR0: %#06x\n",
1713 SK_NAME, SK_read_reg(CSR0)));
1714
1715 return &p->stats;
1716
1717}
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748static void set_multicast_list(struct net_device *dev)
1749{
1750
1751 if (dev->flags&IFF_PROMISC)
1752 {
1753
1754 SK_lance_init(dev, MODE_PROM);
1755 }
1756 else if (dev->mc_count==0 && !(dev->flags&IFF_ALLMULTI))
1757 {
1758
1759 SK_lance_init(dev, MODE_NORMAL);
1760 }
1761 else
1762 {
1763
1764
1765 SK_lance_init(dev, MODE_NORMAL);
1766
1767
1768 }
1769}
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788unsigned int __init SK_rom_addr(void)
1789{
1790 int i,j;
1791 int rom_found = 0;
1792 unsigned int rom_location[] = SK_BOOT_ROM_LOCATIONS;
1793 unsigned char rom_id[] = SK_BOOT_ROM_ID;
1794 unsigned char test_byte;
1795
1796
1797 PRINTK(("## %s: Autodetection of Boot_ROM\n", SK_NAME));
1798
1799 for (i = 0; (rom_location[i] != 0) && (rom_found == 0); i++)
1800 {
1801
1802 PRINTK(("## Trying ROM location %#08x", rom_location[i]));
1803
1804 rom_found = 1;
1805 for (j = 0; j < 6; j++)
1806 {
1807 test_byte = readb(rom_location[i]+j);
1808 PRINTK((" %02x ", *test_byte));
1809
1810 if(test_byte != rom_id[j])
1811 {
1812 rom_found = 0;
1813 }
1814 }
1815 PRINTK(("\n"));
1816 }
1817
1818 if (rom_found == 1)
1819 {
1820 PRINTK(("## %s: Boot_ROM found at %#08x\n",
1821 SK_NAME, rom_location[(i-1)]));
1822
1823 return (rom_location[--i]);
1824 }
1825 else
1826 {
1827 PRINTK(("%s: No Boot_ROM found\n", SK_NAME));
1828 return 0;
1829 }
1830}
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859void SK_reset_board(void)
1860{
1861 writeb(0x00, SK_PORT);
1862 mdelay(5);
1863 writeb(SK_RESET, SK_PORT);
1864
1865}
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884void SK_set_RAP(int reg_number)
1885{
1886 writew(reg_number, SK_IOREG);
1887 writeb(SK_RESET | SK_RAP | SK_WREG, SK_PORT);
1888 writeb(SK_DOIO, SK_IOCOM);
1889
1890 while (readb(SK_PORT) & SK_IORUN)
1891 barrier();
1892}
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910int SK_read_reg(int reg_number)
1911{
1912 SK_set_RAP(reg_number);
1913
1914 writeb(SK_RESET | SK_RDATA | SK_RREG, SK_PORT);
1915 writeb(SK_DOIO, SK_IOCOM);
1916
1917 while (readb(SK_PORT) & SK_IORUN)
1918 barrier();
1919 return (readw(SK_IOREG));
1920
1921}
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941int SK_rread_reg(void)
1942{
1943 writeb(SK_RESET | SK_RDATA | SK_RREG, SK_PORT);
1944
1945 writeb(SK_DOIO, SK_IOCOM);
1946
1947 while (readb(SK_PORT) & SK_IORUN)
1948 barrier();
1949 return (readw(SK_IOREG));
1950
1951}
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973void SK_write_reg(int reg_number, int value)
1974{
1975 SK_set_RAP(reg_number);
1976
1977 writew(value, SK_IOREG);
1978 writeb(SK_RESET | SK_RDATA | SK_WREG, SK_PORT);
1979 writeb(SK_DOIO, SK_IOCOM);
1980
1981 while (readb(SK_PORT) & SK_IORUN)
1982 barrier();
1983}
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008void SK_print_pos(struct net_device *dev, char *text)
2009{
2010 int ioaddr = dev->base_addr;
2011
2012 unsigned char pos0 = inb(SK_POS0),
2013 pos1 = inb(SK_POS1),
2014 pos2 = inb(SK_POS2),
2015 pos3 = inb(SK_POS3),
2016 pos4 = inb(SK_POS4);
2017
2018
2019 printk("## %s: %s.\n"
2020 "## pos0=%#4x pos1=%#4x pos2=%#04x pos3=%#08x pos4=%#04x\n",
2021 SK_NAME, text, pos0, pos1, pos2, (pos3<<14), pos4);
2022
2023}
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043void SK_print_dev(struct net_device *dev, char *text)
2044{
2045 if (dev == NULL)
2046 {
2047 printk("## %s: Device Structure. %s\n", SK_NAME, text);
2048 printk("## DEVICE == NULL\n");
2049 }
2050 else
2051 {
2052 printk("## %s: Device Structure. %s\n", SK_NAME, text);
2053 printk("## Device Name: %s Base Address: %#06lx IRQ: %d\n",
2054 dev->name, dev->base_addr, dev->irq);
2055
2056 printk("## next device: %#08x init function: %#08x\n",
2057 (int) dev->next, (int) dev->init);
2058 }
2059
2060}
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083void __init SK_print_ram(struct net_device *dev)
2084{
2085
2086 int i;
2087 struct priv *p = (struct priv *) dev->priv;
2088
2089 printk("## %s: RAM Details.\n"
2090 "## RAM at %#08x tmdhead: %#08x rmdhead: %#08x initblock: %#08x\n",
2091 SK_NAME,
2092 (unsigned int) p->ram,
2093 (unsigned int) p->tmdhead,
2094 (unsigned int) p->rmdhead,
2095 (unsigned int) &(p->ram)->ib);
2096
2097 printk("## ");
2098
2099 for(i = 0; i < TMDNUM; i++)
2100 {
2101 if (!(i % 3))
2102 {
2103 printk("\n## ");
2104 }
2105 printk("tmdbufs%d: %#08x ", (i+1), (int) p->tmdbufs[i]);
2106 }
2107 printk("## ");
2108
2109 for(i = 0; i < RMDNUM; i++)
2110 {
2111 if (!(i % 3))
2112 {
2113 printk("\n## ");
2114 }
2115 printk("rmdbufs%d: %#08x ", (i+1), (int) p->rmdbufs[i]);
2116 }
2117 printk("\n");
2118
2119}
2120
2121