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