xref: /openbmc/linux/drivers/net/ethernet/8390/ne.c (revision 83a530e1)
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_ATARI)	/* 8-bit mode on Atari, normal on Q40 */
168 #  define DCR_VAL (MACH_IS_ATARI ? 0x48 : 0x49)
169 #else
170 #  define DCR_VAL 0x49
171 #endif
172 
173 static int ne_probe1(struct net_device *dev, unsigned long ioaddr);
174 static int ne_probe_isapnp(struct net_device *dev);
175 
176 static void ne_reset_8390(struct net_device *dev);
177 static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
178 			  int ring_page);
179 static void ne_block_input(struct net_device *dev, int count,
180 			  struct sk_buff *skb, int ring_offset);
181 static void ne_block_output(struct net_device *dev, const int count,
182 		const unsigned char *buf, const int start_page);
183 
184 
185 /*  Probe for various non-shared-memory ethercards.
186 
187    NEx000-clone boards have a Station Address PROM (SAPROM) in the packet
188    buffer memory space.  NE2000 clones have 0x57,0x57 in bytes 0x0e,0x0f of
189    the SAPROM, while other supposed NE2000 clones must be detected by their
190    SA prefix.
191 
192    Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
193    mode results in doubled values, which can be detected and compensated for.
194 
195    The probe is also responsible for initializing the card and filling
196    in the 'dev' and 'ei_status' structures.
197 
198    We use the minimum memory size for some ethercard product lines, iff we can't
199    distinguish models.  You can increase the packet buffer size by setting
200    PACKETBUF_MEMSIZE.  Reported Cabletron packet buffer locations are:
201 	E1010   starts at 0x100 and ends at 0x2000.
202 	E1010-x starts at 0x100 and ends at 0x8000. ("-x" means "more memory")
203 	E2010	 starts at 0x100 and ends at 0x4000.
204 	E2010-x starts at 0x100 and ends at 0xffff.  */
205 
206 static int __init do_ne_probe(struct net_device *dev)
207 {
208 	unsigned long base_addr = dev->base_addr;
209 #ifdef NEEDS_PORTLIST
210 	int orig_irq = dev->irq;
211 #endif
212 
213 	/* First check any supplied i/o locations. User knows best. <cough> */
214 	if (base_addr > 0x1ff) {	/* Check a single specified location. */
215 		int ret = ne_probe1(dev, base_addr);
216 		if (ret)
217 			netdev_warn(dev, "ne.c: No NE*000 card found at "
218 				    "i/o = %#lx\n", base_addr);
219 		return ret;
220 	}
221 	else if (base_addr != 0)	/* Don't probe at all. */
222 		return -ENXIO;
223 
224 	/* Then look for any installed ISAPnP clones */
225 	if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
226 		return 0;
227 
228 #ifdef NEEDS_PORTLIST
229 	/* Last resort. The semi-risky ISA auto-probe. */
230 	for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
231 		int ioaddr = netcard_portlist[base_addr];
232 		dev->irq = orig_irq;
233 		if (ne_probe1(dev, ioaddr) == 0)
234 			return 0;
235 	}
236 #endif
237 
238 	return -ENODEV;
239 }
240 
241 static int __init ne_probe_isapnp(struct net_device *dev)
242 {
243 	int i;
244 
245 	for (i = 0; isapnp_clone_list[i].vendor != 0; i++) {
246 		struct pnp_dev *idev = NULL;
247 
248 		while ((idev = pnp_find_dev(NULL,
249 					    isapnp_clone_list[i].vendor,
250 					    isapnp_clone_list[i].function,
251 					    idev))) {
252 			/* Avoid already found cards from previous calls */
253 			if (pnp_device_attach(idev) < 0)
254 				continue;
255 			if (pnp_activate_dev(idev) < 0) {
256 			      	pnp_device_detach(idev);
257 			      	continue;
258 			}
259 			/* if no io and irq, search for next */
260 			if (!pnp_port_valid(idev, 0) || !pnp_irq_valid(idev, 0)) {
261 				pnp_device_detach(idev);
262 				continue;
263 			}
264 			/* found it */
265 			dev->base_addr = pnp_port_start(idev, 0);
266 			dev->irq = pnp_irq(idev, 0);
267 			netdev_info(dev,
268 				    "ne.c: ISAPnP reports %s at i/o %#lx, irq %d.\n",
269 				    (char *) isapnp_clone_list[i].driver_data,
270 				    dev->base_addr, dev->irq);
271 			if (ne_probe1(dev, dev->base_addr) != 0) {	/* Shouldn't happen. */
272 				netdev_err(dev,
273 					   "ne.c: Probe of ISAPnP card at %#lx failed.\n",
274 					   dev->base_addr);
275 				pnp_device_detach(idev);
276 				return -ENXIO;
277 			}
278 			ei_status.priv = (unsigned long)idev;
279 			break;
280 		}
281 		if (!idev)
282 			continue;
283 		return 0;
284 	}
285 
286 	return -ENODEV;
287 }
288 
289 static int __init ne_probe1(struct net_device *dev, unsigned long ioaddr)
290 {
291 	int i;
292 	unsigned char SA_prom[32];
293 	int wordlength = 2;
294 	const char *name = NULL;
295 	int start_page, stop_page;
296 	int neX000, ctron, copam, bad_card;
297 	int reg0, ret;
298 	static unsigned version_printed;
299 	struct ei_device *ei_local = netdev_priv(dev);
300 
301 	if (!request_region(ioaddr, NE_IO_EXTENT, DRV_NAME))
302 		return -EBUSY;
303 
304 	reg0 = inb_p(ioaddr);
305 	if (reg0 == 0xFF) {
306 		ret = -ENODEV;
307 		goto err_out;
308 	}
309 
310 	/* Do a preliminary verification that we have a 8390. */
311 	{
312 		int regd;
313 		outb_p(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
314 		regd = inb_p(ioaddr + 0x0d);
315 		outb_p(0xff, ioaddr + 0x0d);
316 		outb_p(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
317 		inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
318 		if (inb_p(ioaddr + EN0_COUNTER0) != 0) {
319 			outb_p(reg0, ioaddr);
320 			outb_p(regd, ioaddr + 0x0d);	/* Restore the old values. */
321 			ret = -ENODEV;
322 			goto err_out;
323 		}
324 	}
325 
326 	if ((ne_msg_enable & NETIF_MSG_DRV) && (version_printed++ == 0))
327 		netdev_info(dev, "%s%s", version1, version2);
328 
329 	netdev_info(dev, "NE*000 ethercard probe at %#3lx:", ioaddr);
330 
331 	/* A user with a poor card that fails to ack the reset, or that
332 	   does not have a valid 0x57,0x57 signature can still use this
333 	   without having to recompile. Specifying an i/o address along
334 	   with an otherwise unused dev->mem_end value of "0xBAD" will
335 	   cause the driver to skip these parts of the probe. */
336 
337 	bad_card = ((dev->base_addr != 0) && (dev->mem_end == BAD));
338 
339 	/* Reset card. Who knows what dain-bramaged state it was left in. */
340 
341 	{
342 		unsigned long reset_start_time = jiffies;
343 
344 		/* DON'T change these to inb_p/outb_p or reset will fail on clones. */
345 		outb(inb(ioaddr + NE_RESET), ioaddr + NE_RESET);
346 
347 		while ((inb_p(ioaddr + EN0_ISR) & ENISR_RESET) == 0)
348 		if (time_after(jiffies, reset_start_time + 2*HZ/100)) {
349 			if (bad_card) {
350 				pr_cont(" (warning: no reset ack)");
351 				break;
352 			} else {
353 				pr_cont(" not found (no reset ack).\n");
354 				ret = -ENODEV;
355 				goto err_out;
356 			}
357 		}
358 
359 		outb_p(0xff, ioaddr + EN0_ISR);		/* Ack all intr. */
360 	}
361 
362 	/* Read the 16 bytes of station address PROM.
363 	   We must first initialize registers, similar to NS8390p_init(eifdev, 0).
364 	   We can't reliably read the SAPROM address without this.
365 	   (I learned the hard way!). */
366 	{
367 		struct {unsigned char value, offset; } program_seq[] =
368 		{
369 			{E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
370 			{0x48,	EN0_DCFG},	/* Set byte-wide (0x48) access. */
371 			{0x00,	EN0_RCNTLO},	/* Clear the count regs. */
372 			{0x00,	EN0_RCNTHI},
373 			{0x00,	EN0_IMR},	/* Mask completion irq. */
374 			{0xFF,	EN0_ISR},
375 			{E8390_RXOFF, EN0_RXCR},	/* 0x20  Set to monitor */
376 			{E8390_TXOFF, EN0_TXCR},	/* 0x02  and loopback mode. */
377 			{32,	EN0_RCNTLO},
378 			{0x00,	EN0_RCNTHI},
379 			{0x00,	EN0_RSARLO},	/* DMA starting at 0x0000. */
380 			{0x00,	EN0_RSARHI},
381 			{E8390_RREAD+E8390_START, E8390_CMD},
382 		};
383 
384 		for (i = 0; i < ARRAY_SIZE(program_seq); i++)
385 			outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
386 
387 	}
388 	for(i = 0; i < 32 /*sizeof(SA_prom)*/; i+=2) {
389 		SA_prom[i] = inb(ioaddr + NE_DATAPORT);
390 		SA_prom[i+1] = inb(ioaddr + NE_DATAPORT);
391 		if (SA_prom[i] != SA_prom[i+1])
392 			wordlength = 1;
393 	}
394 
395 	if (wordlength == 2)
396 	{
397 		for (i = 0; i < 16; i++)
398 			SA_prom[i] = SA_prom[i+i];
399 		/* We must set the 8390 for word mode. */
400 		outb_p(DCR_VAL, ioaddr + EN0_DCFG);
401 		start_page = NESM_START_PG;
402 
403 		/*
404 		 * Realtek RTL8019AS datasheet says that the PSTOP register
405 		 * shouldn't exceed 0x60 in 8-bit mode.
406 		 * This chip can be identified by reading the signature from
407 		 * the  remote byte count registers (otherwise write-only)...
408 		 */
409 		if ((DCR_VAL & 0x01) == 0 &&		/* 8-bit mode */
410 		    inb(ioaddr + EN0_RCNTLO) == 0x50 &&
411 		    inb(ioaddr + EN0_RCNTHI) == 0x70)
412 			stop_page = 0x60;
413 		else
414 			stop_page = NESM_STOP_PG;
415 	} else {
416 		start_page = NE1SM_START_PG;
417 		stop_page  = NE1SM_STOP_PG;
418 	}
419 
420 	neX000 = (SA_prom[14] == 0x57  &&  SA_prom[15] == 0x57);
421 	ctron =  (SA_prom[0] == 0x00 && SA_prom[1] == 0x00 && SA_prom[2] == 0x1d);
422 	copam =  (SA_prom[14] == 0x49 && SA_prom[15] == 0x00);
423 
424 	/* Set up the rest of the parameters. */
425 	if (neX000 || bad_card || copam) {
426 		name = (wordlength == 2) ? "NE2000" : "NE1000";
427 	}
428 	else if (ctron)
429 	{
430 		name = (wordlength == 2) ? "Ctron-8" : "Ctron-16";
431 		start_page = 0x01;
432 		stop_page = (wordlength == 2) ? 0x40 : 0x20;
433 	}
434 	else
435 	{
436 #ifdef SUPPORT_NE_BAD_CLONES
437 		/* Ack!  Well, there might be a *bad* NE*000 clone there.
438 		   Check for total bogus addresses. */
439 		for (i = 0; bad_clone_list[i].name8; i++)
440 		{
441 			if (SA_prom[0] == bad_clone_list[i].SAprefix[0] &&
442 				SA_prom[1] == bad_clone_list[i].SAprefix[1] &&
443 				SA_prom[2] == bad_clone_list[i].SAprefix[2])
444 			{
445 				if (wordlength == 2)
446 				{
447 					name = bad_clone_list[i].name16;
448 				} else {
449 					name = bad_clone_list[i].name8;
450 				}
451 				break;
452 			}
453 		}
454 		if (bad_clone_list[i].name8 == NULL)
455 		{
456 			pr_cont(" not found (invalid signature %2.2x %2.2x).\n",
457 				SA_prom[14], SA_prom[15]);
458 			ret = -ENXIO;
459 			goto err_out;
460 		}
461 #else
462 		pr_cont(" not found.\n");
463 		ret = -ENXIO;
464 		goto err_out;
465 #endif
466 	}
467 
468 	if (dev->irq < 2)
469 	{
470 		unsigned long cookie = probe_irq_on();
471 		outb_p(0x50, ioaddr + EN0_IMR);	/* Enable one interrupt. */
472 		outb_p(0x00, ioaddr + EN0_RCNTLO);
473 		outb_p(0x00, ioaddr + EN0_RCNTHI);
474 		outb_p(E8390_RREAD+E8390_START, ioaddr); /* Trigger it... */
475 		mdelay(10);		/* wait 10ms for interrupt to propagate */
476 		outb_p(0x00, ioaddr + EN0_IMR); 		/* Mask it again. */
477 		dev->irq = probe_irq_off(cookie);
478 		if (ne_msg_enable & NETIF_MSG_PROBE)
479 			pr_cont(" autoirq is %d", dev->irq);
480 	} else if (dev->irq == 2)
481 		/* Fixup for users that don't know that IRQ 2 is really IRQ 9,
482 		   or don't know which one to set. */
483 		dev->irq = 9;
484 
485 	if (! dev->irq) {
486 		pr_cont(" failed to detect IRQ line.\n");
487 		ret = -EAGAIN;
488 		goto err_out;
489 	}
490 
491 	/* Snarf the interrupt now.  There's no point in waiting since we cannot
492 	   share and the board will usually be enabled. */
493 	ret = request_irq(dev->irq, eip_interrupt, 0, name, dev);
494 	if (ret) {
495 		pr_cont(" unable to get IRQ %d (errno=%d).\n", dev->irq, ret);
496 		goto err_out;
497 	}
498 
499 	dev->base_addr = ioaddr;
500 
501 	for (i = 0; i < ETH_ALEN; i++) {
502 		dev->dev_addr[i] = SA_prom[i];
503 	}
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 NE8390_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 #ifdef MODULE
924 int __init init_module(void)
925 {
926 	int retval;
927 	ne_add_devices();
928 	retval = platform_driver_probe(&ne_driver, ne_drv_probe);
929 	if (retval) {
930 		if (io[0] == 0)
931 			pr_notice("ne.c: You must supply \"io=0xNNN\""
932 			       " value(s) for ISA cards.\n");
933 		ne_loop_rm_unreg(1);
934 		return retval;
935 	}
936 
937 	/* Unregister unused platform_devices. */
938 	ne_loop_rm_unreg(0);
939 	return retval;
940 }
941 #else /* MODULE */
942 static int __init ne_init(void)
943 {
944 	int retval = platform_driver_probe(&ne_driver, ne_drv_probe);
945 
946 	/* Unregister unused platform_devices. */
947 	ne_loop_rm_unreg(0);
948 	return retval;
949 }
950 module_init(ne_init);
951 
952 struct net_device * __init ne_probe(int unit)
953 {
954 	int this_dev;
955 	struct net_device *dev;
956 
957 	/* Find an empty slot, that is no net_device and zero io port. */
958 	this_dev = 0;
959 	while ((pdev_ne[this_dev] && platform_get_drvdata(pdev_ne[this_dev])) ||
960 		io[this_dev]) {
961 		if (++this_dev == MAX_NE_CARDS)
962 			return ERR_PTR(-ENOMEM);
963 	}
964 
965 	/* Get irq, io from kernel command line */
966 	dev = alloc_eip_netdev();
967 	if (!dev)
968 		return ERR_PTR(-ENOMEM);
969 
970 	sprintf(dev->name, "eth%d", unit);
971 	netdev_boot_setup_check(dev);
972 
973 	io[this_dev] = dev->base_addr;
974 	irq[this_dev] = dev->irq;
975 	bad[this_dev] = dev->mem_end;
976 
977 	free_netdev(dev);
978 
979 	ne_add_devices();
980 
981 	/* return the first device found */
982 	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
983 		if (pdev_ne[this_dev]) {
984 			dev = platform_get_drvdata(pdev_ne[this_dev]);
985 			if (dev)
986 				return dev;
987 		}
988 	}
989 
990 	return ERR_PTR(-ENODEV);
991 }
992 #endif /* MODULE */
993 
994 static void __exit ne_exit(void)
995 {
996 	platform_driver_unregister(&ne_driver);
997 	ne_loop_rm_unreg(1);
998 }
999 module_exit(ne_exit);
1000