xref: /linux/drivers/net/ethernet/8390/ne.c (revision ca55b2fef3a9373fcfc30f82fd26bc7fccbda732)
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     Hayato Fujiwara	: Add m32r support.
33 
34 */
35 
36 /* Routines for the NatSemi-based designs (NE[12]000). */
37 
38 static const char version1[] =
39 "ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)\n";
40 static const char version2[] =
41 "Last modified Nov 1, 2000 by Paul Gortmaker\n";
42 
43 
44 #include <linux/module.h>
45 #include <linux/kernel.h>
46 #include <linux/errno.h>
47 #include <linux/isapnp.h>
48 #include <linux/init.h>
49 #include <linux/interrupt.h>
50 #include <linux/delay.h>
51 #include <linux/netdevice.h>
52 #include <linux/etherdevice.h>
53 #include <linux/jiffies.h>
54 #include <linux/platform_device.h>
55 
56 #include <asm/io.h>
57 
58 #include "8390.h"
59 
60 #define DRV_NAME "ne"
61 
62 /* Some defines that people can play with if so inclined. */
63 
64 /* Do we support clones that don't adhere to 14,15 of the SAprom ? */
65 #define SUPPORT_NE_BAD_CLONES
66 /* 0xbad = bad sig or no reset ack */
67 #define BAD 0xbad
68 
69 #define MAX_NE_CARDS	4	/* Max number of NE cards per module */
70 static struct platform_device *pdev_ne[MAX_NE_CARDS];
71 static int io[MAX_NE_CARDS];
72 static int irq[MAX_NE_CARDS];
73 static int bad[MAX_NE_CARDS];
74 static u32 ne_msg_enable;
75 
76 #ifdef MODULE
77 module_param_array(io, int, NULL, 0);
78 module_param_array(irq, int, NULL, 0);
79 module_param_array(bad, int, NULL, 0);
80 module_param_named(msg_enable, ne_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
81 MODULE_PARM_DESC(io, "I/O base address(es),required");
82 MODULE_PARM_DESC(irq, "IRQ number(s)");
83 MODULE_PARM_DESC(bad, "Accept card(s) with bad signatures");
84 MODULE_PARM_DESC(msg_enable, "Debug message level (see linux/netdevice.h for bitmap)");
85 MODULE_DESCRIPTION("NE1000/NE2000 ISA/PnP Ethernet driver");
86 MODULE_LICENSE("GPL");
87 #endif /* MODULE */
88 
89 /* Do we perform extra sanity checks on stuff ? */
90 /* #define NE_SANITY_CHECK */
91 
92 /* Do we implement the read before write bugfix ? */
93 /* #define NE_RW_BUGFIX */
94 
95 /* Do we have a non std. amount of memory? (in units of 256 byte pages) */
96 /* #define PACKETBUF_MEMSIZE	0x40 */
97 
98 /* This is set up so that no ISA autoprobe takes place. We can't guarantee
99 that the ne2k probe is the last 8390 based probe to take place (as it
100 is at boot) and so the probe will get confused by any other 8390 cards.
101 ISA device autoprobes on a running machine are not recommended anyway. */
102 #if !defined(MODULE) && (defined(CONFIG_ISA) || defined(CONFIG_M32R))
103 /* Do we need a portlist for the ISA auto-probe ? */
104 #define NEEDS_PORTLIST
105 #endif
106 
107 /* A zero-terminated list of I/O addresses to be probed at boot. */
108 #ifdef NEEDS_PORTLIST
109 static unsigned int netcard_portlist[] __initdata = {
110 	0x300, 0x280, 0x320, 0x340, 0x360, 0x380, 0
111 };
112 #endif
113 
114 static struct isapnp_device_id isapnp_clone_list[] __initdata = {
115 	{	ISAPNP_CARD_ID('A','X','E',0x2011),
116 		ISAPNP_VENDOR('A','X','E'), ISAPNP_FUNCTION(0x2011),
117 		(long) "NetGear EA201" },
118 	{	ISAPNP_ANY_ID, ISAPNP_ANY_ID,
119 		ISAPNP_VENDOR('E','D','I'), ISAPNP_FUNCTION(0x0216),
120 		(long) "NN NE2000" },
121 	{	ISAPNP_ANY_ID, ISAPNP_ANY_ID,
122 		ISAPNP_VENDOR('P','N','P'), ISAPNP_FUNCTION(0x80d6),
123 		(long) "Generic PNP" },
124 	{ }	/* terminate list */
125 };
126 
127 MODULE_DEVICE_TABLE(isapnp, isapnp_clone_list);
128 
129 #ifdef SUPPORT_NE_BAD_CLONES
130 /* A list of bad clones that we none-the-less recognize. */
131 static struct { const char *name8, *name16; unsigned char SAprefix[4];}
132 bad_clone_list[] __initdata = {
133     {"DE100", "DE200", {0x00, 0xDE, 0x01,}},
134     {"DE120", "DE220", {0x00, 0x80, 0xc8,}},
135     {"DFI1000", "DFI2000", {'D', 'F', 'I',}}, /* Original, eh?  */
136     {"EtherNext UTP8", "EtherNext UTP16", {0x00, 0x00, 0x79}},
137     {"NE1000","NE2000-invalid", {0x00, 0x00, 0xd8}}, /* Ancient real NE1000. */
138     {"NN1000", "NN2000",  {0x08, 0x03, 0x08}}, /* Outlaw no-name clone. */
139     {"4-DIM8","4-DIM16", {0x00,0x00,0x4d,}},  /* Outlaw 4-Dimension cards. */
140     {"Con-Intl_8", "Con-Intl_16", {0x00, 0x00, 0x24}}, /* Connect Int'nl */
141     {"ET-100","ET-200", {0x00, 0x45, 0x54}}, /* YANG and YA clone */
142     {"COMPEX","COMPEX16",{0x00,0x80,0x48}}, /* Broken ISA Compex cards */
143     {"E-LAN100", "E-LAN200", {0x00, 0x00, 0x5d}}, /* Broken ne1000 clones */
144     {"PCM-4823", "PCM-4823", {0x00, 0xc0, 0x6c}}, /* Broken Advantech MoBo */
145     {"REALTEK", "RTL8019", {0x00, 0x00, 0xe8}}, /* no-name with Realtek chip */
146 #ifdef CONFIG_MACH_TX49XX
147     {"RBHMA4X00-RTL8019", "RBHMA4X00-RTL8019", {0x00, 0x60, 0x0a}},  /* Toshiba built-in */
148 #endif
149     {"LCS-8834", "LCS-8836", {0x04, 0x04, 0x37}}, /* ShinyNet (SET) */
150     {NULL,}
151 };
152 #endif
153 
154 /* ---- No user-serviceable parts below ---- */
155 
156 #define NE_BASE	 (dev->base_addr)
157 #define NE_CMD	 	0x00
158 #define NE_DATAPORT	0x10	/* NatSemi-defined port window offset. */
159 #define NE_RESET	0x1f	/* Issue a read to reset, a write to clear. */
160 #define NE_IO_EXTENT	0x20
161 
162 #define NE1SM_START_PG	0x20	/* First page of TX buffer */
163 #define NE1SM_STOP_PG 	0x40	/* Last page +1 of RX ring */
164 #define NESM_START_PG	0x40	/* First page of TX buffer */
165 #define NESM_STOP_PG	0x80	/* Last page +1 of RX ring */
166 
167 #if defined(CONFIG_PLAT_MAPPI)
168 #  define DCR_VAL 0x4b
169 #elif defined(CONFIG_PLAT_OAKS32R)  || \
170    defined(CONFIG_MACH_TX49XX)
171 #  define DCR_VAL 0x48		/* 8-bit mode */
172 #elif defined(CONFIG_ATARI)	/* 8-bit mode on Atari, normal on Q40 */
173 #  define DCR_VAL (MACH_IS_ATARI ? 0x48 : 0x49)
174 #else
175 #  define DCR_VAL 0x49
176 #endif
177 
178 static int ne_probe1(struct net_device *dev, unsigned long ioaddr);
179 static int ne_probe_isapnp(struct net_device *dev);
180 
181 static void ne_reset_8390(struct net_device *dev);
182 static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
183 			  int ring_page);
184 static void ne_block_input(struct net_device *dev, int count,
185 			  struct sk_buff *skb, int ring_offset);
186 static void ne_block_output(struct net_device *dev, const int count,
187 		const unsigned char *buf, const int start_page);
188 
189 
190 /*  Probe for various non-shared-memory ethercards.
191 
192    NEx000-clone boards have a Station Address PROM (SAPROM) in the packet
193    buffer memory space.  NE2000 clones have 0x57,0x57 in bytes 0x0e,0x0f of
194    the SAPROM, while other supposed NE2000 clones must be detected by their
195    SA prefix.
196 
197    Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
198    mode results in doubled values, which can be detected and compensated for.
199 
200    The probe is also responsible for initializing the card and filling
201    in the 'dev' and 'ei_status' structures.
202 
203    We use the minimum memory size for some ethercard product lines, iff we can't
204    distinguish models.  You can increase the packet buffer size by setting
205    PACKETBUF_MEMSIZE.  Reported Cabletron packet buffer locations are:
206 	E1010   starts at 0x100 and ends at 0x2000.
207 	E1010-x starts at 0x100 and ends at 0x8000. ("-x" means "more memory")
208 	E2010	 starts at 0x100 and ends at 0x4000.
209 	E2010-x starts at 0x100 and ends at 0xffff.  */
210 
211 static int __init do_ne_probe(struct net_device *dev)
212 {
213 	unsigned long base_addr = dev->base_addr;
214 #ifdef NEEDS_PORTLIST
215 	int orig_irq = dev->irq;
216 #endif
217 
218 	/* First check any supplied i/o locations. User knows best. <cough> */
219 	if (base_addr > 0x1ff) {	/* Check a single specified location. */
220 		int ret = ne_probe1(dev, base_addr);
221 		if (ret)
222 			netdev_warn(dev, "ne.c: No NE*000 card found at "
223 				    "i/o = %#lx\n", base_addr);
224 		return ret;
225 	}
226 	else if (base_addr != 0)	/* Don't probe at all. */
227 		return -ENXIO;
228 
229 	/* Then look for any installed ISAPnP clones */
230 	if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
231 		return 0;
232 
233 #ifdef NEEDS_PORTLIST
234 	/* Last resort. The semi-risky ISA auto-probe. */
235 	for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
236 		int ioaddr = netcard_portlist[base_addr];
237 		dev->irq = orig_irq;
238 		if (ne_probe1(dev, ioaddr) == 0)
239 			return 0;
240 	}
241 #endif
242 
243 	return -ENODEV;
244 }
245 
246 static int __init ne_probe_isapnp(struct net_device *dev)
247 {
248 	int i;
249 
250 	for (i = 0; isapnp_clone_list[i].vendor != 0; i++) {
251 		struct pnp_dev *idev = NULL;
252 
253 		while ((idev = pnp_find_dev(NULL,
254 					    isapnp_clone_list[i].vendor,
255 					    isapnp_clone_list[i].function,
256 					    idev))) {
257 			/* Avoid already found cards from previous calls */
258 			if (pnp_device_attach(idev) < 0)
259 				continue;
260 			if (pnp_activate_dev(idev) < 0) {
261 			      	pnp_device_detach(idev);
262 			      	continue;
263 			}
264 			/* if no io and irq, search for next */
265 			if (!pnp_port_valid(idev, 0) || !pnp_irq_valid(idev, 0)) {
266 				pnp_device_detach(idev);
267 				continue;
268 			}
269 			/* found it */
270 			dev->base_addr = pnp_port_start(idev, 0);
271 			dev->irq = pnp_irq(idev, 0);
272 			netdev_info(dev,
273 				    "ne.c: ISAPnP reports %s at i/o %#lx, irq %d.\n",
274 				    (char *) isapnp_clone_list[i].driver_data,
275 				    dev->base_addr, dev->irq);
276 			if (ne_probe1(dev, dev->base_addr) != 0) {	/* Shouldn't happen. */
277 				netdev_err(dev,
278 					   "ne.c: Probe of ISAPnP card at %#lx failed.\n",
279 					   dev->base_addr);
280 				pnp_device_detach(idev);
281 				return -ENXIO;
282 			}
283 			ei_status.priv = (unsigned long)idev;
284 			break;
285 		}
286 		if (!idev)
287 			continue;
288 		return 0;
289 	}
290 
291 	return -ENODEV;
292 }
293 
294 static int __init ne_probe1(struct net_device *dev, unsigned long ioaddr)
295 {
296 	int i;
297 	unsigned char SA_prom[32];
298 	int wordlength = 2;
299 	const char *name = NULL;
300 	int start_page, stop_page;
301 	int neX000, ctron, copam, bad_card;
302 	int reg0, ret;
303 	static unsigned version_printed;
304 	struct ei_device *ei_local = netdev_priv(dev);
305 
306 	if (!request_region(ioaddr, NE_IO_EXTENT, DRV_NAME))
307 		return -EBUSY;
308 
309 	reg0 = inb_p(ioaddr);
310 	if (reg0 == 0xFF) {
311 		ret = -ENODEV;
312 		goto err_out;
313 	}
314 
315 	/* Do a preliminary verification that we have a 8390. */
316 	{
317 		int regd;
318 		outb_p(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
319 		regd = inb_p(ioaddr + 0x0d);
320 		outb_p(0xff, ioaddr + 0x0d);
321 		outb_p(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
322 		inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
323 		if (inb_p(ioaddr + EN0_COUNTER0) != 0) {
324 			outb_p(reg0, ioaddr);
325 			outb_p(regd, ioaddr + 0x0d);	/* Restore the old values. */
326 			ret = -ENODEV;
327 			goto err_out;
328 		}
329 	}
330 
331 	if ((ne_msg_enable & NETIF_MSG_DRV) && (version_printed++ == 0))
332 		netdev_info(dev, "%s%s", version1, version2);
333 
334 	netdev_info(dev, "NE*000 ethercard probe at %#3lx:", ioaddr);
335 
336 	/* A user with a poor card that fails to ack the reset, or that
337 	   does not have a valid 0x57,0x57 signature can still use this
338 	   without having to recompile. Specifying an i/o address along
339 	   with an otherwise unused dev->mem_end value of "0xBAD" will
340 	   cause the driver to skip these parts of the probe. */
341 
342 	bad_card = ((dev->base_addr != 0) && (dev->mem_end == BAD));
343 
344 	/* Reset card. Who knows what dain-bramaged state it was left in. */
345 
346 	{
347 		unsigned long reset_start_time = jiffies;
348 
349 		/* DON'T change these to inb_p/outb_p or reset will fail on clones. */
350 		outb(inb(ioaddr + NE_RESET), ioaddr + NE_RESET);
351 
352 		while ((inb_p(ioaddr + EN0_ISR) & ENISR_RESET) == 0)
353 		if (time_after(jiffies, reset_start_time + 2*HZ/100)) {
354 			if (bad_card) {
355 				pr_cont(" (warning: no reset ack)");
356 				break;
357 			} else {
358 				pr_cont(" not found (no reset ack).\n");
359 				ret = -ENODEV;
360 				goto err_out;
361 			}
362 		}
363 
364 		outb_p(0xff, ioaddr + EN0_ISR);		/* Ack all intr. */
365 	}
366 
367 	/* Read the 16 bytes of station address PROM.
368 	   We must first initialize registers, similar to NS8390p_init(eifdev, 0).
369 	   We can't reliably read the SAPROM address without this.
370 	   (I learned the hard way!). */
371 	{
372 		struct {unsigned char value, offset; } program_seq[] =
373 		{
374 			{E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
375 			{0x48,	EN0_DCFG},	/* Set byte-wide (0x48) access. */
376 			{0x00,	EN0_RCNTLO},	/* Clear the count regs. */
377 			{0x00,	EN0_RCNTHI},
378 			{0x00,	EN0_IMR},	/* Mask completion irq. */
379 			{0xFF,	EN0_ISR},
380 			{E8390_RXOFF, EN0_RXCR},	/* 0x20  Set to monitor */
381 			{E8390_TXOFF, EN0_TXCR},	/* 0x02  and loopback mode. */
382 			{32,	EN0_RCNTLO},
383 			{0x00,	EN0_RCNTHI},
384 			{0x00,	EN0_RSARLO},	/* DMA starting at 0x0000. */
385 			{0x00,	EN0_RSARHI},
386 			{E8390_RREAD+E8390_START, E8390_CMD},
387 		};
388 
389 		for (i = 0; i < ARRAY_SIZE(program_seq); i++)
390 			outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
391 
392 	}
393 	for(i = 0; i < 32 /*sizeof(SA_prom)*/; i+=2) {
394 		SA_prom[i] = inb(ioaddr + NE_DATAPORT);
395 		SA_prom[i+1] = inb(ioaddr + NE_DATAPORT);
396 		if (SA_prom[i] != SA_prom[i+1])
397 			wordlength = 1;
398 	}
399 
400 	if (wordlength == 2)
401 	{
402 		for (i = 0; i < 16; i++)
403 			SA_prom[i] = SA_prom[i+i];
404 		/* We must set the 8390 for word mode. */
405 		outb_p(DCR_VAL, ioaddr + EN0_DCFG);
406 		start_page = NESM_START_PG;
407 
408 		/*
409 		 * Realtek RTL8019AS datasheet says that the PSTOP register
410 		 * shouldn't exceed 0x60 in 8-bit mode.
411 		 * This chip can be identified by reading the signature from
412 		 * the  remote byte count registers (otherwise write-only)...
413 		 */
414 		if ((DCR_VAL & 0x01) == 0 &&		/* 8-bit mode */
415 		    inb(ioaddr + EN0_RCNTLO) == 0x50 &&
416 		    inb(ioaddr + EN0_RCNTHI) == 0x70)
417 			stop_page = 0x60;
418 		else
419 			stop_page = NESM_STOP_PG;
420 	} else {
421 		start_page = NE1SM_START_PG;
422 		stop_page  = NE1SM_STOP_PG;
423 	}
424 
425 #if  defined(CONFIG_PLAT_MAPPI) || defined(CONFIG_PLAT_OAKS32R)
426 	neX000 = ((SA_prom[14] == 0x57  &&  SA_prom[15] == 0x57)
427 		|| (SA_prom[14] == 0x42 && SA_prom[15] == 0x42));
428 #else
429 	neX000 = (SA_prom[14] == 0x57  &&  SA_prom[15] == 0x57);
430 #endif
431 	ctron =  (SA_prom[0] == 0x00 && SA_prom[1] == 0x00 && SA_prom[2] == 0x1d);
432 	copam =  (SA_prom[14] == 0x49 && SA_prom[15] == 0x00);
433 
434 	/* Set up the rest of the parameters. */
435 	if (neX000 || bad_card || copam) {
436 		name = (wordlength == 2) ? "NE2000" : "NE1000";
437 	}
438 	else if (ctron)
439 	{
440 		name = (wordlength == 2) ? "Ctron-8" : "Ctron-16";
441 		start_page = 0x01;
442 		stop_page = (wordlength == 2) ? 0x40 : 0x20;
443 	}
444 	else
445 	{
446 #ifdef SUPPORT_NE_BAD_CLONES
447 		/* Ack!  Well, there might be a *bad* NE*000 clone there.
448 		   Check for total bogus addresses. */
449 		for (i = 0; bad_clone_list[i].name8; i++)
450 		{
451 			if (SA_prom[0] == bad_clone_list[i].SAprefix[0] &&
452 				SA_prom[1] == bad_clone_list[i].SAprefix[1] &&
453 				SA_prom[2] == bad_clone_list[i].SAprefix[2])
454 			{
455 				if (wordlength == 2)
456 				{
457 					name = bad_clone_list[i].name16;
458 				} else {
459 					name = bad_clone_list[i].name8;
460 				}
461 				break;
462 			}
463 		}
464 		if (bad_clone_list[i].name8 == NULL)
465 		{
466 			pr_cont(" not found (invalid signature %2.2x %2.2x).\n",
467 				SA_prom[14], SA_prom[15]);
468 			ret = -ENXIO;
469 			goto err_out;
470 		}
471 #else
472 		pr_cont(" not found.\n");
473 		ret = -ENXIO;
474 		goto err_out;
475 #endif
476 	}
477 
478 	if (dev->irq < 2)
479 	{
480 		unsigned long cookie = probe_irq_on();
481 		outb_p(0x50, ioaddr + EN0_IMR);	/* Enable one interrupt. */
482 		outb_p(0x00, ioaddr + EN0_RCNTLO);
483 		outb_p(0x00, ioaddr + EN0_RCNTHI);
484 		outb_p(E8390_RREAD+E8390_START, ioaddr); /* Trigger it... */
485 		mdelay(10);		/* wait 10ms for interrupt to propagate */
486 		outb_p(0x00, ioaddr + EN0_IMR); 		/* Mask it again. */
487 		dev->irq = probe_irq_off(cookie);
488 		if (netif_msg_probe(ei_local))
489 			pr_cont(" autoirq is %d", dev->irq);
490 	} else if (dev->irq == 2)
491 		/* Fixup for users that don't know that IRQ 2 is really IRQ 9,
492 		   or don't know which one to set. */
493 		dev->irq = 9;
494 
495 	if (! dev->irq) {
496 		pr_cont(" failed to detect IRQ line.\n");
497 		ret = -EAGAIN;
498 		goto err_out;
499 	}
500 
501 	/* Snarf the interrupt now.  There's no point in waiting since we cannot
502 	   share and the board will usually be enabled. */
503 	ret = request_irq(dev->irq, eip_interrupt, 0, name, dev);
504 	if (ret) {
505 		pr_cont(" unable to get IRQ %d (errno=%d).\n", dev->irq, ret);
506 		goto err_out;
507 	}
508 
509 	dev->base_addr = ioaddr;
510 
511 #ifdef CONFIG_PLAT_MAPPI
512 	outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP,
513 		ioaddr + E8390_CMD); /* 0x61 */
514 	for (i = 0; i < ETH_ALEN; i++) {
515 		dev->dev_addr[i] = SA_prom[i]
516 			= inb_p(ioaddr + EN1_PHYS_SHIFT(i));
517 	}
518 #else
519 	for (i = 0; i < ETH_ALEN; i++) {
520 		dev->dev_addr[i] = SA_prom[i];
521 	}
522 #endif
523 
524 	pr_cont("%pM\n", dev->dev_addr);
525 
526 	ei_status.name = name;
527 	ei_status.tx_start_page = start_page;
528 	ei_status.stop_page = stop_page;
529 
530 	/* Use 16-bit mode only if this wasn't overridden by DCR_VAL */
531 	ei_status.word16 = (wordlength == 2 && (DCR_VAL & 0x01));
532 
533 	ei_status.rx_start_page = start_page + TX_PAGES;
534 #ifdef PACKETBUF_MEMSIZE
535 	 /* Allow the packet buffer size to be overridden by know-it-alls. */
536 	ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
537 #endif
538 
539 	ei_status.reset_8390 = &ne_reset_8390;
540 	ei_status.block_input = &ne_block_input;
541 	ei_status.block_output = &ne_block_output;
542 	ei_status.get_8390_hdr = &ne_get_8390_hdr;
543 	ei_status.priv = 0;
544 
545 	dev->netdev_ops = &eip_netdev_ops;
546 	NS8390p_init(dev, 0);
547 
548 	ei_local->msg_enable = ne_msg_enable;
549 	ret = register_netdev(dev);
550 	if (ret)
551 		goto out_irq;
552 	netdev_info(dev, "%s found at %#lx, using IRQ %d.\n",
553 		    name, ioaddr, dev->irq);
554 	return 0;
555 
556 out_irq:
557 	free_irq(dev->irq, dev);
558 err_out:
559 	release_region(ioaddr, NE_IO_EXTENT);
560 	return ret;
561 }
562 
563 /* Hard reset the card.  This used to pause for the same period that a
564    8390 reset command required, but that shouldn't be necessary. */
565 
566 static void ne_reset_8390(struct net_device *dev)
567 {
568 	unsigned long reset_start_time = jiffies;
569 	struct ei_device *ei_local = netdev_priv(dev);
570 
571 	netif_dbg(ei_local, hw, dev, "resetting the 8390 t=%ld...\n", jiffies);
572 
573 	/* DON'T change these to inb_p/outb_p or reset will fail on clones. */
574 	outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
575 
576 	ei_status.txing = 0;
577 	ei_status.dmaing = 0;
578 
579 	/* This check _should_not_ be necessary, omit eventually. */
580 	while ((inb_p(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
581 		if (time_after(jiffies, reset_start_time + 2*HZ/100)) {
582 			netdev_err(dev, "ne_reset_8390() did not complete.\n");
583 			break;
584 		}
585 	outb_p(ENISR_RESET, NE_BASE + EN0_ISR);	/* Ack intr. */
586 }
587 
588 /* Grab the 8390 specific header. Similar to the block_input routine, but
589    we don't need to be concerned with ring wrap as the header will be at
590    the start of a page, so we optimize accordingly. */
591 
592 static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
593 {
594 	int nic_base = dev->base_addr;
595 
596 	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
597 
598 	if (ei_status.dmaing)
599 	{
600 		netdev_err(dev, "DMAing conflict in ne_get_8390_hdr "
601 			   "[DMAstat:%d][irqlock:%d].\n",
602 			   ei_status.dmaing, ei_status.irqlock);
603 		return;
604 	}
605 
606 	ei_status.dmaing |= 0x01;
607 	outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
608 	outb_p(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
609 	outb_p(0, nic_base + EN0_RCNTHI);
610 	outb_p(0, nic_base + EN0_RSARLO);		/* On page boundary */
611 	outb_p(ring_page, nic_base + EN0_RSARHI);
612 	outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
613 
614 	if (ei_status.word16)
615 		insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);
616 	else
617 		insb(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr));
618 
619 	outb_p(ENISR_RDC, nic_base + EN0_ISR);	/* Ack intr. */
620 	ei_status.dmaing &= ~0x01;
621 
622 	le16_to_cpus(&hdr->count);
623 }
624 
625 /* Block input and output, similar to the Crynwr packet driver.  If you
626    are porting to a new ethercard, look at the packet driver source for hints.
627    The NEx000 doesn't share the on-board packet memory -- you have to put
628    the packet out through the "remote DMA" dataport using outb. */
629 
630 static void ne_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
631 {
632 #ifdef NE_SANITY_CHECK
633 	int xfer_count = count;
634 	struct ei_device *ei_local = netdev_priv(dev);
635 #endif
636 	int nic_base = dev->base_addr;
637 	char *buf = skb->data;
638 
639 	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
640 	if (ei_status.dmaing)
641 	{
642 		netdev_err(dev, "DMAing conflict in ne_block_input "
643 			   "[DMAstat:%d][irqlock:%d].\n",
644 			   ei_status.dmaing, ei_status.irqlock);
645 		return;
646 	}
647 	ei_status.dmaing |= 0x01;
648 	outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
649 	outb_p(count & 0xff, nic_base + EN0_RCNTLO);
650 	outb_p(count >> 8, nic_base + EN0_RCNTHI);
651 	outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
652 	outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
653 	outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
654 	if (ei_status.word16)
655 	{
656 		insw(NE_BASE + NE_DATAPORT,buf,count>>1);
657 		if (count & 0x01)
658 		{
659 			buf[count-1] = inb(NE_BASE + NE_DATAPORT);
660 #ifdef NE_SANITY_CHECK
661 			xfer_count++;
662 #endif
663 		}
664 	} else {
665 		insb(NE_BASE + NE_DATAPORT, buf, count);
666 	}
667 
668 #ifdef NE_SANITY_CHECK
669 	/* This was for the ALPHA version only, but enough people have
670 	   been encountering problems so it is still here.  If you see
671 	   this message you either 1) have a slightly incompatible clone
672 	   or 2) have noise/speed problems with your bus. */
673 
674 	if (netif_msg_rx_status(ei_local))
675 	{
676 		/* DMA termination address check... */
677 		int addr, tries = 20;
678 		do {
679 			/* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
680 			   -- it's broken for Rx on some cards! */
681 			int high = inb_p(nic_base + EN0_RSARHI);
682 			int low = inb_p(nic_base + EN0_RSARLO);
683 			addr = (high << 8) + low;
684 			if (((ring_offset + xfer_count) & 0xff) == low)
685 				break;
686 		} while (--tries > 0);
687 	 	if (tries <= 0)
688 			netdev_warn(dev, "RX transfer address mismatch,"
689 				    "%#4.4x (expected) vs. %#4.4x (actual).\n",
690 				    ring_offset + xfer_count, addr);
691 	}
692 #endif
693 	outb_p(ENISR_RDC, nic_base + EN0_ISR);	/* Ack intr. */
694 	ei_status.dmaing &= ~0x01;
695 }
696 
697 static void ne_block_output(struct net_device *dev, int count,
698 		const unsigned char *buf, const int start_page)
699 {
700 	int nic_base = NE_BASE;
701 	unsigned long dma_start;
702 #ifdef NE_SANITY_CHECK
703 	int retries = 0;
704 	struct ei_device *ei_local = netdev_priv(dev);
705 #endif
706 
707 	/* Round the count up for word writes.  Do we need to do this?
708 	   What effect will an odd byte count have on the 8390?
709 	   I should check someday. */
710 
711 	if (ei_status.word16 && (count & 0x01))
712 		count++;
713 
714 	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
715 	if (ei_status.dmaing)
716 	{
717 		netdev_err(dev, "DMAing conflict in ne_block_output."
718 			   "[DMAstat:%d][irqlock:%d]\n",
719 			   ei_status.dmaing, ei_status.irqlock);
720 		return;
721 	}
722 	ei_status.dmaing |= 0x01;
723 	/* We should already be in page 0, but to be safe... */
724 	outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD);
725 
726 #ifdef NE_SANITY_CHECK
727 retry:
728 #endif
729 
730 #ifdef NE8390_RW_BUGFIX
731 	/* Handle the read-before-write bug the same way as the
732 	   Crynwr packet driver -- the NatSemi method doesn't work.
733 	   Actually this doesn't always work either, but if you have
734 	   problems with your NEx000 this is better than nothing! */
735 
736 	outb_p(0x42, nic_base + EN0_RCNTLO);
737 	outb_p(0x00,   nic_base + EN0_RCNTHI);
738 	outb_p(0x42, nic_base + EN0_RSARLO);
739 	outb_p(0x00, nic_base + EN0_RSARHI);
740 	outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
741 	/* Make certain that the dummy read has occurred. */
742 	udelay(6);
743 #endif
744 
745 	outb_p(ENISR_RDC, nic_base + EN0_ISR);
746 
747 	/* Now the normal output. */
748 	outb_p(count & 0xff, nic_base + EN0_RCNTLO);
749 	outb_p(count >> 8,   nic_base + EN0_RCNTHI);
750 	outb_p(0x00, nic_base + EN0_RSARLO);
751 	outb_p(start_page, nic_base + EN0_RSARHI);
752 
753 	outb_p(E8390_RWRITE+E8390_START, nic_base + NE_CMD);
754 	if (ei_status.word16) {
755 		outsw(NE_BASE + NE_DATAPORT, buf, count>>1);
756 	} else {
757 		outsb(NE_BASE + NE_DATAPORT, buf, count);
758 	}
759 
760 	dma_start = jiffies;
761 
762 #ifdef NE_SANITY_CHECK
763 	/* This was for the ALPHA version only, but enough people have
764 	   been encountering problems so it is still here. */
765 
766 	if (netif_msg_tx_queued(ei_local))
767 	{
768 		/* DMA termination address check... */
769 		int addr, tries = 20;
770 		do {
771 			int high = inb_p(nic_base + EN0_RSARHI);
772 			int low = inb_p(nic_base + EN0_RSARLO);
773 			addr = (high << 8) + low;
774 			if ((start_page << 8) + count == addr)
775 				break;
776 		} while (--tries > 0);
777 
778 		if (tries <= 0)
779 		{
780 			netdev_warn(dev, "Tx packet transfer address mismatch,"
781 				    "%#4.4x (expected) vs. %#4.4x (actual).\n",
782 				    (start_page << 8) + count, addr);
783 			if (retries++ == 0)
784 				goto retry;
785 		}
786 	}
787 #endif
788 
789 	while ((inb_p(nic_base + EN0_ISR) & ENISR_RDC) == 0)
790 		if (time_after(jiffies, dma_start + 2*HZ/100)) {		/* 20ms */
791 			netdev_warn(dev, "timeout waiting for Tx RDC.\n");
792 			ne_reset_8390(dev);
793 			NS8390p_init(dev, 1);
794 			break;
795 		}
796 
797 	outb_p(ENISR_RDC, nic_base + EN0_ISR);	/* Ack intr. */
798 	ei_status.dmaing &= ~0x01;
799 }
800 
801 static int __init ne_drv_probe(struct platform_device *pdev)
802 {
803 	struct net_device *dev;
804 	int err, this_dev = pdev->id;
805 	struct resource *res;
806 
807 	dev = alloc_eip_netdev();
808 	if (!dev)
809 		return -ENOMEM;
810 
811 	/* ne.c doesn't populate resources in platform_device, but
812 	 * rbtx4927_ne_init and rbtx4938_ne_init do register devices
813 	 * with resources.
814 	 */
815 	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
816 	if (res) {
817 		dev->base_addr = res->start;
818 		dev->irq = platform_get_irq(pdev, 0);
819 	} else {
820 		if (this_dev < 0 || this_dev >= MAX_NE_CARDS) {
821 			free_netdev(dev);
822 			return -EINVAL;
823 		}
824 		dev->base_addr = io[this_dev];
825 		dev->irq = irq[this_dev];
826 		dev->mem_end = bad[this_dev];
827 	}
828 	SET_NETDEV_DEV(dev, &pdev->dev);
829 	err = do_ne_probe(dev);
830 	if (err) {
831 		free_netdev(dev);
832 		return err;
833 	}
834 	platform_set_drvdata(pdev, dev);
835 
836 	/* Update with any values found by probing, don't update if
837 	 * resources were specified.
838 	 */
839 	if (!res) {
840 		io[this_dev] = dev->base_addr;
841 		irq[this_dev] = dev->irq;
842 	}
843 	return 0;
844 }
845 
846 static int ne_drv_remove(struct platform_device *pdev)
847 {
848 	struct net_device *dev = platform_get_drvdata(pdev);
849 
850 	if (dev) {
851 		struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
852 		netif_device_detach(dev);
853 		unregister_netdev(dev);
854 		if (idev)
855 			pnp_device_detach(idev);
856 		/* Careful ne_drv_remove can be called twice, once from
857 		 * the platform_driver.remove and again when the
858 		 * platform_device is being removed.
859 		 */
860 		ei_status.priv = 0;
861 		free_irq(dev->irq, dev);
862 		release_region(dev->base_addr, NE_IO_EXTENT);
863 		free_netdev(dev);
864 	}
865 	return 0;
866 }
867 
868 /* Remove unused devices or all if true. */
869 static void ne_loop_rm_unreg(int all)
870 {
871 	int this_dev;
872 	struct platform_device *pdev;
873 	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
874 		pdev = pdev_ne[this_dev];
875 		/* No network device == unused */
876 		if (pdev && (!platform_get_drvdata(pdev) || all)) {
877 			ne_drv_remove(pdev);
878 			platform_device_unregister(pdev);
879 			pdev_ne[this_dev] = NULL;
880 		}
881 	}
882 }
883 
884 #ifdef CONFIG_PM
885 static int ne_drv_suspend(struct platform_device *pdev, pm_message_t state)
886 {
887 	struct net_device *dev = platform_get_drvdata(pdev);
888 
889 	if (netif_running(dev)) {
890 		struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
891 		netif_device_detach(dev);
892 		if (idev)
893 			pnp_stop_dev(idev);
894 	}
895 	return 0;
896 }
897 
898 static int ne_drv_resume(struct platform_device *pdev)
899 {
900 	struct net_device *dev = platform_get_drvdata(pdev);
901 
902 	if (netif_running(dev)) {
903 		struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
904 		if (idev)
905 			pnp_start_dev(idev);
906 		ne_reset_8390(dev);
907 		NS8390p_init(dev, 1);
908 		netif_device_attach(dev);
909 	}
910 	return 0;
911 }
912 #else
913 #define ne_drv_suspend NULL
914 #define ne_drv_resume NULL
915 #endif
916 
917 static struct platform_driver ne_driver = {
918 	.remove		= ne_drv_remove,
919 	.suspend	= ne_drv_suspend,
920 	.resume		= ne_drv_resume,
921 	.driver		= {
922 		.name	= DRV_NAME,
923 	},
924 };
925 
926 static void __init ne_add_devices(void)
927 {
928 	int this_dev;
929 	struct platform_device *pdev;
930 
931 	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
932 		if (pdev_ne[this_dev])
933 			continue;
934 		pdev = platform_device_register_simple(
935 			DRV_NAME, this_dev, NULL, 0);
936 		if (IS_ERR(pdev))
937 			continue;
938 		pdev_ne[this_dev] = pdev;
939 	}
940 }
941 
942 #ifdef MODULE
943 int __init init_module(void)
944 {
945 	int retval;
946 	ne_add_devices();
947 	retval = platform_driver_probe(&ne_driver, ne_drv_probe);
948 	if (retval) {
949 		if (io[0] == 0)
950 			pr_notice("ne.c: You must supply \"io=0xNNN\""
951 			       " value(s) for ISA cards.\n");
952 		ne_loop_rm_unreg(1);
953 		return retval;
954 	}
955 
956 	/* Unregister unused platform_devices. */
957 	ne_loop_rm_unreg(0);
958 	return retval;
959 }
960 #else /* MODULE */
961 static int __init ne_init(void)
962 {
963 	int retval = platform_driver_probe(&ne_driver, ne_drv_probe);
964 
965 	/* Unregister unused platform_devices. */
966 	ne_loop_rm_unreg(0);
967 	return retval;
968 }
969 module_init(ne_init);
970 
971 struct net_device * __init ne_probe(int unit)
972 {
973 	int this_dev;
974 	struct net_device *dev;
975 
976 	/* Find an empty slot, that is no net_device and zero io port. */
977 	this_dev = 0;
978 	while ((pdev_ne[this_dev] && platform_get_drvdata(pdev_ne[this_dev])) ||
979 		io[this_dev]) {
980 		if (++this_dev == MAX_NE_CARDS)
981 			return ERR_PTR(-ENOMEM);
982 	}
983 
984 	/* Get irq, io from kernel command line */
985 	dev = alloc_eip_netdev();
986 	if (!dev)
987 		return ERR_PTR(-ENOMEM);
988 
989 	sprintf(dev->name, "eth%d", unit);
990 	netdev_boot_setup_check(dev);
991 
992 	io[this_dev] = dev->base_addr;
993 	irq[this_dev] = dev->irq;
994 	bad[this_dev] = dev->mem_end;
995 
996 	free_netdev(dev);
997 
998 	ne_add_devices();
999 
1000 	/* return the first device found */
1001 	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
1002 		if (pdev_ne[this_dev]) {
1003 			dev = platform_get_drvdata(pdev_ne[this_dev]);
1004 			if (dev)
1005 				return dev;
1006 		}
1007 	}
1008 
1009 	return ERR_PTR(-ENODEV);
1010 }
1011 #endif /* MODULE */
1012 
1013 static void __exit ne_exit(void)
1014 {
1015 	platform_driver_unregister(&ne_driver);
1016 	ne_loop_rm_unreg(1);
1017 }
1018 module_exit(ne_exit);
1019