]> bbs.cooldavid.org Git - net-next-2.6.git/blob - drivers/net/pcmcia/3c589_cs.c
net: use netdev_mc_count and netdev_mc_empty when appropriate
[net-next-2.6.git] / drivers / net / pcmcia / 3c589_cs.c
1 /*======================================================================
2
3     A PCMCIA ethernet driver for the 3com 3c589 card.
4     
5     Copyright (C) 1999 David A. Hinds -- dahinds@users.sourceforge.net
6
7     3c589_cs.c 1.162 2001/10/13 00:08:50
8
9     The network driver code is based on Donald Becker's 3c589 code:
10     
11     Written 1994 by Donald Becker.
12     Copyright 1993 United States Government as represented by the
13     Director, National Security Agency.  This software may be used and
14     distributed according to the terms of the GNU General Public License,
15     incorporated herein by reference.
16     Donald Becker may be reached at becker@scyld.com
17     
18     Updated for 2.5.x by Alan Cox <alan@lxorguk.ukuu.org.uk>
19
20 ======================================================================*/
21
22 #define DRV_NAME        "3c589_cs"
23 #define DRV_VERSION     "1.162-ac"
24
25 #include <linux/module.h>
26 #include <linux/init.h>
27 #include <linux/kernel.h>
28 #include <linux/ptrace.h>
29 #include <linux/slab.h>
30 #include <linux/string.h>
31 #include <linux/timer.h>
32 #include <linux/interrupt.h>
33 #include <linux/in.h>
34 #include <linux/delay.h>
35 #include <linux/ethtool.h>
36 #include <linux/netdevice.h>
37 #include <linux/etherdevice.h>
38 #include <linux/skbuff.h>
39 #include <linux/if_arp.h>
40 #include <linux/ioport.h>
41 #include <linux/bitops.h>
42 #include <linux/jiffies.h>
43
44 #include <pcmcia/cs_types.h>
45 #include <pcmcia/cs.h>
46 #include <pcmcia/cistpl.h>
47 #include <pcmcia/cisreg.h>
48 #include <pcmcia/ciscode.h>
49 #include <pcmcia/ds.h>
50
51 #include <asm/uaccess.h>
52 #include <asm/io.h>
53 #include <asm/system.h>
54
55 /* To minimize the size of the driver source I only define operating
56    constants if they are used several times.  You'll need the manual
57    if you want to understand driver details. */
58 /* Offsets from base I/O address. */
59 #define EL3_DATA        0x00
60 #define EL3_TIMER       0x0a
61 #define EL3_CMD         0x0e
62 #define EL3_STATUS      0x0e
63
64 #define EEPROM_READ     0x0080
65 #define EEPROM_BUSY     0x8000
66
67 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
68
69 /* The top five bits written to EL3_CMD are a command, the lower
70    11 bits are the parameter, if applicable. */
71 enum c509cmd {
72     TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,
73     RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11, RxDiscard = 8<<11,
74     TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11,
75     FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11,
76     SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,
77     SetTxThreshold = 18<<11, SetTxStart = 19<<11, StatsEnable = 21<<11,
78     StatsDisable = 22<<11, StopCoax = 23<<11,
79 };
80
81 enum c509status {
82     IntLatch = 0x0001, AdapterFailure = 0x0002, TxComplete = 0x0004,
83     TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,
84     IntReq = 0x0040, StatsFull = 0x0080, CmdBusy = 0x1000
85 };
86
87 /* The SetRxFilter command accepts the following classes: */
88 enum RxFilter {
89     RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8
90 };
91
92 /* Register window 1 offsets, the window used in normal operation. */
93 #define TX_FIFO         0x00
94 #define RX_FIFO         0x00
95 #define RX_STATUS       0x08
96 #define TX_STATUS       0x0B
97 #define TX_FREE         0x0C    /* Remaining free bytes in Tx buffer. */
98
99 #define WN0_IRQ         0x08    /* Window 0: Set IRQ line in bits 12-15. */
100 #define WN4_MEDIA       0x0A    /* Window 4: Various transcvr/media bits. */
101 #define MEDIA_TP        0x00C0  /* Enable link beat and jabber for 10baseT. */
102 #define MEDIA_LED       0x0001  /* Enable link light on 3C589E cards. */
103
104 /* Time in jiffies before concluding Tx hung */
105 #define TX_TIMEOUT      ((400*HZ)/1000)
106
107 struct el3_private {
108         struct pcmcia_device    *p_dev;
109     dev_node_t          node;
110     /* For transceiver monitoring */
111     struct timer_list   media;
112     u16                 media_status;
113     u16                 fast_poll;
114     unsigned long       last_irq;
115     spinlock_t          lock;
116 };
117
118 static const char *if_names[] = { "auto", "10baseT", "10base2", "AUI" };
119
120 /*====================================================================*/
121
122 /* Module parameters */
123
124 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
125 MODULE_DESCRIPTION("3Com 3c589 series PCMCIA ethernet driver");
126 MODULE_LICENSE("GPL");
127
128 #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
129
130 /* Special hook for setting if_port when module is loaded */
131 INT_MODULE_PARM(if_port, 0);
132
133
134 /*====================================================================*/
135
136 static int tc589_config(struct pcmcia_device *link);
137 static void tc589_release(struct pcmcia_device *link);
138
139 static u16 read_eeprom(unsigned int ioaddr, int index);
140 static void tc589_reset(struct net_device *dev);
141 static void media_check(unsigned long arg);
142 static int el3_config(struct net_device *dev, struct ifmap *map);
143 static int el3_open(struct net_device *dev);
144 static netdev_tx_t el3_start_xmit(struct sk_buff *skb,
145                                         struct net_device *dev);
146 static irqreturn_t el3_interrupt(int irq, void *dev_id);
147 static void update_stats(struct net_device *dev);
148 static struct net_device_stats *el3_get_stats(struct net_device *dev);
149 static int el3_rx(struct net_device *dev);
150 static int el3_close(struct net_device *dev);
151 static void el3_tx_timeout(struct net_device *dev);
152 static void set_rx_mode(struct net_device *dev);
153 static void set_multicast_list(struct net_device *dev);
154 static const struct ethtool_ops netdev_ethtool_ops;
155
156 static void tc589_detach(struct pcmcia_device *p_dev);
157
158 /*======================================================================
159
160     tc589_attach() creates an "instance" of the driver, allocating
161     local data structures for one device.  The device is registered
162     with Card Services.
163
164 ======================================================================*/
165
166 static const struct net_device_ops el3_netdev_ops = {
167         .ndo_open               = el3_open,
168         .ndo_stop               = el3_close,
169         .ndo_start_xmit         = el3_start_xmit,
170         .ndo_tx_timeout         = el3_tx_timeout,
171         .ndo_set_config         = el3_config,
172         .ndo_get_stats          = el3_get_stats,
173         .ndo_set_multicast_list = set_multicast_list,
174         .ndo_change_mtu         = eth_change_mtu,
175         .ndo_set_mac_address    = eth_mac_addr,
176         .ndo_validate_addr      = eth_validate_addr,
177 };
178
179 static int tc589_probe(struct pcmcia_device *link)
180 {
181     struct el3_private *lp;
182     struct net_device *dev;
183
184     dev_dbg(&link->dev, "3c589_attach()\n");
185
186     /* Create new ethernet device */
187     dev = alloc_etherdev(sizeof(struct el3_private));
188     if (!dev)
189          return -ENOMEM;
190     lp = netdev_priv(dev);
191     link->priv = dev;
192     lp->p_dev = link;
193
194     spin_lock_init(&lp->lock);
195     link->io.NumPorts1 = 16;
196     link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
197     link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
198     link->irq.Handler = &el3_interrupt;
199     link->conf.Attributes = CONF_ENABLE_IRQ;
200     link->conf.IntType = INT_MEMORY_AND_IO;
201     link->conf.ConfigIndex = 1;
202
203     dev->netdev_ops = &el3_netdev_ops;
204     dev->watchdog_timeo = TX_TIMEOUT;
205
206     SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
207
208     return tc589_config(link);
209 } /* tc589_attach */
210
211 /*======================================================================
212
213     This deletes a driver "instance".  The device is de-registered
214     with Card Services.  If it has been released, all local data
215     structures are freed.  Otherwise, the structures will be freed
216     when the device is released.
217
218 ======================================================================*/
219
220 static void tc589_detach(struct pcmcia_device *link)
221 {
222     struct net_device *dev = link->priv;
223
224     dev_dbg(&link->dev, "3c589_detach\n");
225
226     if (link->dev_node)
227         unregister_netdev(dev);
228
229     tc589_release(link);
230
231     free_netdev(dev);
232 } /* tc589_detach */
233
234 /*======================================================================
235
236     tc589_config() is scheduled to run after a CARD_INSERTION event
237     is received, to configure the PCMCIA socket, and to make the
238     ethernet device available to the system.
239     
240 ======================================================================*/
241
242 static int tc589_config(struct pcmcia_device *link)
243 {
244     struct net_device *dev = link->priv;
245     struct el3_private *lp = netdev_priv(dev);
246     __be16 *phys_addr;
247     int ret, i, j, multi = 0, fifo;
248     unsigned int ioaddr;
249     char *ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
250     u8 *buf;
251     size_t len;
252     
253     dev_dbg(&link->dev, "3c589_config\n");
254
255     phys_addr = (__be16 *)dev->dev_addr;
256     /* Is this a 3c562? */
257     if (link->manf_id != MANFID_3COM)
258             printk(KERN_INFO "3c589_cs: hmmm, is this really a "
259                    "3Com card??\n");
260     multi = (link->card_id == PRODID_3COM_3C562);
261
262     /* For the 3c562, the base address must be xx00-xx7f */
263     link->io.IOAddrLines = 16;
264     for (i = j = 0; j < 0x400; j += 0x10) {
265         if (multi && (j & 0x80)) continue;
266         link->io.BasePort1 = j ^ 0x300;
267         i = pcmcia_request_io(link, &link->io);
268         if (i == 0)
269                 break;
270     }
271     if (i != 0)
272         goto failed;
273
274     ret = pcmcia_request_irq(link, &link->irq);
275     if (ret)
276             goto failed;
277
278     ret = pcmcia_request_configuration(link, &link->conf);
279     if (ret)
280             goto failed;
281         
282     dev->irq = link->irq.AssignedIRQ;
283     dev->base_addr = link->io.BasePort1;
284     ioaddr = dev->base_addr;
285     EL3WINDOW(0);
286
287     /* The 3c589 has an extra EEPROM for configuration info, including
288        the hardware address.  The 3c562 puts the address in the CIS. */
289     len = pcmcia_get_tuple(link, 0x88, &buf);
290     if (buf && len >= 6) {
291             for (i = 0; i < 3; i++)
292                     phys_addr[i] = htons(le16_to_cpu(buf[i*2]));
293             kfree(buf);
294     } else {
295         kfree(buf); /* 0 < len < 6 */
296         for (i = 0; i < 3; i++)
297             phys_addr[i] = htons(read_eeprom(ioaddr, i));
298         if (phys_addr[0] == htons(0x6060)) {
299             printk(KERN_ERR "3c589_cs: IO port conflict at 0x%03lx"
300                    "-0x%03lx\n", dev->base_addr, dev->base_addr+15);
301             goto failed;
302         }
303     }
304
305     /* The address and resource configuration register aren't loaded from
306        the EEPROM and *must* be set to 0 and IRQ3 for the PCMCIA version. */
307     outw(0x3f00, ioaddr + 8);
308     fifo = inl(ioaddr);
309
310     /* The if_port symbol can be set when the module is loaded */
311     if ((if_port >= 0) && (if_port <= 3))
312         dev->if_port = if_port;
313     else
314         printk(KERN_ERR "3c589_cs: invalid if_port requested\n");
315     
316     link->dev_node = &lp->node;
317     SET_NETDEV_DEV(dev, &link->dev);
318
319     if (register_netdev(dev) != 0) {
320         printk(KERN_ERR "3c589_cs: register_netdev() failed\n");
321         link->dev_node = NULL;
322         goto failed;
323     }
324
325     strcpy(lp->node.dev_name, dev->name);
326
327     printk(KERN_INFO "%s: 3Com 3c%s, io %#3lx, irq %d, "
328            "hw_addr %pM\n",
329            dev->name, (multi ? "562" : "589"), dev->base_addr, dev->irq,
330            dev->dev_addr);
331     printk(KERN_INFO "  %dK FIFO split %s Rx:Tx, %s xcvr\n",
332            (fifo & 7) ? 32 : 8, ram_split[(fifo >> 16) & 3],
333            if_names[dev->if_port]);
334     return 0;
335
336 failed:
337     tc589_release(link);
338     return -ENODEV;
339 } /* tc589_config */
340
341 /*======================================================================
342
343     After a card is removed, tc589_release() will unregister the net
344     device, and release the PCMCIA configuration.  If the device is
345     still open, this will be postponed until it is closed.
346     
347 ======================================================================*/
348
349 static void tc589_release(struct pcmcia_device *link)
350 {
351         pcmcia_disable_device(link);
352 }
353
354 static int tc589_suspend(struct pcmcia_device *link)
355 {
356         struct net_device *dev = link->priv;
357
358         if (link->open)
359                 netif_device_detach(dev);
360
361         return 0;
362 }
363
364 static int tc589_resume(struct pcmcia_device *link)
365 {
366         struct net_device *dev = link->priv;
367
368         if (link->open) {
369                 tc589_reset(dev);
370                 netif_device_attach(dev);
371         }
372
373         return 0;
374 }
375
376 /*====================================================================*/
377
378 /*
379   Use this for commands that may take time to finish
380 */
381 static void tc589_wait_for_completion(struct net_device *dev, int cmd)
382 {
383     int i = 100;
384     outw(cmd, dev->base_addr + EL3_CMD);
385     while (--i > 0)
386         if (!(inw(dev->base_addr + EL3_STATUS) & 0x1000)) break;
387     if (i == 0)
388         printk(KERN_WARNING "%s: command 0x%04x did not complete!\n",
389                dev->name, cmd);
390 }
391
392 /*
393   Read a word from the EEPROM using the regular EEPROM access register.
394   Assume that we are in register window zero.
395 */
396 static u16 read_eeprom(unsigned int ioaddr, int index)
397 {
398     int i;
399     outw(EEPROM_READ + index, ioaddr + 10);
400     /* Reading the eeprom takes 162 us */
401     for (i = 1620; i >= 0; i--)
402         if ((inw(ioaddr + 10) & EEPROM_BUSY) == 0)
403             break;
404     return inw(ioaddr + 12);
405 }
406
407 /*
408   Set transceiver type, perhaps to something other than what the user
409   specified in dev->if_port.
410 */
411 static void tc589_set_xcvr(struct net_device *dev, int if_port)
412 {
413     struct el3_private *lp = netdev_priv(dev);
414     unsigned int ioaddr = dev->base_addr;
415     
416     EL3WINDOW(0);
417     switch (if_port) {
418     case 0: case 1: outw(0, ioaddr + 6); break;
419     case 2: outw(3<<14, ioaddr + 6); break;
420     case 3: outw(1<<14, ioaddr + 6); break;
421     }
422     /* On PCMCIA, this just turns on the LED */
423     outw((if_port == 2) ? StartCoax : StopCoax, ioaddr + EL3_CMD);
424     /* 10baseT interface, enable link beat and jabber check. */
425     EL3WINDOW(4);
426     outw(MEDIA_LED | ((if_port < 2) ? MEDIA_TP : 0), ioaddr + WN4_MEDIA);
427     EL3WINDOW(1);
428     if (if_port == 2)
429         lp->media_status = ((dev->if_port == 0) ? 0x8000 : 0x4000);
430     else
431         lp->media_status = ((dev->if_port == 0) ? 0x4010 : 0x8800);
432 }
433
434 static void dump_status(struct net_device *dev)
435 {
436     unsigned int ioaddr = dev->base_addr;
437     EL3WINDOW(1);
438     printk(KERN_INFO "  irq status %04x, rx status %04x, tx status "
439            "%02x  tx free %04x\n", inw(ioaddr+EL3_STATUS),
440            inw(ioaddr+RX_STATUS), inb(ioaddr+TX_STATUS),
441            inw(ioaddr+TX_FREE));
442     EL3WINDOW(4);
443     printk(KERN_INFO "  diagnostics: fifo %04x net %04x ethernet %04x"
444            " media %04x\n", inw(ioaddr+0x04), inw(ioaddr+0x06),
445            inw(ioaddr+0x08), inw(ioaddr+0x0a));
446     EL3WINDOW(1);
447 }
448
449 /* Reset and restore all of the 3c589 registers. */
450 static void tc589_reset(struct net_device *dev)
451 {
452     unsigned int ioaddr = dev->base_addr;
453     int i;
454     
455     EL3WINDOW(0);
456     outw(0x0001, ioaddr + 4);                   /* Activate board. */ 
457     outw(0x3f00, ioaddr + 8);                   /* Set the IRQ line. */
458     
459     /* Set the station address in window 2. */
460     EL3WINDOW(2);
461     for (i = 0; i < 6; i++)
462         outb(dev->dev_addr[i], ioaddr + i);
463
464     tc589_set_xcvr(dev, dev->if_port);
465     
466     /* Switch to the stats window, and clear all stats by reading. */
467     outw(StatsDisable, ioaddr + EL3_CMD);
468     EL3WINDOW(6);
469     for (i = 0; i < 9; i++)
470         inb(ioaddr+i);
471     inw(ioaddr + 10);
472     inw(ioaddr + 12);
473     
474     /* Switch to register set 1 for normal use. */
475     EL3WINDOW(1);
476
477     set_rx_mode(dev);
478     outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */
479     outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */
480     outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */
481     /* Allow status bits to be seen. */
482     outw(SetStatusEnb | 0xff, ioaddr + EL3_CMD);
483     /* Ack all pending events, and set active indicator mask. */
484     outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq,
485          ioaddr + EL3_CMD);
486     outw(SetIntrEnb | IntLatch | TxAvailable | RxComplete | StatsFull
487          | AdapterFailure, ioaddr + EL3_CMD);
488 }
489
490 static void netdev_get_drvinfo(struct net_device *dev,
491                                struct ethtool_drvinfo *info)
492 {
493         strcpy(info->driver, DRV_NAME);
494         strcpy(info->version, DRV_VERSION);
495         sprintf(info->bus_info, "PCMCIA 0x%lx", dev->base_addr);
496 }
497
498 static const struct ethtool_ops netdev_ethtool_ops = {
499         .get_drvinfo            = netdev_get_drvinfo,
500 };
501
502 static int el3_config(struct net_device *dev, struct ifmap *map)
503 {
504     if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) {
505         if (map->port <= 3) {
506             dev->if_port = map->port;
507             printk(KERN_INFO "%s: switched to %s port\n",
508                    dev->name, if_names[dev->if_port]);
509             tc589_set_xcvr(dev, dev->if_port);
510         } else
511             return -EINVAL;
512     }
513     return 0;
514 }
515
516 static int el3_open(struct net_device *dev)
517 {
518     struct el3_private *lp = netdev_priv(dev);
519     struct pcmcia_device *link = lp->p_dev;
520     
521     if (!pcmcia_dev_present(link))
522         return -ENODEV;
523
524     link->open++;
525     netif_start_queue(dev);
526     
527     tc589_reset(dev);
528     init_timer(&lp->media);
529     lp->media.function = &media_check;
530     lp->media.data = (unsigned long) dev;
531     lp->media.expires = jiffies + HZ;
532     add_timer(&lp->media);
533
534     dev_dbg(&link->dev, "%s: opened, status %4.4x.\n",
535           dev->name, inw(dev->base_addr + EL3_STATUS));
536     
537     return 0;
538 }
539
540 static void el3_tx_timeout(struct net_device *dev)
541 {
542     unsigned int ioaddr = dev->base_addr;
543     
544     printk(KERN_WARNING "%s: Transmit timed out!\n", dev->name);
545     dump_status(dev);
546     dev->stats.tx_errors++;
547     dev->trans_start = jiffies;
548     /* Issue TX_RESET and TX_START commands. */
549     tc589_wait_for_completion(dev, TxReset);
550     outw(TxEnable, ioaddr + EL3_CMD);
551     netif_wake_queue(dev);
552 }
553
554 static void pop_tx_status(struct net_device *dev)
555 {
556     unsigned int ioaddr = dev->base_addr;
557     int i;
558     
559     /* Clear the Tx status stack. */
560     for (i = 32; i > 0; i--) {
561         u_char tx_status = inb(ioaddr + TX_STATUS);
562         if (!(tx_status & 0x84)) break;
563         /* reset transmitter on jabber error or underrun */
564         if (tx_status & 0x30)
565             tc589_wait_for_completion(dev, TxReset);
566         if (tx_status & 0x38) {
567             pr_debug("%s: transmit error: status 0x%02x\n",
568                   dev->name, tx_status);
569             outw(TxEnable, ioaddr + EL3_CMD);
570             dev->stats.tx_aborted_errors++;
571         }
572         outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */
573     }
574 }
575
576 static netdev_tx_t el3_start_xmit(struct sk_buff *skb,
577                                         struct net_device *dev)
578 {
579     unsigned int ioaddr = dev->base_addr;
580     struct el3_private *priv = netdev_priv(dev);
581     unsigned long flags;
582
583     pr_debug("%s: el3_start_xmit(length = %ld) called, "
584           "status %4.4x.\n", dev->name, (long)skb->len,
585           inw(ioaddr + EL3_STATUS));
586
587     spin_lock_irqsave(&priv->lock, flags);    
588
589     dev->stats.tx_bytes += skb->len;
590
591     /* Put out the doubleword header... */
592     outw(skb->len, ioaddr + TX_FIFO);
593     outw(0x00, ioaddr + TX_FIFO);
594     /* ... and the packet rounded to a doubleword. */
595     outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
596
597     dev->trans_start = jiffies;
598     if (inw(ioaddr + TX_FREE) <= 1536) {
599         netif_stop_queue(dev);
600         /* Interrupt us when the FIFO has room for max-sized packet. */
601         outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
602     }
603
604     pop_tx_status(dev);
605     spin_unlock_irqrestore(&priv->lock, flags);    
606     dev_kfree_skb(skb);
607     
608     return NETDEV_TX_OK;
609 }
610
611 /* The EL3 interrupt handler. */
612 static irqreturn_t el3_interrupt(int irq, void *dev_id)
613 {
614     struct net_device *dev = (struct net_device *) dev_id;
615     struct el3_private *lp = netdev_priv(dev);
616     unsigned int ioaddr;
617     __u16 status;
618     int i = 0, handled = 1;
619     
620     if (!netif_device_present(dev))
621         return IRQ_NONE;
622
623     ioaddr = dev->base_addr;
624
625     pr_debug("%s: interrupt, status %4.4x.\n",
626           dev->name, inw(ioaddr + EL3_STATUS));
627
628     spin_lock(&lp->lock);    
629     while ((status = inw(ioaddr + EL3_STATUS)) &
630         (IntLatch | RxComplete | StatsFull)) {
631         if ((status & 0xe000) != 0x2000) {
632             pr_debug("%s: interrupt from dead card\n", dev->name);
633             handled = 0;
634             break;
635         }
636         
637         if (status & RxComplete)
638             el3_rx(dev);
639         
640         if (status & TxAvailable) {
641             pr_debug("    TX room bit was handled.\n");
642             /* There's room in the FIFO for a full-sized packet. */
643             outw(AckIntr | TxAvailable, ioaddr + EL3_CMD);
644             netif_wake_queue(dev);
645         }
646         
647         if (status & TxComplete)
648             pop_tx_status(dev);
649
650         if (status & (AdapterFailure | RxEarly | StatsFull)) {
651             /* Handle all uncommon interrupts. */
652             if (status & StatsFull)             /* Empty statistics. */
653                 update_stats(dev);
654             if (status & RxEarly) {             /* Rx early is unused. */
655                 el3_rx(dev);
656                 outw(AckIntr | RxEarly, ioaddr + EL3_CMD);
657             }
658             if (status & AdapterFailure) {
659                 u16 fifo_diag;
660                 EL3WINDOW(4);
661                 fifo_diag = inw(ioaddr + 4);
662                 EL3WINDOW(1);
663                 printk(KERN_WARNING "%s: adapter failure, FIFO diagnostic"
664                        " register %04x.\n", dev->name, fifo_diag);
665                 if (fifo_diag & 0x0400) {
666                     /* Tx overrun */
667                     tc589_wait_for_completion(dev, TxReset);
668                     outw(TxEnable, ioaddr + EL3_CMD);
669                 }
670                 if (fifo_diag & 0x2000) {
671                     /* Rx underrun */
672                     tc589_wait_for_completion(dev, RxReset);
673                     set_rx_mode(dev);
674                     outw(RxEnable, ioaddr + EL3_CMD);
675                 }
676                 outw(AckIntr | AdapterFailure, ioaddr + EL3_CMD);
677             }
678         }
679         
680         if (++i > 10) {
681             printk(KERN_ERR "%s: infinite loop in interrupt, "
682                    "status %4.4x.\n", dev->name, status);
683             /* Clear all interrupts */
684             outw(AckIntr | 0xFF, ioaddr + EL3_CMD);
685             break;
686         }
687         /* Acknowledge the IRQ. */
688         outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD);
689     }
690
691     lp->last_irq = jiffies;
692     spin_unlock(&lp->lock);    
693     pr_debug("%s: exiting interrupt, status %4.4x.\n",
694           dev->name, inw(ioaddr + EL3_STATUS));
695     return IRQ_RETVAL(handled);
696 }
697
698 static void media_check(unsigned long arg)
699 {
700     struct net_device *dev = (struct net_device *)(arg);
701     struct el3_private *lp = netdev_priv(dev);
702     unsigned int ioaddr = dev->base_addr;
703     u16 media, errs;
704     unsigned long flags;
705
706     if (!netif_device_present(dev)) goto reschedule;
707
708     /* Check for pending interrupt with expired latency timer: with
709        this, we can limp along even if the interrupt is blocked */
710     if ((inw(ioaddr + EL3_STATUS) & IntLatch) &&
711         (inb(ioaddr + EL3_TIMER) == 0xff)) {
712         if (!lp->fast_poll)
713             printk(KERN_WARNING "%s: interrupt(s) dropped!\n", dev->name);
714
715         local_irq_save(flags);
716         el3_interrupt(dev->irq, dev);
717         local_irq_restore(flags);
718
719         lp->fast_poll = HZ;
720     }
721     if (lp->fast_poll) {
722         lp->fast_poll--;
723         lp->media.expires = jiffies + HZ/100;
724         add_timer(&lp->media);
725         return;
726     }
727
728     /* lp->lock guards the EL3 window. Window should always be 1 except
729        when the lock is held */
730     spin_lock_irqsave(&lp->lock, flags);    
731     EL3WINDOW(4);
732     media = inw(ioaddr+WN4_MEDIA) & 0xc810;
733
734     /* Ignore collisions unless we've had no irq's recently */
735     if (time_before(jiffies, lp->last_irq + HZ)) {
736         media &= ~0x0010;
737     } else {
738         /* Try harder to detect carrier errors */
739         EL3WINDOW(6);
740         outw(StatsDisable, ioaddr + EL3_CMD);
741         errs = inb(ioaddr + 0);
742         outw(StatsEnable, ioaddr + EL3_CMD);
743         dev->stats.tx_carrier_errors += errs;
744         if (errs || (lp->media_status & 0x0010)) media |= 0x0010;
745     }
746
747     if (media != lp->media_status) {
748         if ((media & lp->media_status & 0x8000) &&
749             ((lp->media_status ^ media) & 0x0800))
750             printk(KERN_INFO "%s: %s link beat\n", dev->name,
751                    (lp->media_status & 0x0800 ? "lost" : "found"));
752         else if ((media & lp->media_status & 0x4000) &&
753                  ((lp->media_status ^ media) & 0x0010))
754             printk(KERN_INFO "%s: coax cable %s\n", dev->name,
755                    (lp->media_status & 0x0010 ? "ok" : "problem"));
756         if (dev->if_port == 0) {
757             if (media & 0x8000) {
758                 if (media & 0x0800)
759                     printk(KERN_INFO "%s: flipped to 10baseT\n",
760                            dev->name);
761                 else
762                     tc589_set_xcvr(dev, 2);
763             } else if (media & 0x4000) {
764                 if (media & 0x0010)
765                     tc589_set_xcvr(dev, 1);
766                 else
767                     printk(KERN_INFO "%s: flipped to 10base2\n",
768                            dev->name);
769             }
770         }
771         lp->media_status = media;
772     }
773     
774     EL3WINDOW(1);
775     spin_unlock_irqrestore(&lp->lock, flags);    
776
777 reschedule:
778     lp->media.expires = jiffies + HZ;
779     add_timer(&lp->media);
780 }
781
782 static struct net_device_stats *el3_get_stats(struct net_device *dev)
783 {
784     struct el3_private *lp = netdev_priv(dev);
785     unsigned long flags;
786     struct pcmcia_device *link = lp->p_dev;
787
788     if (pcmcia_dev_present(link)) {
789         spin_lock_irqsave(&lp->lock, flags);
790         update_stats(dev);
791         spin_unlock_irqrestore(&lp->lock, flags);
792     }
793     return &dev->stats;
794 }
795
796 /*
797   Update statistics.  We change to register window 6, so this should be run
798   single-threaded if the device is active. This is expected to be a rare
799   operation, and it's simpler for the rest of the driver to assume that
800   window 1 is always valid rather than use a special window-state variable.
801   
802   Caller must hold the lock for this
803 */
804 static void update_stats(struct net_device *dev)
805 {
806     unsigned int ioaddr = dev->base_addr;
807
808     pr_debug("%s: updating the statistics.\n", dev->name);
809     /* Turn off statistics updates while reading. */
810     outw(StatsDisable, ioaddr + EL3_CMD);
811     /* Switch to the stats window, and read everything. */
812     EL3WINDOW(6);
813     dev->stats.tx_carrier_errors        += inb(ioaddr + 0);
814     dev->stats.tx_heartbeat_errors      += inb(ioaddr + 1);
815     /* Multiple collisions. */          inb(ioaddr + 2);
816     dev->stats.collisions               += inb(ioaddr + 3);
817     dev->stats.tx_window_errors         += inb(ioaddr + 4);
818     dev->stats.rx_fifo_errors           += inb(ioaddr + 5);
819     dev->stats.tx_packets               += inb(ioaddr + 6);
820     /* Rx packets   */                  inb(ioaddr + 7);
821     /* Tx deferrals */                  inb(ioaddr + 8);
822     /* Rx octets */                     inw(ioaddr + 10);
823     /* Tx octets */                     inw(ioaddr + 12);
824     
825     /* Back to window 1, and turn statistics back on. */
826     EL3WINDOW(1);
827     outw(StatsEnable, ioaddr + EL3_CMD);
828 }
829
830 static int el3_rx(struct net_device *dev)
831 {
832     unsigned int ioaddr = dev->base_addr;
833     int worklimit = 32;
834     short rx_status;
835     
836     pr_debug("%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n",
837           dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS));
838     while (!((rx_status = inw(ioaddr + RX_STATUS)) & 0x8000) &&
839                     worklimit > 0) {
840         worklimit--;
841         if (rx_status & 0x4000) { /* Error, update stats. */
842             short error = rx_status & 0x3800;
843             dev->stats.rx_errors++;
844             switch (error) {
845             case 0x0000:        dev->stats.rx_over_errors++; break;
846             case 0x0800:        dev->stats.rx_length_errors++; break;
847             case 0x1000:        dev->stats.rx_frame_errors++; break;
848             case 0x1800:        dev->stats.rx_length_errors++; break;
849             case 0x2000:        dev->stats.rx_frame_errors++; break;
850             case 0x2800:        dev->stats.rx_crc_errors++; break;
851             }
852         } else {
853             short pkt_len = rx_status & 0x7ff;
854             struct sk_buff *skb;
855             
856             skb = dev_alloc_skb(pkt_len+5);
857             
858             pr_debug("    Receiving packet size %d status %4.4x.\n",
859                   pkt_len, rx_status);
860             if (skb != NULL) {
861                 skb_reserve(skb, 2);
862                 insl(ioaddr+RX_FIFO, skb_put(skb, pkt_len),
863                         (pkt_len+3)>>2);
864                 skb->protocol = eth_type_trans(skb, dev);
865                 netif_rx(skb);
866                 dev->stats.rx_packets++;
867                 dev->stats.rx_bytes += pkt_len;
868             } else {
869                 pr_debug("%s: couldn't allocate a sk_buff of"
870                       " size %d.\n", dev->name, pkt_len);
871                 dev->stats.rx_dropped++;
872             }
873         }
874         /* Pop the top of the Rx FIFO */
875         tc589_wait_for_completion(dev, RxDiscard);
876     }
877     if (worklimit == 0)
878         printk(KERN_WARNING "%s: too much work in el3_rx!\n", dev->name);
879     return 0;
880 }
881
882 static void set_rx_mode(struct net_device *dev)
883 {
884     unsigned int ioaddr = dev->base_addr;
885     u16 opts = SetRxFilter | RxStation | RxBroadcast;
886
887     if (dev->flags & IFF_PROMISC)
888         opts |= RxMulticast | RxProm;
889     else if (!netdev_mc_empty(dev) || (dev->flags & IFF_ALLMULTI))
890         opts |= RxMulticast;
891     outw(opts, ioaddr + EL3_CMD);
892 }
893
894 static void set_multicast_list(struct net_device *dev)
895 {
896         struct el3_private *priv = netdev_priv(dev);
897         unsigned long flags;
898
899         spin_lock_irqsave(&priv->lock, flags);
900         set_rx_mode(dev);
901         spin_unlock_irqrestore(&priv->lock, flags);
902 }
903
904 static int el3_close(struct net_device *dev)
905 {
906     struct el3_private *lp = netdev_priv(dev);
907     struct pcmcia_device *link = lp->p_dev;
908     unsigned int ioaddr = dev->base_addr;
909     
910     dev_dbg(&link->dev, "%s: shutting down ethercard.\n", dev->name);
911
912     if (pcmcia_dev_present(link)) {
913         /* Turn off statistics ASAP.  We update dev->stats below. */
914         outw(StatsDisable, ioaddr + EL3_CMD);
915         
916         /* Disable the receiver and transmitter. */
917         outw(RxDisable, ioaddr + EL3_CMD);
918         outw(TxDisable, ioaddr + EL3_CMD);
919         
920         if (dev->if_port == 2)
921             /* Turn off thinnet power.  Green! */
922             outw(StopCoax, ioaddr + EL3_CMD);
923         else if (dev->if_port == 1) {
924             /* Disable link beat and jabber */
925             EL3WINDOW(4);
926             outw(0, ioaddr + WN4_MEDIA);
927         }
928         
929         /* Switching back to window 0 disables the IRQ. */
930         EL3WINDOW(0);
931         /* But we explicitly zero the IRQ line select anyway. */
932         outw(0x0f00, ioaddr + WN0_IRQ);
933         
934         /* Check if the card still exists */
935         if ((inw(ioaddr+EL3_STATUS) & 0xe000) == 0x2000)
936             update_stats(dev);
937     }
938
939     link->open--;
940     netif_stop_queue(dev);
941     del_timer_sync(&lp->media);
942     
943     return 0;
944 }
945
946 static struct pcmcia_device_id tc589_ids[] = {
947         PCMCIA_MFC_DEVICE_MANF_CARD(0, 0x0101, 0x0562),
948         PCMCIA_MFC_DEVICE_PROD_ID1(0, "Motorola MARQUIS", 0xf03e4e77),
949         PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0589),
950         PCMCIA_DEVICE_PROD_ID12("Farallon", "ENet", 0x58d93fc4, 0x992c2202),
951         PCMCIA_MFC_DEVICE_CIS_MANF_CARD(0, 0x0101, 0x0035, "cis/3CXEM556.cis"),
952         PCMCIA_MFC_DEVICE_CIS_MANF_CARD(0, 0x0101, 0x003d, "cis/3CXEM556.cis"),
953         PCMCIA_DEVICE_NULL,
954 };
955 MODULE_DEVICE_TABLE(pcmcia, tc589_ids);
956
957 static struct pcmcia_driver tc589_driver = {
958         .owner          = THIS_MODULE,
959         .drv            = {
960                 .name   = "3c589_cs",
961         },
962         .probe          = tc589_probe,
963         .remove         = tc589_detach,
964         .id_table       = tc589_ids,
965         .suspend        = tc589_suspend,
966         .resume         = tc589_resume,
967 };
968
969 static int __init init_tc589(void)
970 {
971         return pcmcia_register_driver(&tc589_driver);
972 }
973
974 static void __exit exit_tc589(void)
975 {
976         pcmcia_unregister_driver(&tc589_driver);
977 }
978
979 module_init(init_tc589);
980 module_exit(exit_tc589);