1
/* 82596.c: A generic 82596 ethernet driver for linux. */
4
Written 1994 by Mark Evans.
5
This driver is for the Apricot 82596 bus-master interface
7
Modularised 12/94 Mark Evans
10
Modified to support the 82596 ethernet chips on 680x0 VME boards.
11
by Richard Hirst <richard@sleepie.demon.co.uk>
14
980825: Changed to receive directly in to sk_buffs which are
15
allocated at open() time. Eliminates copy on incoming frames
16
(small ones are still copied). Shared data now held in a
17
non-cached page, so we can run on 68060 in copyback mode.
20
* look at deferring rx frames rather than discarding (as per tulip)
21
* handle tx ring full as per tulip
22
* performance test to tune rx_copybreak
24
Most of my modifications relate to the braindead big-endian
25
implementation by Intel. When the i596 is operating in
26
'big-endian' mode, it thinks a 32 bit value of 0x12345678
27
should be stored as 0x56781234. This is a real pain, when
28
you have linked lists which are shared by the 680x0 and the
32
Written 1993 by Donald Becker.
33
Copyright 1993 United States Government as represented by the Director,
34
National Security Agency. This software may only be used and distributed
35
according to the terms of the GNU General Public License as modified by SRC,
36
incorporated herein by reference.
38
The author may be reached as becker@scyld.com, or C/O
39
Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
43
#include <linux/module.h>
44
#include <linux/kernel.h>
45
#include <linux/string.h>
46
#include <linux/errno.h>
47
#include <linux/ioport.h>
48
#include <linux/interrupt.h>
49
#include <linux/delay.h>
50
#include <linux/netdevice.h>
51
#include <linux/etherdevice.h>
52
#include <linux/skbuff.h>
53
#include <linux/init.h>
54
#include <linux/bitops.h>
55
#include <linux/gfp.h>
59
#include <asm/pgtable.h>
60
#include <asm/cacheflush.h>
62
static char version[] __initdata =
63
"82596.c $Revision: 1.5 $\n";
65
#define DRV_NAME "82596"
70
#define DEB_INIT 0x0001
71
#define DEB_PROBE 0x0002
72
#define DEB_SERIOUS 0x0004
73
#define DEB_ERRORS 0x0008
74
#define DEB_MULTI 0x0010
75
#define DEB_TDR 0x0020
76
#define DEB_OPEN 0x0040
77
#define DEB_RESET 0x0080
78
#define DEB_ADDCMD 0x0100
79
#define DEB_STATUS 0x0200
80
#define DEB_STARTTX 0x0400
81
#define DEB_RXADDR 0x0800
82
#define DEB_TXADDR 0x1000
83
#define DEB_RXFRAME 0x2000
84
#define DEB_INTS 0x4000
85
#define DEB_STRUCT 0x8000
86
#define DEB_ANY 0xffff
89
#define DEB(x,y) if (i596_debug & (x)) y
92
#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_MVME16x_NET_MODULE)
93
#define ENABLE_MVME16x_NET
95
#if defined(CONFIG_BVME6000_NET) || defined(CONFIG_BVME6000_NET_MODULE)
96
#define ENABLE_BVME6000_NET
98
#if defined(CONFIG_APRICOT) || defined(CONFIG_APRICOT_MODULE)
99
#define ENABLE_APRICOT
102
#ifdef ENABLE_MVME16x_NET
103
#include <asm/mvme16xhw.h>
105
#ifdef ENABLE_BVME6000_NET
106
#include <asm/bvme6000hw.h>
110
* Define various macros for Channel Attention, word swapping etc., dependent
111
* on architecture. MVME and BVME are 680x0 based, otherwise it is Intel.
115
#define WSWAPrfd(x) ((struct i596_rfd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
116
#define WSWAPrbd(x) ((struct i596_rbd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
117
#define WSWAPiscp(x) ((struct i596_iscp *)(((u32)(x)<<16) | ((((u32)(x)))>>16)))
118
#define WSWAPscb(x) ((struct i596_scb *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
119
#define WSWAPcmd(x) ((struct i596_cmd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
120
#define WSWAPtbd(x) ((struct i596_tbd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
121
#define WSWAPchar(x) ((char *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
122
#define ISCP_BUSY 0x00010000
123
#define MACH_IS_APRICOT 0
125
#define WSWAPrfd(x) ((struct i596_rfd *)((long)x))
126
#define WSWAPrbd(x) ((struct i596_rbd *)((long)x))
127
#define WSWAPiscp(x) ((struct i596_iscp *)((long)x))
128
#define WSWAPscb(x) ((struct i596_scb *)((long)x))
129
#define WSWAPcmd(x) ((struct i596_cmd *)((long)x))
130
#define WSWAPtbd(x) ((struct i596_tbd *)((long)x))
131
#define WSWAPchar(x) ((char *)((long)x))
132
#define ISCP_BUSY 0x0001
133
#define MACH_IS_APRICOT 1
137
* The MPU_PORT command allows direct access to the 82596. With PORT access
138
* the following commands are available (p5-18). The 32-bit port command
139
* must be word-swapped with the most significant word written first.
140
* This only applies to VME boards.
142
#define PORT_RESET 0x00 /* reset 82596 */
143
#define PORT_SELFTEST 0x01 /* selftest */
144
#define PORT_ALTSCP 0x02 /* alternate SCB address */
145
#define PORT_ALTDUMP 0x03 /* Alternate DUMP address */
147
static int i596_debug = (DEB_SERIOUS|DEB_PROBE);
149
MODULE_AUTHOR("Richard Hirst");
150
MODULE_DESCRIPTION("i82596 driver");
151
MODULE_LICENSE("GPL");
153
module_param(i596_debug, int, 0);
154
MODULE_PARM_DESC(i596_debug, "i82596 debug mask");
157
/* Copy frames shorter than rx_copybreak, otherwise pass on up in
158
* a full sized sk_buff. Value of 100 stolen from tulip.c (!alpha).
160
static int rx_copybreak = 100;
162
#define PKT_BUF_SZ 1536
163
#define MAX_MC_CNT 64
165
#define I596_TOTAL_SIZE 17
167
#define I596_NULL ((void *)0xffffffff)
169
#define CMD_EOL 0x8000 /* The last command of the list, stop. */
170
#define CMD_SUSP 0x4000 /* Suspend after doing cmd. */
171
#define CMD_INTR 0x2000 /* Interrupt after doing cmd. */
173
#define CMD_FLEX 0x0008 /* Enable flexible memory model */
176
CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3,
177
CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7
180
#define STAT_C 0x8000 /* Set to 0 after execution */
181
#define STAT_B 0x4000 /* Command being executed */
182
#define STAT_OK 0x2000 /* Command executed ok */
183
#define STAT_A 0x1000 /* Command aborted */
185
#define CUC_START 0x0100
186
#define CUC_RESUME 0x0200
187
#define CUC_SUSPEND 0x0300
188
#define CUC_ABORT 0x0400
189
#define RX_START 0x0010
190
#define RX_RESUME 0x0020
191
#define RX_SUSPEND 0x0030
192
#define RX_ABORT 0x0040
194
#define TX_TIMEOUT (HZ/20)
198
unsigned short porthi;
199
unsigned short portlo;
204
#define SIZE_MASK 0x3fff
209
struct i596_tbd *next;
213
/* The command structure has two 'next' pointers; v_next is the address of
214
* the next command as seen by the CPU, b_next is the address of the next
215
* command as seen by the 82596. The b_next pointer, as used by the 82596
216
* always references the status field of the next command, rather than the
217
* v_next field, because the 82596 is unaware of v_next. It may seem more
218
* logical to put v_next at the end of the structure, but we cannot do that
219
* because the 82596 expects other fields to be there, depending on command
224
struct i596_cmd *v_next; /* Address from CPUs viewpoint */
225
unsigned short status;
226
unsigned short command;
227
struct i596_cmd *b_next; /* Address from i596 viewpoint */
232
struct i596_tbd *tbd;
235
struct sk_buff *skb; /* So we can free it after tx */
240
unsigned short status;
247
char mc_addrs[MAX_MC_CNT*6];
257
char i596_config[16];
263
struct i596_rfd *b_next; /* Address from i596 viewpoint */
264
struct i596_rbd *rbd;
265
unsigned short count;
267
struct i596_rfd *v_next; /* Address from CPUs viewpoint */
268
struct i596_rfd *v_prev;
272
unsigned short count;
273
unsigned short zero1;
274
struct i596_rbd *b_next;
275
unsigned char *b_data; /* Address from i596 viewpoint */
277
unsigned short zero2;
279
struct i596_rbd *v_next;
280
struct i596_rbd *b_addr; /* This rbd addr from i596 view */
281
unsigned char *v_data; /* Address from CPUs viewpoint */
284
#define TX_RING_SIZE 64
285
#define RX_RING_SIZE 16
288
unsigned short status;
289
unsigned short command;
290
struct i596_cmd *cmd;
291
struct i596_rfd *rfd;
292
unsigned long crc_err;
293
unsigned long align_err;
294
unsigned long resource_err;
295
unsigned long over_err;
296
unsigned long rcvdt_err;
297
unsigned long short_err;
299
unsigned short t_off;
304
struct i596_scb *scb;
308
unsigned long sysbus;
310
struct i596_iscp *iscp;
313
struct i596_private {
314
volatile struct i596_scp scp;
315
volatile struct i596_iscp iscp;
316
volatile struct i596_scb scb;
317
struct sa_cmd sa_cmd;
318
struct cf_cmd cf_cmd;
319
struct tdr_cmd tdr_cmd;
320
struct mc_cmd mc_cmd;
322
int last_restart __attribute__((aligned(4)));
323
struct i596_rfd *rfd_head;
324
struct i596_rbd *rbd_head;
325
struct i596_cmd *cmd_tail;
326
struct i596_cmd *cmd_head;
328
unsigned long last_cmd;
329
struct i596_rfd rfds[RX_RING_SIZE];
330
struct i596_rbd rbds[RX_RING_SIZE];
331
struct tx_cmd tx_cmds[TX_RING_SIZE];
332
struct i596_tbd tbds[TX_RING_SIZE];
337
static char init_setup[] =
339
0x8E, /* length, prefetch on */
340
0xC8, /* fifo to 8, monitor off */
342
0xc0, /* don't save bad frames */
344
0x80, /* don't save bad frames */
346
0x2E, /* No source address insertion, 8 byte preamble */
347
0x00, /* priority and backoff defaults */
348
0x60, /* interframe spacing */
349
0x00, /* slot time LSB */
350
0xf2, /* slot time and retries */
351
0x00, /* promiscuous mode */
352
0x00, /* collision detect */
353
0x40, /* minimum frame length */
356
0x7f /* *multi IA */ };
358
static int i596_open(struct net_device *dev);
359
static netdev_tx_t i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
360
static irqreturn_t i596_interrupt(int irq, void *dev_id);
361
static int i596_close(struct net_device *dev);
362
static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
363
static void i596_tx_timeout (struct net_device *dev);
364
static void print_eth(unsigned char *buf, char *str);
365
static void set_multicast_list(struct net_device *dev);
367
static int rx_ring_size = RX_RING_SIZE;
368
static int ticks_limit = 25;
369
static int max_cmd_backlog = TX_RING_SIZE-1;
372
static inline void CA(struct net_device *dev)
374
#ifdef ENABLE_MVME16x_NET
375
if (MACH_IS_MVME16x) {
376
((struct i596_reg *) dev->base_addr)->ca = 1;
379
#ifdef ENABLE_BVME6000_NET
380
if (MACH_IS_BVME6000) {
383
i = *(volatile u32 *) (dev->base_addr);
386
#ifdef ENABLE_APRICOT
387
if (MACH_IS_APRICOT) {
388
outw(0, (short) (dev->base_addr) + 4);
394
static inline void MPU_PORT(struct net_device *dev, int c, volatile void *x)
396
#ifdef ENABLE_MVME16x_NET
397
if (MACH_IS_MVME16x) {
398
struct i596_reg *p = (struct i596_reg *) (dev->base_addr);
399
p->porthi = ((c) | (u32) (x)) & 0xffff;
400
p->portlo = ((c) | (u32) (x)) >> 16;
403
#ifdef ENABLE_BVME6000_NET
404
if (MACH_IS_BVME6000) {
405
u32 v = (u32) (c) | (u32) (x);
406
v = ((u32) (v) << 16) | ((u32) (v) >> 16);
407
*(volatile u32 *) dev->base_addr = v;
409
*(volatile u32 *) dev->base_addr = v;
415
static inline int wait_istat(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
417
while (--delcnt && lp->iscp.stat)
420
printk(KERN_ERR "%s: %s, status %4.4x, cmd %4.4x.\n",
421
dev->name, str, lp->scb.status, lp->scb.command);
429
static inline int wait_cmd(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
431
while (--delcnt && lp->scb.command)
434
printk(KERN_ERR "%s: %s, status %4.4x, cmd %4.4x.\n",
435
dev->name, str, lp->scb.status, lp->scb.command);
443
static inline int wait_cfg(struct net_device *dev, struct i596_cmd *cmd, int delcnt, char *str)
445
volatile struct i596_cmd *c = cmd;
447
while (--delcnt && c->command)
450
printk(KERN_ERR "%s: %s.\n", dev->name, str);
458
static void i596_display_data(struct net_device *dev)
460
struct i596_private *lp = dev->ml_priv;
461
struct i596_cmd *cmd;
462
struct i596_rfd *rfd;
463
struct i596_rbd *rbd;
465
printk(KERN_ERR "lp and scp at %p, .sysbus = %08lx, .iscp = %p\n",
466
&lp->scp, lp->scp.sysbus, lp->scp.iscp);
467
printk(KERN_ERR "iscp at %p, iscp.stat = %08lx, .scb = %p\n",
468
&lp->iscp, lp->iscp.stat, lp->iscp.scb);
469
printk(KERN_ERR "scb at %p, scb.status = %04x, .command = %04x,"
470
" .cmd = %p, .rfd = %p\n",
471
&lp->scb, lp->scb.status, lp->scb.command,
472
lp->scb.cmd, lp->scb.rfd);
473
printk(KERN_ERR " errors: crc %lx, align %lx, resource %lx,"
474
" over %lx, rcvdt %lx, short %lx\n",
475
lp->scb.crc_err, lp->scb.align_err, lp->scb.resource_err,
476
lp->scb.over_err, lp->scb.rcvdt_err, lp->scb.short_err);
478
while (cmd != I596_NULL) {
479
printk(KERN_ERR "cmd at %p, .status = %04x, .command = %04x, .b_next = %p\n",
480
cmd, cmd->status, cmd->command, cmd->b_next);
484
printk(KERN_ERR "rfd_head = %p\n", rfd);
486
printk(KERN_ERR " %p .stat %04x, .cmd %04x, b_next %p, rbd %p,"
488
rfd, rfd->stat, rfd->cmd, rfd->b_next, rfd->rbd,
491
} while (rfd != lp->rfd_head);
493
printk(KERN_ERR "rbd_head = %p\n", rbd);
495
printk(KERN_ERR " %p .count %04x, b_next %p, b_data %p, size %04x\n",
496
rbd, rbd->count, rbd->b_next, rbd->b_data, rbd->size);
498
} while (rbd != lp->rbd_head);
502
#if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET)
503
static irqreturn_t i596_error(int irq, void *dev_id)
505
struct net_device *dev = dev_id;
506
#ifdef ENABLE_MVME16x_NET
507
if (MACH_IS_MVME16x) {
508
volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
514
#ifdef ENABLE_BVME6000_NET
515
if (MACH_IS_BVME6000) {
516
volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
522
printk(KERN_ERR "%s: Error interrupt\n", dev->name);
523
i596_display_data(dev);
528
static inline void remove_rx_bufs(struct net_device *dev)
530
struct i596_private *lp = dev->ml_priv;
531
struct i596_rbd *rbd;
534
for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
535
if (rbd->skb == NULL)
537
dev_kfree_skb(rbd->skb);
542
static inline int init_rx_bufs(struct net_device *dev)
544
struct i596_private *lp = dev->ml_priv;
546
struct i596_rfd *rfd;
547
struct i596_rbd *rbd;
549
/* First build the Receive Buffer Descriptor List */
551
for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
552
struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ);
561
rbd->b_next = WSWAPrbd(virt_to_bus(rbd+1));
562
rbd->b_addr = WSWAPrbd(virt_to_bus(rbd));
564
rbd->v_data = skb->data;
565
rbd->b_data = WSWAPchar(virt_to_bus(skb->data));
566
rbd->size = PKT_BUF_SZ;
568
cache_clear(virt_to_phys(skb->data), PKT_BUF_SZ);
571
lp->rbd_head = lp->rbds;
572
rbd = lp->rbds + rx_ring_size - 1;
573
rbd->v_next = lp->rbds;
574
rbd->b_next = WSWAPrbd(virt_to_bus(lp->rbds));
576
/* Now build the Receive Frame Descriptor List */
578
for (i = 0, rfd = lp->rfds; i < rx_ring_size; i++, rfd++) {
579
rfd->rbd = I596_NULL;
582
rfd->b_next = WSWAPrfd(virt_to_bus(rfd+1));
585
lp->rfd_head = lp->rfds;
586
lp->scb.rfd = WSWAPrfd(virt_to_bus(lp->rfds));
588
rfd->rbd = lp->rbd_head;
589
rfd->v_prev = lp->rfds + rx_ring_size - 1;
590
rfd = lp->rfds + rx_ring_size - 1;
591
rfd->v_next = lp->rfds;
592
rfd->b_next = WSWAPrfd(virt_to_bus(lp->rfds));
593
rfd->cmd = CMD_EOL|CMD_FLEX;
599
static void rebuild_rx_bufs(struct net_device *dev)
601
struct i596_private *lp = dev->ml_priv;
604
/* Ensure rx frame/buffer descriptors are tidy */
606
for (i = 0; i < rx_ring_size; i++) {
607
lp->rfds[i].rbd = I596_NULL;
608
lp->rfds[i].cmd = CMD_FLEX;
610
lp->rfds[rx_ring_size-1].cmd = CMD_EOL|CMD_FLEX;
611
lp->rfd_head = lp->rfds;
612
lp->scb.rfd = WSWAPrfd(virt_to_bus(lp->rfds));
613
lp->rbd_head = lp->rbds;
614
lp->rfds[0].rbd = WSWAPrbd(virt_to_bus(lp->rbds));
618
static int init_i596_mem(struct net_device *dev)
620
struct i596_private *lp = dev->ml_priv;
621
#if !defined(ENABLE_MVME16x_NET) && !defined(ENABLE_BVME6000_NET) || defined(ENABLE_APRICOT)
622
short ioaddr = dev->base_addr;
626
MPU_PORT(dev, PORT_RESET, NULL);
628
udelay(100); /* Wait 100us - seems to help */
630
#if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET)
631
#ifdef ENABLE_MVME16x_NET
632
if (MACH_IS_MVME16x) {
633
volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
635
/* Disable all ints for now */
638
/* Following disables snooping. Snooping is not required
639
* as we make appropriate use of non-cached pages for
640
* shared data, and cache_push/cache_clear.
645
#ifdef ENABLE_BVME6000_NET
646
if (MACH_IS_BVME6000) {
647
volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
653
/* change the scp address */
655
MPU_PORT(dev, PORT_ALTSCP, (void *)virt_to_bus((void *)&lp->scp));
657
#elif defined(ENABLE_APRICOT)
660
u32 scp = virt_to_bus(&lp->scp);
662
/* change the scp address */
665
outb(4, ioaddr + 0xf);
666
outw(scp | 2, ioaddr);
667
outw(scp >> 16, ioaddr);
671
lp->last_cmd = jiffies;
673
#ifdef ENABLE_MVME16x_NET
675
lp->scp.sysbus = 0x00000054;
677
#ifdef ENABLE_BVME6000_NET
678
if (MACH_IS_BVME6000)
679
lp->scp.sysbus = 0x0000004c;
681
#ifdef ENABLE_APRICOT
683
lp->scp.sysbus = 0x00440000;
686
lp->scp.iscp = WSWAPiscp(virt_to_bus((void *)&lp->iscp));
687
lp->iscp.scb = WSWAPscb(virt_to_bus((void *)&lp->scb));
688
lp->iscp.stat = ISCP_BUSY;
691
lp->cmd_head = lp->scb.cmd = I596_NULL;
693
#ifdef ENABLE_BVME6000_NET
694
if (MACH_IS_BVME6000) {
695
lp->scb.t_on = 7 * 25;
696
lp->scb.t_off = 1 * 25;
700
DEB(DEB_INIT,printk(KERN_DEBUG "%s: starting i82596.\n", dev->name));
702
#if defined(ENABLE_APRICOT)
703
(void) inb(ioaddr + 0x10);
704
outb(4, ioaddr + 0xf);
708
if (wait_istat(dev,lp,1000,"initialization timed out"))
710
DEB(DEB_INIT,printk(KERN_DEBUG "%s: i82596 initialization successful\n", dev->name));
712
/* Ensure rx frame/buffer descriptors are tidy */
713
rebuild_rx_bufs(dev);
716
#ifdef ENABLE_MVME16x_NET
717
if (MACH_IS_MVME16x) {
718
volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
720
/* Enable ints, etc. now */
721
pcc2[0x2a] = 0x55; /* Edge sensitive */
725
#ifdef ENABLE_BVME6000_NET
726
if (MACH_IS_BVME6000) {
727
volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
734
DEB(DEB_INIT,printk(KERN_DEBUG "%s: queuing CmdConfigure\n", dev->name));
735
memcpy(lp->cf_cmd.i596_config, init_setup, 14);
736
lp->cf_cmd.cmd.command = CmdConfigure;
737
i596_add_cmd(dev, &lp->cf_cmd.cmd);
739
DEB(DEB_INIT,printk(KERN_DEBUG "%s: queuing CmdSASetup\n", dev->name));
740
memcpy(lp->sa_cmd.eth_addr, dev->dev_addr, 6);
741
lp->sa_cmd.cmd.command = CmdSASetup;
742
i596_add_cmd(dev, &lp->sa_cmd.cmd);
744
DEB(DEB_INIT,printk(KERN_DEBUG "%s: queuing CmdTDR\n", dev->name));
745
lp->tdr_cmd.cmd.command = CmdTDR;
746
i596_add_cmd(dev, &lp->tdr_cmd.cmd);
748
spin_lock_irqsave (&lp->lock, flags);
750
if (wait_cmd(dev,lp,1000,"timed out waiting to issue RX_START")) {
751
spin_unlock_irqrestore (&lp->lock, flags);
754
DEB(DEB_INIT,printk(KERN_DEBUG "%s: Issuing RX_START\n", dev->name));
755
lp->scb.command = RX_START;
758
spin_unlock_irqrestore (&lp->lock, flags);
760
if (wait_cmd(dev,lp,1000,"RX_START not processed"))
762
DEB(DEB_INIT,printk(KERN_DEBUG "%s: Receive unit started OK\n", dev->name));
766
printk(KERN_CRIT "%s: Failed to initialise 82596\n", dev->name);
767
MPU_PORT(dev, PORT_RESET, NULL);
771
static inline int i596_rx(struct net_device *dev)
773
struct i596_private *lp = dev->ml_priv;
774
struct i596_rfd *rfd;
775
struct i596_rbd *rbd;
778
DEB(DEB_RXFRAME,printk(KERN_DEBUG "i596_rx(), rfd_head %p, rbd_head %p\n",
779
lp->rfd_head, lp->rbd_head));
781
rfd = lp->rfd_head; /* Ref next frame to check */
783
while ((rfd->stat) & STAT_C) { /* Loop while complete frames */
784
if (rfd->rbd == I596_NULL)
786
else if (rfd->rbd == lp->rbd_head->b_addr)
789
printk(KERN_CRIT "%s: rbd chain broken!\n", dev->name);
793
DEB(DEB_RXFRAME, printk(KERN_DEBUG " rfd %p, rfd.rbd %p, rfd.stat %04x\n",
794
rfd, rfd->rbd, rfd->stat));
796
if (rbd != I596_NULL && ((rfd->stat) & STAT_OK)) {
798
int pkt_len = rbd->count & 0x3fff;
799
struct sk_buff *skb = rbd->skb;
802
DEB(DEB_RXADDR,print_eth(rbd->v_data, "received"));
805
/* Check if the packet is long enough to just accept
806
* without copying to a properly sized skbuff.
809
if (pkt_len > rx_copybreak) {
810
struct sk_buff *newskb;
812
/* Get fresh skbuff to replace filled one. */
813
newskb = dev_alloc_skb(PKT_BUF_SZ);
814
if (newskb == NULL) {
815
skb = NULL; /* drop pkt */
818
/* Pass up the skb already on the Rx ring. */
819
skb_put(skb, pkt_len);
823
rbd->v_data = newskb->data;
824
rbd->b_data = WSWAPchar(virt_to_bus(newskb->data));
826
cache_clear(virt_to_phys(newskb->data), PKT_BUF_SZ);
830
skb = dev_alloc_skb(pkt_len + 2);
833
/* XXX tulip.c can defer packets here!! */
834
printk(KERN_WARNING "%s: i596_rx Memory squeeze, dropping packet.\n", dev->name);
835
dev->stats.rx_dropped++;
839
/* 16 byte align the data fields */
841
memcpy(skb_put(skb,pkt_len), rbd->v_data, pkt_len);
843
skb->protocol=eth_type_trans(skb,dev);
846
cache_clear(virt_to_phys(rbd->skb->data),
850
dev->stats.rx_packets++;
851
dev->stats.rx_bytes+=pkt_len;
855
DEB(DEB_ERRORS, printk(KERN_DEBUG "%s: Error, rfd.stat = 0x%04x\n",
856
dev->name, rfd->stat));
857
dev->stats.rx_errors++;
858
if ((rfd->stat) & 0x0001)
859
dev->stats.collisions++;
860
if ((rfd->stat) & 0x0080)
861
dev->stats.rx_length_errors++;
862
if ((rfd->stat) & 0x0100)
863
dev->stats.rx_over_errors++;
864
if ((rfd->stat) & 0x0200)
865
dev->stats.rx_fifo_errors++;
866
if ((rfd->stat) & 0x0400)
867
dev->stats.rx_frame_errors++;
868
if ((rfd->stat) & 0x0800)
869
dev->stats.rx_crc_errors++;
870
if ((rfd->stat) & 0x1000)
871
dev->stats.rx_length_errors++;
874
/* Clear the buffer descriptor count and EOF + F flags */
876
if (rbd != I596_NULL && (rbd->count & 0x4000)) {
878
lp->rbd_head = rbd->v_next;
881
/* Tidy the frame descriptor, marking it as end of list */
883
rfd->rbd = I596_NULL;
885
rfd->cmd = CMD_EOL|CMD_FLEX;
888
/* Remove end-of-list from old end descriptor */
890
rfd->v_prev->cmd = CMD_FLEX;
892
/* Update record of next frame descriptor to process */
894
lp->scb.rfd = rfd->b_next;
895
lp->rfd_head = rfd->v_next;
899
DEB(DEB_RXFRAME,printk(KERN_DEBUG "frames %d\n", frames));
905
static void i596_cleanup_cmd(struct net_device *dev, struct i596_private *lp)
907
struct i596_cmd *ptr;
909
while (lp->cmd_head != I596_NULL) {
911
lp->cmd_head = ptr->v_next;
914
switch ((ptr->command) & 0x7) {
917
struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
918
struct sk_buff *skb = tx_cmd->skb;
922
dev->stats.tx_errors++;
923
dev->stats.tx_aborted_errors++;
925
ptr->v_next = ptr->b_next = I596_NULL;
926
tx_cmd->cmd.command = 0; /* Mark as free */
930
ptr->v_next = ptr->b_next = I596_NULL;
934
wait_cmd(dev,lp,100,"i596_cleanup_cmd timed out");
935
lp->scb.cmd = I596_NULL;
938
static void i596_reset(struct net_device *dev, struct i596_private *lp,
943
DEB(DEB_RESET,printk(KERN_DEBUG "i596_reset\n"));
945
spin_lock_irqsave (&lp->lock, flags);
947
wait_cmd(dev,lp,100,"i596_reset timed out");
949
netif_stop_queue(dev);
951
lp->scb.command = CUC_ABORT | RX_ABORT;
954
/* wait for shutdown */
955
wait_cmd(dev,lp,1000,"i596_reset 2 timed out");
956
spin_unlock_irqrestore (&lp->lock, flags);
958
i596_cleanup_cmd(dev,lp);
961
netif_start_queue(dev);
965
static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd)
967
struct i596_private *lp = dev->ml_priv;
968
int ioaddr = dev->base_addr;
971
DEB(DEB_ADDCMD,printk(KERN_DEBUG "i596_add_cmd\n"));
974
cmd->command |= (CMD_EOL | CMD_INTR);
975
cmd->v_next = cmd->b_next = I596_NULL;
977
spin_lock_irqsave (&lp->lock, flags);
979
if (lp->cmd_head != I596_NULL) {
980
lp->cmd_tail->v_next = cmd;
981
lp->cmd_tail->b_next = WSWAPcmd(virt_to_bus(&cmd->status));
984
wait_cmd(dev,lp,100,"i596_add_cmd timed out");
985
lp->scb.cmd = WSWAPcmd(virt_to_bus(&cmd->status));
986
lp->scb.command = CUC_START;
992
spin_unlock_irqrestore (&lp->lock, flags);
994
if (lp->cmd_backlog > max_cmd_backlog) {
995
unsigned long tickssofar = jiffies - lp->last_cmd;
997
if (tickssofar < ticks_limit)
1000
printk(KERN_NOTICE "%s: command unit timed out, status resetting.\n", dev->name);
1002
i596_reset(dev, lp, ioaddr);
1006
static int i596_open(struct net_device *dev)
1010
DEB(DEB_OPEN,printk(KERN_DEBUG "%s: i596_open() irq %d.\n", dev->name, dev->irq));
1012
if (request_irq(dev->irq, i596_interrupt, 0, "i82596", dev)) {
1013
printk(KERN_ERR "%s: IRQ %d not free\n", dev->name, dev->irq);
1016
#ifdef ENABLE_MVME16x_NET
1017
if (MACH_IS_MVME16x) {
1018
if (request_irq(0x56, i596_error, 0, "i82596_error", dev)) {
1024
res = init_rx_bufs(dev);
1028
netif_start_queue(dev);
1030
if (init_i596_mem(dev)) {
1038
netif_stop_queue(dev);
1039
remove_rx_bufs(dev);
1041
#ifdef ENABLE_MVME16x_NET
1042
free_irq(0x56, dev);
1045
free_irq(dev->irq, dev);
1050
static void i596_tx_timeout (struct net_device *dev)
1052
struct i596_private *lp = dev->ml_priv;
1053
int ioaddr = dev->base_addr;
1055
/* Transmitter timeout, serious problems. */
1056
DEB(DEB_ERRORS,printk(KERN_ERR "%s: transmit timed out, status resetting.\n",
1059
dev->stats.tx_errors++;
1061
/* Try to restart the adaptor */
1062
if (lp->last_restart == dev->stats.tx_packets) {
1063
DEB(DEB_ERRORS,printk(KERN_ERR "Resetting board.\n"));
1064
/* Shutdown and restart */
1065
i596_reset (dev, lp, ioaddr);
1067
/* Issue a channel attention signal */
1068
DEB(DEB_ERRORS,printk(KERN_ERR "Kicking board.\n"));
1069
lp->scb.command = CUC_START | RX_START;
1071
lp->last_restart = dev->stats.tx_packets;
1074
dev->trans_start = jiffies; /* prevent tx timeout */
1075
netif_wake_queue (dev);
1078
static netdev_tx_t i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
1080
struct i596_private *lp = dev->ml_priv;
1081
struct tx_cmd *tx_cmd;
1082
struct i596_tbd *tbd;
1083
short length = skb->len;
1085
DEB(DEB_STARTTX,printk(KERN_DEBUG "%s: i596_start_xmit(%x,%p) called\n",
1086
dev->name, skb->len, skb->data));
1088
if (skb->len < ETH_ZLEN) {
1089
if (skb_padto(skb, ETH_ZLEN))
1090
return NETDEV_TX_OK;
1093
netif_stop_queue(dev);
1095
tx_cmd = lp->tx_cmds + lp->next_tx_cmd;
1096
tbd = lp->tbds + lp->next_tx_cmd;
1098
if (tx_cmd->cmd.command) {
1099
printk(KERN_NOTICE "%s: xmit ring full, dropping packet.\n",
1101
dev->stats.tx_dropped++;
1105
if (++lp->next_tx_cmd == TX_RING_SIZE)
1106
lp->next_tx_cmd = 0;
1107
tx_cmd->tbd = WSWAPtbd(virt_to_bus(tbd));
1108
tbd->next = I596_NULL;
1110
tx_cmd->cmd.command = CMD_FLEX | CmdTx;
1116
tbd->size = EOF | length;
1118
tbd->data = WSWAPchar(virt_to_bus(skb->data));
1121
cache_push(virt_to_phys(skb->data), length);
1123
DEB(DEB_TXADDR,print_eth(skb->data, "tx-queued"));
1124
i596_add_cmd(dev, &tx_cmd->cmd);
1126
dev->stats.tx_packets++;
1127
dev->stats.tx_bytes += length;
1130
netif_start_queue(dev);
1132
return NETDEV_TX_OK;
1135
static void print_eth(unsigned char *add, char *str)
1137
printk(KERN_DEBUG "i596 0x%p, %pM --> %pM %02X%02X, %s\n",
1138
add, add + 6, add, add[12], add[13], str);
1141
static int io = 0x300;
1142
static int irq = 10;
1144
static const struct net_device_ops i596_netdev_ops = {
1145
.ndo_open = i596_open,
1146
.ndo_stop = i596_close,
1147
.ndo_start_xmit = i596_start_xmit,
1148
.ndo_set_multicast_list = set_multicast_list,
1149
.ndo_tx_timeout = i596_tx_timeout,
1150
.ndo_change_mtu = eth_change_mtu,
1151
.ndo_set_mac_address = eth_mac_addr,
1152
.ndo_validate_addr = eth_validate_addr,
1155
struct net_device * __init i82596_probe(int unit)
1157
struct net_device *dev;
1159
struct i596_private *lp;
1165
return ERR_PTR(-ENODEV);
1168
dev = alloc_etherdev(0);
1170
return ERR_PTR(-ENOMEM);
1173
sprintf(dev->name, "eth%d", unit);
1174
netdev_boot_setup_check(dev);
1176
dev->base_addr = io;
1180
#ifdef ENABLE_MVME16x_NET
1181
if (MACH_IS_MVME16x) {
1182
if (mvme16x_config & MVME16x_CONFIG_NO_ETHERNET) {
1183
printk(KERN_NOTICE "Ethernet probe disabled - chip not present\n");
1187
memcpy(eth_addr, (void *) 0xfffc1f2c, 6); /* YUCK! Get addr from NOVRAM */
1188
dev->base_addr = MVME_I596_BASE;
1189
dev->irq = (unsigned) MVME16x_IRQ_I596;
1193
#ifdef ENABLE_BVME6000_NET
1194
if (MACH_IS_BVME6000) {
1195
volatile unsigned char *rtc = (unsigned char *) BVME_RTC_BASE;
1196
unsigned char msr = rtc[3];
1200
for (i = 0; i < 6; i++)
1201
eth_addr[i] = rtc[i * 4 + 7]; /* Stored in RTC RAM at offset 1 */
1203
dev->base_addr = BVME_I596_BASE;
1204
dev->irq = (unsigned) BVME_IRQ_I596;
1208
#ifdef ENABLE_APRICOT
1213
/* this is easy the ethernet interface can only be at 0x300 */
1214
/* first check nothing is already registered here */
1216
if (!request_region(ioaddr, I596_TOTAL_SIZE, DRV_NAME)) {
1217
printk(KERN_ERR "82596: IO address 0x%04x in use\n", ioaddr);
1222
dev->base_addr = ioaddr;
1224
for (i = 0; i < 8; i++) {
1225
eth_addr[i] = inb(ioaddr + 8 + i);
1226
checksum += eth_addr[i];
1229
/* checksum is a multiple of 0x100, got this wrong first time
1230
some machines have 0x100, some 0x200. The DOS driver doesn't
1231
even bother with the checksum.
1232
Some other boards trip the checksum.. but then appear as
1233
ether address 0. Trap these - AC */
1235
if ((checksum % 0x100) ||
1236
(memcmp(eth_addr, "\x00\x00\x49", 3) != 0)) {
1249
dev->mem_start = (int)__get_free_pages(GFP_ATOMIC, 0);
1250
if (!dev->mem_start) {
1255
DEB(DEB_PROBE,printk(KERN_INFO "%s: 82596 at %#3lx,", dev->name, dev->base_addr));
1257
for (i = 0; i < 6; i++)
1258
DEB(DEB_PROBE,printk(" %2.2X", dev->dev_addr[i] = eth_addr[i]));
1260
DEB(DEB_PROBE,printk(" IRQ %d.\n", dev->irq));
1262
DEB(DEB_PROBE,printk(KERN_INFO "%s", version));
1264
/* The 82596-specific entries in the device structure. */
1265
dev->netdev_ops = &i596_netdev_ops;
1266
dev->watchdog_timeo = TX_TIMEOUT;
1268
dev->ml_priv = (void *)(dev->mem_start);
1271
DEB(DEB_INIT,printk(KERN_DEBUG "%s: lp at 0x%08lx (%zd bytes), "
1272
"lp->scb at 0x%08lx\n",
1273
dev->name, (unsigned long)lp,
1274
sizeof(struct i596_private), (unsigned long)&lp->scb));
1275
memset((void *) lp, 0, sizeof(struct i596_private));
1278
cache_push(virt_to_phys((void *)(dev->mem_start)), 4096);
1279
cache_clear(virt_to_phys((void *)(dev->mem_start)), 4096);
1280
kernel_set_cachemode((void *)(dev->mem_start), 4096, IOMAP_NOCACHE_SER);
1282
lp->scb.command = 0;
1283
lp->scb.cmd = I596_NULL;
1284
lp->scb.rfd = I596_NULL;
1285
spin_lock_init(&lp->lock);
1287
err = register_netdev(dev);
1293
/* XXX This assumes default cache mode to be IOMAP_FULL_CACHING,
1294
* XXX which may be invalid (CONFIG_060_WRITETHROUGH)
1296
kernel_set_cachemode((void *)(dev->mem_start), 4096,
1297
IOMAP_FULL_CACHING);
1299
free_page ((u32)(dev->mem_start));
1301
#ifdef ENABLE_APRICOT
1302
release_region(dev->base_addr, I596_TOTAL_SIZE);
1306
return ERR_PTR(err);
1309
static irqreturn_t i596_interrupt(int irq, void *dev_id)
1311
struct net_device *dev = dev_id;
1312
struct i596_private *lp;
1314
unsigned short status, ack_cmd = 0;
1317
#ifdef ENABLE_BVME6000_NET
1318
if (MACH_IS_BVME6000) {
1319
if (*(char *) BVME_LOCAL_IRQ_STAT & BVME_ETHERR) {
1320
i596_error(irq, dev_id);
1326
printk(KERN_ERR "i596_interrupt(): irq %d for unknown device.\n", irq);
1330
ioaddr = dev->base_addr;
1333
spin_lock (&lp->lock);
1335
wait_cmd(dev,lp,100,"i596 interrupt, timeout");
1336
status = lp->scb.status;
1338
DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt, IRQ %d, status %4.4x.\n",
1339
dev->name, irq, status));
1341
ack_cmd = status & 0xf000;
1343
if ((status & 0x8000) || (status & 0x2000)) {
1344
struct i596_cmd *ptr;
1347
if ((status & 0x8000))
1348
DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt completed command.\n", dev->name));
1349
if ((status & 0x2000))
1350
DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700));
1352
while ((lp->cmd_head != I596_NULL) && (lp->cmd_head->status & STAT_C)) {
1355
DEB(DEB_STATUS,printk(KERN_DEBUG "cmd_head->status = %04x, ->command = %04x\n",
1356
lp->cmd_head->status, lp->cmd_head->command));
1357
lp->cmd_head = ptr->v_next;
1360
switch ((ptr->command) & 0x7) {
1363
struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
1364
struct sk_buff *skb = tx_cmd->skb;
1366
if ((ptr->status) & STAT_OK) {
1367
DEB(DEB_TXADDR,print_eth(skb->data, "tx-done"));
1369
dev->stats.tx_errors++;
1370
if ((ptr->status) & 0x0020)
1371
dev->stats.collisions++;
1372
if (!((ptr->status) & 0x0040))
1373
dev->stats.tx_heartbeat_errors++;
1374
if ((ptr->status) & 0x0400)
1375
dev->stats.tx_carrier_errors++;
1376
if ((ptr->status) & 0x0800)
1377
dev->stats.collisions++;
1378
if ((ptr->status) & 0x1000)
1379
dev->stats.tx_aborted_errors++;
1382
dev_kfree_skb_irq(skb);
1384
tx_cmd->cmd.command = 0; /* Mark free */
1389
unsigned short status = ((struct tdr_cmd *)ptr)->status;
1391
if (status & 0x8000) {
1392
DEB(DEB_TDR,printk(KERN_INFO "%s: link ok.\n", dev->name));
1394
if (status & 0x4000)
1395
printk(KERN_ERR "%s: Transceiver problem.\n", dev->name);
1396
if (status & 0x2000)
1397
printk(KERN_ERR "%s: Termination problem.\n", dev->name);
1398
if (status & 0x1000)
1399
printk(KERN_ERR "%s: Short circuit.\n", dev->name);
1401
DEB(DEB_TDR,printk(KERN_INFO "%s: Time %d.\n", dev->name, status & 0x07ff));
1406
case CmdMulticastList:
1407
/* Zap command so set_multicast_list() knows it is free */
1411
ptr->v_next = ptr->b_next = I596_NULL;
1412
lp->last_cmd = jiffies;
1416
while ((ptr != I596_NULL) && (ptr != lp->cmd_tail)) {
1417
ptr->command &= 0x1fff;
1421
if ((lp->cmd_head != I596_NULL))
1422
ack_cmd |= CUC_START;
1423
lp->scb.cmd = WSWAPcmd(virt_to_bus(&lp->cmd_head->status));
1425
if ((status & 0x1000) || (status & 0x4000)) {
1426
if ((status & 0x4000))
1427
DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt received a frame.\n", dev->name));
1429
/* Only RX_START if stopped - RGH 07-07-96 */
1430
if (status & 0x1000) {
1431
if (netif_running(dev)) {
1432
DEB(DEB_ERRORS,printk(KERN_ERR "%s: i596 interrupt receive unit inactive, status 0x%x\n", dev->name, status));
1433
ack_cmd |= RX_START;
1434
dev->stats.rx_errors++;
1435
dev->stats.rx_fifo_errors++;
1436
rebuild_rx_bufs(dev);
1440
wait_cmd(dev,lp,100,"i596 interrupt, timeout");
1441
lp->scb.command = ack_cmd;
1443
#ifdef ENABLE_MVME16x_NET
1444
if (MACH_IS_MVME16x) {
1445
/* Ack the interrupt */
1447
volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
1452
#ifdef ENABLE_BVME6000_NET
1453
if (MACH_IS_BVME6000) {
1454
volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
1460
#ifdef ENABLE_APRICOT
1461
(void) inb(ioaddr + 0x10);
1462
outb(4, ioaddr + 0xf);
1466
DEB(DEB_INTS,printk(KERN_DEBUG "%s: exiting interrupt.\n", dev->name));
1468
spin_unlock (&lp->lock);
1469
return IRQ_RETVAL(handled);
1472
static int i596_close(struct net_device *dev)
1474
struct i596_private *lp = dev->ml_priv;
1475
unsigned long flags;
1477
netif_stop_queue(dev);
1479
DEB(DEB_INIT,printk(KERN_DEBUG "%s: Shutting down ethercard, status was %4.4x.\n",
1480
dev->name, lp->scb.status));
1482
spin_lock_irqsave(&lp->lock, flags);
1484
wait_cmd(dev,lp,100,"close1 timed out");
1485
lp->scb.command = CUC_ABORT | RX_ABORT;
1488
wait_cmd(dev,lp,100,"close2 timed out");
1490
spin_unlock_irqrestore(&lp->lock, flags);
1491
DEB(DEB_STRUCT,i596_display_data(dev));
1492
i596_cleanup_cmd(dev,lp);
1494
#ifdef ENABLE_MVME16x_NET
1495
if (MACH_IS_MVME16x) {
1496
volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
1498
/* Disable all ints */
1501
pcc2[0x2b] = 0x40; /* Set snooping bits now! */
1504
#ifdef ENABLE_BVME6000_NET
1505
if (MACH_IS_BVME6000) {
1506
volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
1512
#ifdef ENABLE_MVME16x_NET
1513
free_irq(0x56, dev);
1515
free_irq(dev->irq, dev);
1516
remove_rx_bufs(dev);
1522
* Set or clear the multicast filter for this adaptor.
1525
static void set_multicast_list(struct net_device *dev)
1527
struct i596_private *lp = dev->ml_priv;
1528
int config = 0, cnt;
1530
DEB(DEB_MULTI,printk(KERN_DEBUG "%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
1531
dev->name, netdev_mc_count(dev),
1532
dev->flags & IFF_PROMISC ? "ON" : "OFF",
1533
dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
1535
if (wait_cfg(dev, &lp->cf_cmd.cmd, 1000, "config change request timed out"))
1538
if ((dev->flags & IFF_PROMISC) && !(lp->cf_cmd.i596_config[8] & 0x01)) {
1539
lp->cf_cmd.i596_config[8] |= 0x01;
1542
if (!(dev->flags & IFF_PROMISC) && (lp->cf_cmd.i596_config[8] & 0x01)) {
1543
lp->cf_cmd.i596_config[8] &= ~0x01;
1546
if ((dev->flags & IFF_ALLMULTI) && (lp->cf_cmd.i596_config[11] & 0x20)) {
1547
lp->cf_cmd.i596_config[11] &= ~0x20;
1550
if (!(dev->flags & IFF_ALLMULTI) && !(lp->cf_cmd.i596_config[11] & 0x20)) {
1551
lp->cf_cmd.i596_config[11] |= 0x20;
1555
lp->cf_cmd.cmd.command = CmdConfigure;
1556
i596_add_cmd(dev, &lp->cf_cmd.cmd);
1559
cnt = netdev_mc_count(dev);
1560
if (cnt > MAX_MC_CNT)
1563
printk(KERN_ERR "%s: Only %d multicast addresses supported",
1567
if (!netdev_mc_empty(dev)) {
1568
struct netdev_hw_addr *ha;
1572
if (wait_cfg(dev, &lp->mc_cmd.cmd, 1000, "multicast list change request timed out"))
1575
cmd->cmd.command = CmdMulticastList;
1576
cmd->mc_cnt = cnt * ETH_ALEN;
1578
netdev_for_each_mc_addr(ha, dev) {
1581
memcpy(cp, ha->addr, ETH_ALEN);
1583
DEB(DEB_MULTI,printk(KERN_INFO "%s: Adding address %pM\n",
1587
i596_add_cmd(dev, &cmd->cmd);
1592
static struct net_device *dev_82596;
1594
#ifdef ENABLE_APRICOT
1595
module_param(irq, int, 0);
1596
MODULE_PARM_DESC(irq, "Apricot IRQ number");
1599
static int debug = -1;
1600
module_param(debug, int, 0);
1601
MODULE_PARM_DESC(debug, "i82596 debug mask");
1603
int __init init_module(void)
1607
dev_82596 = i82596_probe(-1);
1608
if (IS_ERR(dev_82596))
1609
return PTR_ERR(dev_82596);
1613
void __exit cleanup_module(void)
1615
unregister_netdev(dev_82596);
1617
/* XXX This assumes default cache mode to be IOMAP_FULL_CACHING,
1618
* XXX which may be invalid (CONFIG_060_WRITETHROUGH)
1621
kernel_set_cachemode((void *)(dev_82596->mem_start), 4096,
1622
IOMAP_FULL_CACHING);
1624
free_page ((u32)(dev_82596->mem_start));
1625
#ifdef ENABLE_APRICOT
1626
/* If we don't do this, we can't re-insmod it later. */
1627
release_region(dev_82596->base_addr, I596_TOTAL_SIZE);
1629
free_netdev(dev_82596);