Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
at1700.c
Go to the documentation of this file.
1 /* at1700.c: A network device driver for the Allied Telesis AT1700.
2 
3  Written 1993-98 by Donald Becker.
4 
5  Copyright 1993 United States Government as represented by the
6  Director, National Security Agency.
7 
8  This software may be used and distributed according to the terms
9  of the GNU General Public License, incorporated herein by reference.
10 
11  The author may be reached as [email protected], or C/O
12  Scyld Computing Corporation
13  410 Severn Ave., Suite 210
14  Annapolis MD 21403
15 
16  This is a device driver for the Allied Telesis AT1700, and
17  Fujitsu FMV-181/182/181A/182A/183/184/183A/184A, which are
18  straight-forward Fujitsu MB86965 implementations.
19 
20  Modification for Fujitsu FMV-18X cards is done by Yutaka Tamiya
22 
23  Sources:
24  The Fujitsu MB86965 datasheet.
25 
26  After the initial version of this driver was written Gerry Sawkins of
27  ATI provided their EEPROM configuration code header file.
28  Thanks to NIIBE Yutaka <[email protected]> for bug fixes.
29 
30  MCA bus (AT1720) support (now deleted) by Rene Schmit <[email protected]>
31 
32  Bugs:
33  The MB86965 has a design flaw that makes all probes unreliable. Not
34  only is it difficult to detect, it also moves around in I/O space in
35  response to inb()s from other device probes!
36 */
37 
38 #include <linux/errno.h>
39 #include <linux/netdevice.h>
40 #include <linux/etherdevice.h>
41 #include <linux/module.h>
42 #include <linux/kernel.h>
43 #include <linux/types.h>
44 #include <linux/fcntl.h>
45 #include <linux/interrupt.h>
46 #include <linux/ioport.h>
47 #include <linux/in.h>
48 #include <linux/skbuff.h>
49 #include <linux/string.h>
50 #include <linux/init.h>
51 #include <linux/crc32.h>
52 #include <linux/bitops.h>
53 
54 #include <asm/io.h>
55 #include <asm/dma.h>
56 
57 static char version[] __initdata =
58  "at1700.c:v1.16 9/11/06 Donald Becker ([email protected])\n";
59 
60 #define DRV_NAME "at1700"
61 
62 /* Tunable parameters. */
63 
64 /* When to switch from the 64-entry multicast filter to Rx-all-multicast. */
65 #define MC_FILTERBREAK 64
66 
67 /* These unusual address orders are used to verify the CONFIG register. */
68 
69 static int fmv18x_probe_list[] __initdata = {
70  0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x300, 0x340, 0
71 };
72 
73 /*
74  * ISA
75  */
76 
77 static unsigned at1700_probe_list[] __initdata = {
78  0x260, 0x280, 0x2a0, 0x240, 0x340, 0x320, 0x380, 0x300, 0
79 };
80 
81 /* use 0 for production, 1 for verification, >2 for debug */
82 #ifndef NET_DEBUG
83 #define NET_DEBUG 1
84 #endif
85 static unsigned int net_debug = NET_DEBUG;
86 
87 typedef unsigned char uchar;
88 
89 /* Information that need to be kept for each board. */
90 struct net_local {
92  unsigned char mc_filter[8];
93  uint jumpered:1; /* Set iff the board has jumper config. */
94  uint tx_started:1; /* Packets are on the Tx queue. */
95  uint tx_queue_ready:1; /* Tx queue is ready to be sent. */
96  uint rx_started:1; /* Packets are Rxing. */
97  uchar tx_queue; /* Number of packet on the Tx queue. */
98  ushort tx_queue_len; /* Current length of the Tx queue. */
99 };
100 
101 
102 /* Offsets from the base address. */
103 #define STATUS 0
104 #define TX_STATUS 0
105 #define RX_STATUS 1
106 #define TX_INTR 2 /* Bit-mapped interrupt enable registers. */
107 #define RX_INTR 3
108 #define TX_MODE 4
109 #define RX_MODE 5
110 #define CONFIG_0 6 /* Misc. configuration settings. */
111 #define CONFIG_1 7
112 /* Run-time register bank 2 definitions. */
113 #define DATAPORT 8 /* Word-wide DMA or programmed-I/O dataport. */
114 #define TX_START 10
115 #define COL16CNTL 11 /* Control Reg for 16 collisions */
116 #define MODE13 13
117 #define RX_CTRL 14
118 /* Configuration registers only on the '865A/B chips. */
119 #define EEPROM_Ctrl 16
120 #define EEPROM_Data 17
121 #define CARDSTATUS 16 /* FMV-18x Card Status */
122 #define CARDSTATUS1 17 /* FMV-18x Card Status */
123 #define IOCONFIG 18 /* Either read the jumper, or move the I/O. */
124 #define IOCONFIG1 19
125 #define SAPROM 20 /* The station address PROM, if no EEPROM. */
126 #define MODE24 24
127 #define RESET 31 /* Write to reset some parts of the chip. */
128 #define AT1700_IO_EXTENT 32
129 #define PORT_OFFSET(o) (o)
130 
131 
132 #define TX_TIMEOUT (HZ/10)
133 
134 
135 /* Index to functions, as function prototypes. */
136 
137 static int at1700_probe1(struct net_device *dev, int ioaddr);
138 static int read_eeprom(long ioaddr, int location);
139 static int net_open(struct net_device *dev);
140 static netdev_tx_t net_send_packet(struct sk_buff *skb,
141  struct net_device *dev);
142 static irqreturn_t net_interrupt(int irq, void *dev_id);
143 static void net_rx(struct net_device *dev);
144 static int net_close(struct net_device *dev);
145 static void set_rx_mode(struct net_device *dev);
146 static void net_tx_timeout (struct net_device *dev);
147 
148 
149 /* Check for a network adaptor of this type, and return '0' iff one exists.
150  If dev->base_addr == 0, probe all likely locations.
151  If dev->base_addr == 1, always return failure.
152  If dev->base_addr == 2, allocate space for the device and return success
153  (detachable devices only).
154  */
155 
156 static int io = 0x260;
157 
158 static int irq;
159 
160 static void cleanup_card(struct net_device *dev)
161 {
162  free_irq(dev->irq, NULL);
164 }
165 
167 {
168  struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
169  unsigned *port;
170  int err = 0;
171 
172  if (!dev)
173  return ERR_PTR(-ENODEV);
174 
175  if (unit >= 0) {
176  sprintf(dev->name, "eth%d", unit);
178  io = dev->base_addr;
179  irq = dev->irq;
180  } else {
181  dev->base_addr = io;
182  dev->irq = irq;
183  }
184 
185  if (io > 0x1ff) { /* Check a single specified location. */
186  err = at1700_probe1(dev, io);
187  } else if (io != 0) { /* Don't probe at all. */
188  err = -ENXIO;
189  } else {
190  for (port = at1700_probe_list; *port; port++) {
191  if (at1700_probe1(dev, *port) == 0)
192  break;
193  dev->irq = irq;
194  }
195  if (!*port)
196  err = -ENODEV;
197  }
198  if (err)
199  goto out;
200  err = register_netdev(dev);
201  if (err)
202  goto out1;
203  return dev;
204 out1:
205  cleanup_card(dev);
206 out:
207  free_netdev(dev);
208  return ERR_PTR(err);
209 }
210 
211 static const struct net_device_ops at1700_netdev_ops = {
212  .ndo_open = net_open,
213  .ndo_stop = net_close,
214  .ndo_start_xmit = net_send_packet,
215  .ndo_set_rx_mode = set_rx_mode,
216  .ndo_tx_timeout = net_tx_timeout,
217  .ndo_change_mtu = eth_change_mtu,
218  .ndo_set_mac_address = eth_mac_addr,
219  .ndo_validate_addr = eth_validate_addr,
220 };
221 
222 /* The Fujitsu datasheet suggests that the NIC be probed for by checking its
223  "signature", the default bit pattern after a reset. This *doesn't* work --
224  there is no way to reset the bus interface without a complete power-cycle!
225 
226  It turns out that ATI came to the same conclusion I did: the only thing
227  that can be done is checking a few bits and then diving right into an
228  EEPROM read. */
229 
230 static int __init at1700_probe1(struct net_device *dev, int ioaddr)
231 {
232  static const char fmv_irqmap[4] = {3, 7, 10, 15};
233  static const char fmv_irqmap_pnp[8] = {3, 4, 5, 7, 9, 10, 11, 15};
234  static const char at1700_irqmap[8] = {3, 4, 5, 9, 10, 11, 14, 15};
235  unsigned int i, irq, is_fmv18x = 0, is_at1700 = 0;
236  int ret = -ENODEV;
237  struct net_local *lp = netdev_priv(dev);
238 
240  return -EBUSY;
241 
242  /* Resetting the chip doesn't reset the ISA interface, so don't bother.
243  That means we have to be careful with the register values we probe
244  for.
245  */
246 #ifdef notdef
247  printk("at1700 probe at %#x, eeprom is %4.4x %4.4x %4.4x ctrl %4.4x.\n",
248  ioaddr, read_eeprom(ioaddr, 4), read_eeprom(ioaddr, 5),
249  read_eeprom(ioaddr, 6), inw(ioaddr + EEPROM_Ctrl));
250 #endif
251  /* We must check for the EEPROM-config boards first, else accessing
252  IOCONFIG0 will move the board! */
253  if (at1700_probe_list[inb(ioaddr + IOCONFIG1) & 0x07] == ioaddr &&
254  read_eeprom(ioaddr, 4) == 0x0000 &&
255  (read_eeprom(ioaddr, 5) & 0xff00) == 0xF400)
256  is_at1700 = 1;
257  else if (inb(ioaddr + SAPROM ) == 0x00 &&
258  inb(ioaddr + SAPROM + 1) == 0x00 &&
259  inb(ioaddr + SAPROM + 2) == 0x0e)
260  is_fmv18x = 1;
261  else {
262  goto err_out;
263  }
264 
265  /* Reset the internal state machines. */
266  outb(0, ioaddr + RESET);
267 
268  if (is_at1700) {
269  irq = at1700_irqmap[(read_eeprom(ioaddr, 12)&0x04)
270  | (read_eeprom(ioaddr, 0)>>14)];
271  } else {
272  /* Check PnP mode for FMV-183/184/183A/184A. */
273  /* This PnP routine is very poor. IO and IRQ should be known. */
274  if (inb(ioaddr + CARDSTATUS1) & 0x20) {
275  irq = dev->irq;
276  for (i = 0; i < 8; i++) {
277  if (irq == fmv_irqmap_pnp[i])
278  break;
279  }
280  if (i == 8) {
281  goto err_out;
282  }
283  } else {
284  if (fmv18x_probe_list[inb(ioaddr + IOCONFIG) & 0x07] != ioaddr)
285  goto err_out;
286  irq = fmv_irqmap[(inb(ioaddr + IOCONFIG)>>6) & 0x03];
287  }
288  }
289 
290  printk("%s: %s found at %#3x, IRQ %d, address ", dev->name,
291  is_at1700 ? "AT1700" : "FMV-18X", ioaddr, irq);
292 
293  dev->base_addr = ioaddr;
294  dev->irq = irq;
295 
296  if (is_at1700) {
297  for(i = 0; i < 3; i++) {
298  unsigned short eeprom_val = read_eeprom(ioaddr, 4+i);
299  ((unsigned short *)dev->dev_addr)[i] = ntohs(eeprom_val);
300  }
301  } else {
302  for(i = 0; i < 6; i++) {
303  unsigned char val = inb(ioaddr + SAPROM + i);
304  dev->dev_addr[i] = val;
305  }
306  }
307  printk("%pM", dev->dev_addr);
308 
309  /* The EEPROM word 12 bit 0x0400 means use regular 100 ohm 10baseT signals,
310  rather than 150 ohm shielded twisted pair compensation.
311  0x0000 == auto-sense the interface
312  0x0800 == use TP interface
313  0x1800 == use coax interface
314  */
315  {
316  const char *porttype[] = {"auto-sense", "10baseT", "auto-sense", "10base2"};
317  if (is_at1700) {
318  ushort setup_value = read_eeprom(ioaddr, 12);
319  dev->if_port = setup_value >> 8;
320  } else {
321  ushort setup_value = inb(ioaddr + CARDSTATUS);
322  switch (setup_value & 0x07) {
323  case 0x01: /* 10base5 */
324  case 0x02: /* 10base2 */
325  dev->if_port = 0x18; break;
326  case 0x04: /* 10baseT */
327  dev->if_port = 0x08; break;
328  default: /* auto-sense */
329  dev->if_port = 0x00; break;
330  }
331  }
332  printk(" %s interface.\n", porttype[(dev->if_port>>3) & 3]);
333  }
334 
335  /* Set the configuration register 0 to 32K 100ns. byte-wide memory, 16 bit
336  bus access, two 4K Tx queues, and disabled Tx and Rx. */
337  outb(0xda, ioaddr + CONFIG_0);
338 
339  /* Set the station address in bank zero. */
340  outb(0x00, ioaddr + CONFIG_1);
341  for (i = 0; i < 6; i++)
342  outb(dev->dev_addr[i], ioaddr + PORT_OFFSET(8 + i));
343 
344  /* Switch to bank 1 and set the multicast table to accept none. */
345  outb(0x04, ioaddr + CONFIG_1);
346  for (i = 0; i < 8; i++)
347  outb(0x00, ioaddr + PORT_OFFSET(8 + i));
348 
349 
350  /* Switch to bank 2 */
351  /* Lock our I/O address, and set manual processing mode for 16 collisions. */
352  outb(0x08, ioaddr + CONFIG_1);
353  outb(dev->if_port, ioaddr + MODE13);
354  outb(0x00, ioaddr + COL16CNTL);
355 
356  if (net_debug)
357  printk(version);
358 
359  dev->netdev_ops = &at1700_netdev_ops;
360  dev->watchdog_timeo = TX_TIMEOUT;
361 
362  spin_lock_init(&lp->lock);
363 
364  lp->jumpered = is_fmv18x;
365  /* Snarf the interrupt vector now. */
366  ret = request_irq(irq, net_interrupt, 0, DRV_NAME, dev);
367  if (ret) {
368  printk(KERN_ERR "AT1700 at %#3x is unusable due to a "
369  "conflict on IRQ %d.\n",
370  ioaddr, irq);
371  goto err_out;
372  }
373 
374  return 0;
375 
376 err_out:
378  return ret;
379 }
380 
381 
382 /* EEPROM_Ctrl bits. */
383 #define EE_SHIFT_CLK 0x40 /* EEPROM shift clock, in reg. 16. */
384 #define EE_CS 0x20 /* EEPROM chip select, in reg. 16. */
385 #define EE_DATA_WRITE 0x80 /* EEPROM chip data in, in reg. 17. */
386 #define EE_DATA_READ 0x80 /* EEPROM chip data out, in reg. 17. */
387 
388 /* The EEPROM commands include the alway-set leading bit. */
389 #define EE_WRITE_CMD (5 << 6)
390 #define EE_READ_CMD (6 << 6)
391 #define EE_ERASE_CMD (7 << 6)
392 
393 static int __init read_eeprom(long ioaddr, int location)
394 {
395  int i;
396  unsigned short retval = 0;
397  long ee_addr = ioaddr + EEPROM_Ctrl;
398  long ee_daddr = ioaddr + EEPROM_Data;
399  int read_cmd = location | EE_READ_CMD;
400 
401  /* Shift the read command bits out. */
402  for (i = 9; i >= 0; i--) {
403  short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
404  outb(EE_CS, ee_addr);
405  outb(dataval, ee_daddr);
406  outb(EE_CS | EE_SHIFT_CLK, ee_addr); /* EEPROM clock tick. */
407  }
408  outb(EE_DATA_WRITE, ee_daddr);
409  for (i = 16; i > 0; i--) {
410  outb(EE_CS, ee_addr);
411  outb(EE_CS | EE_SHIFT_CLK, ee_addr);
412  retval = (retval << 1) | ((inb(ee_daddr) & EE_DATA_READ) ? 1 : 0);
413  }
414 
415  /* Terminate the EEPROM access. */
416  outb(EE_CS, ee_addr);
417  outb(EE_SHIFT_CLK, ee_addr);
418  outb(0, ee_addr);
419  return retval;
420 }
421 
422 
423 
424 static int net_open(struct net_device *dev)
425 {
426  struct net_local *lp = netdev_priv(dev);
427  int ioaddr = dev->base_addr;
428 
429  /* Set the configuration register 0 to 32K 100ns. byte-wide memory, 16 bit
430  bus access, and two 4K Tx queues. */
431  outb(0x5a, ioaddr + CONFIG_0);
432 
433  /* Powerup, switch to register bank 2, and enable the Rx and Tx. */
434  outb(0xe8, ioaddr + CONFIG_1);
435 
436  lp->tx_started = 0;
437  lp->tx_queue_ready = 1;
438  lp->rx_started = 0;
439  lp->tx_queue = 0;
440  lp->tx_queue_len = 0;
441 
442  /* Turn on hardware Tx and Rx interrupts. */
443  outb(0x82, ioaddr + TX_INTR);
444  outb(0x81, ioaddr + RX_INTR);
445 
446  /* Enable the IRQ on boards of fmv18x it is feasible. */
447  if (lp->jumpered) {
448  outb(0x80, ioaddr + IOCONFIG1);
449  }
450 
451  netif_start_queue(dev);
452  return 0;
453 }
454 
455 static void net_tx_timeout (struct net_device *dev)
456 {
457  struct net_local *lp = netdev_priv(dev);
458  int ioaddr = dev->base_addr;
459 
460  printk ("%s: transmit timed out with status %04x, %s?\n", dev->name,
461  inw (ioaddr + STATUS), inb (ioaddr + TX_STATUS) & 0x80
462  ? "IRQ conflict" : "network cable problem");
463  printk ("%s: timeout registers: %04x %04x %04x %04x %04x %04x %04x %04x.\n",
464  dev->name, inw(ioaddr + TX_STATUS), inw(ioaddr + TX_INTR), inw(ioaddr + TX_MODE),
465  inw(ioaddr + CONFIG_0), inw(ioaddr + DATAPORT), inw(ioaddr + TX_START),
466  inw(ioaddr + MODE13 - 1), inw(ioaddr + RX_CTRL));
467  dev->stats.tx_errors++;
468  /* ToDo: We should try to restart the adaptor... */
469  outw(0xffff, ioaddr + MODE24);
470  outw (0xffff, ioaddr + TX_STATUS);
471  outb (0x5a, ioaddr + CONFIG_0);
472  outb (0xe8, ioaddr + CONFIG_1);
473  outw (0x8182, ioaddr + TX_INTR);
474  outb (0x00, ioaddr + TX_START);
475  outb (0x03, ioaddr + COL16CNTL);
476 
477  dev->trans_start = jiffies; /* prevent tx timeout */
478 
479  lp->tx_started = 0;
480  lp->tx_queue_ready = 1;
481  lp->rx_started = 0;
482  lp->tx_queue = 0;
483  lp->tx_queue_len = 0;
484 
485  netif_wake_queue(dev);
486 }
487 
488 
489 static netdev_tx_t net_send_packet (struct sk_buff *skb,
490  struct net_device *dev)
491 {
492  struct net_local *lp = netdev_priv(dev);
493  int ioaddr = dev->base_addr;
494  short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
495  short len = skb->len;
496  unsigned char *buf = skb->data;
497  static u8 pad[ETH_ZLEN];
498 
499  netif_stop_queue (dev);
500 
501  /* We may not start transmitting unless we finish transferring
502  a packet into the Tx queue. During executing the following
503  codes we possibly catch a Tx interrupt. Thus we flag off
504  tx_queue_ready, so that we prevent the interrupt routine
505  (net_interrupt) to start transmitting. */
506  lp->tx_queue_ready = 0;
507  {
508  outw (length, ioaddr + DATAPORT);
509  /* Packet data */
510  outsw (ioaddr + DATAPORT, buf, len >> 1);
511  /* Check for dribble byte */
512  if (len & 1) {
513  outw(skb->data[skb->len-1], ioaddr + DATAPORT);
514  len++;
515  }
516  /* Check for packet padding */
517  if (length != skb->len)
518  outsw(ioaddr + DATAPORT, pad, (length - len + 1) >> 1);
519 
520  lp->tx_queue++;
521  lp->tx_queue_len += length + 2;
522  }
523  lp->tx_queue_ready = 1;
524 
525  if (lp->tx_started == 0) {
526  /* If the Tx is idle, always trigger a transmit. */
527  outb (0x80 | lp->tx_queue, ioaddr + TX_START);
528  lp->tx_queue = 0;
529  lp->tx_queue_len = 0;
530  lp->tx_started = 1;
531  netif_start_queue (dev);
532  } else if (lp->tx_queue_len < 4096 - 1502)
533  /* Yes, there is room for one more packet. */
534  netif_start_queue (dev);
535  dev_kfree_skb (skb);
536 
537  return NETDEV_TX_OK;
538 }
539 
540 /* The typical workload of the driver:
541  Handle the network interface interrupts. */
542 static irqreturn_t net_interrupt(int irq, void *dev_id)
543 {
544  struct net_device *dev = dev_id;
545  struct net_local *lp;
546  int ioaddr, status;
547  int handled = 0;
548 
549  if (dev == NULL) {
550  printk ("at1700_interrupt(): irq %d for unknown device.\n", irq);
551  return IRQ_NONE;
552  }
553 
554  ioaddr = dev->base_addr;
555  lp = netdev_priv(dev);
556 
557  spin_lock (&lp->lock);
558 
559  status = inw(ioaddr + TX_STATUS);
560  outw(status, ioaddr + TX_STATUS);
561 
562  if (net_debug > 4)
563  printk("%s: Interrupt with status %04x.\n", dev->name, status);
564  if (lp->rx_started == 0 &&
565  (status & 0xff00 || (inb(ioaddr + RX_MODE) & 0x40) == 0)) {
566  /* Got a packet(s).
567  We cannot execute net_rx more than once at the same time for
568  the same device. During executing net_rx, we possibly catch a
569  Tx interrupt. Thus we flag on rx_started, so that we prevent
570  the interrupt routine (net_interrupt) to dive into net_rx
571  again. */
572  handled = 1;
573  lp->rx_started = 1;
574  outb(0x00, ioaddr + RX_INTR); /* Disable RX intr. */
575  net_rx(dev);
576  outb(0x81, ioaddr + RX_INTR); /* Enable RX intr. */
577  lp->rx_started = 0;
578  }
579  if (status & 0x00ff) {
580  handled = 1;
581  if (status & 0x02) {
582  /* More than 16 collisions occurred */
583  if (net_debug > 4)
584  printk("%s: 16 Collision occur during Txing.\n", dev->name);
585  /* Cancel sending a packet. */
586  outb(0x03, ioaddr + COL16CNTL);
587  dev->stats.collisions++;
588  }
589  if (status & 0x82) {
590  dev->stats.tx_packets++;
591  /* The Tx queue has any packets and is not being
592  transferred a packet from the host, start
593  transmitting. */
594  if (lp->tx_queue && lp->tx_queue_ready) {
595  outb(0x80 | lp->tx_queue, ioaddr + TX_START);
596  lp->tx_queue = 0;
597  lp->tx_queue_len = 0;
598  dev->trans_start = jiffies;
599  netif_wake_queue (dev);
600  } else {
601  lp->tx_started = 0;
602  netif_wake_queue (dev);
603  }
604  }
605  }
606 
607  spin_unlock (&lp->lock);
608  return IRQ_RETVAL(handled);
609 }
610 
611 /* We have a good packet(s), get it/them out of the buffers. */
612 static void
613 net_rx(struct net_device *dev)
614 {
615  int ioaddr = dev->base_addr;
616  int boguscount = 5;
617 
618  while ((inb(ioaddr + RX_MODE) & 0x40) == 0) {
619  ushort status = inw(ioaddr + DATAPORT);
620  ushort pkt_len = inw(ioaddr + DATAPORT);
621 
622  if (net_debug > 4)
623  printk("%s: Rxing packet mode %02x status %04x.\n",
624  dev->name, inb(ioaddr + RX_MODE), status);
625 #ifndef final_version
626  if (status == 0) {
627  outb(0x05, ioaddr + RX_CTRL);
628  break;
629  }
630 #endif
631 
632  if ((status & 0xF0) != 0x20) { /* There was an error. */
633  dev->stats.rx_errors++;
634  if (status & 0x08) dev->stats.rx_length_errors++;
635  if (status & 0x04) dev->stats.rx_frame_errors++;
636  if (status & 0x02) dev->stats.rx_crc_errors++;
637  if (status & 0x01) dev->stats.rx_over_errors++;
638  } else {
639  /* Malloc up new buffer. */
640  struct sk_buff *skb;
641 
642  if (pkt_len > 1550) {
643  printk("%s: The AT1700 claimed a very large packet, size %d.\n",
644  dev->name, pkt_len);
645  /* Prime the FIFO and then flush the packet. */
646  inw(ioaddr + DATAPORT); inw(ioaddr + DATAPORT);
647  outb(0x05, ioaddr + RX_CTRL);
648  dev->stats.rx_errors++;
649  break;
650  }
651  skb = netdev_alloc_skb(dev, pkt_len + 3);
652  if (skb == NULL) {
653  printk("%s: Memory squeeze, dropping packet (len %d).\n",
654  dev->name, pkt_len);
655  /* Prime the FIFO and then flush the packet. */
656  inw(ioaddr + DATAPORT); inw(ioaddr + DATAPORT);
657  outb(0x05, ioaddr + RX_CTRL);
658  dev->stats.rx_dropped++;
659  break;
660  }
661  skb_reserve(skb,2);
662 
663  insw(ioaddr + DATAPORT, skb_put(skb,pkt_len), (pkt_len + 1) >> 1);
664  skb->protocol=eth_type_trans(skb, dev);
665  netif_rx(skb);
666  dev->stats.rx_packets++;
667  dev->stats.rx_bytes += pkt_len;
668  }
669  if (--boguscount <= 0)
670  break;
671  }
672 
673  /* If any worth-while packets have been received, dev_rint()
674  has done a mark_bh(NET_BH) for us and will work on them
675  when we get to the bottom-half routine. */
676  {
677  int i;
678  for (i = 0; i < 20; i++) {
679  if ((inb(ioaddr + RX_MODE) & 0x40) == 0x40)
680  break;
681  inw(ioaddr + DATAPORT); /* dummy status read */
682  outb(0x05, ioaddr + RX_CTRL);
683  }
684 
685  if (net_debug > 5)
686  printk("%s: Exint Rx packet with mode %02x after %d ticks.\n",
687  dev->name, inb(ioaddr + RX_MODE), i);
688  }
689 }
690 
691 /* The inverse routine to net_open(). */
692 static int net_close(struct net_device *dev)
693 {
694  struct net_local *lp = netdev_priv(dev);
695  int ioaddr = dev->base_addr;
696 
697  netif_stop_queue(dev);
698 
699  /* Set configuration register 0 to disable Tx and Rx. */
700  outb(0xda, ioaddr + CONFIG_0);
701 
702  /* No statistic counters on the chip to update. */
703 
704  /* Disable the IRQ on boards of fmv18x where it is feasible. */
705  if (lp->jumpered)
706  outb(0x00, ioaddr + IOCONFIG1);
707 
708  /* Power-down the chip. Green, green, green! */
709  outb(0x00, ioaddr + CONFIG_1);
710  return 0;
711 }
712 
713 /*
714  Set the multicast/promiscuous mode for this adaptor.
715 */
716 
717 static void
718 set_rx_mode(struct net_device *dev)
719 {
720  int ioaddr = dev->base_addr;
721  struct net_local *lp = netdev_priv(dev);
722  unsigned char mc_filter[8]; /* Multicast hash filter */
723  unsigned long flags;
724 
725  if (dev->flags & IFF_PROMISC) {
726  memset(mc_filter, 0xff, sizeof(mc_filter));
727  outb(3, ioaddr + RX_MODE); /* Enable promiscuous mode */
728  } else if (netdev_mc_count(dev) > MC_FILTERBREAK ||
729  (dev->flags & IFF_ALLMULTI)) {
730  /* Too many to filter perfectly -- accept all multicasts. */
731  memset(mc_filter, 0xff, sizeof(mc_filter));
732  outb(2, ioaddr + RX_MODE); /* Use normal mode. */
733  } else if (netdev_mc_empty(dev)) {
734  memset(mc_filter, 0x00, sizeof(mc_filter));
735  outb(1, ioaddr + RX_MODE); /* Ignore almost all multicasts. */
736  } else {
737  struct netdev_hw_addr *ha;
738 
739  memset(mc_filter, 0, sizeof(mc_filter));
740  netdev_for_each_mc_addr(ha, dev) {
741  unsigned int bit =
742  ether_crc_le(ETH_ALEN, ha->addr) >> 26;
743  mc_filter[bit >> 3] |= (1 << bit);
744  }
745  outb(0x02, ioaddr + RX_MODE); /* Use normal mode. */
746  }
747 
748  spin_lock_irqsave (&lp->lock, flags);
749  if (memcmp(mc_filter, lp->mc_filter, sizeof(mc_filter))) {
750  int i;
751  int saved_bank = inw(ioaddr + CONFIG_0);
752  /* Switch to bank 1 and set the multicast table. */
753  outw((saved_bank & ~0x0C00) | 0x0480, ioaddr + CONFIG_0);
754  for (i = 0; i < 8; i++)
755  outb(mc_filter[i], ioaddr + PORT_OFFSET(8 + i));
756  memcpy(lp->mc_filter, mc_filter, sizeof(mc_filter));
757  outw(saved_bank, ioaddr + CONFIG_0);
758  }
759  spin_unlock_irqrestore (&lp->lock, flags);
760 }
761 
762 #ifdef MODULE
763 static struct net_device *dev_at1700;
764 
765 module_param(io, int, 0);
766 module_param(irq, int, 0);
767 module_param(net_debug, int, 0);
768 MODULE_PARM_DESC(io, "AT1700/FMV18X I/O base address");
769 MODULE_PARM_DESC(irq, "AT1700/FMV18X IRQ number");
770 MODULE_PARM_DESC(net_debug, "AT1700/FMV18X debug level (0-6)");
771 
772 static int __init at1700_module_init(void)
773 {
774  if (io == 0)
775  printk("at1700: You should not use auto-probing with insmod!\n");
776  dev_at1700 = at1700_probe(-1);
777  if (IS_ERR(dev_at1700))
778  return PTR_ERR(dev_at1700);
779  return 0;
780 }
781 
782 static void __exit at1700_module_exit(void)
783 {
784  unregister_netdev(dev_at1700);
785  cleanup_card(dev_at1700);
786  free_netdev(dev_at1700);
787 }
788 module_init(at1700_module_init);
789 module_exit(at1700_module_exit);
790 #endif /* MODULE */
791 MODULE_LICENSE("GPL");