Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ne2k-pci.c
Go to the documentation of this file.
1 /* ne2k-pci.c: A NE2000 clone on PCI bus driver for Linux. */
2 /*
3  A Linux device driver for PCI NE2000 clones.
4 
5  Authors and other copyright holders:
6  1992-2000 by Donald Becker, NE2000 core and various modifications.
7  1995-1998 by Paul Gortmaker, core modifications and PCI support.
8  Copyright 1993 assigned to the United States Government as represented
9  by the Director, National Security Agency.
10 
11  This software may be used and distributed according to the terms of
12  the GNU General Public License (GPL), incorporated herein by reference.
13  Drivers based on or derived from this code fall under the GPL and must
14  retain the authorship, copyright and license notice. This file is not
15  a complete program and may only be used when the entire operating
16  system is licensed under the GPL.
17 
18  The author may be reached as [email protected], or C/O
19  Scyld Computing Corporation
20  410 Severn Ave., Suite 210
21  Annapolis MD 21403
22 
23  Issues remaining:
24  People are making PCI ne2000 clones! Oh the horror, the horror...
25  Limited full-duplex support.
26 */
27 
28 #define DRV_NAME "ne2k-pci"
29 #define DRV_VERSION "1.03"
30 #define DRV_RELDATE "9/22/2003"
31 
32 
33 /* The user-configurable values.
34  These may be modified when a driver module is loaded.*/
35 
36 static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */
37 
38 #define MAX_UNITS 8 /* More are supported, limit only on options */
39 /* Used to pass the full-duplex flag, etc. */
40 static int full_duplex[MAX_UNITS];
41 static int options[MAX_UNITS];
42 
43 /* Force a non std. amount of memory. Units are 256 byte pages. */
44 /* #define PACKETBUF_MEMSIZE 0x40 */
45 
46 
47 #include <linux/module.h>
48 #include <linux/kernel.h>
49 #include <linux/errno.h>
50 #include <linux/pci.h>
51 #include <linux/init.h>
52 #include <linux/interrupt.h>
53 #include <linux/ethtool.h>
54 #include <linux/netdevice.h>
55 #include <linux/etherdevice.h>
56 
57 #include <asm/io.h>
58 #include <asm/irq.h>
59 #include <asm/uaccess.h>
60 
61 #include "8390.h"
62 
63 /* These identify the driver base version and may not be removed. */
64 static const char version[] __devinitconst =
66  " D. Becker/P. Gortmaker\n";
67 
68 #if defined(__powerpc__)
69 #define inl_le(addr) le32_to_cpu(inl(addr))
70 #define inw_le(addr) le16_to_cpu(inw(addr))
71 #endif
72 
73 #define PFX DRV_NAME ": "
74 
75 MODULE_AUTHOR("Donald Becker / Paul Gortmaker");
76 MODULE_DESCRIPTION("PCI NE2000 clone driver");
77 MODULE_LICENSE("GPL");
78 
79 module_param(debug, int, 0);
81 module_param_array(full_duplex, int, NULL, 0);
82 MODULE_PARM_DESC(debug, "debug level (1-2)");
83 MODULE_PARM_DESC(options, "Bit 5: full duplex");
84 MODULE_PARM_DESC(full_duplex, "full duplex setting(s) (1)");
85 
86 /* Some defines that people can play with if so inclined. */
87 
88 /* Use 32 bit data-movement operations instead of 16 bit. */
89 #define USE_LONGIO
90 
91 /* Do we implement the read before write bugfix ? */
92 /* #define NE_RW_BUGFIX */
93 
94 /* Flags. We rename an existing ei_status field to store flags! */
95 /* Thus only the low 8 bits are usable for non-init-time flags. */
96 #define ne2k_flags reg0
97 enum {
98  ONLY_16BIT_IO=8, ONLY_32BIT_IO=4, /* Chip can do only 16/32-bit xfers. */
99  FORCE_FDX=0x20, /* User override. */
102 };
103 
116 };
117 
118 
119 static struct {
120  char *name;
121  int flags;
122 } pci_clone_list[] __devinitdata = {
123  {"RealTek RTL-8029", REALTEK_FDX},
124  {"Winbond 89C940", 0},
125  {"Compex RL2000", 0},
126  {"KTI ET32P2", 0},
127  {"NetVin NV5000SC", 0},
128  {"Via 86C926", ONLY_16BIT_IO},
129  {"SureCom NE34", 0},
130  {"Winbond W89C940F", 0},
131  {"Holtek HT80232", ONLY_16BIT_IO | HOLTEK_FDX},
132  {"Holtek HT80229", ONLY_32BIT_IO | HOLTEK_FDX | STOP_PG_0x60 },
133  {"Winbond W89C940(misprogrammed)", 0},
134  {NULL,}
135 };
136 
137 
138 static DEFINE_PCI_DEVICE_TABLE(ne2k_pci_tbl) = {
139  { 0x10ec, 0x8029, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_RealTek_RTL_8029 },
140  { 0x1050, 0x0940, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_89C940 },
141  { 0x11f6, 0x1401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Compex_RL2000 },
142  { 0x8e2e, 0x3000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_KTI_ET32P2 },
143  { 0x4a14, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_NetVin_NV5000SC },
144  { 0x1106, 0x0926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Via_86C926 },
145  { 0x10bd, 0x0e34, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_SureCom_NE34 },
146  { 0x1050, 0x5a5a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_W89C940F },
147  { 0x12c3, 0x0058, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80232 },
148  { 0x12c3, 0x5598, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80229 },
149  { 0x8c4a, 0x1980, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_89C940_8c4a },
150  { 0, }
151 };
152 MODULE_DEVICE_TABLE(pci, ne2k_pci_tbl);
153 
154 
155 /* ---- No user-serviceable parts below ---- */
156 
157 #define NE_BASE (dev->base_addr)
158 #define NE_CMD 0x00
159 #define NE_DATAPORT 0x10 /* NatSemi-defined port window offset. */
160 #define NE_RESET 0x1f /* Issue a read to reset, a write to clear. */
161 #define NE_IO_EXTENT 0x20
162 
163 #define NESM_START_PG 0x40 /* First page of TX buffer */
164 #define NESM_STOP_PG 0x80 /* Last page +1 of RX ring */
165 
166 
167 static int ne2k_pci_open(struct net_device *dev);
168 static int ne2k_pci_close(struct net_device *dev);
169 
170 static void ne2k_pci_reset_8390(struct net_device *dev);
171 static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
172  int ring_page);
173 static void ne2k_pci_block_input(struct net_device *dev, int count,
174  struct sk_buff *skb, int ring_offset);
175 static void ne2k_pci_block_output(struct net_device *dev, const int count,
176  const unsigned char *buf, const int start_page);
177 static const struct ethtool_ops ne2k_pci_ethtool_ops;
178 
179 
180 
181 /* There is no room in the standard 8390 structure for extra info we need,
182  so we build a meta/outer-wrapper structure.. */
184  struct net_device *dev;
185  struct pci_dev *pci_dev;
186 };
187 
188 
189 
190 /*
191  NEx000-clone boards have a Station Address (SA) PROM (SAPROM) in the packet
192  buffer memory space. By-the-spec NE2000 clones have 0x57,0x57 in bytes
193  0x0e,0x0f of the SAPROM, while other supposed NE2000 clones must be
194  detected by their SA prefix.
195 
196  Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
197  mode results in doubled values, which can be detected and compensated for.
198 
199  The probe is also responsible for initializing the card and filling
200  in the 'dev' and 'ei_status' structures.
201 */
202 
203 static const struct net_device_ops ne2k_netdev_ops = {
204  .ndo_open = ne2k_pci_open,
205  .ndo_stop = ne2k_pci_close,
206  .ndo_start_xmit = ei_start_xmit,
207  .ndo_tx_timeout = ei_tx_timeout,
208  .ndo_get_stats = ei_get_stats,
209  .ndo_set_rx_mode = ei_set_multicast_list,
210  .ndo_validate_addr = eth_validate_addr,
211  .ndo_set_mac_address = eth_mac_addr,
212  .ndo_change_mtu = eth_change_mtu,
213 #ifdef CONFIG_NET_POLL_CONTROLLER
214  .ndo_poll_controller = ei_poll,
215 #endif
216 };
217 
218 static int __devinit ne2k_pci_init_one (struct pci_dev *pdev,
219  const struct pci_device_id *ent)
220 {
221  struct net_device *dev;
222  int i;
223  unsigned char SA_prom[32];
224  int start_page, stop_page;
225  int irq, reg0, chip_idx = ent->driver_data;
226  static unsigned int fnd_cnt;
227  long ioaddr;
228  int flags = pci_clone_list[chip_idx].flags;
229 
230 /* when built into the kernel, we only print version if device is found */
231 #ifndef MODULE
232  static int printed_version;
233  if (!printed_version++)
234  printk(version);
235 #endif
236 
237  fnd_cnt++;
238 
239  i = pci_enable_device (pdev);
240  if (i)
241  return i;
242 
243  ioaddr = pci_resource_start (pdev, 0);
244  irq = pdev->irq;
245 
246  if (!ioaddr || ((pci_resource_flags (pdev, 0) & IORESOURCE_IO) == 0)) {
247  dev_err(&pdev->dev, "no I/O resource at PCI BAR #0\n");
248  return -ENODEV;
249  }
250 
251  if (request_region (ioaddr, NE_IO_EXTENT, DRV_NAME) == NULL) {
252  dev_err(&pdev->dev, "I/O resource 0x%x @ 0x%lx busy\n",
253  NE_IO_EXTENT, ioaddr);
254  return -EBUSY;
255  }
256 
257  reg0 = inb(ioaddr);
258  if (reg0 == 0xFF)
259  goto err_out_free_res;
260 
261  /* Do a preliminary verification that we have a 8390. */
262  {
263  int regd;
265  regd = inb(ioaddr + 0x0d);
266  outb(0xff, ioaddr + 0x0d);
268  inb(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
269  if (inb(ioaddr + EN0_COUNTER0) != 0) {
270  outb(reg0, ioaddr);
271  outb(regd, ioaddr + 0x0d); /* Restore the old values. */
272  goto err_out_free_res;
273  }
274  }
275 
276  /* Allocate net_device, dev->priv; fill in 8390 specific dev fields. */
277  dev = alloc_ei_netdev();
278  if (!dev) {
279  dev_err(&pdev->dev, "cannot allocate ethernet device\n");
280  goto err_out_free_res;
281  }
282  dev->netdev_ops = &ne2k_netdev_ops;
283 
284  SET_NETDEV_DEV(dev, &pdev->dev);
285 
286  /* Reset card. Who knows what dain-bramaged state it was left in. */
287  {
288  unsigned long reset_start_time = jiffies;
289 
290  outb(inb(ioaddr + NE_RESET), ioaddr + NE_RESET);
291 
292  /* This looks like a horrible timing loop, but it should never take
293  more than a few cycles.
294  */
295  while ((inb(ioaddr + EN0_ISR) & ENISR_RESET) == 0)
296  /* Limit wait: '2' avoids jiffy roll-over. */
297  if (jiffies - reset_start_time > 2) {
298  dev_err(&pdev->dev,
299  "Card failure (no reset ack).\n");
300  goto err_out_free_netdev;
301  }
302 
303  outb(0xff, ioaddr + EN0_ISR); /* Ack all intr. */
304  }
305 
306  /* Read the 16 bytes of station address PROM.
307  We must first initialize registers, similar to NS8390_init(eifdev, 0).
308  We can't reliably read the SAPROM address without this.
309  (I learned the hard way!). */
310  {
311  struct {unsigned char value, offset; } program_seq[] = {
312  {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
313  {0x49, EN0_DCFG}, /* Set word-wide access. */
314  {0x00, EN0_RCNTLO}, /* Clear the count regs. */
315  {0x00, EN0_RCNTHI},
316  {0x00, EN0_IMR}, /* Mask completion irq. */
317  {0xFF, EN0_ISR},
318  {E8390_RXOFF, EN0_RXCR}, /* 0x20 Set to monitor */
319  {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */
320  {32, EN0_RCNTLO},
321  {0x00, EN0_RCNTHI},
322  {0x00, EN0_RSARLO}, /* DMA starting at 0x0000. */
323  {0x00, EN0_RSARHI},
325  };
326  for (i = 0; i < ARRAY_SIZE(program_seq); i++)
327  outb(program_seq[i].value, ioaddr + program_seq[i].offset);
328 
329  }
330 
331  /* Note: all PCI cards have at least 16 bit access, so we don't have
332  to check for 8 bit cards. Most cards permit 32 bit access. */
333  if (flags & ONLY_32BIT_IO) {
334  for (i = 0; i < 4 ; i++)
335  ((u32 *)SA_prom)[i] = le32_to_cpu(inl(ioaddr + NE_DATAPORT));
336  } else
337  for(i = 0; i < 32 /*sizeof(SA_prom)*/; i++)
338  SA_prom[i] = inb(ioaddr + NE_DATAPORT);
339 
340  /* We always set the 8390 registers for word mode. */
341  outb(0x49, ioaddr + EN0_DCFG);
342  start_page = NESM_START_PG;
343 
344  stop_page = flags & STOP_PG_0x60 ? 0x60 : NESM_STOP_PG;
345 
346  /* Set up the rest of the parameters. */
347  dev->irq = irq;
348  dev->base_addr = ioaddr;
349  pci_set_drvdata(pdev, dev);
350 
351  ei_status.name = pci_clone_list[chip_idx].name;
352  ei_status.tx_start_page = start_page;
353  ei_status.stop_page = stop_page;
354  ei_status.word16 = 1;
355  ei_status.ne2k_flags = flags;
356  if (fnd_cnt < MAX_UNITS) {
357  if (full_duplex[fnd_cnt] > 0 || (options[fnd_cnt] & FORCE_FDX))
358  ei_status.ne2k_flags |= FORCE_FDX;
359  }
360 
361  ei_status.rx_start_page = start_page + TX_PAGES;
362 #ifdef PACKETBUF_MEMSIZE
363  /* Allow the packet buffer size to be overridden by know-it-alls. */
364  ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
365 #endif
366 
367  ei_status.reset_8390 = &ne2k_pci_reset_8390;
368  ei_status.block_input = &ne2k_pci_block_input;
369  ei_status.block_output = &ne2k_pci_block_output;
370  ei_status.get_8390_hdr = &ne2k_pci_get_8390_hdr;
371  ei_status.priv = (unsigned long) pdev;
372 
373  dev->ethtool_ops = &ne2k_pci_ethtool_ops;
374  NS8390_init(dev, 0);
375 
376  memcpy(dev->dev_addr, SA_prom, dev->addr_len);
377  memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
378 
379  i = register_netdev(dev);
380  if (i)
381  goto err_out_free_netdev;
382 
383  printk("%s: %s found at %#lx, IRQ %d, %pM.\n",
384  dev->name, pci_clone_list[chip_idx].name, ioaddr, dev->irq,
385  dev->dev_addr);
386 
387  return 0;
388 
389 err_out_free_netdev:
390  free_netdev (dev);
391 err_out_free_res:
392  release_region (ioaddr, NE_IO_EXTENT);
393  pci_set_drvdata (pdev, NULL);
394  return -ENODEV;
395 
396 }
397 
398 /*
399  * Magic incantation sequence for full duplex on the supported cards.
400  */
401 static inline int set_realtek_fdx(struct net_device *dev)
402 {
403  long ioaddr = dev->base_addr;
404 
405  outb(0xC0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 3 */
406  outb(0xC0, ioaddr + 0x01); /* Enable writes to CONFIG3 */
407  outb(0x40, ioaddr + 0x06); /* Enable full duplex */
408  outb(0x00, ioaddr + 0x01); /* Disable writes to CONFIG3 */
409  outb(E8390_PAGE0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 0 */
410  return 0;
411 }
412 
413 static inline int set_holtek_fdx(struct net_device *dev)
414 {
415  long ioaddr = dev->base_addr;
416 
417  outb(inb(ioaddr + 0x20) | 0x80, ioaddr + 0x20);
418  return 0;
419 }
420 
421 static int ne2k_pci_set_fdx(struct net_device *dev)
422 {
423  if (ei_status.ne2k_flags & REALTEK_FDX)
424  return set_realtek_fdx(dev);
425  else if (ei_status.ne2k_flags & HOLTEK_FDX)
426  return set_holtek_fdx(dev);
427 
428  return -EOPNOTSUPP;
429 }
430 
431 static int ne2k_pci_open(struct net_device *dev)
432 {
433  int ret = request_irq(dev->irq, ei_interrupt, IRQF_SHARED, dev->name, dev);
434  if (ret)
435  return ret;
436 
437  if (ei_status.ne2k_flags & FORCE_FDX)
438  ne2k_pci_set_fdx(dev);
439 
440  ei_open(dev);
441  return 0;
442 }
443 
444 static int ne2k_pci_close(struct net_device *dev)
445 {
446  ei_close(dev);
447  free_irq(dev->irq, dev);
448  return 0;
449 }
450 
451 /* Hard reset the card. This used to pause for the same period that a
452  8390 reset command required, but that shouldn't be necessary. */
453 static void ne2k_pci_reset_8390(struct net_device *dev)
454 {
455  unsigned long reset_start_time = jiffies;
456 
457  if (debug > 1) printk("%s: Resetting the 8390 t=%ld...",
458  dev->name, jiffies);
459 
461 
462  ei_status.txing = 0;
463  ei_status.dmaing = 0;
464 
465  /* This check _should_not_ be necessary, omit eventually. */
466  while ((inb(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
467  if (jiffies - reset_start_time > 2) {
468  printk("%s: ne2k_pci_reset_8390() did not complete.\n", dev->name);
469  break;
470  }
471  outb(ENISR_RESET, NE_BASE + EN0_ISR); /* Ack intr. */
472 }
473 
474 /* Grab the 8390 specific header. Similar to the block_input routine, but
475  we don't need to be concerned with ring wrap as the header will be at
476  the start of a page, so we optimize accordingly. */
477 
478 static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
479 {
480 
481  long nic_base = dev->base_addr;
482 
483  /* This *shouldn't* happen. If it does, it's the last thing you'll see */
484  if (ei_status.dmaing) {
485  printk("%s: DMAing conflict in ne2k_pci_get_8390_hdr "
486  "[DMAstat:%d][irqlock:%d].\n",
487  dev->name, ei_status.dmaing, ei_status.irqlock);
488  return;
489  }
490 
491  ei_status.dmaing |= 0x01;
493  outb(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
494  outb(0, nic_base + EN0_RCNTHI);
495  outb(0, nic_base + EN0_RSARLO); /* On page boundary */
496  outb(ring_page, nic_base + EN0_RSARHI);
497  outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
498 
499  if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
500  insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);
501  } else {
502  *(u32*)hdr = le32_to_cpu(inl(NE_BASE + NE_DATAPORT));
503  le16_to_cpus(&hdr->count);
504  }
505 
506  outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
507  ei_status.dmaing &= ~0x01;
508 }
509 
510 /* Block input and output, similar to the Crynwr packet driver. If you
511  are porting to a new ethercard, look at the packet driver source for hints.
512  The NEx000 doesn't share the on-board packet memory -- you have to put
513  the packet out through the "remote DMA" dataport using outb. */
514 
515 static void ne2k_pci_block_input(struct net_device *dev, int count,
516  struct sk_buff *skb, int ring_offset)
517 {
518  long nic_base = dev->base_addr;
519  char *buf = skb->data;
520 
521  /* This *shouldn't* happen. If it does, it's the last thing you'll see */
522  if (ei_status.dmaing) {
523  printk("%s: DMAing conflict in ne2k_pci_block_input "
524  "[DMAstat:%d][irqlock:%d].\n",
525  dev->name, ei_status.dmaing, ei_status.irqlock);
526  return;
527  }
528  ei_status.dmaing |= 0x01;
529  if (ei_status.ne2k_flags & ONLY_32BIT_IO)
530  count = (count + 3) & 0xFFFC;
532  outb(count & 0xff, nic_base + EN0_RCNTLO);
533  outb(count >> 8, nic_base + EN0_RCNTHI);
534  outb(ring_offset & 0xff, nic_base + EN0_RSARLO);
535  outb(ring_offset >> 8, nic_base + EN0_RSARHI);
536  outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
537 
538  if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
539  insw(NE_BASE + NE_DATAPORT,buf,count>>1);
540  if (count & 0x01) {
541  buf[count-1] = inb(NE_BASE + NE_DATAPORT);
542  }
543  } else {
544  insl(NE_BASE + NE_DATAPORT, buf, count>>2);
545  if (count & 3) {
546  buf += count & ~3;
547  if (count & 2) {
548  __le16 *b = (__le16 *)buf;
549 
550  *b++ = cpu_to_le16(inw(NE_BASE + NE_DATAPORT));
551  buf = (char *)b;
552  }
553  if (count & 1)
554  *buf = inb(NE_BASE + NE_DATAPORT);
555  }
556  }
557 
558  outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
559  ei_status.dmaing &= ~0x01;
560 }
561 
562 static void ne2k_pci_block_output(struct net_device *dev, int count,
563  const unsigned char *buf, const int start_page)
564 {
565  long nic_base = NE_BASE;
566  unsigned long dma_start;
567 
568  /* On little-endian it's always safe to round the count up for
569  word writes. */
570  if (ei_status.ne2k_flags & ONLY_32BIT_IO)
571  count = (count + 3) & 0xFFFC;
572  else
573  if (count & 0x01)
574  count++;
575 
576  /* This *shouldn't* happen. If it does, it's the last thing you'll see */
577  if (ei_status.dmaing) {
578  printk("%s: DMAing conflict in ne2k_pci_block_output."
579  "[DMAstat:%d][irqlock:%d]\n",
580  dev->name, ei_status.dmaing, ei_status.irqlock);
581  return;
582  }
583  ei_status.dmaing |= 0x01;
584  /* We should already be in page 0, but to be safe... */
586 
587 #ifdef NE8390_RW_BUGFIX
588  /* Handle the read-before-write bug the same way as the
589  Crynwr packet driver -- the NatSemi method doesn't work.
590  Actually this doesn't always work either, but if you have
591  problems with your NEx000 this is better than nothing! */
592  outb(0x42, nic_base + EN0_RCNTLO);
593  outb(0x00, nic_base + EN0_RCNTHI);
594  outb(0x42, nic_base + EN0_RSARLO);
595  outb(0x00, nic_base + EN0_RSARHI);
596  outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
597 #endif
598  outb(ENISR_RDC, nic_base + EN0_ISR);
599 
600  /* Now the normal output. */
601  outb(count & 0xff, nic_base + EN0_RCNTLO);
602  outb(count >> 8, nic_base + EN0_RCNTHI);
603  outb(0x00, nic_base + EN0_RSARLO);
604  outb(start_page, nic_base + EN0_RSARHI);
605  outb(E8390_RWRITE+E8390_START, nic_base + NE_CMD);
606  if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
607  outsw(NE_BASE + NE_DATAPORT, buf, count>>1);
608  } else {
609  outsl(NE_BASE + NE_DATAPORT, buf, count>>2);
610  if (count & 3) {
611  buf += count & ~3;
612  if (count & 2) {
613  __le16 *b = (__le16 *)buf;
614 
616  buf = (char *)b;
617  }
618  }
619  }
620 
621  dma_start = jiffies;
622 
623  while ((inb(nic_base + EN0_ISR) & ENISR_RDC) == 0)
624  if (jiffies - dma_start > 2) { /* Avoid clock roll-over. */
625  printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name);
626  ne2k_pci_reset_8390(dev);
627  NS8390_init(dev,1);
628  break;
629  }
630 
631  outb(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
632  ei_status.dmaing &= ~0x01;
633 }
634 
635 static void ne2k_pci_get_drvinfo(struct net_device *dev,
636  struct ethtool_drvinfo *info)
637 {
638  struct ei_device *ei = netdev_priv(dev);
639  struct pci_dev *pci_dev = (struct pci_dev *) ei->priv;
640 
641  strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
642  strlcpy(info->version, DRV_VERSION, sizeof(info->version));
643  strlcpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
644 }
645 
646 static const struct ethtool_ops ne2k_pci_ethtool_ops = {
647  .get_drvinfo = ne2k_pci_get_drvinfo,
648 };
649 
650 static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev)
651 {
652  struct net_device *dev = pci_get_drvdata(pdev);
653 
654  BUG_ON(!dev);
655  unregister_netdev(dev);
657  free_netdev(dev);
658  pci_disable_device(pdev);
659  pci_set_drvdata(pdev, NULL);
660 }
661 
662 #ifdef CONFIG_PM
663 static int ne2k_pci_suspend (struct pci_dev *pdev, pm_message_t state)
664 {
665  struct net_device *dev = pci_get_drvdata (pdev);
666 
667  netif_device_detach(dev);
668  pci_save_state(pdev);
669  pci_disable_device(pdev);
670  pci_set_power_state(pdev, pci_choose_state(pdev, state));
671 
672  return 0;
673 }
674 
675 static int ne2k_pci_resume (struct pci_dev *pdev)
676 {
677  struct net_device *dev = pci_get_drvdata (pdev);
678  int rc;
679 
680  pci_set_power_state(pdev, 0);
681  pci_restore_state(pdev);
682 
683  rc = pci_enable_device(pdev);
684  if (rc)
685  return rc;
686 
687  NS8390_init(dev, 1);
688  netif_device_attach(dev);
689 
690  return 0;
691 }
692 
693 #endif /* CONFIG_PM */
694 
695 
696 static struct pci_driver ne2k_driver = {
697  .name = DRV_NAME,
698  .probe = ne2k_pci_init_one,
699  .remove = __devexit_p(ne2k_pci_remove_one),
700  .id_table = ne2k_pci_tbl,
701 #ifdef CONFIG_PM
702  .suspend = ne2k_pci_suspend,
703  .resume = ne2k_pci_resume,
704 #endif /* CONFIG_PM */
705 
706 };
707 
708 
709 static int __init ne2k_pci_init(void)
710 {
711 /* when a module, this is printed whether or not devices are found in probe */
712 #ifdef MODULE
713  printk(version);
714 #endif
715  return pci_register_driver(&ne2k_driver);
716 }
717 
718 
719 static void __exit ne2k_pci_cleanup(void)
720 {
721  pci_unregister_driver (&ne2k_driver);
722 }
723 
724 module_init(ne2k_pci_init);
725 module_exit(ne2k_pci_cleanup);