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