ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / net / ne.c
1 /* ne.c: A general non-shared-memory NS8390 ethernet driver for linux. */
2 /*
3     Written 1992-94 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 becker@scyld.com, or C/O
12     Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
13
14     This driver should work with many programmed-I/O 8390-based ethernet
15     boards.  Currently it supports the NE1000, NE2000, many clones,
16     and some Cabletron products.
17
18     Changelog:
19
20     Paul Gortmaker      : use ENISR_RDC to monitor Tx PIO uploads, made
21                           sanity checks and bad clone support optional.
22     Paul Gortmaker      : new reset code, reset card after probe at boot.
23     Paul Gortmaker      : multiple card support for module users.
24     Paul Gortmaker      : Support for PCI ne2k clones, similar to lance.c
25     Paul Gortmaker      : Allow users with bad cards to avoid full probe.
26     Paul Gortmaker      : PCI probe changes, more PCI cards supported.
27     rjohnson@analogic.com : Changed init order so an interrupt will only
28     occur after memory is allocated for dev->priv. Deallocated memory
29     last in cleanup_modue()
30     Richard Guenther    : Added support for ISAPnP cards
31     Paul Gortmaker      : Discontinued PCI support - use ne2k-pci.c instead.
32
33 */
34
35 /* Routines for the NatSemi-based designs (NE[12]000). */
36
37 static const char version1[] =
38 "ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)\n";
39 static const char version2[] =
40 "Last modified Nov 1, 2000 by Paul Gortmaker\n";
41
42
43 #include <linux/module.h>
44 #include <linux/kernel.h>
45 #include <linux/errno.h>
46 #include <linux/isapnp.h>
47 #include <linux/init.h>
48 #include <linux/interrupt.h>
49 #include <linux/delay.h>
50 #include <linux/netdevice.h>
51 #include <linux/etherdevice.h>
52
53 #include <asm/system.h>
54 #include <asm/io.h>
55
56 #include "8390.h"
57
58 /* Some defines that people can play with if so inclined. */
59
60 /* Do we support clones that don't adhere to 14,15 of the SAprom ? */
61 #define SUPPORT_NE_BAD_CLONES
62
63 /* Do we perform extra sanity checks on stuff ? */
64 /* #define NE_SANITY_CHECK */
65
66 /* Do we implement the read before write bugfix ? */
67 /* #define NE_RW_BUGFIX */
68
69 /* Do we have a non std. amount of memory? (in units of 256 byte pages) */
70 /* #define PACKETBUF_MEMSIZE    0x40 */
71
72 /* A zero-terminated list of I/O addresses to be probed at boot. */
73 #ifndef MODULE
74 static unsigned int netcard_portlist[] __initdata = {
75         0x300, 0x280, 0x320, 0x340, 0x360, 0x380, 0
76 };
77 #endif
78
79 static struct isapnp_device_id isapnp_clone_list[] __initdata = {
80         {       ISAPNP_CARD_ID('A','X','E',0x2011),
81                 ISAPNP_VENDOR('A','X','E'), ISAPNP_FUNCTION(0x2011),
82                 (long) "NetGear EA201" },
83         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
84                 ISAPNP_VENDOR('E','D','I'), ISAPNP_FUNCTION(0x0216),
85                 (long) "NN NE2000" },
86         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
87                 ISAPNP_VENDOR('P','N','P'), ISAPNP_FUNCTION(0x80d6),
88                 (long) "Generic PNP" },
89         { }     /* terminate list */
90 };
91
92 MODULE_DEVICE_TABLE(isapnp, isapnp_clone_list);
93
94 #ifdef SUPPORT_NE_BAD_CLONES
95 /* A list of bad clones that we none-the-less recognize. */
96 static struct { const char *name8, *name16; unsigned char SAprefix[4];}
97 bad_clone_list[] __initdata = {
98     {"DE100", "DE200", {0x00, 0xDE, 0x01,}},
99     {"DE120", "DE220", {0x00, 0x80, 0xc8,}},
100     {"DFI1000", "DFI2000", {'D', 'F', 'I',}}, /* Original, eh?  */
101     {"EtherNext UTP8", "EtherNext UTP16", {0x00, 0x00, 0x79}},
102     {"NE1000","NE2000-invalid", {0x00, 0x00, 0xd8}}, /* Ancient real NE1000. */
103     {"NN1000", "NN2000",  {0x08, 0x03, 0x08}}, /* Outlaw no-name clone. */
104     {"4-DIM8","4-DIM16", {0x00,0x00,0x4d,}},  /* Outlaw 4-Dimension cards. */
105     {"Con-Intl_8", "Con-Intl_16", {0x00, 0x00, 0x24}}, /* Connect Int'nl */
106     {"ET-100","ET-200", {0x00, 0x45, 0x54}}, /* YANG and YA clone */
107     {"COMPEX","COMPEX16",{0x00,0x80,0x48}}, /* Broken ISA Compex cards */
108     {"E-LAN100", "E-LAN200", {0x00, 0x00, 0x5d}}, /* Broken ne1000 clones */
109     {"PCM-4823", "PCM-4823", {0x00, 0xc0, 0x6c}}, /* Broken Advantech MoBo */
110     {"REALTEK", "RTL8019", {0x00, 0x00, 0xe8}}, /* no-name with Realtek chip */
111     {"LCS-8834", "LCS-8836", {0x04, 0x04, 0x37}}, /* ShinyNet (SET) */
112     {0,}
113 };
114 #endif
115
116 /* ---- No user-serviceable parts below ---- */
117
118 #define NE_BASE  (dev->base_addr)
119 #define NE_CMD          0x00
120 #define NE_DATAPORT     0x10    /* NatSemi-defined port window offset. */
121 #define NE_RESET        0x1f    /* Issue a read to reset, a write to clear. */
122 #define NE_IO_EXTENT    0x20
123
124 #define NE1SM_START_PG  0x20    /* First page of TX buffer */
125 #define NE1SM_STOP_PG   0x40    /* Last page +1 of RX ring */
126 #define NESM_START_PG   0x40    /* First page of TX buffer */
127 #define NESM_STOP_PG    0x80    /* Last page +1 of RX ring */
128
129 static int ne_probe1(struct net_device *dev, int ioaddr);
130 static int ne_probe_isapnp(struct net_device *dev);
131
132 static int ne_open(struct net_device *dev);
133 static int ne_close(struct net_device *dev);
134
135 static void ne_reset_8390(struct net_device *dev);
136 static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
137                           int ring_page);
138 static void ne_block_input(struct net_device *dev, int count,
139                           struct sk_buff *skb, int ring_offset);
140 static void ne_block_output(struct net_device *dev, const int count,
141                 const unsigned char *buf, const int start_page);
142
143 \f
144 /*  Probe for various non-shared-memory ethercards.
145
146    NEx000-clone boards have a Station Address PROM (SAPROM) in the packet
147    buffer memory space.  NE2000 clones have 0x57,0x57 in bytes 0x0e,0x0f of
148    the SAPROM, while other supposed NE2000 clones must be detected by their
149    SA prefix.
150
151    Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
152    mode results in doubled values, which can be detected and compensated for.
153
154    The probe is also responsible for initializing the card and filling
155    in the 'dev' and 'ei_status' structures.
156
157    We use the minimum memory size for some ethercard product lines, iff we can't
158    distinguish models.  You can increase the packet buffer size by setting
159    PACKETBUF_MEMSIZE.  Reported Cabletron packet buffer locations are:
160         E1010   starts at 0x100 and ends at 0x2000.
161         E1010-x starts at 0x100 and ends at 0x8000. ("-x" means "more memory")
162         E2010    starts at 0x100 and ends at 0x4000.
163         E2010-x starts at 0x100 and ends at 0xffff.  */
164
165 static int __init do_ne_probe(struct net_device *dev)
166 {
167         unsigned int base_addr = dev->base_addr;
168 #ifndef MODULE
169         int orig_irq = dev->irq;
170 #endif
171
172         SET_MODULE_OWNER(dev);
173
174         /* First check any supplied i/o locations. User knows best. <cough> */
175         if (base_addr > 0x1ff)  /* Check a single specified location. */
176                 return ne_probe1(dev, base_addr);
177         else if (base_addr != 0)        /* Don't probe at all. */
178                 return -ENXIO;
179
180         /* Then look for any installed ISAPnP clones */
181         if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
182                 return 0;
183
184 #ifndef MODULE
185         /* Last resort. The semi-risky ISA auto-probe. */
186         for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
187                 int ioaddr = netcard_portlist[base_addr];
188                 dev->irq = orig_irq;
189                 if (ne_probe1(dev, ioaddr) == 0)
190                         return 0;
191         }
192 #endif
193
194         return -ENODEV;
195 }
196
197 static void cleanup_card(struct net_device *dev)
198 {
199         struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
200         if (idev)
201                 pnp_device_detach(idev);
202         free_irq(dev->irq, dev);
203         release_region(dev->base_addr, NE_IO_EXTENT);
204 }
205
206 struct net_device * __init ne_probe(int unit)
207 {
208         struct net_device *dev = alloc_ei_netdev();
209         int err;
210
211         if (!dev)
212                 return ERR_PTR(-ENOMEM);
213
214         sprintf(dev->name, "eth%d", unit);
215         netdev_boot_setup_check(dev);
216
217         err = do_ne_probe(dev);
218         if (err)
219                 goto out;
220         err = register_netdev(dev);
221         if (err)
222                 goto out1;
223         return dev;
224 out1:
225         cleanup_card(dev);
226 out:
227         free_netdev(dev);
228         return ERR_PTR(err);
229 }
230
231 static int __init ne_probe_isapnp(struct net_device *dev)
232 {
233         int i;
234
235         for (i = 0; isapnp_clone_list[i].vendor != 0; i++) {
236                 struct pnp_dev *idev = NULL;
237
238                 while ((idev = pnp_find_dev(NULL,
239                                             isapnp_clone_list[i].vendor,
240                                             isapnp_clone_list[i].function,
241                                             idev))) {
242                         /* Avoid already found cards from previous calls */
243                         if (pnp_device_attach(idev) < 0)
244                                 continue;
245                         if (pnp_activate_dev(idev) < 0) {
246                                 pnp_device_detach(idev);
247                                 continue;
248                         }
249                         /* if no io and irq, search for next */
250                         if (!pnp_port_valid(idev, 0) || !pnp_irq_valid(idev, 0)) {
251                                 pnp_device_detach(idev);
252                                 continue;
253                         }
254                         /* found it */
255                         dev->base_addr = pnp_port_start(idev, 0);
256                         dev->irq = pnp_irq(idev, 0);
257                         printk(KERN_INFO "ne.c: ISAPnP reports %s at i/o %#lx, irq %d.\n",
258                                 (char *) isapnp_clone_list[i].driver_data,
259                                 dev->base_addr, dev->irq);
260                         if (ne_probe1(dev, dev->base_addr) != 0) {      /* Shouldn't happen. */
261                                 printk(KERN_ERR "ne.c: Probe of ISAPnP card at %#lx failed.\n", dev->base_addr);
262                                 pnp_device_detach(idev);
263                                 return -ENXIO;
264                         }
265                         ei_status.priv = (unsigned long)idev;
266                         break;
267                 }
268                 if (!idev)
269                         continue;
270                 return 0;
271         }
272
273         return -ENODEV;
274 }
275
276 static int __init ne_probe1(struct net_device *dev, int ioaddr)
277 {
278         int i;
279         unsigned char SA_prom[32];
280         int wordlength = 2;
281         const char *name = NULL;
282         int start_page, stop_page;
283         int neX000, ctron, copam, bad_card;
284         int reg0, ret;
285         static unsigned version_printed;
286
287         if (!request_region(ioaddr, NE_IO_EXTENT, dev->name))
288                 return -EBUSY;
289
290         reg0 = inb_p(ioaddr);
291         if (reg0 == 0xFF) {
292                 ret = -ENODEV;
293                 goto err_out;
294         }
295
296         /* Do a preliminary verification that we have a 8390. */
297         {
298                 int regd;
299                 outb_p(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
300                 regd = inb_p(ioaddr + 0x0d);
301                 outb_p(0xff, ioaddr + 0x0d);
302                 outb_p(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
303                 inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
304                 if (inb_p(ioaddr + EN0_COUNTER0) != 0) {
305                         outb_p(reg0, ioaddr);
306                         outb_p(regd, ioaddr + 0x0d);    /* Restore the old values. */
307                         ret = -ENODEV;
308                         goto err_out;
309                 }
310         }
311
312         if (ei_debug  &&  version_printed++ == 0)
313                 printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2);
314
315         printk(KERN_INFO "NE*000 ethercard probe at %#3x:", ioaddr);
316
317         /* A user with a poor card that fails to ack the reset, or that
318            does not have a valid 0x57,0x57 signature can still use this
319            without having to recompile. Specifying an i/o address along
320            with an otherwise unused dev->mem_end value of "0xBAD" will
321            cause the driver to skip these parts of the probe. */
322
323         bad_card = ((dev->base_addr != 0) && (dev->mem_end == 0xbad));
324
325         /* Reset card. Who knows what dain-bramaged state it was left in. */
326
327         {
328                 unsigned long reset_start_time = jiffies;
329
330                 /* DON'T change these to inb_p/outb_p or reset will fail on clones. */
331                 outb(inb(ioaddr + NE_RESET), ioaddr + NE_RESET);
332
333                 while ((inb_p(ioaddr + EN0_ISR) & ENISR_RESET) == 0)
334                 if (jiffies - reset_start_time > 2*HZ/100) {
335                         if (bad_card) {
336                                 printk(" (warning: no reset ack)");
337                                 break;
338                         } else {
339                                 printk(" not found (no reset ack).\n");
340                                 ret = -ENODEV;
341                                 goto err_out;
342                         }
343                 }
344
345                 outb_p(0xff, ioaddr + EN0_ISR);         /* Ack all intr. */
346         }
347
348         /* Read the 16 bytes of station address PROM.
349            We must first initialize registers, similar to NS8390_init(eifdev, 0).
350            We can't reliably read the SAPROM address without this.
351            (I learned the hard way!). */
352         {
353                 struct {unsigned char value, offset; } program_seq[] =
354                 {
355                         {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
356                         {0x48,  EN0_DCFG},      /* Set byte-wide (0x48) access. */
357                         {0x00,  EN0_RCNTLO},    /* Clear the count regs. */
358                         {0x00,  EN0_RCNTHI},
359                         {0x00,  EN0_IMR},       /* Mask completion irq. */
360                         {0xFF,  EN0_ISR},
361                         {E8390_RXOFF, EN0_RXCR},        /* 0x20  Set to monitor */
362                         {E8390_TXOFF, EN0_TXCR},        /* 0x02  and loopback mode. */
363                         {32,    EN0_RCNTLO},
364                         {0x00,  EN0_RCNTHI},
365                         {0x00,  EN0_RSARLO},    /* DMA starting at 0x0000. */
366                         {0x00,  EN0_RSARHI},
367                         {E8390_RREAD+E8390_START, E8390_CMD},
368                 };
369
370                 for (i = 0; i < sizeof(program_seq)/sizeof(program_seq[0]); i++)
371                         outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
372
373         }
374         for(i = 0; i < 32 /*sizeof(SA_prom)*/; i+=2) {
375                 SA_prom[i] = inb(ioaddr + NE_DATAPORT);
376                 SA_prom[i+1] = inb(ioaddr + NE_DATAPORT);
377                 if (SA_prom[i] != SA_prom[i+1])
378                         wordlength = 1;
379         }
380
381         if (wordlength == 2)
382         {
383                 for (i = 0; i < 16; i++)
384                         SA_prom[i] = SA_prom[i+i];
385                 /* We must set the 8390 for word mode. */
386                 outb_p(0x49, ioaddr + EN0_DCFG);
387                 start_page = NESM_START_PG;
388                 stop_page = NESM_STOP_PG;
389         } else {
390                 start_page = NE1SM_START_PG;
391                 stop_page = NE1SM_STOP_PG;
392         }
393
394         neX000 = (SA_prom[14] == 0x57  &&  SA_prom[15] == 0x57);
395         ctron =  (SA_prom[0] == 0x00 && SA_prom[1] == 0x00 && SA_prom[2] == 0x1d);
396         copam =  (SA_prom[14] == 0x49 && SA_prom[15] == 0x00);
397
398         /* Set up the rest of the parameters. */
399         if (neX000 || bad_card || copam) {
400                 name = (wordlength == 2) ? "NE2000" : "NE1000";
401         }
402         else if (ctron)
403         {
404                 name = (wordlength == 2) ? "Ctron-8" : "Ctron-16";
405                 start_page = 0x01;
406                 stop_page = (wordlength == 2) ? 0x40 : 0x20;
407         }
408         else
409         {
410 #ifdef SUPPORT_NE_BAD_CLONES
411                 /* Ack!  Well, there might be a *bad* NE*000 clone there.
412                    Check for total bogus addresses. */
413                 for (i = 0; bad_clone_list[i].name8; i++)
414                 {
415                         if (SA_prom[0] == bad_clone_list[i].SAprefix[0] &&
416                                 SA_prom[1] == bad_clone_list[i].SAprefix[1] &&
417                                 SA_prom[2] == bad_clone_list[i].SAprefix[2])
418                         {
419                                 if (wordlength == 2)
420                                 {
421                                         name = bad_clone_list[i].name16;
422                                 } else {
423                                         name = bad_clone_list[i].name8;
424                                 }
425                                 break;
426                         }
427                 }
428                 if (bad_clone_list[i].name8 == NULL)
429                 {
430                         printk(" not found (invalid signature %2.2x %2.2x).\n",
431                                 SA_prom[14], SA_prom[15]);
432                         ret = -ENXIO;
433                         goto err_out;
434                 }
435 #else
436                 printk(" not found.\n");
437                 ret = -ENXIO;
438                 goto err_out;
439 #endif
440         }
441
442         if (dev->irq < 2)
443         {
444                 unsigned long cookie = probe_irq_on();
445                 outb_p(0x50, ioaddr + EN0_IMR); /* Enable one interrupt. */
446                 outb_p(0x00, ioaddr + EN0_RCNTLO);
447                 outb_p(0x00, ioaddr + EN0_RCNTHI);
448                 outb_p(E8390_RREAD+E8390_START, ioaddr); /* Trigger it... */
449                 mdelay(10);             /* wait 10ms for interrupt to propagate */
450                 outb_p(0x00, ioaddr + EN0_IMR);                 /* Mask it again. */
451                 dev->irq = probe_irq_off(cookie);
452                 if (ei_debug > 2)
453                         printk(" autoirq is %d\n", dev->irq);
454         } else if (dev->irq == 2)
455                 /* Fixup for users that don't know that IRQ 2 is really IRQ 9,
456                    or don't know which one to set. */
457                 dev->irq = 9;
458
459         if (! dev->irq) {
460                 printk(" failed to detect IRQ line.\n");
461                 ret = -EAGAIN;
462                 goto err_out;
463         }
464
465         /* Snarf the interrupt now.  There's no point in waiting since we cannot
466            share and the board will usually be enabled. */
467         ret = request_irq(dev->irq, ei_interrupt, 0, name, dev);
468         if (ret) {
469                 printk (" unable to get IRQ %d (errno=%d).\n", dev->irq, ret);
470                 goto err_out;
471         }
472
473         dev->base_addr = ioaddr;
474
475         for(i = 0; i < ETHER_ADDR_LEN; i++) {
476                 printk(" %2.2x", SA_prom[i]);
477                 dev->dev_addr[i] = SA_prom[i];
478         }
479
480         printk("\n%s: %s found at %#x, using IRQ %d.\n",
481                 dev->name, name, ioaddr, dev->irq);
482
483         ei_status.name = name;
484         ei_status.tx_start_page = start_page;
485         ei_status.stop_page = stop_page;
486         ei_status.word16 = (wordlength == 2);
487
488         ei_status.rx_start_page = start_page + TX_PAGES;
489 #ifdef PACKETBUF_MEMSIZE
490          /* Allow the packet buffer size to be overridden by know-it-alls. */
491         ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
492 #endif
493
494         ei_status.reset_8390 = &ne_reset_8390;
495         ei_status.block_input = &ne_block_input;
496         ei_status.block_output = &ne_block_output;
497         ei_status.get_8390_hdr = &ne_get_8390_hdr;
498         ei_status.priv = 0;
499         dev->open = &ne_open;
500         dev->stop = &ne_close;
501 #ifdef CONFIG_NET_POLL_CONTROLLER
502         dev->poll_controller = ei_poll;
503 #endif
504         NS8390_init(dev, 0);
505         return 0;
506
507 err_out:
508         release_region(ioaddr, NE_IO_EXTENT);
509         return ret;
510 }
511
512 static int ne_open(struct net_device *dev)
513 {
514         ei_open(dev);
515         return 0;
516 }
517
518 static int ne_close(struct net_device *dev)
519 {
520         if (ei_debug > 1)
521                 printk(KERN_DEBUG "%s: Shutting down ethercard.\n", dev->name);
522         ei_close(dev);
523         return 0;
524 }
525
526 /* Hard reset the card.  This used to pause for the same period that a
527    8390 reset command required, but that shouldn't be necessary. */
528
529 static void ne_reset_8390(struct net_device *dev)
530 {
531         unsigned long reset_start_time = jiffies;
532
533         if (ei_debug > 1)
534                 printk(KERN_DEBUG "resetting the 8390 t=%ld...", jiffies);
535
536         /* DON'T change these to inb_p/outb_p or reset will fail on clones. */
537         outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
538
539         ei_status.txing = 0;
540         ei_status.dmaing = 0;
541
542         /* This check _should_not_ be necessary, omit eventually. */
543         while ((inb_p(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
544                 if (jiffies - reset_start_time > 2*HZ/100) {
545                         printk(KERN_WARNING "%s: ne_reset_8390() did not complete.\n", dev->name);
546                         break;
547                 }
548         outb_p(ENISR_RESET, NE_BASE + EN0_ISR); /* Ack intr. */
549 }
550
551 /* Grab the 8390 specific header. Similar to the block_input routine, but
552    we don't need to be concerned with ring wrap as the header will be at
553    the start of a page, so we optimize accordingly. */
554
555 static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
556 {
557         int nic_base = dev->base_addr;
558
559         /* This *shouldn't* happen. If it does, it's the last thing you'll see */
560
561         if (ei_status.dmaing)
562         {
563                 printk(KERN_EMERG "%s: DMAing conflict in ne_get_8390_hdr "
564                         "[DMAstat:%d][irqlock:%d].\n",
565                         dev->name, ei_status.dmaing, ei_status.irqlock);
566                 return;
567         }
568
569         ei_status.dmaing |= 0x01;
570         outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
571         outb_p(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
572         outb_p(0, nic_base + EN0_RCNTHI);
573         outb_p(0, nic_base + EN0_RSARLO);               /* On page boundary */
574         outb_p(ring_page, nic_base + EN0_RSARHI);
575         outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
576
577         if (ei_status.word16)
578                 insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);
579         else
580                 insb(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr));
581
582         outb_p(ENISR_RDC, nic_base + EN0_ISR);  /* Ack intr. */
583         ei_status.dmaing &= ~0x01;
584
585         le16_to_cpus(&hdr->count);
586 }
587
588 /* Block input and output, similar to the Crynwr packet driver.  If you
589    are porting to a new ethercard, look at the packet driver source for hints.
590    The NEx000 doesn't share the on-board packet memory -- you have to put
591    the packet out through the "remote DMA" dataport using outb. */
592
593 static void ne_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
594 {
595 #ifdef NE_SANITY_CHECK
596         int xfer_count = count;
597 #endif
598         int nic_base = dev->base_addr;
599         char *buf = skb->data;
600
601         /* This *shouldn't* happen. If it does, it's the last thing you'll see */
602         if (ei_status.dmaing)
603         {
604                 printk(KERN_EMERG "%s: DMAing conflict in ne_block_input "
605                         "[DMAstat:%d][irqlock:%d].\n",
606                         dev->name, ei_status.dmaing, ei_status.irqlock);
607                 return;
608         }
609         ei_status.dmaing |= 0x01;
610         outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
611         outb_p(count & 0xff, nic_base + EN0_RCNTLO);
612         outb_p(count >> 8, nic_base + EN0_RCNTHI);
613         outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
614         outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
615         outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
616         if (ei_status.word16)
617         {
618                 insw(NE_BASE + NE_DATAPORT,buf,count>>1);
619                 if (count & 0x01)
620                 {
621                         buf[count-1] = inb(NE_BASE + NE_DATAPORT);
622 #ifdef NE_SANITY_CHECK
623                         xfer_count++;
624 #endif
625                 }
626         } else {
627                 insb(NE_BASE + NE_DATAPORT, buf, count);
628         }
629
630 #ifdef NE_SANITY_CHECK
631         /* This was for the ALPHA version only, but enough people have
632            been encountering problems so it is still here.  If you see
633            this message you either 1) have a slightly incompatible clone
634            or 2) have noise/speed problems with your bus. */
635
636         if (ei_debug > 1)
637         {
638                 /* DMA termination address check... */
639                 int addr, tries = 20;
640                 do {
641                         /* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
642                            -- it's broken for Rx on some cards! */
643                         int high = inb_p(nic_base + EN0_RSARHI);
644                         int low = inb_p(nic_base + EN0_RSARLO);
645                         addr = (high << 8) + low;
646                         if (((ring_offset + xfer_count) & 0xff) == low)
647                                 break;
648                 } while (--tries > 0);
649                 if (tries <= 0)
650                         printk(KERN_WARNING "%s: RX transfer address mismatch,"
651                                 "%#4.4x (expected) vs. %#4.4x (actual).\n",
652                                 dev->name, ring_offset + xfer_count, addr);
653         }
654 #endif
655         outb_p(ENISR_RDC, nic_base + EN0_ISR);  /* Ack intr. */
656         ei_status.dmaing &= ~0x01;
657 }
658
659 static void ne_block_output(struct net_device *dev, int count,
660                 const unsigned char *buf, const int start_page)
661 {
662         int nic_base = NE_BASE;
663         unsigned long dma_start;
664 #ifdef NE_SANITY_CHECK
665         int retries = 0;
666 #endif
667
668         /* Round the count up for word writes.  Do we need to do this?
669            What effect will an odd byte count have on the 8390?
670            I should check someday. */
671
672         if (ei_status.word16 && (count & 0x01))
673                 count++;
674
675         /* This *shouldn't* happen. If it does, it's the last thing you'll see */
676         if (ei_status.dmaing)
677         {
678                 printk(KERN_EMERG "%s: DMAing conflict in ne_block_output."
679                         "[DMAstat:%d][irqlock:%d]\n",
680                         dev->name, ei_status.dmaing, ei_status.irqlock);
681                 return;
682         }
683         ei_status.dmaing |= 0x01;
684         /* We should already be in page 0, but to be safe... */
685         outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD);
686
687 #ifdef NE_SANITY_CHECK
688 retry:
689 #endif
690
691 #ifdef NE8390_RW_BUGFIX
692         /* Handle the read-before-write bug the same way as the
693            Crynwr packet driver -- the NatSemi method doesn't work.
694            Actually this doesn't always work either, but if you have
695            problems with your NEx000 this is better than nothing! */
696
697         outb_p(0x42, nic_base + EN0_RCNTLO);
698         outb_p(0x00,   nic_base + EN0_RCNTHI);
699         outb_p(0x42, nic_base + EN0_RSARLO);
700         outb_p(0x00, nic_base + EN0_RSARHI);
701         outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
702         /* Make certain that the dummy read has occurred. */
703         udelay(6);
704 #endif
705
706         outb_p(ENISR_RDC, nic_base + EN0_ISR);
707
708         /* Now the normal output. */
709         outb_p(count & 0xff, nic_base + EN0_RCNTLO);
710         outb_p(count >> 8,   nic_base + EN0_RCNTHI);
711         outb_p(0x00, nic_base + EN0_RSARLO);
712         outb_p(start_page, nic_base + EN0_RSARHI);
713
714         outb_p(E8390_RWRITE+E8390_START, nic_base + NE_CMD);
715         if (ei_status.word16) {
716                 outsw(NE_BASE + NE_DATAPORT, buf, count>>1);
717         } else {
718                 outsb(NE_BASE + NE_DATAPORT, buf, count);
719         }
720
721         dma_start = jiffies;
722
723 #ifdef NE_SANITY_CHECK
724         /* This was for the ALPHA version only, but enough people have
725            been encountering problems so it is still here. */
726
727         if (ei_debug > 1)
728         {
729                 /* DMA termination address check... */
730                 int addr, tries = 20;
731                 do {
732                         int high = inb_p(nic_base + EN0_RSARHI);
733                         int low = inb_p(nic_base + EN0_RSARLO);
734                         addr = (high << 8) + low;
735                         if ((start_page << 8) + count == addr)
736                                 break;
737                 } while (--tries > 0);
738
739                 if (tries <= 0)
740                 {
741                         printk(KERN_WARNING "%s: Tx packet transfer address mismatch,"
742                                 "%#4.4x (expected) vs. %#4.4x (actual).\n",
743                                 dev->name, (start_page << 8) + count, addr);
744                         if (retries++ == 0)
745                                 goto retry;
746                 }
747         }
748 #endif
749
750         while ((inb_p(nic_base + EN0_ISR) & ENISR_RDC) == 0)
751                 if (jiffies - dma_start > 2*HZ/100) {           /* 20ms */
752                         printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name);
753                         ne_reset_8390(dev);
754                         NS8390_init(dev,1);
755                         break;
756                 }
757
758         outb_p(ENISR_RDC, nic_base + EN0_ISR);  /* Ack intr. */
759         ei_status.dmaing &= ~0x01;
760         return;
761 }
762
763 \f
764 #ifdef MODULE
765 #define MAX_NE_CARDS    4       /* Max number of NE cards per module */
766 static struct net_device *dev_ne[MAX_NE_CARDS];
767 static int io[MAX_NE_CARDS];
768 static int irq[MAX_NE_CARDS];
769 static int bad[MAX_NE_CARDS];   /* 0xbad = bad sig or no reset ack */
770
771 MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
772 MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
773 MODULE_PARM(bad, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
774 MODULE_PARM_DESC(io, "I/O base address(es),required");
775 MODULE_PARM_DESC(irq, "IRQ number(s)");
776 MODULE_PARM_DESC(bad, "Accept card(s) with bad signatures");
777 MODULE_DESCRIPTION("NE1000/NE2000 ISA/PnP Ethernet driver");
778 MODULE_LICENSE("GPL");
779
780 /* This is set up so that no ISA autoprobe takes place. We can't guarantee
781 that the ne2k probe is the last 8390 based probe to take place (as it
782 is at boot) and so the probe will get confused by any other 8390 cards.
783 ISA device autoprobes on a running machine are not recommended anyway. */
784
785 int init_module(void)
786 {
787         int this_dev, found = 0;
788
789         for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
790                 struct net_device *dev = alloc_ei_netdev();
791                 if (!dev)
792                         break;
793                 dev->irq = irq[this_dev];
794                 dev->mem_end = bad[this_dev];
795                 dev->base_addr = io[this_dev];
796                 if (do_ne_probe(dev) == 0) {
797                         if (register_netdev(dev) == 0) {
798                                 dev_ne[found++] = dev;
799                                 continue;
800                         }
801                         cleanup_card(dev);
802                 }
803                 free_netdev(dev);
804                 if (found)
805                         break;
806                 if (io[this_dev] != 0)
807                         printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]);
808                 else
809                         printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n");
810                 return -ENXIO;
811         }
812         if (found)
813                 return 0;
814         return -ENODEV;
815 }
816
817 void cleanup_module(void)
818 {
819         int this_dev;
820
821         for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
822                 struct net_device *dev = dev_ne[this_dev];
823                 if (dev) {
824                         unregister_netdev(dev);
825                         cleanup_card(dev);
826                         free_netdev(dev);
827                 }
828         }
829 }
830 #endif /* MODULE */