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