Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
axnet_cs.c
Go to the documentation of this file.
1 /*======================================================================
2 
3  A PCMCIA ethernet driver for Asix AX88190-based cards
4 
5  The Asix AX88190 is a NS8390-derived chipset with a few nasty
6  idiosyncracies that make it very inconvenient to support with a
7  standard 8390 driver. This driver is based on pcnet_cs, with the
8  tweaked 8390 code grafted on the end. Much of what I did was to
9  clean up and update a similar driver supplied by Asix, which was
10  adapted by William Lee, [email protected].
11 
12  Copyright (C) 2001 David A. Hinds -- [email protected]
13 
14  axnet_cs.c 1.28 2002/06/29 06:27:37
15 
16  The network driver code is based on Donald Becker's NE2000 code:
17 
18  Written 1992,1993 by Donald Becker.
19  Copyright 1993 United States Government as represented by the
20  Director, National Security Agency. This software may be used and
21  distributed according to the terms of the GNU General Public License,
22  incorporated herein by reference.
23  Donald Becker may be reached at [email protected]
24 
25 ======================================================================*/
26 
27 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
28 
29 #include <linux/kernel.h>
30 #include <linux/module.h>
31 #include <linux/init.h>
32 #include <linux/ptrace.h>
33 #include <linux/string.h>
34 #include <linux/timer.h>
35 #include <linux/delay.h>
36 #include <linux/spinlock.h>
37 #include <linux/netdevice.h>
38 #include <linux/etherdevice.h>
39 #include <linux/crc32.h>
40 #include <linux/mii.h>
41 #include "8390.h"
42 
43 #include <pcmcia/cistpl.h>
44 #include <pcmcia/ciscode.h>
45 #include <pcmcia/ds.h>
46 #include <pcmcia/cisreg.h>
47 
48 #include <asm/io.h>
49 #include <asm/byteorder.h>
50 #include <asm/uaccess.h>
51 
52 #define AXNET_CMD 0x00
53 #define AXNET_DATAPORT 0x10 /* NatSemi-defined port window offset. */
54 #define AXNET_RESET 0x1f /* Issue a read to reset, a write to clear. */
55 #define AXNET_MII_EEP 0x14 /* Offset of MII access port */
56 #define AXNET_TEST 0x15 /* Offset of TEST Register port */
57 #define AXNET_GPIO 0x17 /* Offset of General Purpose Register Port */
58 
59 #define AXNET_START_PG 0x40 /* First page of TX buffer */
60 #define AXNET_STOP_PG 0x80 /* Last page +1 of RX ring */
61 
62 #define AXNET_RDC_TIMEOUT 0x02 /* Max wait in jiffies for Tx RDC */
63 
64 #define IS_AX88190 0x0001
65 #define IS_AX88790 0x0002
66 
67 /*====================================================================*/
68 
69 /* Module parameters */
70 
71 MODULE_AUTHOR("David Hinds <[email protected]>");
72 MODULE_DESCRIPTION("Asix AX88190 PCMCIA ethernet driver");
73 MODULE_LICENSE("GPL");
74 
75 
76 /*====================================================================*/
77 
78 static int axnet_config(struct pcmcia_device *link);
79 static void axnet_release(struct pcmcia_device *link);
80 static int axnet_open(struct net_device *dev);
81 static int axnet_close(struct net_device *dev);
82 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
83 static netdev_tx_t axnet_start_xmit(struct sk_buff *skb,
84  struct net_device *dev);
85 static struct net_device_stats *get_stats(struct net_device *dev);
86 static void set_multicast_list(struct net_device *dev);
87 static void axnet_tx_timeout(struct net_device *dev);
88 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id);
89 static void ei_watchdog(u_long arg);
90 static void axnet_reset_8390(struct net_device *dev);
91 
92 static int mdio_read(unsigned int addr, int phy_id, int loc);
93 static void mdio_write(unsigned int addr, int phy_id, int loc, int value);
94 
95 static void get_8390_hdr(struct net_device *,
96  struct e8390_pkt_hdr *, int);
97 static void block_input(struct net_device *dev, int count,
98  struct sk_buff *skb, int ring_offset);
99 static void block_output(struct net_device *dev, int count,
100  const u_char *buf, const int start_page);
101 
102 static void axnet_detach(struct pcmcia_device *p_dev);
103 
104 static void AX88190_init(struct net_device *dev, int startp);
105 static int ax_open(struct net_device *dev);
106 static int ax_close(struct net_device *dev);
107 static irqreturn_t ax_interrupt(int irq, void *dev_id);
108 
109 /*====================================================================*/
110 
111 typedef struct axnet_dev_t {
112  struct pcmcia_device *p_dev;
118  int phy_id;
119  int flags;
121 } axnet_dev_t;
122 
123 static inline axnet_dev_t *PRIV(struct net_device *dev)
124 {
125  void *p = (char *)netdev_priv(dev) + sizeof(struct ei_device);
126  return p;
127 }
128 
129 static const struct net_device_ops axnet_netdev_ops = {
130  .ndo_open = axnet_open,
131  .ndo_stop = axnet_close,
132  .ndo_do_ioctl = axnet_ioctl,
133  .ndo_start_xmit = axnet_start_xmit,
134  .ndo_tx_timeout = axnet_tx_timeout,
135  .ndo_get_stats = get_stats,
136  .ndo_set_rx_mode = set_multicast_list,
137  .ndo_change_mtu = eth_change_mtu,
138  .ndo_set_mac_address = eth_mac_addr,
139  .ndo_validate_addr = eth_validate_addr,
140 };
141 
142 static int axnet_probe(struct pcmcia_device *link)
143 {
144  axnet_dev_t *info;
145  struct net_device *dev;
146  struct ei_device *ei_local;
147 
148  dev_dbg(&link->dev, "axnet_attach()\n");
149 
150  dev = alloc_etherdev(sizeof(struct ei_device) + sizeof(axnet_dev_t));
151  if (!dev)
152  return -ENOMEM;
153 
154  ei_local = netdev_priv(dev);
155  spin_lock_init(&ei_local->page_lock);
156 
157  info = PRIV(dev);
158  info->p_dev = link;
159  link->priv = dev;
160  link->config_flags |= CONF_ENABLE_IRQ;
161 
162  dev->netdev_ops = &axnet_netdev_ops;
163 
164  dev->watchdog_timeo = TX_TIMEOUT;
165 
166  return axnet_config(link);
167 } /* axnet_attach */
168 
169 static void axnet_detach(struct pcmcia_device *link)
170 {
171  struct net_device *dev = link->priv;
172 
173  dev_dbg(&link->dev, "axnet_detach(0x%p)\n", link);
174 
175  unregister_netdev(dev);
176 
177  axnet_release(link);
178 
179  free_netdev(dev);
180 } /* axnet_detach */
181 
182 /*======================================================================
183 
184  This probes for a card's hardware address by reading the PROM.
185 
186 ======================================================================*/
187 
188 static int get_prom(struct pcmcia_device *link)
189 {
190  struct net_device *dev = link->priv;
191  unsigned int ioaddr = dev->base_addr;
192  int i, j;
193 
194  /* This is based on drivers/net/ethernet/8390/ne.c */
195  struct {
197  } program_seq[] = {
198  {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
199  {0x01, EN0_DCFG}, /* Set word-wide access. */
200  {0x00, EN0_RCNTLO}, /* Clear the count regs. */
201  {0x00, EN0_RCNTHI},
202  {0x00, EN0_IMR}, /* Mask completion irq. */
203  {0xFF, EN0_ISR},
204  {E8390_RXOFF|0x40, EN0_RXCR}, /* 0x60 Set to monitor */
205  {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */
206  {0x10, EN0_RCNTLO},
207  {0x00, EN0_RCNTHI},
208  {0x00, EN0_RSARLO}, /* DMA starting at 0x0400. */
209  {0x04, EN0_RSARHI},
211  };
212 
213  /* Not much of a test, but the alternatives are messy */
214  if (link->config_base != 0x03c0)
215  return 0;
216 
217  axnet_reset_8390(dev);
218  mdelay(10);
219 
220  for (i = 0; i < ARRAY_SIZE(program_seq); i++)
221  outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
222 
223  for (i = 0; i < 6; i += 2) {
224  j = inw(ioaddr + AXNET_DATAPORT);
225  dev->dev_addr[i] = j & 0xff;
226  dev->dev_addr[i+1] = j >> 8;
227  }
228  return 1;
229 } /* get_prom */
230 
231 static int try_io_port(struct pcmcia_device *link)
232 {
233  int j, ret;
234  link->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
235  link->resource[1]->flags &= ~IO_DATA_PATH_WIDTH;
236  if (link->resource[0]->end == 32) {
237  link->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
238  /* for master/slave multifunction cards */
239  if (link->resource[1]->end > 0)
240  link->resource[1]->flags |= IO_DATA_PATH_WIDTH_8;
241  } else {
242  /* This should be two 16-port windows */
243  link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
244  link->resource[1]->flags |= IO_DATA_PATH_WIDTH_16;
245  }
246  if (link->resource[0]->start == 0) {
247  for (j = 0; j < 0x400; j += 0x20) {
248  link->resource[0]->start = j ^ 0x300;
249  link->resource[1]->start = (j ^ 0x300) + 0x10;
250  link->io_lines = 16;
251  ret = pcmcia_request_io(link);
252  if (ret == 0)
253  return ret;
254  }
255  return ret;
256  } else {
257  return pcmcia_request_io(link);
258  }
259 }
260 
261 static int axnet_configcheck(struct pcmcia_device *p_dev, void *priv_data)
262 {
263  if (p_dev->config_index == 0)
264  return -EINVAL;
265 
266  p_dev->config_index = 0x05;
267  if (p_dev->resource[0]->end + p_dev->resource[1]->end < 32)
268  return -ENODEV;
269 
270  return try_io_port(p_dev);
271 }
272 
273 static int axnet_config(struct pcmcia_device *link)
274 {
275  struct net_device *dev = link->priv;
276  axnet_dev_t *info = PRIV(dev);
277  int i, j, j2, ret;
278 
279  dev_dbg(&link->dev, "axnet_config(0x%p)\n", link);
280 
281  /* don't trust the CIS on this; Linksys got it wrong */
282  link->config_regs = 0x63;
283  link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO;
284  ret = pcmcia_loop_config(link, axnet_configcheck, NULL);
285  if (ret != 0)
286  goto failed;
287 
288  if (!link->irq)
289  goto failed;
290 
291  if (resource_size(link->resource[1]) == 8)
292  link->config_flags |= CONF_ENABLE_SPKR;
293 
294  ret = pcmcia_enable_device(link);
295  if (ret)
296  goto failed;
297 
298  dev->irq = link->irq;
299  dev->base_addr = link->resource[0]->start;
300 
301  if (!get_prom(link)) {
302  pr_notice("this is not an AX88190 card!\n");
303  pr_notice("use pcnet_cs instead.\n");
304  goto failed;
305  }
306 
307  ei_status.name = "AX88190";
308  ei_status.word16 = 1;
309  ei_status.tx_start_page = AXNET_START_PG;
310  ei_status.rx_start_page = AXNET_START_PG + TX_PAGES;
311  ei_status.stop_page = AXNET_STOP_PG;
312  ei_status.reset_8390 = axnet_reset_8390;
313  ei_status.get_8390_hdr = get_8390_hdr;
314  ei_status.block_input = block_input;
315  ei_status.block_output = block_output;
316 
317  if (inb(dev->base_addr + AXNET_TEST) != 0)
318  info->flags |= IS_AX88790;
319  else
320  info->flags |= IS_AX88190;
321 
322  if (info->flags & IS_AX88790)
323  outb(0x10, dev->base_addr + AXNET_GPIO); /* select Internal PHY */
324 
325  info->active_low = 0;
326 
327  for (i = 0; i < 32; i++) {
328  j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
329  j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
330  if (j == j2) continue;
331  if ((j != 0) && (j != 0xffff)) break;
332  }
333 
334  if (i == 32) {
335  /* Maybe PHY is in power down mode. (PPD_SET = 1)
336  Bit 2 of CCSR is active low. */
338  for (i = 0; i < 32; i++) {
339  j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
340  j2 = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 2);
341  if (j == j2) continue;
342  if ((j != 0) && (j != 0xffff)) {
343  info->active_low = 1;
344  break;
345  }
346  }
347  }
348 
349  info->phy_id = (i < 32) ? i : -1;
350  SET_NETDEV_DEV(dev, &link->dev);
351 
352  if (register_netdev(dev) != 0) {
353  pr_notice("register_netdev() failed\n");
354  goto failed;
355  }
356 
357  netdev_info(dev, "Asix AX88%d90: io %#3lx, irq %d, hw_addr %pM\n",
358  ((info->flags & IS_AX88790) ? 7 : 1),
359  dev->base_addr, dev->irq, dev->dev_addr);
360  if (info->phy_id != -1) {
361  netdev_dbg(dev, " MII transceiver at index %d, status %x\n",
362  info->phy_id, j);
363  } else {
364  netdev_notice(dev, " No MII transceivers found!\n");
365  }
366  return 0;
367 
368 failed:
369  axnet_release(link);
370  return -ENODEV;
371 } /* axnet_config */
372 
373 static void axnet_release(struct pcmcia_device *link)
374 {
375  pcmcia_disable_device(link);
376 }
377 
378 static int axnet_suspend(struct pcmcia_device *link)
379 {
380  struct net_device *dev = link->priv;
381 
382  if (link->open)
383  netif_device_detach(dev);
384 
385  return 0;
386 }
387 
388 static int axnet_resume(struct pcmcia_device *link)
389 {
390  struct net_device *dev = link->priv;
391  axnet_dev_t *info = PRIV(dev);
392 
393  if (link->open) {
394  if (info->active_low == 1)
396 
397  axnet_reset_8390(dev);
398  AX88190_init(dev, 1);
399  netif_device_attach(dev);
400  }
401 
402  return 0;
403 }
404 
405 
406 /*======================================================================
407 
408  MII interface support
409 
410 ======================================================================*/
411 
412 #define MDIO_SHIFT_CLK 0x01
413 #define MDIO_DATA_WRITE0 0x00
414 #define MDIO_DATA_WRITE1 0x08
415 #define MDIO_DATA_READ 0x04
416 #define MDIO_MASK 0x0f
417 #define MDIO_ENB_IN 0x02
418 
419 static void mdio_sync(unsigned int addr)
420 {
421  int bits;
422  for (bits = 0; bits < 32; bits++) {
423  outb_p(MDIO_DATA_WRITE1, addr);
425  }
426 }
427 
428 static int mdio_read(unsigned int addr, int phy_id, int loc)
429 {
430  u_int cmd = (0xf6<<10)|(phy_id<<5)|loc;
431  int i, retval = 0;
432 
433  mdio_sync(addr);
434  for (i = 14; i >= 0; i--) {
435  int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
436  outb_p(dat, addr);
437  outb_p(dat | MDIO_SHIFT_CLK, addr);
438  }
439  for (i = 19; i > 0; i--) {
440  outb_p(MDIO_ENB_IN, addr);
441  retval = (retval << 1) | ((inb_p(addr) & MDIO_DATA_READ) != 0);
443  }
444  return (retval>>1) & 0xffff;
445 }
446 
447 static void mdio_write(unsigned int addr, int phy_id, int loc, int value)
448 {
449  u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value;
450  int i;
451 
452  mdio_sync(addr);
453  for (i = 31; i >= 0; i--) {
454  int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
455  outb_p(dat, addr);
456  outb_p(dat | MDIO_SHIFT_CLK, addr);
457  }
458  for (i = 1; i >= 0; i--) {
459  outb_p(MDIO_ENB_IN, addr);
461  }
462 }
463 
464 /*====================================================================*/
465 
466 static int axnet_open(struct net_device *dev)
467 {
468  int ret;
469  axnet_dev_t *info = PRIV(dev);
470  struct pcmcia_device *link = info->p_dev;
471  unsigned int nic_base = dev->base_addr;
472 
473  dev_dbg(&link->dev, "axnet_open('%s')\n", dev->name);
474 
475  if (!pcmcia_dev_present(link))
476  return -ENODEV;
477 
478  outb_p(0xFF, nic_base + EN0_ISR); /* Clear bogus intr. */
479  ret = request_irq(dev->irq, ei_irq_wrapper, IRQF_SHARED, "axnet_cs", dev);
480  if (ret)
481  return ret;
482 
483  link->open++;
484 
485  info->link_status = 0x00;
486  init_timer(&info->watchdog);
487  info->watchdog.function = ei_watchdog;
488  info->watchdog.data = (u_long)dev;
489  info->watchdog.expires = jiffies + HZ;
490  add_timer(&info->watchdog);
491 
492  return ax_open(dev);
493 } /* axnet_open */
494 
495 /*====================================================================*/
496 
497 static int axnet_close(struct net_device *dev)
498 {
499  axnet_dev_t *info = PRIV(dev);
500  struct pcmcia_device *link = info->p_dev;
501 
502  dev_dbg(&link->dev, "axnet_close('%s')\n", dev->name);
503 
504  ax_close(dev);
505  free_irq(dev->irq, dev);
506 
507  link->open--;
508  netif_stop_queue(dev);
509  del_timer_sync(&info->watchdog);
510 
511  return 0;
512 } /* axnet_close */
513 
514 /*======================================================================
515 
516  Hard reset the card. This used to pause for the same period that
517  a 8390 reset command required, but that shouldn't be necessary.
518 
519 ======================================================================*/
520 
521 static void axnet_reset_8390(struct net_device *dev)
522 {
523  unsigned int nic_base = dev->base_addr;
524  int i;
525 
526  ei_status.txing = ei_status.dmaing = 0;
527 
529 
530  outb(inb(nic_base + AXNET_RESET), nic_base + AXNET_RESET);
531 
532  for (i = 0; i < 100; i++) {
533  if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0)
534  break;
535  udelay(100);
536  }
537  outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */
538 
539  if (i == 100)
540  netdev_err(dev, "axnet_reset_8390() did not complete\n");
541 
542 } /* axnet_reset_8390 */
543 
544 /*====================================================================*/
545 
546 static irqreturn_t ei_irq_wrapper(int irq, void *dev_id)
547 {
548  struct net_device *dev = dev_id;
549  PRIV(dev)->stale = 0;
550  return ax_interrupt(irq, dev_id);
551 }
552 
553 static void ei_watchdog(u_long arg)
554 {
555  struct net_device *dev = (struct net_device *)(arg);
556  axnet_dev_t *info = PRIV(dev);
557  unsigned int nic_base = dev->base_addr;
558  unsigned int mii_addr = nic_base + AXNET_MII_EEP;
559  u_short link;
560 
561  if (!netif_device_present(dev)) goto reschedule;
562 
563  /* Check for pending interrupt with expired latency timer: with
564  this, we can limp along even if the interrupt is blocked */
565  if (info->stale++ && (inb_p(nic_base + EN0_ISR) & ENISR_ALL)) {
566  if (!info->fast_poll)
567  netdev_info(dev, "interrupt(s) dropped!\n");
568  ei_irq_wrapper(dev->irq, dev);
569  info->fast_poll = HZ;
570  }
571  if (info->fast_poll) {
572  info->fast_poll--;
573  info->watchdog.expires = jiffies + 1;
574  add_timer(&info->watchdog);
575  return;
576  }
577 
578  if (info->phy_id < 0)
579  goto reschedule;
580  link = mdio_read(mii_addr, info->phy_id, 1);
581  if (!link || (link == 0xffff)) {
582  netdev_info(dev, "MII is missing!\n");
583  info->phy_id = -1;
584  goto reschedule;
585  }
586 
587  link &= 0x0004;
588  if (link != info->link_status) {
589  u_short p = mdio_read(mii_addr, info->phy_id, 5);
590  netdev_info(dev, "%s link beat\n", link ? "found" : "lost");
591  if (link) {
592  info->duplex_flag = (p & 0x0140) ? 0x80 : 0x00;
593  if (p)
594  netdev_info(dev, "autonegotiation complete: %dbaseT-%cD selected\n",
595  (p & 0x0180) ? 100 : 10, (p & 0x0140) ? 'F' : 'H');
596  else
597  netdev_info(dev, "link partner did not autonegotiate\n");
598  AX88190_init(dev, 1);
599  }
600  info->link_status = link;
601  }
602 
603 reschedule:
604  info->watchdog.expires = jiffies + HZ;
605  add_timer(&info->watchdog);
606 }
607 
608 /*====================================================================*/
609 
610 static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
611 {
612  axnet_dev_t *info = PRIV(dev);
613  struct mii_ioctl_data *data = if_mii(rq);
614  unsigned int mii_addr = dev->base_addr + AXNET_MII_EEP;
615  switch (cmd) {
616  case SIOCGMIIPHY:
617  data->phy_id = info->phy_id;
618  case SIOCGMIIREG: /* Read MII PHY register. */
619  data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f);
620  return 0;
621  case SIOCSMIIREG: /* Write MII PHY register. */
622  mdio_write(mii_addr, data->phy_id, data->reg_num & 0x1f, data->val_in);
623  return 0;
624  }
625  return -EOPNOTSUPP;
626 }
627 
628 /*====================================================================*/
629 
630 static void get_8390_hdr(struct net_device *dev,
631  struct e8390_pkt_hdr *hdr,
632  int ring_page)
633 {
634  unsigned int nic_base = dev->base_addr;
635 
636  outb_p(0, nic_base + EN0_RSARLO); /* On page boundary */
637  outb_p(ring_page, nic_base + EN0_RSARHI);
639 
640  insw(nic_base + AXNET_DATAPORT, hdr,
641  sizeof(struct e8390_pkt_hdr)>>1);
642  /* Fix for big endian systems */
643  hdr->count = le16_to_cpu(hdr->count);
644 
645 }
646 
647 /*====================================================================*/
648 
649 static void block_input(struct net_device *dev, int count,
650  struct sk_buff *skb, int ring_offset)
651 {
652  unsigned int nic_base = dev->base_addr;
653  int xfer_count = count;
654  char *buf = skb->data;
655 
656  if ((ei_debug > 4) && (count != 4))
657  pr_debug("%s: [bi=%d]\n", dev->name, count+4);
658  outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
659  outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
661 
662  insw(nic_base + AXNET_DATAPORT,buf,count>>1);
663  if (count & 0x01)
664  buf[count-1] = inb(nic_base + AXNET_DATAPORT), xfer_count++;
665 
666 }
667 
668 /*====================================================================*/
669 
670 static void block_output(struct net_device *dev, int count,
671  const u_char *buf, const int start_page)
672 {
673  unsigned int nic_base = dev->base_addr;
674 
675  pr_debug("%s: [bo=%d]\n", dev->name, count);
676 
677  /* Round the count up for word writes. Do we need to do this?
678  What effect will an odd byte count have on the 8390?
679  I should check someday. */
680  if (count & 0x01)
681  count++;
682 
683  outb_p(0x00, nic_base + EN0_RSARLO);
684  outb_p(start_page, nic_base + EN0_RSARHI);
686  outsw(nic_base + AXNET_DATAPORT, buf, count>>1);
687 }
688 
689 static const struct pcmcia_device_id axnet_ids[] = {
690  PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x016c, 0x0081),
691  PCMCIA_DEVICE_MANF_CARD(0x018a, 0x0301),
692  PCMCIA_DEVICE_MANF_CARD(0x01bf, 0x2328),
693  PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0301),
694  PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0303),
695  PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0309),
696  PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1106),
697  PCMCIA_DEVICE_MANF_CARD(0x8a01, 0xc1ab),
698  PCMCIA_DEVICE_MANF_CARD(0x021b, 0x0202),
699  PCMCIA_DEVICE_MANF_CARD(0xffff, 0x1090),
700  PCMCIA_DEVICE_PROD_ID12("AmbiCom,Inc.", "Fast Ethernet PC Card(AMB8110)", 0x49b020a7, 0x119cc9fc),
701  PCMCIA_DEVICE_PROD_ID124("Fast Ethernet", "16-bit PC Card", "AX88190", 0xb4be14e3, 0x9a12eb6a, 0xab9be5ef),
702  PCMCIA_DEVICE_PROD_ID12("ASIX", "AX88190", 0x0959823b, 0xab9be5ef),
703  PCMCIA_DEVICE_PROD_ID12("Billionton", "LNA-100B", 0x552ab682, 0xbc3b87e1),
704  PCMCIA_DEVICE_PROD_ID12("CHEETAH ETHERCARD", "EN2228", 0x00fa7bc8, 0x00e990cc),
705  PCMCIA_DEVICE_PROD_ID12("CNet", "CNF301", 0xbc477dde, 0x78c5f40b),
706  PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEther PCC-TXD", 0x5261440f, 0x436768c5),
707  PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEtherII PCC-TXD", 0x5261440f, 0x730df72e),
708  PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEther PCC-TXM", 0x5261440f, 0x3abbd061),
709  PCMCIA_DEVICE_PROD_ID12("Dynalink", "L100C16", 0x55632fd5, 0x66bc2a90),
710  PCMCIA_DEVICE_PROD_ID12("IO DATA", "ETXPCM", 0x547e66dc, 0x233adac2),
711  PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8),
712  PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609),
713  PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875),
714  PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04),
715  PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116),
716  PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058),
717  PCMCIA_DEVICE_PROD_ID14("Network Everywhere", "AX88190", 0x820a67b6, 0xab9be5ef),
718  PCMCIA_DEVICE_NULL,
719 };
720 MODULE_DEVICE_TABLE(pcmcia, axnet_ids);
721 
722 static struct pcmcia_driver axnet_cs_driver = {
723  .owner = THIS_MODULE,
724  .name = "axnet_cs",
725  .probe = axnet_probe,
726  .remove = axnet_detach,
727  .id_table = axnet_ids,
728  .suspend = axnet_suspend,
729  .resume = axnet_resume,
730 };
731 
732 static int __init init_axnet_cs(void)
733 {
734  return pcmcia_register_driver(&axnet_cs_driver);
735 }
736 
737 static void __exit exit_axnet_cs(void)
738 {
739  pcmcia_unregister_driver(&axnet_cs_driver);
740 }
741 
742 module_init(init_axnet_cs);
743 module_exit(exit_axnet_cs);
744 
745 /*====================================================================*/
746 
747 /* 8390.c: A general NS8390 ethernet driver core for linux. */
748 /*
749  Written 1992-94 by Donald Becker.
750 
751  Copyright 1993 United States Government as represented by the
752  Director, National Security Agency.
753 
754  This software may be used and distributed according to the terms
755  of the GNU General Public License, incorporated herein by reference.
756 
757  The author may be reached as [email protected], or C/O
758  Scyld Computing Corporation
759  410 Severn Ave., Suite 210
760  Annapolis MD 21403
761 
762  This is the chip-specific code for many 8390-based ethernet adaptors.
763  This is not a complete driver, it must be combined with board-specific
764  code such as ne.c, wd.c, 3c503.c, etc.
765 
766  Seeing how at least eight drivers use this code, (not counting the
767  PCMCIA ones either) it is easy to break some card by what seems like
768  a simple innocent change. Please contact me or Donald if you think
769  you have found something that needs changing. -- PG
770 
771  Changelog:
772 
773  Paul Gortmaker : remove set_bit lock, other cleanups.
774  Paul Gortmaker : add ei_get_8390_hdr() so we can pass skb's to
775  ei_block_input() for eth_io_copy_and_sum().
776  Paul Gortmaker : exchange static int ei_pingpong for a #define,
777  also add better Tx error handling.
778  Paul Gortmaker : rewrite Rx overrun handling as per NS specs.
779  Alexey Kuznetsov : use the 8390's six bit hash multicast filter.
780  Paul Gortmaker : tweak ANK's above multicast changes a bit.
781  Paul Gortmaker : update packet statistics for v2.1.x
782  Alan Cox : support arbitrary stupid port mappings on the
783  68K Macintosh. Support >16bit I/O spaces
784  Paul Gortmaker : add kmod support for auto-loading of the 8390
785  module by all drivers that require it.
786  Alan Cox : Spinlocking work, added 'BUG_83C690'
787  Paul Gortmaker : Separate out Tx timeout code from Tx path.
788 
789  Sources:
790  The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
791 
792  */
793 
794 #include <linux/bitops.h>
795 #include <asm/irq.h>
796 #include <linux/fcntl.h>
797 #include <linux/in.h>
798 #include <linux/interrupt.h>
799 
800 #define BUG_83C690
801 
802 /* These are the operational function interfaces to board-specific
803  routines.
804  void reset_8390(struct net_device *dev)
805  Resets the board associated with DEV, including a hardware reset of
806  the 8390. This is only called when there is a transmit timeout, and
807  it is always followed by 8390_init().
808  void block_output(struct net_device *dev, int count, const unsigned char *buf,
809  int start_page)
810  Write the COUNT bytes of BUF to the packet buffer at START_PAGE. The
811  "page" value uses the 8390's 256-byte pages.
812  void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
813  Read the 4 byte, page aligned 8390 header. *If* there is a
814  subsequent read, it will be of the rest of the packet.
815  void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
816  Read COUNT bytes from the packet buffer into the skb data area. Start
817  reading from RING_OFFSET, the address as the 8390 sees it. This will always
818  follow the read of the 8390 header.
819 */
820 #define ei_reset_8390 (ei_local->reset_8390)
821 #define ei_block_output (ei_local->block_output)
822 #define ei_block_input (ei_local->block_input)
823 #define ei_get_8390_hdr (ei_local->get_8390_hdr)
824 
825 /* use 0 for production, 1 for verification, >2 for debug */
826 #ifndef ei_debug
827 int ei_debug = 1;
828 #endif
829 
830 /* Index to functions. */
831 static void ei_tx_intr(struct net_device *dev);
832 static void ei_tx_err(struct net_device *dev);
833 static void ei_receive(struct net_device *dev);
834 static void ei_rx_overrun(struct net_device *dev);
835 
836 /* Routines generic to NS8390-based boards. */
837 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
838  int start_page);
839 static void do_set_multicast_list(struct net_device *dev);
840 
841 /*
842  * SMP and the 8390 setup.
843  *
844  * The 8390 isn't exactly designed to be multithreaded on RX/TX. There is
845  * a page register that controls bank and packet buffer access. We guard
846  * this with ei_local->page_lock. Nobody should assume or set the page other
847  * than zero when the lock is not held. Lock holders must restore page 0
848  * before unlocking. Even pure readers must take the lock to protect in
849  * page 0.
850  *
851  * To make life difficult the chip can also be very slow. We therefore can't
852  * just use spinlocks. For the longer lockups we disable the irq the device
853  * sits on and hold the lock. We must hold the lock because there is a dual
854  * processor case other than interrupts (get stats/set multicast list in
855  * parallel with each other and transmit).
856  *
857  * Note: in theory we can just disable the irq on the card _but_ there is
858  * a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
859  * enter lock, take the queued irq. So we waddle instead of flying.
860  *
861  * Finally by special arrangement for the purpose of being generally
862  * annoying the transmit function is called bh atomic. That places
863  * restrictions on the user context callers as disable_irq won't save
864  * them.
865  */
866 
875 static int ax_open(struct net_device *dev)
876 {
877  unsigned long flags;
878  struct ei_device *ei_local = netdev_priv(dev);
879 
880  /*
881  * Grab the page lock so we own the register set, then call
882  * the init function.
883  */
884 
885  spin_lock_irqsave(&ei_local->page_lock, flags);
886  AX88190_init(dev, 1);
887  /* Set the flag before we drop the lock, That way the IRQ arrives
888  after its set and we get no silly warnings */
889  netif_start_queue(dev);
890  spin_unlock_irqrestore(&ei_local->page_lock, flags);
891  ei_local->irqlock = 0;
892  return 0;
893 }
894 
895 #define dev_lock(dev) (((struct ei_device *)netdev_priv(dev))->page_lock)
896 
903 static int ax_close(struct net_device *dev)
904 {
905  unsigned long flags;
906 
907  /*
908  * Hold the page lock during close
909  */
910 
911  spin_lock_irqsave(&dev_lock(dev), flags);
912  AX88190_init(dev, 0);
913  spin_unlock_irqrestore(&dev_lock(dev), flags);
914  netif_stop_queue(dev);
915  return 0;
916 }
917 
926 static void axnet_tx_timeout(struct net_device *dev)
927 {
928  long e8390_base = dev->base_addr;
929  struct ei_device *ei_local = netdev_priv(dev);
930  int txsr, isr, tickssofar = jiffies - dev_trans_start(dev);
931  unsigned long flags;
932 
933  dev->stats.tx_errors++;
934 
935  spin_lock_irqsave(&ei_local->page_lock, flags);
936  txsr = inb(e8390_base+EN0_TSR);
937  isr = inb(e8390_base+EN0_ISR);
938  spin_unlock_irqrestore(&ei_local->page_lock, flags);
939 
941  "Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
942  (txsr & ENTSR_ABT) ? "excess collisions." :
943  (isr) ? "lost interrupt?" : "cable problem?",
944  txsr, isr, tickssofar);
945 
946  if (!isr && !dev->stats.tx_packets)
947  {
948  /* The 8390 probably hasn't gotten on the cable yet. */
949  ei_local->interface_num ^= 1; /* Try a different xcvr. */
950  }
951 
952  /* Ugly but a reset can be slow, yet must be protected */
953 
954  spin_lock_irqsave(&ei_local->page_lock, flags);
955 
956  /* Try to restart the card. Perhaps the user has fixed something. */
957  ei_reset_8390(dev);
958  AX88190_init(dev, 1);
959 
960  spin_unlock_irqrestore(&ei_local->page_lock, flags);
961  netif_wake_queue(dev);
962 }
963 
972 static netdev_tx_t axnet_start_xmit(struct sk_buff *skb,
973  struct net_device *dev)
974 {
975  long e8390_base = dev->base_addr;
976  struct ei_device *ei_local = netdev_priv(dev);
977  int length, send_length, output_page;
978  unsigned long flags;
979  u8 packet[ETH_ZLEN];
980 
981  netif_stop_queue(dev);
982 
983  length = skb->len;
984 
985  /* Mask interrupts from the ethercard.
986  SMP: We have to grab the lock here otherwise the IRQ handler
987  on another CPU can flip window and race the IRQ mask set. We end
988  up trashing the mcast filter not disabling irqs if we don't lock */
989 
990  spin_lock_irqsave(&ei_local->page_lock, flags);
991  outb_p(0x00, e8390_base + EN0_IMR);
992 
993  /*
994  * Slow phase with lock held.
995  */
996 
997  ei_local->irqlock = 1;
998 
999  send_length = max(length, ETH_ZLEN);
1000 
1001  /*
1002  * We have two Tx slots available for use. Find the first free
1003  * slot, and then perform some sanity checks. With two Tx bufs,
1004  * you get very close to transmitting back-to-back packets. With
1005  * only one Tx buf, the transmitter sits idle while you reload the
1006  * card, leaving a substantial gap between each transmitted packet.
1007  */
1008 
1009  if (ei_local->tx1 == 0)
1010  {
1011  output_page = ei_local->tx_start_page;
1012  ei_local->tx1 = send_length;
1013  if (ei_debug && ei_local->tx2 > 0)
1015  "idle transmitter tx2=%d, lasttx=%d, txing=%d\n",
1016  ei_local->tx2, ei_local->lasttx,
1017  ei_local->txing);
1018  }
1019  else if (ei_local->tx2 == 0)
1020  {
1021  output_page = ei_local->tx_start_page + TX_PAGES/2;
1022  ei_local->tx2 = send_length;
1023  if (ei_debug && ei_local->tx1 > 0)
1025  "idle transmitter, tx1=%d, lasttx=%d, txing=%d\n",
1026  ei_local->tx1, ei_local->lasttx,
1027  ei_local->txing);
1028  }
1029  else
1030  { /* We should never get here. */
1031  if (ei_debug)
1033  "No Tx buffers free! tx1=%d tx2=%d last=%d\n",
1034  ei_local->tx1, ei_local->tx2,
1035  ei_local->lasttx);
1036  ei_local->irqlock = 0;
1037  netif_stop_queue(dev);
1038  outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1039  spin_unlock_irqrestore(&ei_local->page_lock, flags);
1040  dev->stats.tx_errors++;
1041  return NETDEV_TX_BUSY;
1042  }
1043 
1044  /*
1045  * Okay, now upload the packet and trigger a send if the transmitter
1046  * isn't already sending. If it is busy, the interrupt handler will
1047  * trigger the send later, upon receiving a Tx done interrupt.
1048  */
1049 
1050  if (length == skb->len)
1051  ei_block_output(dev, length, skb->data, output_page);
1052  else {
1053  memset(packet, 0, ETH_ZLEN);
1054  skb_copy_from_linear_data(skb, packet, skb->len);
1055  ei_block_output(dev, length, packet, output_page);
1056  }
1057 
1058  if (! ei_local->txing)
1059  {
1060  ei_local->txing = 1;
1061  NS8390_trigger_send(dev, send_length, output_page);
1062  dev->trans_start = jiffies;
1063  if (output_page == ei_local->tx_start_page)
1064  {
1065  ei_local->tx1 = -1;
1066  ei_local->lasttx = -1;
1067  }
1068  else
1069  {
1070  ei_local->tx2 = -1;
1071  ei_local->lasttx = -2;
1072  }
1073  }
1074  else ei_local->txqueue++;
1075 
1076  if (ei_local->tx1 && ei_local->tx2)
1077  netif_stop_queue(dev);
1078  else
1079  netif_start_queue(dev);
1080 
1081  /* Turn 8390 interrupts back on. */
1082  ei_local->irqlock = 0;
1083  outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1084 
1085  spin_unlock_irqrestore(&ei_local->page_lock, flags);
1086 
1087  dev_kfree_skb (skb);
1088  dev->stats.tx_bytes += send_length;
1089 
1090  return NETDEV_TX_OK;
1091 }
1092 
1105 static irqreturn_t ax_interrupt(int irq, void *dev_id)
1106 {
1107  struct net_device *dev = dev_id;
1108  long e8390_base;
1109  int interrupts, nr_serviced = 0, i;
1110  struct ei_device *ei_local;
1111  int handled = 0;
1112  unsigned long flags;
1113 
1114  e8390_base = dev->base_addr;
1115  ei_local = netdev_priv(dev);
1116 
1117  /*
1118  * Protect the irq test too.
1119  */
1120 
1121  spin_lock_irqsave(&ei_local->page_lock, flags);
1122 
1123  if (ei_local->irqlock) {
1124 #if 1 /* This might just be an interrupt for a PCI device sharing this line */
1125  const char *msg;
1126  /* The "irqlock" check is only for testing. */
1127  if (ei_local->irqlock)
1128  msg = "Interrupted while interrupts are masked!";
1129  else
1130  msg = "Reentering the interrupt handler!";
1131  netdev_info(dev, "%s, isr=%#2x imr=%#2x\n",
1132  msg,
1133  inb_p(e8390_base + EN0_ISR),
1134  inb_p(e8390_base + EN0_IMR));
1135 #endif
1136  spin_unlock_irqrestore(&ei_local->page_lock, flags);
1137  return IRQ_NONE;
1138  }
1139 
1140  if (ei_debug > 3)
1141  netdev_printk(KERN_DEBUG, dev, "interrupt(isr=%#2.2x)\n",
1142  inb_p(e8390_base + EN0_ISR));
1143 
1144  outb_p(0x00, e8390_base + EN0_ISR);
1145  ei_local->irqlock = 1;
1146 
1147  /* !!Assumption!! -- we stay in page 0. Don't break this. */
1148  while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0 &&
1149  ++nr_serviced < MAX_SERVICE)
1150  {
1151  if (!netif_running(dev) || (interrupts == 0xff)) {
1152  if (ei_debug > 1)
1153  netdev_warn(dev,
1154  "interrupt from stopped card\n");
1155  outb_p(interrupts, e8390_base + EN0_ISR);
1156  interrupts = 0;
1157  break;
1158  }
1159  handled = 1;
1160 
1161  /* AX88190 bug fix. */
1162  outb_p(interrupts, e8390_base + EN0_ISR);
1163  for (i = 0; i < 10; i++) {
1164  if (!(inb(e8390_base + EN0_ISR) & interrupts))
1165  break;
1166  outb_p(0, e8390_base + EN0_ISR);
1167  outb_p(interrupts, e8390_base + EN0_ISR);
1168  }
1169  if (interrupts & ENISR_OVER)
1170  ei_rx_overrun(dev);
1171  else if (interrupts & (ENISR_RX+ENISR_RX_ERR))
1172  {
1173  /* Got a good (?) packet. */
1174  ei_receive(dev);
1175  }
1176  /* Push the next to-transmit packet through. */
1177  if (interrupts & ENISR_TX)
1178  ei_tx_intr(dev);
1179  else if (interrupts & ENISR_TX_ERR)
1180  ei_tx_err(dev);
1181 
1182  if (interrupts & ENISR_COUNTERS)
1183  {
1184  dev->stats.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
1185  dev->stats.rx_crc_errors += inb_p(e8390_base + EN0_COUNTER1);
1186  dev->stats.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
1187  }
1188  }
1189 
1190  if (interrupts && ei_debug > 3)
1191  {
1192  handled = 1;
1193  if (nr_serviced >= MAX_SERVICE)
1194  {
1195  /* 0xFF is valid for a card removal */
1196  if(interrupts!=0xFF)
1197  netdev_warn(dev, "Too much work at interrupt, status %#2.2x\n",
1198  interrupts);
1199  outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
1200  } else {
1201  netdev_warn(dev, "unknown interrupt %#2x\n",
1202  interrupts);
1203  outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
1204  }
1205  }
1206 
1207  /* Turn 8390 interrupts back on. */
1208  ei_local->irqlock = 0;
1209  outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1210 
1211  spin_unlock_irqrestore(&ei_local->page_lock, flags);
1212  return IRQ_RETVAL(handled);
1213 }
1214 
1229 static void ei_tx_err(struct net_device *dev)
1230 {
1231  long e8390_base = dev->base_addr;
1232  unsigned char txsr = inb_p(e8390_base+EN0_TSR);
1233  unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
1234 
1235 #ifdef VERBOSE_ERROR_DUMP
1237  "transmitter error (%#2x):", txsr);
1238  if (txsr & ENTSR_ABT)
1239  pr_cont(" excess-collisions");
1240  if (txsr & ENTSR_ND)
1241  pr_cont(" non-deferral");
1242  if (txsr & ENTSR_CRS)
1243  pr_cont(" lost-carrier");
1244  if (txsr & ENTSR_FU)
1245  pr_cont(" FIFO-underrun");
1246  if (txsr & ENTSR_CDH)
1247  pr_cont(" lost-heartbeat");
1248  pr_cont("\n");
1249 #endif
1250 
1251  if (tx_was_aborted)
1252  ei_tx_intr(dev);
1253  else
1254  {
1255  dev->stats.tx_errors++;
1256  if (txsr & ENTSR_CRS) dev->stats.tx_carrier_errors++;
1257  if (txsr & ENTSR_CDH) dev->stats.tx_heartbeat_errors++;
1258  if (txsr & ENTSR_OWC) dev->stats.tx_window_errors++;
1259  }
1260 }
1261 
1270 static void ei_tx_intr(struct net_device *dev)
1271 {
1272  long e8390_base = dev->base_addr;
1273  struct ei_device *ei_local = netdev_priv(dev);
1274  int status = inb(e8390_base + EN0_TSR);
1275 
1276  /*
1277  * There are two Tx buffers, see which one finished, and trigger
1278  * the send of another one if it exists.
1279  */
1280  ei_local->txqueue--;
1281 
1282  if (ei_local->tx1 < 0)
1283  {
1284  if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
1285  netdev_err(dev, "%s: bogus last_tx_buffer %d, tx1=%d\n",
1286  ei_local->name, ei_local->lasttx,
1287  ei_local->tx1);
1288  ei_local->tx1 = 0;
1289  if (ei_local->tx2 > 0)
1290  {
1291  ei_local->txing = 1;
1292  NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
1293  dev->trans_start = jiffies;
1294  ei_local->tx2 = -1,
1295  ei_local->lasttx = 2;
1296  }
1297  else ei_local->lasttx = 20, ei_local->txing = 0;
1298  }
1299  else if (ei_local->tx2 < 0)
1300  {
1301  if (ei_local->lasttx != 2 && ei_local->lasttx != -2)
1302  netdev_info(dev, "%s: bogus last_tx_buffer %d, tx2=%d\n",
1303  ei_local->name, ei_local->lasttx,
1304  ei_local->tx2);
1305  ei_local->tx2 = 0;
1306  if (ei_local->tx1 > 0)
1307  {
1308  ei_local->txing = 1;
1309  NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
1310  dev->trans_start = jiffies;
1311  ei_local->tx1 = -1;
1312  ei_local->lasttx = 1;
1313  }
1314  else
1315  ei_local->lasttx = 10, ei_local->txing = 0;
1316  }
1317 // else
1318 // netdev_warn(dev, "unexpected TX-done interrupt, lasttx=%d\n",
1319 // ei_local->lasttx);
1320 
1321  /* Minimize Tx latency: update the statistics after we restart TXing. */
1322  if (status & ENTSR_COL)
1323  dev->stats.collisions++;
1324  if (status & ENTSR_PTX)
1325  dev->stats.tx_packets++;
1326  else
1327  {
1328  dev->stats.tx_errors++;
1329  if (status & ENTSR_ABT)
1330  {
1331  dev->stats.tx_aborted_errors++;
1332  dev->stats.collisions += 16;
1333  }
1334  if (status & ENTSR_CRS)
1335  dev->stats.tx_carrier_errors++;
1336  if (status & ENTSR_FU)
1337  dev->stats.tx_fifo_errors++;
1338  if (status & ENTSR_CDH)
1339  dev->stats.tx_heartbeat_errors++;
1340  if (status & ENTSR_OWC)
1341  dev->stats.tx_window_errors++;
1342  }
1343  netif_wake_queue(dev);
1344 }
1345 
1354 static void ei_receive(struct net_device *dev)
1355 {
1356  long e8390_base = dev->base_addr;
1357  struct ei_device *ei_local = netdev_priv(dev);
1358  unsigned char rxing_page, this_frame, next_frame;
1359  unsigned short current_offset;
1360  int rx_pkt_count = 0;
1361  struct e8390_pkt_hdr rx_frame;
1362 
1363  while (++rx_pkt_count < 10)
1364  {
1365  int pkt_len, pkt_stat;
1366 
1367  /* Get the rx page (incoming packet pointer). */
1368  rxing_page = inb_p(e8390_base + EN1_CURPAG -1);
1369 
1370  /* Remove one frame from the ring. Boundary is always a page behind. */
1371  this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
1372  if (this_frame >= ei_local->stop_page)
1373  this_frame = ei_local->rx_start_page;
1374 
1375  /* Someday we'll omit the previous, iff we never get this message.
1376  (There is at least one clone claimed to have a problem.)
1377 
1378  Keep quiet if it looks like a card removal. One problem here
1379  is that some clones crash in roughly the same way.
1380  */
1381  if (ei_debug > 0 && this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
1382  netdev_err(dev, "mismatched read page pointers %2x vs %2x\n",
1383  this_frame, ei_local->current_page);
1384 
1385  if (this_frame == rxing_page) /* Read all the frames? */
1386  break; /* Done for now */
1387 
1388  current_offset = this_frame << 8;
1389  ei_get_8390_hdr(dev, &rx_frame, this_frame);
1390 
1391  pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
1392  pkt_stat = rx_frame.status;
1393 
1394  next_frame = this_frame + 1 + ((pkt_len+4)>>8);
1395 
1396  if (pkt_len < 60 || pkt_len > 1518)
1397  {
1398  if (ei_debug)
1400  "bogus packet size: %d, status=%#2x nxpg=%#2x\n",
1401  rx_frame.count, rx_frame.status,
1402  rx_frame.next);
1403  dev->stats.rx_errors++;
1404  dev->stats.rx_length_errors++;
1405  }
1406  else if ((pkt_stat & 0x0F) == ENRSR_RXOK)
1407  {
1408  struct sk_buff *skb;
1409 
1410  skb = netdev_alloc_skb(dev, pkt_len + 2);
1411  if (skb == NULL)
1412  {
1413  if (ei_debug > 1)
1415  "Couldn't allocate a sk_buff of size %d\n",
1416  pkt_len);
1417  dev->stats.rx_dropped++;
1418  break;
1419  }
1420  else
1421  {
1422  skb_reserve(skb,2); /* IP headers on 16 byte boundaries */
1423  skb_put(skb, pkt_len); /* Make room */
1424  ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
1425  skb->protocol=eth_type_trans(skb,dev);
1426  netif_rx(skb);
1427  dev->stats.rx_packets++;
1428  dev->stats.rx_bytes += pkt_len;
1429  if (pkt_stat & ENRSR_PHY)
1430  dev->stats.multicast++;
1431  }
1432  }
1433  else
1434  {
1435  if (ei_debug)
1437  "bogus packet: status=%#2x nxpg=%#2x size=%d\n",
1438  rx_frame.status, rx_frame.next,
1439  rx_frame.count);
1440  dev->stats.rx_errors++;
1441  /* NB: The NIC counts CRC, frame and missed errors. */
1442  if (pkt_stat & ENRSR_FO)
1443  dev->stats.rx_fifo_errors++;
1444  }
1445  next_frame = rx_frame.next;
1446 
1447  /* This _should_ never happen: it's here for avoiding bad clones. */
1448  if (next_frame >= ei_local->stop_page) {
1449  netdev_info(dev, "next frame inconsistency, %#2x\n",
1450  next_frame);
1451  next_frame = ei_local->rx_start_page;
1452  }
1453  ei_local->current_page = next_frame;
1454  outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
1455  }
1456 }
1457 
1471 static void ei_rx_overrun(struct net_device *dev)
1472 {
1473  axnet_dev_t *info = PRIV(dev);
1474  long e8390_base = dev->base_addr;
1475  unsigned char was_txing, must_resend = 0;
1476 
1477  /*
1478  * Record whether a Tx was in progress and then issue the
1479  * stop command.
1480  */
1481  was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
1483 
1484  if (ei_debug > 1)
1485  netdev_printk(KERN_DEBUG, dev, "Receiver overrun\n");
1486  dev->stats.rx_over_errors++;
1487 
1488  /*
1489  * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
1490  * We wait at least 2ms.
1491  */
1492 
1493  mdelay(2);
1494 
1495  /*
1496  * Reset RBCR[01] back to zero as per magic incantation.
1497  */
1498  outb_p(0x00, e8390_base+EN0_RCNTLO);
1499  outb_p(0x00, e8390_base+EN0_RCNTHI);
1500 
1501  /*
1502  * See if any Tx was interrupted or not. According to NS, this
1503  * step is vital, and skipping it will cause no end of havoc.
1504  */
1505 
1506  if (was_txing)
1507  {
1508  unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
1509  if (!tx_completed)
1510  must_resend = 1;
1511  }
1512 
1513  /*
1514  * Have to enter loopback mode and then restart the NIC before
1515  * you are allowed to slurp packets up off the ring.
1516  */
1517  outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
1518  outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
1519 
1520  /*
1521  * Clear the Rx ring of all the debris, and ack the interrupt.
1522  */
1523  ei_receive(dev);
1524 
1525  /*
1526  * Leave loopback mode, and resend any packet that got stopped.
1527  */
1528  outb_p(E8390_TXCONFIG | info->duplex_flag, e8390_base + EN0_TXCR);
1529  if (must_resend)
1531 }
1532 
1533 /*
1534  * Collect the stats. This is called unlocked and from several contexts.
1535  */
1536 
1537 static struct net_device_stats *get_stats(struct net_device *dev)
1538 {
1539  long ioaddr = dev->base_addr;
1540  struct ei_device *ei_local = netdev_priv(dev);
1541  unsigned long flags;
1542 
1543  /* If the card is stopped, just return the present stats. */
1544  if (!netif_running(dev))
1545  return &dev->stats;
1546 
1547  spin_lock_irqsave(&ei_local->page_lock,flags);
1548  /* Read the counter registers, assuming we are in page 0. */
1549  dev->stats.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
1550  dev->stats.rx_crc_errors += inb_p(ioaddr + EN0_COUNTER1);
1551  dev->stats.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
1552  spin_unlock_irqrestore(&ei_local->page_lock, flags);
1553 
1554  return &dev->stats;
1555 }
1556 
1557 /*
1558  * Form the 64 bit 8390 multicast table from the linked list of addresses
1559  * associated with this dev structure.
1560  */
1561 
1562 static inline void make_mc_bits(u8 *bits, struct net_device *dev)
1563 {
1564  struct netdev_hw_addr *ha;
1565  u32 crc;
1566 
1567  netdev_for_each_mc_addr(ha, dev) {
1568  crc = ether_crc(ETH_ALEN, ha->addr);
1569  /*
1570  * The 8390 uses the 6 most significant bits of the
1571  * CRC to index the multicast table.
1572  */
1573  bits[crc>>29] |= (1<<((crc>>26)&7));
1574  }
1575 }
1576 
1585 static void do_set_multicast_list(struct net_device *dev)
1586 {
1587  long e8390_base = dev->base_addr;
1588  int i;
1589  struct ei_device *ei_local = netdev_priv(dev);
1590 
1591  if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) {
1592  memset(ei_local->mcfilter, 0, 8);
1593  if (!netdev_mc_empty(dev))
1594  make_mc_bits(ei_local->mcfilter, dev);
1595  } else {
1596  /* set to accept-all */
1597  memset(ei_local->mcfilter, 0xFF, 8);
1598  }
1599 
1600  outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
1601  for(i = 0; i < 8; i++)
1602  {
1603  outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
1604  }
1605  outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
1606 
1607  if(dev->flags&IFF_PROMISC)
1608  outb_p(E8390_RXCONFIG | 0x58, e8390_base + EN0_RXCR);
1609  else if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev))
1610  outb_p(E8390_RXCONFIG | 0x48, e8390_base + EN0_RXCR);
1611  else
1612  outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
1613 
1615 }
1616 
1617 /*
1618  * Called without lock held. This is invoked from user context and may
1619  * be parallel to just about everything else. Its also fairly quick and
1620  * not called too often. Must protect against both bh and irq users
1621  */
1622 
1623 static void set_multicast_list(struct net_device *dev)
1624 {
1625  unsigned long flags;
1626 
1627  spin_lock_irqsave(&dev_lock(dev), flags);
1628  do_set_multicast_list(dev);
1629  spin_unlock_irqrestore(&dev_lock(dev), flags);
1630 }
1631 
1632 /* This page of functions should be 8390 generic */
1633 /* Follow National Semi's recommendations for initializing the "NIC". */
1634 
1643 static void AX88190_init(struct net_device *dev, int startp)
1644 {
1645  axnet_dev_t *info = PRIV(dev);
1646  long e8390_base = dev->base_addr;
1647  struct ei_device *ei_local = netdev_priv(dev);
1648  int i;
1649  int endcfg = ei_local->word16 ? (0x48 | ENDCFG_WTS) : 0x48;
1650 
1651  if(sizeof(struct e8390_pkt_hdr)!=4)
1652  panic("8390.c: header struct mispacked\n");
1653  /* Follow National Semi's recommendations for initing the DP83902. */
1654  outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1655  outb_p(endcfg, e8390_base + EN0_DCFG); /* 0x48 or 0x49 */
1656  /* Clear the remote byte count registers. */
1657  outb_p(0x00, e8390_base + EN0_RCNTLO);
1658  outb_p(0x00, e8390_base + EN0_RCNTHI);
1659  /* Set to monitor and loopback mode -- this is vital!. */
1660  outb_p(E8390_RXOFF|0x40, e8390_base + EN0_RXCR); /* 0x60 */
1661  outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1662  /* Set the transmit page and receive ring. */
1663  outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1664  ei_local->tx1 = ei_local->tx2 = 0;
1665  outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1666  outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY); /* 3c503 says 0x3f,NS0x26*/
1667  ei_local->current_page = ei_local->rx_start_page; /* assert boundary+1 */
1668  outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1669  /* Clear the pending interrupts and mask. */
1670  outb_p(0xFF, e8390_base + EN0_ISR);
1671  outb_p(0x00, e8390_base + EN0_IMR);
1672 
1673  /* Copy the station address into the DS8390 registers. */
1674 
1675  outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1676  for(i = 0; i < 6; i++)
1677  {
1678  outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1679  if(inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1680  netdev_err(dev, "Hw. address read/write mismap %d\n", i);
1681  }
1682 
1683  outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1685 
1686  netif_start_queue(dev);
1687  ei_local->tx1 = ei_local->tx2 = 0;
1688  ei_local->txing = 0;
1689 
1690  if (info->flags & IS_AX88790) /* select Internal PHY */
1691  outb(0x10, e8390_base + AXNET_GPIO);
1692 
1693  if (startp)
1694  {
1695  outb_p(0xff, e8390_base + EN0_ISR);
1696  outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1699  e8390_base + EN0_TXCR); /* xmit on. */
1700  /* 3c503 TechMan says rxconfig only after the NIC is started. */
1701  outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); /* rx on, */
1702  do_set_multicast_list(dev); /* (re)load the mcast table */
1703  }
1704 }
1705 
1706 /* Trigger a transmit start, assuming the length is valid.
1707  Always called with the page lock held */
1708 
1709 static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1710  int start_page)
1711 {
1712  long e8390_base = dev->base_addr;
1713  struct ei_device *ei_local __attribute((unused)) = netdev_priv(dev);
1714 
1715  if (inb_p(e8390_base) & E8390_TRANS)
1716  {
1717  netdev_warn(dev, "trigger_send() called with the transmitter busy\n");
1718  return;
1719  }
1720  outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1721  outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1722  outb_p(start_page, e8390_base + EN0_TPSR);
1723  outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1724 }