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
26
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
62
63
64
65
66
67
68
69
70
71#include <linux/module.h>
72#include <linux/kernel.h>
73#include <linux/string.h>
74#include <linux/ptrace.h>
75#include <linux/errno.h>
76#include <linux/ioport.h>
77#include <linux/slab.h>
78#include <linux/interrupt.h>
79#include <linux/delay.h>
80#include <linux/netdevice.h>
81#include <linux/etherdevice.h>
82#include <linux/skbuff.h>
83#include <linux/init.h>
84#include <linux/pci.h>
85#include <linux/types.h>
86
87#include <asm/bitops.h>
88#include <asm/io.h>
89#include <asm/pgtable.h>
90#include <asm/pgalloc.h>
91#include <asm/irq.h>
92#include <asm/pdc.h>
93#include <asm/cache.h>
94#include <asm/parisc-device.h>
95
96static char version[] __devinitdata =
97 "82596.c $Revision: 1.29 $\n";
98
99
100
101
102#define DEB_INIT 0x0001
103#define DEB_PROBE 0x0002
104#define DEB_SERIOUS 0x0004
105#define DEB_ERRORS 0x0008
106#define DEB_MULTI 0x0010
107#define DEB_TDR 0x0020
108#define DEB_OPEN 0x0040
109#define DEB_RESET 0x0080
110#define DEB_ADDCMD 0x0100
111#define DEB_STATUS 0x0200
112#define DEB_STARTTX 0x0400
113#define DEB_RXADDR 0x0800
114#define DEB_TXADDR 0x1000
115#define DEB_RXFRAME 0x2000
116#define DEB_INTS 0x4000
117#define DEB_STRUCT 0x8000
118#define DEB_ANY 0xffff
119
120
121#define DEB(x,y) if (i596_debug & (x)) { y; }
122
123
124#define CHECK_WBACK(addr,len) \
125 do { dma_cache_sync((void *)addr, len, DMA_TO_DEVICE); } while (0)
126
127#define CHECK_INV(addr,len) \
128 do { dma_cache_sync((void *)addr,len, DMA_FROM_DEVICE); } while(0)
129
130#define CHECK_WBACK_INV(addr,len) \
131 do { dma_cache_sync((void *)addr,len, DMA_BIDIRECTIONAL); } while (0)
132
133
134#define PA_I82596_RESET 0
135#define PA_CPU_PORT_L_ACCESS 4
136#define PA_CHANNEL_ATTENTION 8
137
138
139
140
141
142
143
144#ifdef __BIG_ENDIAN
145#define WSWAPrfd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
146#define WSWAPrbd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
147#define WSWAPiscp(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
148#define WSWAPscb(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
149#define WSWAPcmd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
150#define WSWAPtbd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
151#define WSWAPchar(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
152#define ISCP_BUSY 0x00010000
153#define MACH_IS_APRICOT 0
154#else
155#define WSWAPrfd(x) ((struct i596_rfd *)(x))
156#define WSWAPrbd(x) ((struct i596_rbd *)(x))
157#define WSWAPiscp(x) ((struct i596_iscp *)(x))
158#define WSWAPscb(x) ((struct i596_scb *)(x))
159#define WSWAPcmd(x) ((struct i596_cmd *)(x))
160#define WSWAPtbd(x) ((struct i596_tbd *)(x))
161#define WSWAPchar(x) ((char *)(x))
162#define ISCP_BUSY 0x0001
163#define MACH_IS_APRICOT 1
164#endif
165
166
167
168
169
170
171
172#define PORT_RESET 0x00
173#define PORT_SELFTEST 0x01
174#define PORT_ALTSCP 0x02
175#define PORT_ALTDUMP 0x03
176
177static int i596_debug = (DEB_SERIOUS|DEB_PROBE);
178
179MODULE_AUTHOR("Richard Hirst");
180MODULE_DESCRIPTION("i82596 driver");
181MODULE_LICENSE("GPL");
182MODULE_PARM(i596_debug, "i");
183MODULE_PARM_DESC(i596_debug, "lasi_82596 debug mask");
184
185
186
187
188static int rx_copybreak = 100;
189
190#define MAX_DRIVERS 4
191
192#define PKT_BUF_SZ 1536
193#define MAX_MC_CNT 64
194
195#define I596_NULL ((u32)0xffffffff)
196
197#define CMD_EOL 0x8000
198#define CMD_SUSP 0x4000
199#define CMD_INTR 0x2000
200
201#define CMD_FLEX 0x0008
202
203enum commands {
204 CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3,
205 CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7
206};
207
208#define STAT_C 0x8000
209#define STAT_B 0x4000
210#define STAT_OK 0x2000
211#define STAT_A 0x1000
212
213#define CUC_START 0x0100
214#define CUC_RESUME 0x0200
215#define CUC_SUSPEND 0x0300
216#define CUC_ABORT 0x0400
217#define RX_START 0x0010
218#define RX_RESUME 0x0020
219#define RX_SUSPEND 0x0030
220#define RX_ABORT 0x0040
221
222#define TX_TIMEOUT 5
223
224#define OPT_SWAP_PORT 0x0001
225
226
227struct i596_reg {
228 unsigned short porthi;
229 unsigned short portlo;
230 u32 ca;
231};
232
233#define EOF 0x8000
234#define SIZE_MASK 0x3fff
235
236struct i596_tbd {
237 unsigned short size;
238 unsigned short pad;
239 dma_addr_t next;
240 dma_addr_t data;
241 u32 cache_pad[5];
242};
243
244
245
246
247
248
249
250
251
252
253
254struct i596_cmd {
255 struct i596_cmd *v_next;
256 unsigned short status;
257 unsigned short command;
258 dma_addr_t b_next;
259};
260
261struct tx_cmd {
262 struct i596_cmd cmd;
263 dma_addr_t tbd;
264 unsigned short size;
265 unsigned short pad;
266 struct sk_buff *skb;
267 dma_addr_t dma_addr;
268#ifdef __LP64__
269 u32 cache_pad[6];
270#else
271 u32 cache_pad[1];
272#endif
273};
274
275struct tdr_cmd {
276 struct i596_cmd cmd;
277 unsigned short status;
278 unsigned short pad;
279};
280
281struct mc_cmd {
282 struct i596_cmd cmd;
283 short mc_cnt;
284 char mc_addrs[MAX_MC_CNT*6];
285};
286
287struct sa_cmd {
288 struct i596_cmd cmd;
289 char eth_addr[8];
290};
291
292struct cf_cmd {
293 struct i596_cmd cmd;
294 char i596_config[16];
295};
296
297struct i596_rfd {
298 unsigned short stat;
299 unsigned short cmd;
300 dma_addr_t b_next;
301 dma_addr_t rbd;
302 unsigned short count;
303 unsigned short size;
304 struct i596_rfd *v_next;
305 struct i596_rfd *v_prev;
306#ifndef __LP64__
307 u32 cache_pad[2];
308#endif
309};
310
311struct i596_rbd {
312
313 unsigned short count;
314 unsigned short zero1;
315 dma_addr_t b_next;
316 dma_addr_t b_data;
317 unsigned short size;
318 unsigned short zero2;
319
320 struct sk_buff *skb;
321 struct i596_rbd *v_next;
322 dma_addr_t b_addr;
323 unsigned char *v_data;
324
325#ifdef __LP64__
326 u32 cache_pad[4];
327#endif
328};
329
330
331
332#define TX_RING_SIZE 32
333#define RX_RING_SIZE 16
334
335struct i596_scb {
336 unsigned short status;
337 unsigned short command;
338 dma_addr_t cmd;
339 dma_addr_t rfd;
340 u32 crc_err;
341 u32 align_err;
342 u32 resource_err;
343 u32 over_err;
344 u32 rcvdt_err;
345 u32 short_err;
346 unsigned short t_on;
347 unsigned short t_off;
348};
349
350struct i596_iscp {
351 u32 stat;
352 dma_addr_t scb;
353};
354
355struct i596_scp {
356 u32 sysbus;
357 u32 pad;
358 dma_addr_t iscp;
359};
360
361struct i596_private {
362 volatile struct i596_scp scp __attribute__((aligned(32)));
363 volatile struct i596_iscp iscp __attribute__((aligned(32)));
364 volatile struct i596_scb scb __attribute__((aligned(32)));
365 struct sa_cmd sa_cmd __attribute__((aligned(32)));
366 struct cf_cmd cf_cmd __attribute__((aligned(32)));
367 struct tdr_cmd tdr_cmd __attribute__((aligned(32)));
368 struct mc_cmd mc_cmd __attribute__((aligned(32)));
369 struct i596_rfd rfds[RX_RING_SIZE] __attribute__((aligned(32)));
370 struct i596_rbd rbds[RX_RING_SIZE] __attribute__((aligned(32)));
371 struct tx_cmd tx_cmds[TX_RING_SIZE] __attribute__((aligned(32)));
372 struct i596_tbd tbds[TX_RING_SIZE] __attribute__((aligned(32)));
373 u32 stat;
374 int last_restart;
375 struct i596_rfd *rfd_head;
376 struct i596_rbd *rbd_head;
377 struct i596_cmd *cmd_tail;
378 struct i596_cmd *cmd_head;
379 int cmd_backlog;
380 u32 last_cmd;
381 struct net_device_stats stats;
382 int next_tx_cmd;
383 int options;
384 spinlock_t lock;
385 dma_addr_t dma_addr;
386 struct device *dev;
387};
388
389static char init_setup[] =
390{
391 0x8E,
392 0xC8,
393 0x80,
394 0x2E,
395 0x00,
396 0x60,
397 0x00,
398 0xf2,
399 0x00,
400 0x00,
401 0x40,
402 0xff,
403 0x00,
404 0x7f };
405
406static int i596_open(struct net_device *dev);
407static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
408static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs);
409static int i596_close(struct net_device *dev);
410static struct net_device_stats *i596_get_stats(struct net_device *dev);
411static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
412static void i596_tx_timeout (struct net_device *dev);
413static void print_eth(unsigned char *buf, char *str);
414static void set_multicast_list(struct net_device *dev);
415
416static int rx_ring_size = RX_RING_SIZE;
417static int ticks_limit = 100;
418static int max_cmd_backlog = TX_RING_SIZE-1;
419
420
421static inline void CA(struct net_device *dev)
422{
423 gsc_writel(0, dev->base_addr + PA_CHANNEL_ATTENTION);
424}
425
426
427static inline void MPU_PORT(struct net_device *dev, int c, dma_addr_t x)
428{
429 struct i596_private *lp = (struct i596_private *) dev->priv;
430
431 u32 v = (u32) (c) | (u32) (x);
432 u16 a, b;
433
434 if (lp->options & OPT_SWAP_PORT) {
435 a = v >> 16;
436 b = v & 0xffff;
437 } else {
438 a = v & 0xffff;
439 b = v >> 16;
440 }
441
442 gsc_writel(a, dev->base_addr + PA_CPU_PORT_L_ACCESS);
443 udelay(1);
444 gsc_writel(b, dev->base_addr + PA_CPU_PORT_L_ACCESS);
445}
446
447
448static inline int wait_istat(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
449{
450 CHECK_INV(&(lp->iscp), sizeof(struct i596_iscp));
451 while (--delcnt && lp->iscp.stat) {
452 udelay(10);
453 CHECK_INV(&(lp->iscp), sizeof(struct i596_iscp));
454 }
455 if (!delcnt) {
456 printk("%s: %s, iscp.stat %04x, didn't clear\n",
457 dev->name, str, lp->iscp.stat);
458 return -1;
459 }
460 else
461 return 0;
462}
463
464
465static inline int wait_cmd(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
466{
467 CHECK_INV(&(lp->scb), sizeof(struct i596_scb));
468 while (--delcnt && lp->scb.command) {
469 udelay(10);
470 CHECK_INV(&(lp->scb), sizeof(struct i596_scb));
471 }
472 if (!delcnt) {
473 printk("%s: %s, status %4.4x, cmd %4.4x.\n",
474 dev->name, str, lp->scb.status, lp->scb.command);
475 return -1;
476 }
477 else
478 return 0;
479}
480
481
482static void i596_display_data(struct net_device *dev)
483{
484 struct i596_private *lp = (struct i596_private *) dev->priv;
485 struct i596_cmd *cmd;
486 struct i596_rfd *rfd;
487 struct i596_rbd *rbd;
488
489 printk("lp and scp at %p, .sysbus = %08x, .iscp = %08x\n",
490 &lp->scp, lp->scp.sysbus, lp->scp.iscp);
491 printk("iscp at %p, iscp.stat = %08x, .scb = %08x\n",
492 &lp->iscp, lp->iscp.stat, lp->iscp.scb);
493 printk("scb at %p, scb.status = %04x, .command = %04x,"
494 " .cmd = %08x, .rfd = %08x\n",
495 &lp->scb, lp->scb.status, lp->scb.command,
496 lp->scb.cmd, lp->scb.rfd);
497 printk(" errors: crc %x, align %x, resource %x,"
498 " over %x, rcvdt %x, short %x\n",
499 lp->scb.crc_err, lp->scb.align_err, lp->scb.resource_err,
500 lp->scb.over_err, lp->scb.rcvdt_err, lp->scb.short_err);
501 cmd = lp->cmd_head;
502 while (cmd != NULL) {
503 printk("cmd at %p, .status = %04x, .command = %04x, .b_next = %08x\n",
504 cmd, cmd->status, cmd->command, cmd->b_next);
505 cmd = cmd->v_next;
506 }
507 rfd = lp->rfd_head;
508 printk("rfd_head = %p\n", rfd);
509 do {
510 printk (" %p .stat %04x, .cmd %04x, b_next %08x, rbd %08x,"
511 " count %04x\n",
512 rfd, rfd->stat, rfd->cmd, rfd->b_next, rfd->rbd,
513 rfd->count);
514 rfd = rfd->v_next;
515 } while (rfd != lp->rfd_head);
516 rbd = lp->rbd_head;
517 printk("rbd_head = %p\n", rbd);
518 do {
519 printk(" %p .count %04x, b_next %08x, b_data %08x, size %04x\n",
520 rbd, rbd->count, rbd->b_next, rbd->b_data, rbd->size);
521 rbd = rbd->v_next;
522 } while (rbd != lp->rbd_head);
523 CHECK_INV(lp, sizeof(struct i596_private));
524}
525
526
527#if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET)
528static void i596_error(int irq, void *dev_id, struct pt_regs *regs)
529{
530 struct net_device *dev = dev_id;
531 volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
532
533 pcc2[0x28] = 1;
534 pcc2[0x2b] = 0x1d;
535 printk("%s: Error interrupt\n", dev->name);
536 i596_display_data(dev);
537}
538#endif
539
540#define virt_to_dma(lp,v) ((lp)->dma_addr + (dma_addr_t)((unsigned long)(v)-(unsigned long)(lp)))
541
542static inline void init_rx_bufs(struct net_device *dev)
543{
544 struct i596_private *lp = (struct i596_private *)dev->priv;
545 int i;
546 struct i596_rfd *rfd;
547 struct i596_rbd *rbd;
548
549
550
551 for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
552 dma_addr_t dma_addr;
553 struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ + 4);
554
555 if (skb == NULL)
556 panic("82596: alloc_skb() failed");
557 skb_reserve(skb, 2);
558 dma_addr = dma_map_single(lp->dev, skb->tail,PKT_BUF_SZ,
559 DMA_FROM_DEVICE);
560 skb->dev = dev;
561 rbd->v_next = rbd+1;
562 rbd->b_next = WSWAPrbd(virt_to_dma(lp,rbd+1));
563 rbd->b_addr = WSWAPrbd(virt_to_dma(lp,rbd));
564 rbd->skb = skb;
565 rbd->v_data = skb->tail;
566 rbd->b_data = WSWAPchar(dma_addr);
567 rbd->size = PKT_BUF_SZ;
568 }
569 lp->rbd_head = lp->rbds;
570 rbd = lp->rbds + rx_ring_size - 1;
571 rbd->v_next = lp->rbds;
572 rbd->b_next = WSWAPrbd(virt_to_dma(lp,lp->rbds));
573
574
575
576 for (i = 0, rfd = lp->rfds; i < rx_ring_size; i++, rfd++) {
577 rfd->rbd = I596_NULL;
578 rfd->v_next = rfd+1;
579 rfd->v_prev = rfd-1;
580 rfd->b_next = WSWAPrfd(virt_to_dma(lp,rfd+1));
581 rfd->cmd = CMD_FLEX;
582 }
583 lp->rfd_head = lp->rfds;
584 lp->scb.rfd = WSWAPrfd(virt_to_dma(lp,lp->rfds));
585 rfd = lp->rfds;
586 rfd->rbd = WSWAPrbd(virt_to_dma(lp,lp->rbd_head));
587 rfd->v_prev = lp->rfds + rx_ring_size - 1;
588 rfd = lp->rfds + rx_ring_size - 1;
589 rfd->v_next = lp->rfds;
590 rfd->b_next = WSWAPrfd(virt_to_dma(lp,lp->rfds));
591 rfd->cmd = CMD_EOL|CMD_FLEX;
592
593 CHECK_WBACK_INV(lp, sizeof(struct i596_private));
594}
595
596static inline void remove_rx_bufs(struct net_device *dev)
597{
598 struct i596_private *lp = (struct i596_private *)dev->priv;
599 struct i596_rbd *rbd;
600 int i;
601
602 for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
603 if (rbd->skb == NULL)
604 break;
605 dma_unmap_single(lp->dev,
606 (dma_addr_t)WSWAPchar(rbd->b_data),
607 PKT_BUF_SZ, DMA_FROM_DEVICE);
608 dev_kfree_skb(rbd->skb);
609 }
610}
611
612
613static void rebuild_rx_bufs(struct net_device *dev)
614{
615 struct i596_private *lp = (struct i596_private *) dev->priv;
616 int i;
617
618
619
620 for (i = 0; i < rx_ring_size; i++) {
621 lp->rfds[i].rbd = I596_NULL;
622 lp->rfds[i].cmd = CMD_FLEX;
623 }
624 lp->rfds[rx_ring_size-1].cmd = CMD_EOL|CMD_FLEX;
625 lp->rfd_head = lp->rfds;
626 lp->scb.rfd = WSWAPrfd(virt_to_dma(lp,lp->rfds));
627 lp->rbd_head = lp->rbds;
628 lp->rfds[0].rbd = WSWAPrbd(virt_to_dma(lp,lp->rbds));
629
630 CHECK_WBACK_INV(lp, sizeof(struct i596_private));
631}
632
633
634static int init_i596_mem(struct net_device *dev)
635{
636 struct i596_private *lp = (struct i596_private *) dev->priv;
637 unsigned long flags;
638
639 disable_irq(dev->irq);
640 DEB(DEB_INIT,
641 printk("RESET 82596 port: %08lX (with IRQ%d disabled)\n",
642 dev->base_addr + PA_I82596_RESET,
643 dev->irq));
644
645 gsc_writel(0, (void*)(dev->base_addr + PA_I82596_RESET));
646 udelay(100);
647
648
649
650 lp->last_cmd = jiffies;
651
652
653 lp->scp.sysbus = 0x0000006c;
654 lp->scp.iscp = WSWAPiscp(virt_to_dma(lp,&(lp->iscp)));
655 lp->iscp.scb = WSWAPscb(virt_to_dma(lp,&(lp->scb)));
656 lp->iscp.stat = ISCP_BUSY;
657 lp->cmd_backlog = 0;
658
659 lp->cmd_head = NULL;
660 lp->scb.cmd = I596_NULL;
661
662 DEB(DEB_INIT,printk("%s: starting i82596.\n", dev->name));
663
664 CHECK_WBACK(&(lp->scp), sizeof(struct i596_scp));
665 CHECK_WBACK(&(lp->iscp), sizeof(struct i596_iscp));
666
667 MPU_PORT(dev, PORT_ALTSCP, virt_to_dma(lp,&lp->scp));
668
669 CA(dev);
670
671 if (wait_istat(dev,lp,1000,"initialization timed out"))
672 goto failed;
673 DEB(DEB_INIT,printk("%s: i82596 initialization successful\n", dev->name));
674
675
676 rebuild_rx_bufs(dev);
677
678 lp->scb.command = 0;
679 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
680
681 enable_irq(dev->irq);
682
683 DEB(DEB_INIT,printk("%s: queuing CmdConfigure\n", dev->name));
684 memcpy(lp->cf_cmd.i596_config, init_setup, 14);
685 lp->cf_cmd.cmd.command = CmdConfigure;
686 CHECK_WBACK(&(lp->cf_cmd), sizeof(struct cf_cmd));
687 i596_add_cmd(dev, &lp->cf_cmd.cmd);
688
689 DEB(DEB_INIT,printk("%s: queuing CmdSASetup\n", dev->name));
690 memcpy(lp->sa_cmd.eth_addr, dev->dev_addr, 6);
691 lp->sa_cmd.cmd.command = CmdSASetup;
692 CHECK_WBACK(&(lp->sa_cmd), sizeof(struct sa_cmd));
693 i596_add_cmd(dev, &lp->sa_cmd.cmd);
694
695 DEB(DEB_INIT,printk("%s: queuing CmdTDR\n", dev->name));
696 lp->tdr_cmd.cmd.command = CmdTDR;
697 CHECK_WBACK(&(lp->tdr_cmd), sizeof(struct tdr_cmd));
698 i596_add_cmd(dev, &lp->tdr_cmd.cmd);
699
700 spin_lock_irqsave (&lp->lock, flags);
701
702 if (wait_cmd(dev,lp,1000,"timed out waiting to issue RX_START")) {
703 spin_unlock_irqrestore (&lp->lock, flags);
704 goto failed;
705 }
706 DEB(DEB_INIT,printk("%s: Issuing RX_START\n", dev->name));
707 lp->scb.command = RX_START;
708 lp->scb.rfd = WSWAPrfd(virt_to_dma(lp,lp->rfds));
709 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
710
711 CA(dev);
712
713 spin_unlock_irqrestore (&lp->lock, flags);
714
715 if (wait_cmd(dev,lp,1000,"RX_START not processed"))
716 goto failed;
717 DEB(DEB_INIT,printk("%s: Receive unit started OK\n", dev->name));
718
719 return 0;
720
721failed:
722 printk("%s: Failed to initialise 82596\n", dev->name);
723 MPU_PORT(dev, PORT_RESET, 0);
724 return -1;
725}
726
727
728static inline int i596_rx(struct net_device *dev)
729{
730 struct i596_private *lp = (struct i596_private *)dev->priv;
731 struct i596_rfd *rfd;
732 struct i596_rbd *rbd;
733 int frames = 0;
734
735 DEB(DEB_RXFRAME,printk ("i596_rx(), rfd_head %p, rbd_head %p\n",
736 lp->rfd_head, lp->rbd_head));
737
738
739 rfd = lp->rfd_head;
740
741 CHECK_INV(rfd, sizeof(struct i596_rfd));
742 while ((rfd->stat) & STAT_C) {
743 if (rfd->rbd == I596_NULL)
744 rbd = NULL;
745 else if (rfd->rbd == lp->rbd_head->b_addr) {
746 rbd = lp->rbd_head;
747 CHECK_INV(rbd, sizeof(struct i596_rbd));
748 }
749 else {
750 printk("%s: rbd chain broken!\n", dev->name);
751
752 rbd = NULL;
753 }
754 DEB(DEB_RXFRAME, printk(" rfd %p, rfd.rbd %08x, rfd.stat %04x\n",
755 rfd, rfd->rbd, rfd->stat));
756
757 if (rbd != NULL && ((rfd->stat) & STAT_OK)) {
758
759 int pkt_len = rbd->count & 0x3fff;
760 struct sk_buff *skb = rbd->skb;
761 int rx_in_place = 0;
762
763 DEB(DEB_RXADDR,print_eth(rbd->v_data, "received"));
764 frames++;
765
766
767
768
769
770 if (pkt_len > rx_copybreak) {
771 struct sk_buff *newskb;
772 dma_addr_t dma_addr;
773
774 dma_unmap_single(lp->dev,(dma_addr_t)WSWAPchar(rbd->b_data), PKT_BUF_SZ, DMA_FROM_DEVICE);
775
776 newskb = dev_alloc_skb(PKT_BUF_SZ + 4);
777 if (newskb == NULL) {
778 skb = NULL;
779 goto memory_squeeze;
780 }
781 skb_reserve(newskb, 2);
782
783
784 skb_put(skb, pkt_len);
785 rx_in_place = 1;
786 rbd->skb = newskb;
787 newskb->dev = dev;
788 dma_addr = dma_map_single(lp->dev, newskb->tail, PKT_BUF_SZ, DMA_FROM_DEVICE);
789 rbd->v_data = newskb->tail;
790 rbd->b_data = WSWAPchar(dma_addr);
791 CHECK_WBACK_INV(rbd, sizeof(struct i596_rbd));
792 }
793 else
794 skb = dev_alloc_skb(pkt_len + 2);
795memory_squeeze:
796 if (skb == NULL) {
797
798 printk ("%s: i596_rx Memory squeeze, dropping packet.\n", dev->name);
799 lp->stats.rx_dropped++;
800 }
801 else {
802 skb->dev = dev;
803 if (!rx_in_place) {
804
805 dma_sync_single(lp->dev, (dma_addr_t)WSWAPchar(rbd->b_data), PKT_BUF_SZ, DMA_FROM_DEVICE);
806 skb_reserve(skb, 2);
807 memcpy(skb_put(skb,pkt_len), rbd->v_data, pkt_len);
808 }
809 skb->len = pkt_len;
810 skb->protocol=eth_type_trans(skb,dev);
811 netif_rx(skb);
812 dev->last_rx = jiffies;
813 lp->stats.rx_packets++;
814 lp->stats.rx_bytes+=pkt_len;
815 }
816 }
817 else {
818 DEB(DEB_ERRORS, printk("%s: Error, rfd.stat = 0x%04x\n",
819 dev->name, rfd->stat));
820 lp->stats.rx_errors++;
821 if ((rfd->stat) & 0x0001)
822 lp->stats.collisions++;
823 if ((rfd->stat) & 0x0080)
824 lp->stats.rx_length_errors++;
825 if ((rfd->stat) & 0x0100)
826 lp->stats.rx_over_errors++;
827 if ((rfd->stat) & 0x0200)
828 lp->stats.rx_fifo_errors++;
829 if ((rfd->stat) & 0x0400)
830 lp->stats.rx_frame_errors++;
831 if ((rfd->stat) & 0x0800)
832 lp->stats.rx_crc_errors++;
833 if ((rfd->stat) & 0x1000)
834 lp->stats.rx_length_errors++;
835 }
836
837
838
839 if (rbd != NULL && (rbd->count & 0x4000)) {
840 rbd->count = 0;
841 lp->rbd_head = rbd->v_next;
842 CHECK_WBACK_INV(rbd, sizeof(struct i596_rbd));
843 }
844
845
846
847 rfd->rbd = I596_NULL;
848 rfd->stat = 0;
849 rfd->cmd = CMD_EOL|CMD_FLEX;
850 rfd->count = 0;
851
852
853
854 rfd->v_prev->cmd = CMD_FLEX;
855
856
857
858 lp->scb.rfd = rfd->b_next;
859 lp->rfd_head = rfd->v_next;
860 CHECK_WBACK_INV(rfd->v_prev, sizeof(struct i596_rfd));
861 CHECK_WBACK_INV(rfd, sizeof(struct i596_rfd));
862 rfd = lp->rfd_head;
863 CHECK_INV(rfd, sizeof(struct i596_rfd));
864 }
865
866 DEB(DEB_RXFRAME,printk ("frames %d\n", frames));
867
868 return 0;
869}
870
871
872static inline void i596_cleanup_cmd(struct net_device *dev, struct i596_private *lp)
873{
874 struct i596_cmd *ptr;
875
876 while (lp->cmd_head != NULL) {
877 ptr = lp->cmd_head;
878 lp->cmd_head = ptr->v_next;
879 lp->cmd_backlog--;
880
881 switch ((ptr->command) & 0x7) {
882 case CmdTx:
883 {
884 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
885 struct sk_buff *skb = tx_cmd->skb;
886 dma_unmap_single(lp->dev, tx_cmd->dma_addr, skb->len, DMA_TO_DEVICE);
887
888 dev_kfree_skb(skb);
889
890 lp->stats.tx_errors++;
891 lp->stats.tx_aborted_errors++;
892
893 ptr->v_next = NULL;
894 ptr->b_next = I596_NULL;
895 tx_cmd->cmd.command = 0;
896 break;
897 }
898 default:
899 ptr->v_next = NULL;
900 ptr->b_next = I596_NULL;
901 }
902 CHECK_WBACK_INV(ptr, sizeof(struct i596_cmd));
903 }
904
905 wait_cmd(dev,lp,100,"i596_cleanup_cmd timed out");
906 lp->scb.cmd = I596_NULL;
907 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
908}
909
910
911static inline void i596_reset(struct net_device *dev, struct i596_private *lp)
912{
913 unsigned long flags;
914
915 DEB(DEB_RESET,printk("i596_reset\n"));
916
917 spin_lock_irqsave (&lp->lock, flags);
918
919 wait_cmd(dev,lp,100,"i596_reset timed out");
920
921 netif_stop_queue(dev);
922
923
924 lp->scb.command = CUC_ABORT | RX_ABORT;
925 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
926 CA(dev);
927
928
929 wait_cmd(dev,lp,1000,"i596_reset 2 timed out");
930 spin_unlock_irqrestore (&lp->lock, flags);
931
932 i596_cleanup_cmd(dev,lp);
933 i596_rx(dev);
934
935 netif_start_queue(dev);
936 init_i596_mem(dev);
937}
938
939
940static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd)
941{
942 struct i596_private *lp = (struct i596_private *) dev->priv;
943 unsigned long flags;
944
945 DEB(DEB_ADDCMD,printk("i596_add_cmd cmd_head %p\n", lp->cmd_head));
946
947 cmd->status = 0;
948 cmd->command |= (CMD_EOL | CMD_INTR);
949 cmd->v_next = NULL;
950 cmd->b_next = I596_NULL;
951 CHECK_WBACK(cmd, sizeof(struct i596_cmd));
952
953 spin_lock_irqsave (&lp->lock, flags);
954
955 if (lp->cmd_head != NULL) {
956 lp->cmd_tail->v_next = cmd;
957 lp->cmd_tail->b_next = WSWAPcmd(virt_to_dma(lp,&cmd->status));
958 CHECK_WBACK(lp->cmd_tail, sizeof(struct i596_cmd));
959 } else {
960 lp->cmd_head = cmd;
961 wait_cmd(dev,lp,100,"i596_add_cmd timed out");
962 lp->scb.cmd = WSWAPcmd(virt_to_dma(lp,&cmd->status));
963 lp->scb.command = CUC_START;
964 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
965 CA(dev);
966 }
967 lp->cmd_tail = cmd;
968 lp->cmd_backlog++;
969
970 spin_unlock_irqrestore (&lp->lock, flags);
971
972 if (lp->cmd_backlog > max_cmd_backlog) {
973 unsigned long tickssofar = jiffies - lp->last_cmd;
974
975 if (tickssofar < ticks_limit)
976 return;
977
978 printk("%s: command unit timed out, status resetting.\n", dev->name);
979#if 1
980 i596_reset(dev, lp);
981#endif
982 }
983}
984
985#if 0
986
987
988static int i596_test(struct net_device *dev)
989{
990 struct i596_private *lp = (struct i596_private *) dev->priv;
991 volatile int *tint;
992 u32 data;
993
994 tint = (volatile int *)(&(lp->scp));
995 data = virt_to_dma(lp,tint);
996
997 tint[1] = -1;
998 CHECK_WBACK(tint,PAGE_SIZE);
999
1000 MPU_PORT(dev, 1, data);
1001
1002 for(data = 1000000; data; data--) {
1003 CHECK_INV(tint,PAGE_SIZE);
1004 if(tint[1] != -1)
1005 break;
1006
1007 }
1008
1009 printk("i596_test result %d\n", tint[1]);
1010
1011}
1012#endif
1013
1014
1015static int i596_open(struct net_device *dev)
1016{
1017 DEB(DEB_OPEN,printk("%s: i596_open() irq %d.\n", dev->name, dev->irq));
1018
1019 MOD_INC_USE_COUNT;
1020
1021 if (request_irq(dev->irq, &i596_interrupt, 0, "i82596", dev)) {
1022 printk("%s: IRQ %d not free\n", dev->name, dev->irq);
1023 goto out;
1024 }
1025
1026 init_rx_bufs(dev);
1027
1028 if (init_i596_mem(dev)) {
1029 printk("%s: Failed to init memory\n", dev->name);
1030 goto out_remove_rx_bufs;
1031 }
1032
1033 netif_start_queue(dev);
1034
1035 return 0;
1036
1037out_remove_rx_bufs:
1038 remove_rx_bufs(dev);
1039 free_irq(dev->irq, dev);
1040out:
1041 MOD_DEC_USE_COUNT;
1042
1043 return -EAGAIN;
1044}
1045
1046static void i596_tx_timeout (struct net_device *dev)
1047{
1048 struct i596_private *lp = (struct i596_private *) dev->priv;
1049
1050
1051 DEB(DEB_ERRORS,printk("%s: transmit timed out, status resetting.\n",
1052 dev->name));
1053
1054 lp->stats.tx_errors++;
1055
1056
1057 if (lp->last_restart == lp->stats.tx_packets) {
1058 DEB(DEB_ERRORS,printk ("Resetting board.\n"));
1059
1060 i596_reset (dev, lp);
1061 } else {
1062
1063 DEB(DEB_ERRORS,printk ("Kicking board.\n"));
1064 lp->scb.command = CUC_START | RX_START;
1065 CHECK_WBACK_INV(&(lp->scb), sizeof(struct i596_scb));
1066 CA (dev);
1067 lp->last_restart = lp->stats.tx_packets;
1068 }
1069
1070 dev->trans_start = jiffies;
1071 netif_wake_queue (dev);
1072}
1073
1074
1075static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
1076{
1077 struct i596_private *lp = (struct i596_private *) dev->priv;
1078 struct tx_cmd *tx_cmd;
1079 struct i596_tbd *tbd;
1080 short length = skb->len;
1081 dev->trans_start = jiffies;
1082
1083 DEB(DEB_STARTTX,printk("%s: i596_start_xmit(%x,%p) called\n", dev->name,
1084 skb->len, skb->data));
1085
1086 if (length < ETH_ZLEN) {
1087 skb = skb_padto(skb, ETH_ZLEN);
1088 if (skb == NULL)
1089 return 0;
1090 length = ETH_ZLEN;
1091 }
1092
1093 netif_stop_queue(dev);
1094
1095 tx_cmd = lp->tx_cmds + lp->next_tx_cmd;
1096 tbd = lp->tbds + lp->next_tx_cmd;
1097
1098 if (tx_cmd->cmd.command) {
1099 DEB(DEB_ERRORS,printk ("%s: xmit ring full, dropping packet.\n",
1100 dev->name));
1101 lp->stats.tx_dropped++;
1102
1103 dev_kfree_skb(skb);
1104 } else {
1105 if (++lp->next_tx_cmd == TX_RING_SIZE)
1106 lp->next_tx_cmd = 0;
1107 tx_cmd->tbd = WSWAPtbd(virt_to_dma(lp,tbd));
1108 tbd->next = I596_NULL;
1109
1110 tx_cmd->cmd.command = CMD_FLEX | CmdTx;
1111 tx_cmd->skb = skb;
1112
1113 tx_cmd->pad = 0;
1114 tx_cmd->size = 0;
1115 tbd->pad = 0;
1116 tbd->size = EOF | length;
1117
1118 tx_cmd->dma_addr = dma_map_single(lp->dev, skb->data, skb->len,
1119 DMA_TO_DEVICE);
1120 tbd->data = WSWAPchar(tx_cmd->dma_addr);
1121
1122 DEB(DEB_TXADDR,print_eth(skb->data, "tx-queued"));
1123 CHECK_WBACK_INV(tx_cmd, sizeof(struct tx_cmd));
1124 CHECK_WBACK_INV(tbd, sizeof(struct i596_tbd));
1125 i596_add_cmd(dev, &tx_cmd->cmd);
1126
1127 lp->stats.tx_packets++;
1128 lp->stats.tx_bytes += length;
1129 }
1130
1131 netif_start_queue(dev);
1132
1133 return 0;
1134}
1135
1136static void print_eth(unsigned char *add, char *str)
1137{
1138 int i;
1139
1140 printk("i596 0x%p, ", add);
1141 for (i = 0; i < 6; i++)
1142 printk(" %02X", add[i + 6]);
1143 printk(" -->");
1144 for (i = 0; i < 6; i++)
1145 printk(" %02X", add[i]);
1146 printk(" %02X%02X, %s\n", add[12], add[13], str);
1147}
1148
1149
1150#define LAN_PROM_ADDR 0xF0810000
1151
1152static int __devinit i82596_probe(struct net_device *dev)
1153{
1154 int i;
1155 struct i596_private *lp;
1156
1157 struct device *gen_dev = dev->priv;
1158 char eth_addr[6];
1159 dma_addr_t dma_addr;
1160
1161
1162 if (sizeof(struct i596_rfd) != 32) {
1163 printk("82596: sizeof(struct i596_rfd) = %d\n",
1164 sizeof(struct i596_rfd));
1165 return -ENODEV;
1166 }
1167 if ((sizeof(struct i596_rbd) % 32) != 0) {
1168 printk("82596: sizeof(struct i596_rbd) = %d\n",
1169 sizeof(struct i596_rbd));
1170 return -ENODEV;
1171 }
1172 if ((sizeof(struct tx_cmd) % 32) != 0) {
1173 printk("82596: sizeof(struct tx_cmd) = %d\n",
1174 sizeof(struct tx_cmd));
1175 return -ENODEV;
1176 }
1177 if (sizeof(struct i596_tbd) != 32) {
1178 printk("82596: sizeof(struct i596_tbd) = %d\n",
1179 sizeof(struct i596_tbd));
1180 return -ENODEV;
1181 }
1182#ifndef __LP64__
1183 if (sizeof(struct i596_private) > 4096) {
1184 printk("82596: sizeof(struct i596_private) = %d\n",
1185 sizeof(struct i596_private));
1186 return -ENODEV;
1187 }
1188#endif
1189
1190 if (!dev->base_addr || !dev->irq)
1191 return -ENODEV;
1192
1193 if (pdc_lan_station_id(eth_addr, dev->base_addr)) {
1194 for (i=0; i < 6; i++) {
1195 eth_addr[i] = gsc_readb(LAN_PROM_ADDR + i);
1196 }
1197 printk("82596.c: MAC of HP700 LAN read from EEPROM\n");
1198 }
1199
1200 dev->mem_start = (unsigned long) dma_alloc_noncoherent(gen_dev,
1201 sizeof(struct i596_private), &dma_addr, GFP_KERNEL);
1202 if (!dev->mem_start) {
1203 printk("%s: Couldn't get shared memory\n", dev->name);
1204 return -ENOMEM;
1205 }
1206
1207 ether_setup(dev);
1208 DEB(DEB_PROBE,printk("%s: 82596 at %#3lx,", dev->name, dev->base_addr));
1209
1210 for (i = 0; i < 6; i++)
1211 DEB(DEB_PROBE,printk(" %2.2X", dev->dev_addr[i] = eth_addr[i]));
1212
1213 DEB(DEB_PROBE,printk(" IRQ %d.\n", dev->irq));
1214
1215 DEB(DEB_PROBE,printk(version));
1216
1217
1218 dev->open = i596_open;
1219 dev->stop = i596_close;
1220 dev->hard_start_xmit = i596_start_xmit;
1221 dev->get_stats = i596_get_stats;
1222 dev->set_multicast_list = set_multicast_list;
1223 dev->tx_timeout = i596_tx_timeout;
1224 dev->watchdog_timeo = TX_TIMEOUT;
1225
1226 dev->priv = (void *)(dev->mem_start);
1227
1228 lp = (struct i596_private *) dev->priv;
1229 DEB(DEB_INIT,printk ("%s: lp at 0x%08lx (%d bytes), lp->scb at 0x%08lx\n",
1230 dev->name, (unsigned long)lp,
1231 sizeof(struct i596_private), (unsigned long)&lp->scb));
1232 memset(lp, 0, sizeof(struct i596_private));
1233
1234 lp->scb.command = 0;
1235 lp->scb.cmd = I596_NULL;
1236 lp->scb.rfd = I596_NULL;
1237 lp->lock = SPIN_LOCK_UNLOCKED;
1238 lp->dma_addr = dma_addr;
1239 lp->dev = gen_dev;
1240
1241 CHECK_WBACK_INV(dev->mem_start, sizeof(struct i596_private));
1242
1243 return 0;
1244}
1245
1246
1247static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1248{
1249 struct net_device *dev = dev_id;
1250 struct i596_private *lp;
1251 unsigned short status, ack_cmd = 0;
1252
1253 if (dev == NULL) {
1254 printk("i596_interrupt(): irq %d for unknown device.\n", irq);
1255 return IRQ_NONE;
1256 }
1257
1258 lp = (struct i596_private *) dev->priv;
1259
1260 spin_lock (&lp->lock);
1261
1262 wait_cmd(dev,lp,100,"i596 interrupt, timeout");
1263 status = lp->scb.status;
1264
1265 DEB(DEB_INTS,printk("%s: i596 interrupt, IRQ %d, status %4.4x.\n",
1266 dev->name, irq, status));
1267
1268 ack_cmd = status & 0xf000;
1269
1270 if (!ack_cmd) {
1271 DEB(DEB_ERRORS, printk("%s: interrupt with no events\n", dev->name));
1272 spin_unlock (&lp->lock);
1273 return IRQ_NONE;
1274 }
1275
1276 if ((status & 0x8000) || (status & 0x2000)) {
1277 struct i596_cmd *ptr;
1278
1279 if ((status & 0x8000))
1280 DEB(DEB_INTS,printk("%s: i596 interrupt completed command.\n", dev->name));
1281 if ((status & 0x2000))
1282 DEB(DEB_INTS,printk("%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700));
1283
1284 while (lp->cmd_head != NULL) {
1285 CHECK_INV(lp->cmd_head, sizeof(struct i596_cmd));
1286 if (!(lp->cmd_head->status & STAT_C))
1287 break;
1288
1289 ptr = lp->cmd_head;
1290
1291 DEB(DEB_STATUS,printk("cmd_head->status = %04x, ->command = %04x\n",
1292 lp->cmd_head->status, lp->cmd_head->command));
1293 lp->cmd_head = ptr->v_next;
1294 lp->cmd_backlog--;
1295
1296 switch ((ptr->command) & 0x7) {
1297 case CmdTx:
1298 {
1299 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
1300 struct sk_buff *skb = tx_cmd->skb;
1301
1302 if ((ptr->status) & STAT_OK) {
1303 DEB(DEB_TXADDR,print_eth(skb->data, "tx-done"));
1304 } else {
1305 lp->stats.tx_errors++;
1306 if ((ptr->status) & 0x0020)
1307 lp->stats.collisions++;
1308 if (!((ptr->status) & 0x0040))
1309 lp->stats.tx_heartbeat_errors++;
1310 if ((ptr->status) & 0x0400)
1311 lp->stats.tx_carrier_errors++;
1312 if ((ptr->status) & 0x0800)
1313 lp->stats.collisions++;
1314 if ((ptr->status) & 0x1000)
1315 lp->stats.tx_aborted_errors++;
1316 }
1317 dma_unmap_single(lp->dev, tx_cmd->dma_addr, skb->len, DMA_TO_DEVICE);
1318 dev_kfree_skb_irq(skb);
1319
1320 tx_cmd->cmd.command = 0;
1321 break;
1322 }
1323 case CmdTDR:
1324 {
1325 unsigned short status = ((struct tdr_cmd *)ptr)->status;
1326
1327 if (status & 0x8000) {
1328 DEB(DEB_ANY,printk("%s: link ok.\n", dev->name));
1329 } else {
1330 if (status & 0x4000)
1331 printk("%s: Transceiver problem.\n", dev->name);
1332 if (status & 0x2000)
1333 printk("%s: Termination problem.\n", dev->name);
1334 if (status & 0x1000)
1335 printk("%s: Short circuit.\n", dev->name);
1336
1337 DEB(DEB_TDR,printk("%s: Time %d.\n", dev->name, status & 0x07ff));
1338 }
1339 break;
1340 }
1341 case CmdConfigure:
1342
1343 ptr->command = 0;
1344 break;
1345 }
1346 ptr->v_next = NULL;
1347 ptr->b_next = I596_NULL;
1348 CHECK_WBACK(ptr, sizeof(struct i596_cmd));
1349 lp->last_cmd = jiffies;
1350 }
1351
1352
1353
1354
1355
1356 ptr = lp->cmd_head;
1357 while ((ptr != NULL) && (ptr != lp->cmd_tail)) {
1358 struct i596_cmd *prev = ptr;
1359
1360 ptr->command &= 0x1fff;
1361 ptr = ptr->v_next;
1362 CHECK_WBACK_INV(prev, sizeof(struct i596_cmd));
1363 }
1364
1365 if ((lp->cmd_head != NULL))
1366 ack_cmd |= CUC_START;
1367 lp->scb.cmd = WSWAPcmd(virt_to_dma(lp,&lp->cmd_head->status));
1368 CHECK_WBACK_INV(&lp->scb, sizeof(struct i596_scb));
1369 }
1370 if ((status & 0x1000) || (status & 0x4000)) {
1371 if ((status & 0x4000))
1372 DEB(DEB_INTS,printk("%s: i596 interrupt received a frame.\n", dev->name));
1373 i596_rx(dev);
1374
1375 if (status & 0x1000) {
1376 if (netif_running(dev)) {
1377 DEB(DEB_ERRORS,printk("%s: i596 interrupt receive unit inactive, status 0x%x\n", dev->name, status));
1378 ack_cmd |= RX_START;
1379 lp->stats.rx_errors++;
1380 lp->stats.rx_fifo_errors++;
1381 rebuild_rx_bufs(dev);
1382 }
1383 }
1384 }
1385 wait_cmd(dev,lp,100,"i596 interrupt, timeout");
1386 lp->scb.command = ack_cmd;
1387 CHECK_WBACK(&lp->scb, sizeof(struct i596_scb));
1388
1389
1390
1391
1392
1393 CA(dev);
1394
1395 wait_cmd(dev,lp,100,"i596 interrupt, exit timeout");
1396 DEB(DEB_INTS,printk("%s: exiting interrupt.\n", dev->name));
1397
1398 spin_unlock (&lp->lock);
1399 return IRQ_HANDLED;
1400}
1401
1402static int i596_close(struct net_device *dev)
1403{
1404 struct i596_private *lp = (struct i596_private *) dev->priv;
1405 unsigned long flags;
1406
1407 netif_stop_queue(dev);
1408
1409 DEB(DEB_INIT,printk("%s: Shutting down ethercard, status was %4.4x.\n",
1410 dev->name, lp->scb.status));
1411
1412 spin_lock_irqsave(&lp->lock, flags);
1413
1414 wait_cmd(dev,lp,100,"close1 timed out");
1415 lp->scb.command = CUC_ABORT | RX_ABORT;
1416 CHECK_WBACK(&lp->scb, sizeof(struct i596_scb));
1417
1418 CA(dev);
1419
1420 wait_cmd(dev,lp,100,"close2 timed out");
1421 spin_unlock_irqrestore(&lp->lock, flags);
1422 DEB(DEB_STRUCT,i596_display_data(dev));
1423 i596_cleanup_cmd(dev,lp);
1424
1425 disable_irq(dev->irq);
1426
1427 free_irq(dev->irq, dev);
1428 remove_rx_bufs(dev);
1429
1430 MOD_DEC_USE_COUNT;
1431
1432 return 0;
1433}
1434
1435static struct net_device_stats *
1436 i596_get_stats(struct net_device *dev)
1437{
1438 struct i596_private *lp = (struct i596_private *) dev->priv;
1439
1440 return &lp->stats;
1441}
1442
1443
1444
1445
1446
1447static void set_multicast_list(struct net_device *dev)
1448{
1449 struct i596_private *lp = (struct i596_private *) dev->priv;
1450 int config = 0, cnt;
1451
1452 DEB(DEB_MULTI,printk("%s: set multicast list, %d entries, promisc %s, allmulti %s\n", dev->name, dev->mc_count, dev->flags & IFF_PROMISC ? "ON" : "OFF", dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
1453
1454 if ((dev->flags & IFF_PROMISC) && !(lp->cf_cmd.i596_config[8] & 0x01)) {
1455 lp->cf_cmd.i596_config[8] |= 0x01;
1456 config = 1;
1457 }
1458 if (!(dev->flags & IFF_PROMISC) && (lp->cf_cmd.i596_config[8] & 0x01)) {
1459 lp->cf_cmd.i596_config[8] &= ~0x01;
1460 config = 1;
1461 }
1462 if ((dev->flags & IFF_ALLMULTI) && (lp->cf_cmd.i596_config[11] & 0x20)) {
1463 lp->cf_cmd.i596_config[11] &= ~0x20;
1464 config = 1;
1465 }
1466 if (!(dev->flags & IFF_ALLMULTI) && !(lp->cf_cmd.i596_config[11] & 0x20)) {
1467 lp->cf_cmd.i596_config[11] |= 0x20;
1468 config = 1;
1469 }
1470 if (config) {
1471 if (lp->cf_cmd.cmd.command)
1472 printk("%s: config change request already queued\n",
1473 dev->name);
1474 else {
1475 lp->cf_cmd.cmd.command = CmdConfigure;
1476 CHECK_WBACK_INV(&lp->cf_cmd, sizeof(struct cf_cmd));
1477 i596_add_cmd(dev, &lp->cf_cmd.cmd);
1478 }
1479 }
1480
1481 cnt = dev->mc_count;
1482 if (cnt > MAX_MC_CNT)
1483 {
1484 cnt = MAX_MC_CNT;
1485 printk("%s: Only %d multicast addresses supported",
1486 dev->name, cnt);
1487 }
1488
1489 if (dev->mc_count > 0) {
1490 struct dev_mc_list *dmi;
1491 unsigned char *cp;
1492 struct mc_cmd *cmd;
1493
1494 cmd = &lp->mc_cmd;
1495 cmd->cmd.command = CmdMulticastList;
1496 cmd->mc_cnt = dev->mc_count * 6;
1497 cp = cmd->mc_addrs;
1498 for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
1499 memcpy(cp, dmi->dmi_addr, 6);
1500 if (i596_debug > 1)
1501 DEB(DEB_MULTI,printk("%s: Adding address %02x:%02x:%02x:%02x:%02x:%02x\n",
1502 dev->name, cp[0],cp[1],cp[2],cp[3],cp[4],cp[5]));
1503 }
1504 CHECK_WBACK_INV(&lp->mc_cmd, sizeof(struct mc_cmd));
1505 i596_add_cmd(dev, &cmd->cmd);
1506 }
1507}
1508
1509MODULE_PARM(debug, "i");
1510MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
1511static int debug = -1;
1512
1513static int num_drivers;
1514static struct net_device *netdevs[MAX_DRIVERS];
1515
1516static int __devinit
1517lan_init_chip(struct parisc_device *dev)
1518{
1519 struct net_device *netdevice;
1520 int retval;
1521
1522 if (num_drivers >= MAX_DRIVERS) {
1523
1524 return -ENODEV;
1525 }
1526
1527 if (!dev->irq) {
1528 printk(KERN_ERR __FILE__ ": IRQ not found for i82596 at 0x%lx\n", dev->hpa);
1529 return -ENODEV;
1530 }
1531
1532 printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa, dev->irq);
1533
1534 netdevice = alloc_etherdev(0);
1535 if (!netdevice)
1536 return -ENOMEM;
1537
1538 netdevice->base_addr = dev->hpa;
1539 netdevice->irq = dev->irq;
1540 netdevice->init = i82596_probe;
1541 netdevice->priv = &dev->dev;
1542
1543 retval = register_netdev(netdevice);
1544 if (retval) {
1545 printk(KERN_WARNING __FILE__ ": register_netdevice ret'd %d\n", retval);
1546 free_netdev(netdevice);
1547 return -ENODEV;
1548 };
1549 if (dev->id.sversion == 0x72) {
1550 ((struct i596_private *)netdevice->priv)->options = OPT_SWAP_PORT;
1551 }
1552
1553 netdevs[num_drivers++] = netdevice;
1554
1555 return retval;
1556}
1557
1558
1559static struct parisc_device_id lan_tbl[] = {
1560 { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0008a },
1561 { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00072 },
1562 { 0, }
1563};
1564
1565MODULE_DEVICE_TABLE(parisc, lan_tbl);
1566
1567static struct parisc_driver lan_driver = {
1568 .name = "Apricot",
1569 .id_table = lan_tbl,
1570 .probe = lan_init_chip,
1571};
1572
1573static int __devinit lasi_82596_init(void)
1574{
1575 if (debug >= 0)
1576 i596_debug = debug;
1577 return register_parisc_driver(&lan_driver);
1578}
1579
1580module_init(lasi_82596_init);
1581
1582static void __exit lasi_82596_exit(void)
1583{
1584 int i;
1585
1586 for (i=0; i<MAX_DRIVERS; i++) {
1587 struct i596_private *lp;
1588 struct net_device *netdevice;
1589
1590 netdevice = netdevs[i];
1591 if (!netdevice)
1592 continue;
1593
1594 unregister_netdev(netdevice);
1595
1596 lp = (struct i596_private *) netdevice->priv;
1597 dma_free_noncoherent(lp->dev, sizeof(struct i596_private),
1598 (void *)netdevice->mem_start, lp->dma_addr);
1599 free_netdev(netdevice);
1600 }
1601
1602 unregister_parisc_driver(&lan_driver);
1603}
1604
1605module_exit(lasi_82596_exit);
1606