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