1/* ----------------------------------------------------------------------------
2Linux PCMCIA ethernet adapter driver for the New Media Ethernet LAN.
3  nmclan_cs.c,v 0.16 1995/07/01 06:42:17 rpao Exp rpao
4
5  The Ethernet LAN uses the Advanced Micro Devices (AMD) Am79C940 Media
6  Access Controller for Ethernet (MACE).  It is essentially the Am2150
7  PCMCIA Ethernet card contained in the Am2150 Demo Kit.
8
9Written by Roger C. Pao <rpao@paonet.org>
10  Copyright 1995 Roger C. Pao
11  Linux 2.5 cleanups Copyright Red Hat 2003
12
13  This software may be used and distributed according to the terms of
14  the GNU General Public License.
15
16Ported to Linux 1.3.* network driver environment by
17  Matti Aarnio <mea@utu.fi>
18
19References
20
21  Am2150 Technical Reference Manual, Revision 1.0, August 17, 1993
22  Am79C940 (MACE) Data Sheet, 1994
23  Am79C90 (C-LANCE) Data Sheet, 1994
24  Linux PCMCIA Programmer's Guide v1.17
25  /usr/src/linux/net/inet/dev.c, Linux kernel 1.2.8
26
27  Eric Mears, New Media Corporation
28  Tom Pollard, New Media Corporation
29  Dean Siasoyco, New Media Corporation
30  Ken Lesniak, Silicon Graphics, Inc. <lesniak@boston.sgi.com>
31  Donald Becker <becker@scyld.com>
32  David Hinds <dahinds@users.sourceforge.net>
33
34  The Linux client driver is based on the 3c589_cs.c client driver by
35  David Hinds.
36
37  The Linux network driver outline is based on the 3c589_cs.c driver,
38  the 8390.c driver, and the example skeleton.c kernel code, which are
39  by Donald Becker.
40
41  The Am2150 network driver hardware interface code is based on the
42  OS/9000 driver for the New Media Ethernet LAN by Eric Mears.
43
44  Special thanks for testing and help in debugging this driver goes
45  to Ken Lesniak.
46
47-------------------------------------------------------------------------------
48Driver Notes and Issues
49-------------------------------------------------------------------------------
50
511. Developed on a Dell 320SLi
52   PCMCIA Card Services 2.6.2
53   Linux dell 1.2.10 #1 Thu Jun 29 20:23:41 PDT 1995 i386
54
552. rc.pcmcia may require loading pcmcia_core with io_speed=300:
56   'insmod pcmcia_core.o io_speed=300'.
57   This will avoid problems with fast systems which causes rx_framecnt
58   to return random values.
59
603. If hot extraction does not work for you, use 'ifconfig eth0 down'
61   before extraction.
62
634. There is a bad slow-down problem in this driver.
64
655. Future: Multicast processing.  In the meantime, do _not_ compile your
66   kernel with multicast ip enabled.
67
68-------------------------------------------------------------------------------
69History
70-------------------------------------------------------------------------------
71Log: nmclan_cs.c,v
72 * 2.5.75-ac1 2003/07/11 Alan Cox <alan@lxorguk.ukuu.org.uk>
73 * Fixed hang on card eject as we probe it
74 * Cleaned up to use new style locking.
75 *
76 * Revision 0.16  1995/07/01  06:42:17  rpao
77 * Bug fix: nmclan_reset() called CardServices incorrectly.
78 *
79 * Revision 0.15  1995/05/24  08:09:47  rpao
80 * Re-implement MULTI_TX dev->tbusy handling.
81 *
82 * Revision 0.14  1995/05/23  03:19:30  rpao
83 * Added, in nmclan_config(), "tuple.Attributes = 0;".
84 * Modified MACE ID check to ignore chip revision level.
85 * Avoid tx_free_frames race condition between _start_xmit and _interrupt.
86 *
87 * Revision 0.13  1995/05/18  05:56:34  rpao
88 * Statistics changes.
89 * Bug fix: nmclan_reset did not enable TX and RX: call restore_multicast_list.
90 * Bug fix: mace_interrupt checks ~MACE_IMR_DEFAULT.  Fixes driver lockup.
91 *
92 * Revision 0.12  1995/05/14  00:12:23  rpao
93 * Statistics overhaul.
94 *
95
9695/05/13 rpao	V0.10a
97		Bug fix: MACE statistics counters used wrong I/O ports.
98		Bug fix: mace_interrupt() needed to allow statistics to be
99		processed without RX or TX interrupts pending.
10095/05/11 rpao	V0.10
101		Multiple transmit request processing.
102		Modified statistics to use MACE counters where possible.
10395/05/10 rpao	V0.09 Bug fix: Must use IO_DATA_PATH_WIDTH_AUTO.
104		*Released
10595/05/10 rpao	V0.08
106		Bug fix: Make all non-exported functions private by using
107		static keyword.
108		Bug fix: Test IntrCnt _before_ reading MACE_IR.
10995/05/10 rpao	V0.07 Statistics.
11095/05/09 rpao	V0.06 Fix rx_framecnt problem by addition of PCIC wait states.
111
112---------------------------------------------------------------------------- */
113
114#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
115
116#define DRV_NAME	"nmclan_cs"
117
118/* ----------------------------------------------------------------------------
119Conditional Compilation Options
120---------------------------------------------------------------------------- */
121
122#define MULTI_TX			0
123#define RESET_ON_TIMEOUT		1
124#define TX_INTERRUPTABLE		1
125#define RESET_XILINX			0
126
127/* ----------------------------------------------------------------------------
128Include Files
129---------------------------------------------------------------------------- */
130
131#include <linux/module.h>
132#include <linux/kernel.h>
133#include <linux/ptrace.h>
134#include <linux/slab.h>
135#include <linux/string.h>
136#include <linux/timer.h>
137#include <linux/interrupt.h>
138#include <linux/in.h>
139#include <linux/delay.h>
140#include <linux/ethtool.h>
141#include <linux/netdevice.h>
142#include <linux/etherdevice.h>
143#include <linux/skbuff.h>
144#include <linux/if_arp.h>
145#include <linux/ioport.h>
146#include <linux/bitops.h>
147
148#include <pcmcia/cisreg.h>
149#include <pcmcia/cistpl.h>
150#include <pcmcia/ds.h>
151
152#include <linux/uaccess.h>
153#include <asm/io.h>
154
155/* ----------------------------------------------------------------------------
156Defines
157---------------------------------------------------------------------------- */
158
159#define MACE_LADRF_LEN			8
160					/* 8 bytes in Logical Address Filter */
161
162/* Loop Control Defines */
163#define MACE_MAX_IR_ITERATIONS		10
164#define MACE_MAX_RX_ITERATIONS		12
165	/*
166	TBD: Dean brought this up, and I assumed the hardware would
167	handle it:
168
169	If MACE_MAX_RX_ITERATIONS is > 1, rx_framecnt may still be
170	non-zero when the isr exits.  We may not get another interrupt
171	to process the remaining packets for some time.
172	*/
173
174/*
175The Am2150 has a Xilinx XC3042 field programmable gate array (FPGA)
176which manages the interface between the MACE and the PCMCIA bus.  It
177also includes buffer management for the 32K x 8 SRAM to control up to
178four transmit and 12 receive frames at a time.
179*/
180#define AM2150_MAX_TX_FRAMES		4
181#define AM2150_MAX_RX_FRAMES		12
182
183/* Am2150 Ethernet Card I/O Mapping */
184#define AM2150_RCV			0x00
185#define AM2150_XMT			0x04
186#define AM2150_XMT_SKIP			0x09
187#define AM2150_RCV_NEXT			0x0A
188#define AM2150_RCV_FRAME_COUNT		0x0B
189#define AM2150_MACE_BANK		0x0C
190#define AM2150_MACE_BASE		0x10
191
192/* MACE Registers */
193#define MACE_RCVFIFO			0
194#define MACE_XMTFIFO			1
195#define MACE_XMTFC			2
196#define MACE_XMTFS			3
197#define MACE_XMTRC			4
198#define MACE_RCVFC			5
199#define MACE_RCVFS			6
200#define MACE_FIFOFC			7
201#define MACE_IR				8
202#define MACE_IMR			9
203#define MACE_PR				10
204#define MACE_BIUCC			11
205#define MACE_FIFOCC			12
206#define MACE_MACCC			13
207#define MACE_PLSCC			14
208#define MACE_PHYCC			15
209#define MACE_CHIPIDL			16
210#define MACE_CHIPIDH			17
211#define MACE_IAC			18
212/* Reserved */
213#define MACE_LADRF			20
214#define MACE_PADR			21
215/* Reserved */
216/* Reserved */
217#define MACE_MPC			24
218/* Reserved */
219#define MACE_RNTPC			26
220#define MACE_RCVCC			27
221/* Reserved */
222#define MACE_UTR			29
223#define MACE_RTR1			30
224#define MACE_RTR2			31
225
226/* MACE Bit Masks */
227#define MACE_XMTRC_EXDEF		0x80
228#define MACE_XMTRC_XMTRC		0x0F
229
230#define MACE_XMTFS_XMTSV		0x80
231#define MACE_XMTFS_UFLO			0x40
232#define MACE_XMTFS_LCOL			0x20
233#define MACE_XMTFS_MORE			0x10
234#define MACE_XMTFS_ONE			0x08
235#define MACE_XMTFS_DEFER		0x04
236#define MACE_XMTFS_LCAR			0x02
237#define MACE_XMTFS_RTRY			0x01
238
239#define MACE_RCVFS_RCVSTS		0xF000
240#define MACE_RCVFS_OFLO			0x8000
241#define MACE_RCVFS_CLSN			0x4000
242#define MACE_RCVFS_FRAM			0x2000
243#define MACE_RCVFS_FCS			0x1000
244
245#define MACE_FIFOFC_RCVFC		0xF0
246#define MACE_FIFOFC_XMTFC		0x0F
247
248#define MACE_IR_JAB			0x80
249#define MACE_IR_BABL			0x40
250#define MACE_IR_CERR			0x20
251#define MACE_IR_RCVCCO			0x10
252#define MACE_IR_RNTPCO			0x08
253#define MACE_IR_MPCO			0x04
254#define MACE_IR_RCVINT			0x02
255#define MACE_IR_XMTINT			0x01
256
257#define MACE_MACCC_PROM			0x80
258#define MACE_MACCC_DXMT2PD		0x40
259#define MACE_MACCC_EMBA			0x20
260#define MACE_MACCC_RESERVED		0x10
261#define MACE_MACCC_DRCVPA		0x08
262#define MACE_MACCC_DRCVBC		0x04
263#define MACE_MACCC_ENXMT		0x02
264#define MACE_MACCC_ENRCV		0x01
265
266#define MACE_PHYCC_LNKFL		0x80
267#define MACE_PHYCC_DLNKTST		0x40
268#define MACE_PHYCC_REVPOL		0x20
269#define MACE_PHYCC_DAPC			0x10
270#define MACE_PHYCC_LRT			0x08
271#define MACE_PHYCC_ASEL			0x04
272#define MACE_PHYCC_RWAKE		0x02
273#define MACE_PHYCC_AWAKE		0x01
274
275#define MACE_IAC_ADDRCHG		0x80
276#define MACE_IAC_PHYADDR		0x04
277#define MACE_IAC_LOGADDR		0x02
278
279#define MACE_UTR_RTRE			0x80
280#define MACE_UTR_RTRD			0x40
281#define MACE_UTR_RPA			0x20
282#define MACE_UTR_FCOLL			0x10
283#define MACE_UTR_RCVFCSE		0x08
284#define MACE_UTR_LOOP_INCL_MENDEC	0x06
285#define MACE_UTR_LOOP_NO_MENDEC		0x04
286#define MACE_UTR_LOOP_EXTERNAL		0x02
287#define MACE_UTR_LOOP_NONE		0x00
288#define MACE_UTR_RESERVED		0x01
289
290/* Switch MACE register bank (only 0 and 1 are valid) */
291#define MACEBANK(win_num) outb((win_num), ioaddr + AM2150_MACE_BANK)
292
293#define MACE_IMR_DEFAULT \
294  (0xFF - \
295    ( \
296      MACE_IR_CERR | \
297      MACE_IR_RCVCCO | \
298      MACE_IR_RNTPCO | \
299      MACE_IR_MPCO | \
300      MACE_IR_RCVINT | \
301      MACE_IR_XMTINT \
302    ) \
303  )
304#undef MACE_IMR_DEFAULT
305#define MACE_IMR_DEFAULT 0x00 /* New statistics handling: grab everything */
306
307#define TX_TIMEOUT		((400*HZ)/1000)
308
309/* ----------------------------------------------------------------------------
310Type Definitions
311---------------------------------------------------------------------------- */
312
313typedef struct _mace_statistics {
314    /* MACE_XMTFS */
315    int xmtsv;
316    int uflo;
317    int lcol;
318    int more;
319    int one;
320    int defer;
321    int lcar;
322    int rtry;
323
324    /* MACE_XMTRC */
325    int exdef;
326    int xmtrc;
327
328    /* RFS1--Receive Status (RCVSTS) */
329    int oflo;
330    int clsn;
331    int fram;
332    int fcs;
333
334    /* RFS2--Runt Packet Count (RNTPC) */
335    int rfs_rntpc;
336
337    /* RFS3--Receive Collision Count (RCVCC) */
338    int rfs_rcvcc;
339
340    /* MACE_IR */
341    int jab;
342    int babl;
343    int cerr;
344    int rcvcco;
345    int rntpco;
346    int mpco;
347
348    /* MACE_MPC */
349    int mpc;
350
351    /* MACE_RNTPC */
352    int rntpc;
353
354    /* MACE_RCVCC */
355    int rcvcc;
356} mace_statistics;
357
358typedef struct _mace_private {
359	struct pcmcia_device	*p_dev;
360    mace_statistics mace_stats; /* MACE chip statistics counters */
361
362    /* restore_multicast_list() state variables */
363    int multicast_ladrf[MACE_LADRF_LEN]; /* Logical address filter */
364    int multicast_num_addrs;
365
366    char tx_free_frames; /* Number of free transmit frame buffers */
367    char tx_irq_disabled; /* MACE TX interrupt disabled */
368
369    spinlock_t bank_lock; /* Must be held if you step off bank 0 */
370} mace_private;
371
372/* ----------------------------------------------------------------------------
373Private Global Variables
374---------------------------------------------------------------------------- */
375
376static const char *if_names[]={
377    "Auto", "10baseT", "BNC",
378};
379
380/* ----------------------------------------------------------------------------
381Parameters
382	These are the parameters that can be set during loading with
383	'insmod'.
384---------------------------------------------------------------------------- */
385
386MODULE_DESCRIPTION("New Media PCMCIA ethernet driver");
387MODULE_LICENSE("GPL");
388
389#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
390
391/* 0=auto, 1=10baseT, 2 = 10base2, default=auto */
392INT_MODULE_PARM(if_port, 0);
393
394
395/* ----------------------------------------------------------------------------
396Function Prototypes
397---------------------------------------------------------------------------- */
398
399static int nmclan_config(struct pcmcia_device *link);
400static void nmclan_release(struct pcmcia_device *link);
401
402static void nmclan_reset(struct net_device *dev);
403static int mace_config(struct net_device *dev, struct ifmap *map);
404static int mace_open(struct net_device *dev);
405static int mace_close(struct net_device *dev);
406static netdev_tx_t mace_start_xmit(struct sk_buff *skb,
407					 struct net_device *dev);
408static void mace_tx_timeout(struct net_device *dev, unsigned int txqueue);
409static irqreturn_t mace_interrupt(int irq, void *dev_id);
410static struct net_device_stats *mace_get_stats(struct net_device *dev);
411static int mace_rx(struct net_device *dev, unsigned char RxCnt);
412static void restore_multicast_list(struct net_device *dev);
413static void set_multicast_list(struct net_device *dev);
414static const struct ethtool_ops netdev_ethtool_ops;
415
416
417static void nmclan_detach(struct pcmcia_device *p_dev);
418
419static const struct net_device_ops mace_netdev_ops = {
420	.ndo_open		= mace_open,
421	.ndo_stop		= mace_close,
422	.ndo_start_xmit		= mace_start_xmit,
423	.ndo_tx_timeout		= mace_tx_timeout,
424	.ndo_set_config		= mace_config,
425	.ndo_get_stats		= mace_get_stats,
426	.ndo_set_rx_mode	= set_multicast_list,
427	.ndo_set_mac_address 	= eth_mac_addr,
428	.ndo_validate_addr	= eth_validate_addr,
429};
430
431static int nmclan_probe(struct pcmcia_device *link)
432{
433    mace_private *lp;
434    struct net_device *dev;
435
436    dev_dbg(&link->dev, "nmclan_attach()\n");
437
438    /* Create new ethernet device */
439    dev = alloc_etherdev(sizeof(mace_private));
440    if (!dev)
441	    return -ENOMEM;
442    lp = netdev_priv(dev);
443    lp->p_dev = link;
444    link->priv = dev;
445
446    spin_lock_init(&lp->bank_lock);
447    link->resource[0]->end = 32;
448    link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
449    link->config_flags |= CONF_ENABLE_IRQ;
450    link->config_index = 1;
451    link->config_regs = PRESENT_OPTION;
452
453    lp->tx_free_frames=AM2150_MAX_TX_FRAMES;
454
455    dev->netdev_ops = &mace_netdev_ops;
456    dev->ethtool_ops = &netdev_ethtool_ops;
457    dev->watchdog_timeo = TX_TIMEOUT;
458
459    return nmclan_config(link);
460} /* nmclan_attach */
461
462static void nmclan_detach(struct pcmcia_device *link)
463{
464    struct net_device *dev = link->priv;
465
466    dev_dbg(&link->dev, "nmclan_detach\n");
467
468    unregister_netdev(dev);
469
470    nmclan_release(link);
471
472    free_netdev(dev);
473} /* nmclan_detach */
474
475/* ----------------------------------------------------------------------------
476mace_read
477	Reads a MACE register.  This is bank independent; however, the
478	caller must ensure that this call is not interruptable.  We are
479	assuming that during normal operation, the MACE is always in
480	bank 0.
481---------------------------------------------------------------------------- */
482static int mace_read(mace_private *lp, unsigned int ioaddr, int reg)
483{
484  int data = 0xFF;
485  unsigned long flags;
486
487  switch (reg >> 4) {
488    case 0: /* register 0-15 */
489      data = inb(ioaddr + AM2150_MACE_BASE + reg);
490      break;
491    case 1: /* register 16-31 */
492      spin_lock_irqsave(&lp->bank_lock, flags);
493      MACEBANK(1);
494      data = inb(ioaddr + AM2150_MACE_BASE + (reg & 0x0F));
495      MACEBANK(0);
496      spin_unlock_irqrestore(&lp->bank_lock, flags);
497      break;
498  }
499  return data & 0xFF;
500} /* mace_read */
501
502/* ----------------------------------------------------------------------------
503mace_write
504	Writes to a MACE register.  This is bank independent; however,
505	the caller must ensure that this call is not interruptable.  We
506	are assuming that during normal operation, the MACE is always in
507	bank 0.
508---------------------------------------------------------------------------- */
509static void mace_write(mace_private *lp, unsigned int ioaddr, int reg,
510		       int data)
511{
512  unsigned long flags;
513
514  switch (reg >> 4) {
515    case 0: /* register 0-15 */
516      outb(data & 0xFF, ioaddr + AM2150_MACE_BASE + reg);
517      break;
518    case 1: /* register 16-31 */
519      spin_lock_irqsave(&lp->bank_lock, flags);
520      MACEBANK(1);
521      outb(data & 0xFF, ioaddr + AM2150_MACE_BASE + (reg & 0x0F));
522      MACEBANK(0);
523      spin_unlock_irqrestore(&lp->bank_lock, flags);
524      break;
525  }
526} /* mace_write */
527
528/* ----------------------------------------------------------------------------
529mace_init
530	Resets the MACE chip.
531---------------------------------------------------------------------------- */
532static int mace_init(mace_private *lp, unsigned int ioaddr, char *enet_addr)
533{
534  int i;
535  int ct = 0;
536
537  /* MACE Software reset */
538  mace_write(lp, ioaddr, MACE_BIUCC, 1);
539  while (mace_read(lp, ioaddr, MACE_BIUCC) & 0x01) {
540    /* Wait for reset bit to be cleared automatically after <= 200ns */;
541    if(++ct > 500)
542    {
543	pr_err("reset failed, card removed?\n");
544    	return -1;
545    }
546    udelay(1);
547  }
548  mace_write(lp, ioaddr, MACE_BIUCC, 0);
549
550  /* The Am2150 requires that the MACE FIFOs operate in burst mode. */
551  mace_write(lp, ioaddr, MACE_FIFOCC, 0x0F);
552
553  mace_write(lp,ioaddr, MACE_RCVFC, 0); /* Disable Auto Strip Receive */
554  mace_write(lp, ioaddr, MACE_IMR, 0xFF); /* Disable all interrupts until _open */
555
556  /*
557   * Bit 2-1 PORTSEL[1-0] Port Select.
558   * 00 AUI/10Base-2
559   * 01 10Base-T
560   * 10 DAI Port (reserved in Am2150)
561   * 11 GPSI
562   * For this card, only the first two are valid.
563   * So, PLSCC should be set to
564   * 0x00 for 10Base-2
565   * 0x02 for 10Base-T
566   * Or just set ASEL in PHYCC below!
567   */
568  switch (if_port) {
569    case 1:
570      mace_write(lp, ioaddr, MACE_PLSCC, 0x02);
571      break;
572    case 2:
573      mace_write(lp, ioaddr, MACE_PLSCC, 0x00);
574      break;
575    default:
576      mace_write(lp, ioaddr, MACE_PHYCC, /* ASEL */ 4);
577      /* ASEL Auto Select.  When set, the PORTSEL[1-0] bits are overridden,
578	 and the MACE device will automatically select the operating media
579	 interface port. */
580      break;
581  }
582
583  mace_write(lp, ioaddr, MACE_IAC, MACE_IAC_ADDRCHG | MACE_IAC_PHYADDR);
584  /* Poll ADDRCHG bit */
585  ct = 0;
586  while (mace_read(lp, ioaddr, MACE_IAC) & MACE_IAC_ADDRCHG)
587  {
588  	if(++ ct > 500)
589  	{
590		pr_err("ADDRCHG timeout, card removed?\n");
591  		return -1;
592  	}
593  }
594  /* Set PADR register */
595  for (i = 0; i < ETH_ALEN; i++)
596    mace_write(lp, ioaddr, MACE_PADR, enet_addr[i]);
597
598  /* MAC Configuration Control Register should be written last */
599  /* Let set_multicast_list set this. */
600  /* mace_write(lp, ioaddr, MACE_MACCC, MACE_MACCC_ENXMT | MACE_MACCC_ENRCV); */
601  mace_write(lp, ioaddr, MACE_MACCC, 0x00);
602  return 0;
603} /* mace_init */
604
605static int nmclan_config(struct pcmcia_device *link)
606{
607  struct net_device *dev = link->priv;
608  mace_private *lp = netdev_priv(dev);
609  u8 *buf;
610  size_t len;
611  int i, ret;
612  unsigned int ioaddr;
613
614  dev_dbg(&link->dev, "nmclan_config\n");
615
616  link->io_lines = 5;
617  ret = pcmcia_request_io(link);
618  if (ret)
619	  goto failed;
620  ret = pcmcia_request_irq(link, mace_interrupt);
621  if (ret)
622	  goto failed;
623  ret = pcmcia_enable_device(link);
624  if (ret)
625	  goto failed;
626
627  dev->irq = link->irq;
628  dev->base_addr = link->resource[0]->start;
629
630  ioaddr = dev->base_addr;
631
632  /* Read the ethernet address from the CIS. */
633  len = pcmcia_get_tuple(link, 0x80, &buf);
634  if (!buf || len < ETH_ALEN) {
635	  kfree(buf);
636	  goto failed;
637  }
638  memcpy(dev->dev_addr, buf, ETH_ALEN);
639  kfree(buf);
640
641  /* Verify configuration by reading the MACE ID. */
642  {
643    char sig[2];
644
645    sig[0] = mace_read(lp, ioaddr, MACE_CHIPIDL);
646    sig[1] = mace_read(lp, ioaddr, MACE_CHIPIDH);
647    if ((sig[0] == 0x40) && ((sig[1] & 0x0F) == 0x09)) {
648      dev_dbg(&link->dev, "nmclan_cs configured: mace id=%x %x\n",
649	    sig[0], sig[1]);
650    } else {
651      pr_notice("mace id not found: %x %x should be 0x40 0x?9\n",
652		sig[0], sig[1]);
653      goto failed;
654    }
655  }
656
657  if(mace_init(lp, ioaddr, dev->dev_addr) == -1)
658  	goto failed;
659
660  /* The if_port symbol can be set when the module is loaded */
661  if (if_port <= 2)
662    dev->if_port = if_port;
663  else
664    pr_notice("invalid if_port requested\n");
665
666  SET_NETDEV_DEV(dev, &link->dev);
667
668  i = register_netdev(dev);
669  if (i != 0) {
670    pr_notice("register_netdev() failed\n");
671    goto failed;
672  }
673
674  netdev_info(dev, "nmclan: port %#3lx, irq %d, %s port, hw_addr %pM\n",
675	      dev->base_addr, dev->irq, if_names[dev->if_port], dev->dev_addr);
676  return 0;
677
678failed:
679	nmclan_release(link);
680	return -ENODEV;
681} /* nmclan_config */
682
683static void nmclan_release(struct pcmcia_device *link)
684{
685	dev_dbg(&link->dev, "nmclan_release\n");
686	pcmcia_disable_device(link);
687}
688
689static int nmclan_suspend(struct pcmcia_device *link)
690{
691	struct net_device *dev = link->priv;
692
693	if (link->open)
694		netif_device_detach(dev);
695
696	return 0;
697}
698
699static int nmclan_resume(struct pcmcia_device *link)
700{
701	struct net_device *dev = link->priv;
702
703	if (link->open) {
704		nmclan_reset(dev);
705		netif_device_attach(dev);
706	}
707
708	return 0;
709}
710
711
712/* ----------------------------------------------------------------------------
713nmclan_reset
714	Reset and restore all of the Xilinx and MACE registers.
715---------------------------------------------------------------------------- */
716static void nmclan_reset(struct net_device *dev)
717{
718  mace_private *lp = netdev_priv(dev);
719
720#if RESET_XILINX
721  struct pcmcia_device *link = &lp->link;
722  u8 OrigCorValue;
723
724  /* Save original COR value */
725  pcmcia_read_config_byte(link, CISREG_COR, &OrigCorValue);
726
727  /* Reset Xilinx */
728  dev_dbg(&link->dev, "nmclan_reset: OrigCorValue=0x%x, resetting...\n",
729	OrigCorValue);
730  pcmcia_write_config_byte(link, CISREG_COR, COR_SOFT_RESET);
731  /* Need to wait for 20 ms for PCMCIA to finish reset. */
732
733  /* Restore original COR configuration index */
734  pcmcia_write_config_byte(link, CISREG_COR,
735			  (COR_LEVEL_REQ | (OrigCorValue & COR_CONFIG_MASK)));
736  /* Xilinx is now completely reset along with the MACE chip. */
737  lp->tx_free_frames=AM2150_MAX_TX_FRAMES;
738
739#endif /* #if RESET_XILINX */
740
741  /* Xilinx is now completely reset along with the MACE chip. */
742  lp->tx_free_frames=AM2150_MAX_TX_FRAMES;
743
744  /* Reinitialize the MACE chip for operation. */
745  mace_init(lp, dev->base_addr, dev->dev_addr);
746  mace_write(lp, dev->base_addr, MACE_IMR, MACE_IMR_DEFAULT);
747
748  /* Restore the multicast list and enable TX and RX. */
749  restore_multicast_list(dev);
750} /* nmclan_reset */
751
752/* ----------------------------------------------------------------------------
753mace_config
754	[Someone tell me what this is supposed to do?  Is if_port a defined
755	standard?  If so, there should be defines to indicate 1=10Base-T,
756	2=10Base-2, etc. including limited automatic detection.]
757---------------------------------------------------------------------------- */
758static int mace_config(struct net_device *dev, struct ifmap *map)
759{
760  if ((map->port != (u_char)(-1)) && (map->port != dev->if_port)) {
761    if (map->port <= 2) {
762      dev->if_port = map->port;
763      netdev_info(dev, "switched to %s port\n", if_names[dev->if_port]);
764    } else
765      return -EINVAL;
766  }
767  return 0;
768} /* mace_config */
769
770/* ----------------------------------------------------------------------------
771mace_open
772	Open device driver.
773---------------------------------------------------------------------------- */
774static int mace_open(struct net_device *dev)
775{
776  unsigned int ioaddr = dev->base_addr;
777  mace_private *lp = netdev_priv(dev);
778  struct pcmcia_device *link = lp->p_dev;
779
780  if (!pcmcia_dev_present(link))
781    return -ENODEV;
782
783  link->open++;
784
785  MACEBANK(0);
786
787  netif_start_queue(dev);
788  nmclan_reset(dev);
789
790  return 0; /* Always succeed */
791} /* mace_open */
792
793/* ----------------------------------------------------------------------------
794mace_close
795	Closes device driver.
796---------------------------------------------------------------------------- */
797static int mace_close(struct net_device *dev)
798{
799  unsigned int ioaddr = dev->base_addr;
800  mace_private *lp = netdev_priv(dev);
801  struct pcmcia_device *link = lp->p_dev;
802
803  dev_dbg(&link->dev, "%s: shutting down ethercard.\n", dev->name);
804
805  /* Mask off all interrupts from the MACE chip. */
806  outb(0xFF, ioaddr + AM2150_MACE_BASE + MACE_IMR);
807
808  link->open--;
809  netif_stop_queue(dev);
810
811  return 0;
812} /* mace_close */
813
814static void netdev_get_drvinfo(struct net_device *dev,
815			       struct ethtool_drvinfo *info)
816{
817	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
818	snprintf(info->bus_info, sizeof(info->bus_info),
819		"PCMCIA 0x%lx", dev->base_addr);
820}
821
822static const struct ethtool_ops netdev_ethtool_ops = {
823	.get_drvinfo		= netdev_get_drvinfo,
824};
825
826/* ----------------------------------------------------------------------------
827mace_start_xmit
828	This routine begins the packet transmit function.  When completed,
829	it will generate a transmit interrupt.
830
831	According to /usr/src/linux/net/inet/dev.c, if _start_xmit
832	returns 0, the "packet is now solely the responsibility of the
833	driver."  If _start_xmit returns non-zero, the "transmission
834	failed, put skb back into a list."
835---------------------------------------------------------------------------- */
836
837static void mace_tx_timeout(struct net_device *dev, unsigned int txqueue)
838{
839  mace_private *lp = netdev_priv(dev);
840  struct pcmcia_device *link = lp->p_dev;
841
842  netdev_notice(dev, "transmit timed out -- ");
843#if RESET_ON_TIMEOUT
844  pr_cont("resetting card\n");
845  pcmcia_reset_card(link->socket);
846#else /* #if RESET_ON_TIMEOUT */
847  pr_cont("NOT resetting card\n");
848#endif /* #if RESET_ON_TIMEOUT */
849  netif_trans_update(dev); /* prevent tx timeout */
850  netif_wake_queue(dev);
851}
852
853static netdev_tx_t mace_start_xmit(struct sk_buff *skb,
854					 struct net_device *dev)
855{
856  mace_private *lp = netdev_priv(dev);
857  unsigned int ioaddr = dev->base_addr;
858
859  netif_stop_queue(dev);
860
861  pr_debug("%s: mace_start_xmit(length = %ld) called.\n",
862	dev->name, (long)skb->len);
863
864#if (!TX_INTERRUPTABLE)
865  /* Disable MACE TX interrupts. */
866  outb(MACE_IMR_DEFAULT | MACE_IR_XMTINT,
867    ioaddr + AM2150_MACE_BASE + MACE_IMR);
868  lp->tx_irq_disabled=1;
869#endif /* #if (!TX_INTERRUPTABLE) */
870
871  {
872    /* This block must not be interrupted by another transmit request!
873       mace_tx_timeout will take care of timer-based retransmissions from
874       the upper layers.  The interrupt handler is guaranteed never to
875       service a transmit interrupt while we are in here.
876    */
877
878    dev->stats.tx_bytes += skb->len;
879    lp->tx_free_frames--;
880
881    /* WARNING: Write the _exact_ number of bytes written in the header! */
882    /* Put out the word header [must be an outw()] . . . */
883    outw(skb->len, ioaddr + AM2150_XMT);
884    /* . . . and the packet [may be any combination of outw() and outb()] */
885    outsw(ioaddr + AM2150_XMT, skb->data, skb->len >> 1);
886    if (skb->len & 1) {
887      /* Odd byte transfer */
888      outb(skb->data[skb->len-1], ioaddr + AM2150_XMT);
889    }
890
891#if MULTI_TX
892    if (lp->tx_free_frames > 0)
893      netif_start_queue(dev);
894#endif /* #if MULTI_TX */
895  }
896
897#if (!TX_INTERRUPTABLE)
898  /* Re-enable MACE TX interrupts. */
899  lp->tx_irq_disabled=0;
900  outb(MACE_IMR_DEFAULT, ioaddr + AM2150_MACE_BASE + MACE_IMR);
901#endif /* #if (!TX_INTERRUPTABLE) */
902
903  dev_kfree_skb(skb);
904
905  return NETDEV_TX_OK;
906} /* mace_start_xmit */
907
908/* ----------------------------------------------------------------------------
909mace_interrupt
910	The interrupt handler.
911---------------------------------------------------------------------------- */
912static irqreturn_t mace_interrupt(int irq, void *dev_id)
913{
914  struct net_device *dev = (struct net_device *) dev_id;
915  mace_private *lp = netdev_priv(dev);
916  unsigned int ioaddr;
917  int status;
918  int IntrCnt = MACE_MAX_IR_ITERATIONS;
919
920  if (dev == NULL) {
921    pr_debug("mace_interrupt(): irq 0x%X for unknown device.\n",
922	  irq);
923    return IRQ_NONE;
924  }
925
926  ioaddr = dev->base_addr;
927
928  if (lp->tx_irq_disabled) {
929    const char *msg;
930    if (lp->tx_irq_disabled)
931      msg = "Interrupt with tx_irq_disabled";
932    else
933      msg = "Re-entering the interrupt handler";
934    netdev_notice(dev, "%s [isr=%02X, imr=%02X]\n",
935		  msg,
936		  inb(ioaddr + AM2150_MACE_BASE + MACE_IR),
937		  inb(ioaddr + AM2150_MACE_BASE + MACE_IMR));
938    /* WARNING: MACE_IR has been read! */
939    return IRQ_NONE;
940  }
941
942  if (!netif_device_present(dev)) {
943    netdev_dbg(dev, "interrupt from dead card\n");
944    return IRQ_NONE;
945  }
946
947  do {
948    /* WARNING: MACE_IR is a READ/CLEAR port! */
949    status = inb(ioaddr + AM2150_MACE_BASE + MACE_IR);
950    if (!(status & ~MACE_IMR_DEFAULT) && IntrCnt == MACE_MAX_IR_ITERATIONS)
951      return IRQ_NONE;
952
953    pr_debug("mace_interrupt: irq 0x%X status 0x%X.\n", irq, status);
954
955    if (status & MACE_IR_RCVINT) {
956      mace_rx(dev, MACE_MAX_RX_ITERATIONS);
957    }
958
959    if (status & MACE_IR_XMTINT) {
960      unsigned char fifofc;
961      unsigned char xmtrc;
962      unsigned char xmtfs;
963
964      fifofc = inb(ioaddr + AM2150_MACE_BASE + MACE_FIFOFC);
965      if ((fifofc & MACE_FIFOFC_XMTFC)==0) {
966	dev->stats.tx_errors++;
967	outb(0xFF, ioaddr + AM2150_XMT_SKIP);
968      }
969
970      /* Transmit Retry Count (XMTRC, reg 4) */
971      xmtrc = inb(ioaddr + AM2150_MACE_BASE + MACE_XMTRC);
972      if (xmtrc & MACE_XMTRC_EXDEF) lp->mace_stats.exdef++;
973      lp->mace_stats.xmtrc += (xmtrc & MACE_XMTRC_XMTRC);
974
975      if (
976        (xmtfs = inb(ioaddr + AM2150_MACE_BASE + MACE_XMTFS)) &
977        MACE_XMTFS_XMTSV /* Transmit Status Valid */
978      ) {
979	lp->mace_stats.xmtsv++;
980
981	if (xmtfs & ~MACE_XMTFS_XMTSV) {
982	  if (xmtfs & MACE_XMTFS_UFLO) {
983	    /* Underflow.  Indicates that the Transmit FIFO emptied before
984	       the end of frame was reached. */
985	    lp->mace_stats.uflo++;
986	  }
987	  if (xmtfs & MACE_XMTFS_LCOL) {
988	    /* Late Collision */
989	    lp->mace_stats.lcol++;
990	  }
991	  if (xmtfs & MACE_XMTFS_MORE) {
992	    /* MORE than one retry was needed */
993	    lp->mace_stats.more++;
994	  }
995	  if (xmtfs & MACE_XMTFS_ONE) {
996	    /* Exactly ONE retry occurred */
997	    lp->mace_stats.one++;
998	  }
999	  if (xmtfs & MACE_XMTFS_DEFER) {
1000	    /* Transmission was defered */
1001	    lp->mace_stats.defer++;
1002	  }
1003	  if (xmtfs & MACE_XMTFS_LCAR) {
1004	    /* Loss of carrier */
1005	    lp->mace_stats.lcar++;
1006	  }
1007	  if (xmtfs & MACE_XMTFS_RTRY) {
1008	    /* Retry error: transmit aborted after 16 attempts */
1009	    lp->mace_stats.rtry++;
1010	  }
1011        } /* if (xmtfs & ~MACE_XMTFS_XMTSV) */
1012
1013      } /* if (xmtfs & MACE_XMTFS_XMTSV) */
1014
1015      dev->stats.tx_packets++;
1016      lp->tx_free_frames++;
1017      netif_wake_queue(dev);
1018    } /* if (status & MACE_IR_XMTINT) */
1019
1020    if (status & ~MACE_IMR_DEFAULT & ~MACE_IR_RCVINT & ~MACE_IR_XMTINT) {
1021      if (status & MACE_IR_JAB) {
1022        /* Jabber Error.  Excessive transmit duration (20-150ms). */
1023        lp->mace_stats.jab++;
1024      }
1025      if (status & MACE_IR_BABL) {
1026        /* Babble Error.  >1518 bytes transmitted. */
1027        lp->mace_stats.babl++;
1028      }
1029      if (status & MACE_IR_CERR) {
1030	/* Collision Error.  CERR indicates the absence of the
1031	   Signal Quality Error Test message after a packet
1032	   transmission. */
1033        lp->mace_stats.cerr++;
1034      }
1035      if (status & MACE_IR_RCVCCO) {
1036        /* Receive Collision Count Overflow; */
1037        lp->mace_stats.rcvcco++;
1038      }
1039      if (status & MACE_IR_RNTPCO) {
1040        /* Runt Packet Count Overflow */
1041        lp->mace_stats.rntpco++;
1042      }
1043      if (status & MACE_IR_MPCO) {
1044        /* Missed Packet Count Overflow */
1045        lp->mace_stats.mpco++;
1046      }
1047    } /* if (status & ~MACE_IMR_DEFAULT & ~MACE_IR_RCVINT & ~MACE_IR_XMTINT) */
1048
1049  } while ((status & ~MACE_IMR_DEFAULT) && (--IntrCnt));
1050
1051  return IRQ_HANDLED;
1052} /* mace_interrupt */
1053
1054/* ----------------------------------------------------------------------------
1055mace_rx
1056	Receives packets.
1057---------------------------------------------------------------------------- */
1058static int mace_rx(struct net_device *dev, unsigned char RxCnt)
1059{
1060  mace_private *lp = netdev_priv(dev);
1061  unsigned int ioaddr = dev->base_addr;
1062  unsigned char rx_framecnt;
1063  unsigned short rx_status;
1064
1065  while (
1066    ((rx_framecnt = inb(ioaddr + AM2150_RCV_FRAME_COUNT)) > 0) &&
1067    (rx_framecnt <= 12) && /* rx_framecnt==0xFF if card is extracted. */
1068    (RxCnt--)
1069  ) {
1070    rx_status = inw(ioaddr + AM2150_RCV);
1071
1072    pr_debug("%s: in mace_rx(), framecnt 0x%X, rx_status"
1073	  " 0x%X.\n", dev->name, rx_framecnt, rx_status);
1074
1075    if (rx_status & MACE_RCVFS_RCVSTS) { /* Error, update stats. */
1076      dev->stats.rx_errors++;
1077      if (rx_status & MACE_RCVFS_OFLO) {
1078        lp->mace_stats.oflo++;
1079      }
1080      if (rx_status & MACE_RCVFS_CLSN) {
1081        lp->mace_stats.clsn++;
1082      }
1083      if (rx_status & MACE_RCVFS_FRAM) {
1084	lp->mace_stats.fram++;
1085      }
1086      if (rx_status & MACE_RCVFS_FCS) {
1087        lp->mace_stats.fcs++;
1088      }
1089    } else {
1090      short pkt_len = (rx_status & ~MACE_RCVFS_RCVSTS) - 4;
1091        /* Auto Strip is off, always subtract 4 */
1092      struct sk_buff *skb;
1093
1094      lp->mace_stats.rfs_rntpc += inb(ioaddr + AM2150_RCV);
1095        /* runt packet count */
1096      lp->mace_stats.rfs_rcvcc += inb(ioaddr + AM2150_RCV);
1097        /* rcv collision count */
1098
1099      pr_debug("    receiving packet size 0x%X rx_status"
1100	    " 0x%X.\n", pkt_len, rx_status);
1101
1102      skb = netdev_alloc_skb(dev, pkt_len + 2);
1103
1104      if (skb != NULL) {
1105	skb_reserve(skb, 2);
1106	insw(ioaddr + AM2150_RCV, skb_put(skb, pkt_len), pkt_len>>1);
1107	if (pkt_len & 1)
1108	    *(skb_tail_pointer(skb) - 1) = inb(ioaddr + AM2150_RCV);
1109	skb->protocol = eth_type_trans(skb, dev);
1110
1111	netif_rx(skb); /* Send the packet to the upper (protocol) layers. */
1112
1113	dev->stats.rx_packets++;
1114	dev->stats.rx_bytes += pkt_len;
1115	outb(0xFF, ioaddr + AM2150_RCV_NEXT); /* skip to next frame */
1116	continue;
1117      } else {
1118	pr_debug("%s: couldn't allocate a sk_buff of size"
1119	      " %d.\n", dev->name, pkt_len);
1120	dev->stats.rx_dropped++;
1121      }
1122    }
1123    outb(0xFF, ioaddr + AM2150_RCV_NEXT); /* skip to next frame */
1124  } /* while */
1125
1126  return 0;
1127} /* mace_rx */
1128
1129/* ----------------------------------------------------------------------------
1130pr_linux_stats
1131---------------------------------------------------------------------------- */
1132static void pr_linux_stats(struct net_device_stats *pstats)
1133{
1134  pr_debug("pr_linux_stats\n");
1135  pr_debug(" rx_packets=%-7ld        tx_packets=%ld\n",
1136	(long)pstats->rx_packets, (long)pstats->tx_packets);
1137  pr_debug(" rx_errors=%-7ld         tx_errors=%ld\n",
1138	(long)pstats->rx_errors, (long)pstats->tx_errors);
1139  pr_debug(" rx_dropped=%-7ld        tx_dropped=%ld\n",
1140	(long)pstats->rx_dropped, (long)pstats->tx_dropped);
1141  pr_debug(" multicast=%-7ld         collisions=%ld\n",
1142	(long)pstats->multicast, (long)pstats->collisions);
1143
1144  pr_debug(" rx_length_errors=%-7ld  rx_over_errors=%ld\n",
1145	(long)pstats->rx_length_errors, (long)pstats->rx_over_errors);
1146  pr_debug(" rx_crc_errors=%-7ld     rx_frame_errors=%ld\n",
1147	(long)pstats->rx_crc_errors, (long)pstats->rx_frame_errors);
1148  pr_debug(" rx_fifo_errors=%-7ld    rx_missed_errors=%ld\n",
1149	(long)pstats->rx_fifo_errors, (long)pstats->rx_missed_errors);
1150
1151  pr_debug(" tx_aborted_errors=%-7ld tx_carrier_errors=%ld\n",
1152	(long)pstats->tx_aborted_errors, (long)pstats->tx_carrier_errors);
1153  pr_debug(" tx_fifo_errors=%-7ld    tx_heartbeat_errors=%ld\n",
1154	(long)pstats->tx_fifo_errors, (long)pstats->tx_heartbeat_errors);
1155  pr_debug(" tx_window_errors=%ld\n",
1156	(long)pstats->tx_window_errors);
1157} /* pr_linux_stats */
1158
1159/* ----------------------------------------------------------------------------
1160pr_mace_stats
1161---------------------------------------------------------------------------- */
1162static void pr_mace_stats(mace_statistics *pstats)
1163{
1164  pr_debug("pr_mace_stats\n");
1165
1166  pr_debug(" xmtsv=%-7d             uflo=%d\n",
1167	pstats->xmtsv, pstats->uflo);
1168  pr_debug(" lcol=%-7d              more=%d\n",
1169	pstats->lcol, pstats->more);
1170  pr_debug(" one=%-7d               defer=%d\n",
1171	pstats->one, pstats->defer);
1172  pr_debug(" lcar=%-7d              rtry=%d\n",
1173	pstats->lcar, pstats->rtry);
1174
1175  /* MACE_XMTRC */
1176  pr_debug(" exdef=%-7d             xmtrc=%d\n",
1177	pstats->exdef, pstats->xmtrc);
1178
1179  /* RFS1--Receive Status (RCVSTS) */
1180  pr_debug(" oflo=%-7d              clsn=%d\n",
1181	pstats->oflo, pstats->clsn);
1182  pr_debug(" fram=%-7d              fcs=%d\n",
1183	pstats->fram, pstats->fcs);
1184
1185  /* RFS2--Runt Packet Count (RNTPC) */
1186  /* RFS3--Receive Collision Count (RCVCC) */
1187  pr_debug(" rfs_rntpc=%-7d         rfs_rcvcc=%d\n",
1188	pstats->rfs_rntpc, pstats->rfs_rcvcc);
1189
1190  /* MACE_IR */
1191  pr_debug(" jab=%-7d               babl=%d\n",
1192	pstats->jab, pstats->babl);
1193  pr_debug(" cerr=%-7d              rcvcco=%d\n",
1194	pstats->cerr, pstats->rcvcco);
1195  pr_debug(" rntpco=%-7d            mpco=%d\n",
1196	pstats->rntpco, pstats->mpco);
1197
1198  /* MACE_MPC */
1199  pr_debug(" mpc=%d\n", pstats->mpc);
1200
1201  /* MACE_RNTPC */
1202  pr_debug(" rntpc=%d\n", pstats->rntpc);
1203
1204  /* MACE_RCVCC */
1205  pr_debug(" rcvcc=%d\n", pstats->rcvcc);
1206
1207} /* pr_mace_stats */
1208
1209/* ----------------------------------------------------------------------------
1210update_stats
1211	Update statistics.  We change to register window 1, so this
1212	should be run single-threaded if the device is active. This is
1213	expected to be a rare operation, and it's simpler for the rest
1214	of the driver to assume that window 0 is always valid rather
1215	than use a special window-state variable.
1216
1217	oflo & uflo should _never_ occur since it would mean the Xilinx
1218	was not able to transfer data between the MACE FIFO and the
1219	card's SRAM fast enough.  If this happens, something is
1220	seriously wrong with the hardware.
1221---------------------------------------------------------------------------- */
1222static void update_stats(unsigned int ioaddr, struct net_device *dev)
1223{
1224  mace_private *lp = netdev_priv(dev);
1225
1226  lp->mace_stats.rcvcc += mace_read(lp, ioaddr, MACE_RCVCC);
1227  lp->mace_stats.rntpc += mace_read(lp, ioaddr, MACE_RNTPC);
1228  lp->mace_stats.mpc += mace_read(lp, ioaddr, MACE_MPC);
1229  /* At this point, mace_stats is fully updated for this call.
1230     We may now update the netdev stats. */
1231
1232  /* The MACE has no equivalent for netdev stats field which are commented
1233     out. */
1234
1235  /* dev->stats.multicast; */
1236  dev->stats.collisions =
1237    lp->mace_stats.rcvcco * 256 + lp->mace_stats.rcvcc;
1238    /* Collision: The MACE may retry sending a packet 15 times
1239       before giving up.  The retry count is in XMTRC.
1240       Does each retry constitute a collision?
1241       If so, why doesn't the RCVCC record these collisions? */
1242
1243  /* detailed rx_errors: */
1244  dev->stats.rx_length_errors =
1245    lp->mace_stats.rntpco * 256 + lp->mace_stats.rntpc;
1246  /* dev->stats.rx_over_errors */
1247  dev->stats.rx_crc_errors = lp->mace_stats.fcs;
1248  dev->stats.rx_frame_errors = lp->mace_stats.fram;
1249  dev->stats.rx_fifo_errors = lp->mace_stats.oflo;
1250  dev->stats.rx_missed_errors =
1251    lp->mace_stats.mpco * 256 + lp->mace_stats.mpc;
1252
1253  /* detailed tx_errors */
1254  dev->stats.tx_aborted_errors = lp->mace_stats.rtry;
1255  dev->stats.tx_carrier_errors = lp->mace_stats.lcar;
1256    /* LCAR usually results from bad cabling. */
1257  dev->stats.tx_fifo_errors = lp->mace_stats.uflo;
1258  dev->stats.tx_heartbeat_errors = lp->mace_stats.cerr;
1259  /* dev->stats.tx_window_errors; */
1260} /* update_stats */
1261
1262/* ----------------------------------------------------------------------------
1263mace_get_stats
1264	Gathers ethernet statistics from the MACE chip.
1265---------------------------------------------------------------------------- */
1266static struct net_device_stats *mace_get_stats(struct net_device *dev)
1267{
1268  mace_private *lp = netdev_priv(dev);
1269
1270  update_stats(dev->base_addr, dev);
1271
1272  pr_debug("%s: updating the statistics.\n", dev->name);
1273  pr_linux_stats(&dev->stats);
1274  pr_mace_stats(&lp->mace_stats);
1275
1276  return &dev->stats;
1277} /* net_device_stats */
1278
1279/* ----------------------------------------------------------------------------
1280updateCRC
1281	Modified from Am79C90 data sheet.
1282---------------------------------------------------------------------------- */
1283
1284#ifdef BROKEN_MULTICAST
1285
1286static void updateCRC(int *CRC, int bit)
1287{
1288  static const int poly[]={
1289    1,1,1,0, 1,1,0,1,
1290    1,0,1,1, 1,0,0,0,
1291    1,0,0,0, 0,0,1,1,
1292    0,0,1,0, 0,0,0,0
1293  }; /* CRC polynomial.  poly[n] = coefficient of the x**n term of the
1294	CRC generator polynomial. */
1295
1296  int j;
1297
1298  /* shift CRC and control bit (CRC[32]) */
1299  for (j = 32; j > 0; j--)
1300    CRC[j] = CRC[j-1];
1301  CRC[0] = 0;
1302
1303  /* If bit XOR(control bit) = 1, set CRC = CRC XOR polynomial. */
1304  if (bit ^ CRC[32])
1305    for (j = 0; j < 32; j++)
1306      CRC[j] ^= poly[j];
1307} /* updateCRC */
1308
1309/* ----------------------------------------------------------------------------
1310BuildLAF
1311	Build logical address filter.
1312	Modified from Am79C90 data sheet.
1313
1314Input
1315	ladrf: logical address filter (contents initialized to 0)
1316	adr: ethernet address
1317---------------------------------------------------------------------------- */
1318static void BuildLAF(int *ladrf, int *adr)
1319{
1320  int CRC[33]={1}; /* CRC register, 1 word/bit + extra control bit */
1321
1322  int i, byte; /* temporary array indices */
1323  int hashcode; /* the output object */
1324
1325  CRC[32]=0;
1326
1327  for (byte = 0; byte < 6; byte++)
1328    for (i = 0; i < 8; i++)
1329      updateCRC(CRC, (adr[byte] >> i) & 1);
1330
1331  hashcode = 0;
1332  for (i = 0; i < 6; i++)
1333    hashcode = (hashcode << 1) + CRC[i];
1334
1335  byte = hashcode >> 3;
1336  ladrf[byte] |= (1 << (hashcode & 7));
1337
1338#ifdef PCMCIA_DEBUG
1339  if (0)
1340    printk(KERN_DEBUG "    adr =%pM\n", adr);
1341  printk(KERN_DEBUG "    hashcode = %d(decimal), ladrf[0:63] =", hashcode);
1342  for (i = 0; i < 8; i++)
1343    pr_cont(" %02X", ladrf[i]);
1344  pr_cont("\n");
1345#endif
1346} /* BuildLAF */
1347
1348/* ----------------------------------------------------------------------------
1349restore_multicast_list
1350	Restores the multicast filter for MACE chip to the last
1351	set_multicast_list() call.
1352
1353Input
1354	multicast_num_addrs
1355	multicast_ladrf[]
1356---------------------------------------------------------------------------- */
1357static void restore_multicast_list(struct net_device *dev)
1358{
1359  mace_private *lp = netdev_priv(dev);
1360  int num_addrs = lp->multicast_num_addrs;
1361  int *ladrf = lp->multicast_ladrf;
1362  unsigned int ioaddr = dev->base_addr;
1363  int i;
1364
1365  pr_debug("%s: restoring Rx mode to %d addresses.\n",
1366	dev->name, num_addrs);
1367
1368  if (num_addrs > 0) {
1369
1370    pr_debug("Attempt to restore multicast list detected.\n");
1371
1372    mace_write(lp, ioaddr, MACE_IAC, MACE_IAC_ADDRCHG | MACE_IAC_LOGADDR);
1373    /* Poll ADDRCHG bit */
1374    while (mace_read(lp, ioaddr, MACE_IAC) & MACE_IAC_ADDRCHG)
1375      ;
1376    /* Set LADRF register */
1377    for (i = 0; i < MACE_LADRF_LEN; i++)
1378      mace_write(lp, ioaddr, MACE_LADRF, ladrf[i]);
1379
1380    mace_write(lp, ioaddr, MACE_UTR, MACE_UTR_RCVFCSE | MACE_UTR_LOOP_EXTERNAL);
1381    mace_write(lp, ioaddr, MACE_MACCC, MACE_MACCC_ENXMT | MACE_MACCC_ENRCV);
1382
1383  } else if (num_addrs < 0) {
1384
1385    /* Promiscuous mode: receive all packets */
1386    mace_write(lp, ioaddr, MACE_UTR, MACE_UTR_LOOP_EXTERNAL);
1387    mace_write(lp, ioaddr, MACE_MACCC,
1388      MACE_MACCC_PROM | MACE_MACCC_ENXMT | MACE_MACCC_ENRCV
1389    );
1390
1391  } else {
1392
1393    /* Normal mode */
1394    mace_write(lp, ioaddr, MACE_UTR, MACE_UTR_LOOP_EXTERNAL);
1395    mace_write(lp, ioaddr, MACE_MACCC, MACE_MACCC_ENXMT | MACE_MACCC_ENRCV);
1396
1397  }
1398} /* restore_multicast_list */
1399
1400/* ----------------------------------------------------------------------------
1401set_multicast_list
1402	Set or clear the multicast filter for this adaptor.
1403
1404Input
1405	num_addrs == -1	Promiscuous mode, receive all packets
1406	num_addrs == 0	Normal mode, clear multicast list
1407	num_addrs > 0	Multicast mode, receive normal and MC packets, and do
1408			best-effort filtering.
1409Output
1410	multicast_num_addrs
1411	multicast_ladrf[]
1412---------------------------------------------------------------------------- */
1413
1414static void set_multicast_list(struct net_device *dev)
1415{
1416  mace_private *lp = netdev_priv(dev);
1417  int adr[ETH_ALEN] = {0}; /* Ethernet address */
1418  struct netdev_hw_addr *ha;
1419
1420#ifdef PCMCIA_DEBUG
1421  {
1422    static int old;
1423    if (netdev_mc_count(dev) != old) {
1424      old = netdev_mc_count(dev);
1425      pr_debug("%s: setting Rx mode to %d addresses.\n",
1426	    dev->name, old);
1427    }
1428  }
1429#endif
1430
1431  /* Set multicast_num_addrs. */
1432  lp->multicast_num_addrs = netdev_mc_count(dev);
1433
1434  /* Set multicast_ladrf. */
1435  if (num_addrs > 0) {
1436    /* Calculate multicast logical address filter */
1437    memset(lp->multicast_ladrf, 0, MACE_LADRF_LEN);
1438    netdev_for_each_mc_addr(ha, dev) {
1439      memcpy(adr, ha->addr, ETH_ALEN);
1440      BuildLAF(lp->multicast_ladrf, adr);
1441    }
1442  }
1443
1444  restore_multicast_list(dev);
1445
1446} /* set_multicast_list */
1447
1448#endif /* BROKEN_MULTICAST */
1449
1450static void restore_multicast_list(struct net_device *dev)
1451{
1452  unsigned int ioaddr = dev->base_addr;
1453  mace_private *lp = netdev_priv(dev);
1454
1455  pr_debug("%s: restoring Rx mode to %d addresses.\n", dev->name,
1456	lp->multicast_num_addrs);
1457
1458  if (dev->flags & IFF_PROMISC) {
1459    /* Promiscuous mode: receive all packets */
1460    mace_write(lp,ioaddr, MACE_UTR, MACE_UTR_LOOP_EXTERNAL);
1461    mace_write(lp, ioaddr, MACE_MACCC,
1462      MACE_MACCC_PROM | MACE_MACCC_ENXMT | MACE_MACCC_ENRCV
1463    );
1464  } else {
1465    /* Normal mode */
1466    mace_write(lp, ioaddr, MACE_UTR, MACE_UTR_LOOP_EXTERNAL);
1467    mace_write(lp, ioaddr, MACE_MACCC, MACE_MACCC_ENXMT | MACE_MACCC_ENRCV);
1468  }
1469} /* restore_multicast_list */
1470
1471static void set_multicast_list(struct net_device *dev)
1472{
1473  mace_private *lp = netdev_priv(dev);
1474
1475#ifdef PCMCIA_DEBUG
1476  {
1477    static int old;
1478    if (netdev_mc_count(dev) != old) {
1479      old = netdev_mc_count(dev);
1480      pr_debug("%s: setting Rx mode to %d addresses.\n",
1481	    dev->name, old);
1482    }
1483  }
1484#endif
1485
1486  lp->multicast_num_addrs = netdev_mc_count(dev);
1487  restore_multicast_list(dev);
1488
1489} /* set_multicast_list */
1490
1491static const struct pcmcia_device_id nmclan_ids[] = {
1492	PCMCIA_DEVICE_PROD_ID12("New Media Corporation", "Ethernet", 0x085a850b, 0x00b2e941),
1493	PCMCIA_DEVICE_PROD_ID12("Portable Add-ons", "Ethernet+", 0xebf1d60, 0xad673aaf),
1494	PCMCIA_DEVICE_NULL,
1495};
1496MODULE_DEVICE_TABLE(pcmcia, nmclan_ids);
1497
1498static struct pcmcia_driver nmclan_cs_driver = {
1499	.owner		= THIS_MODULE,
1500	.name		= "nmclan_cs",
1501	.probe		= nmclan_probe,
1502	.remove		= nmclan_detach,
1503	.id_table       = nmclan_ids,
1504	.suspend	= nmclan_suspend,
1505	.resume		= nmclan_resume,
1506};
1507module_pcmcia_driver(nmclan_cs_driver);
1508