1 /* cs89x0.c: A Crystal Semiconductor (Now Cirrus Logic) CS89[02]0
2  *           driver for linux.
3  * Written 1996 by Russell Nelson, with reference to skeleton.c
4  * written 1993-1994 by Donald Becker.
5  *
6  * This software may be used and distributed according to the terms
7  * of the GNU General Public License, incorporated herein by reference.
8  *
9  * The author may be reached at nelson@crynwr.com, Crynwr
10  * Software, 521 Pleasant Valley Rd., Potsdam, NY 13676
11  *
12  * Other contributors:
13  * Mike Cruse        : mcruse@cti-ltd.com
14  * Russ Nelson
15  * Melody Lee        : ethernet@crystal.cirrus.com
16  * Alan Cox
17  * Andrew Morton
18  * Oskar Schirmer    : oskar@scara.com
19  * Deepak Saxena     : dsaxena@plexity.net
20  * Dmitry Pervushin  : dpervushin@ru.mvista.com
21  * Deepak Saxena     : dsaxena@plexity.net
22  * Domenico Andreoli : cavokz@gmail.com
23  */
24 
25 
26 /*
27  * Set this to zero to disable DMA code
28  *
29  * Note that even if DMA is turned off we still support the 'dma' and  'use_dma'
30  * module options so we don't break any startup scripts.
31  */
32 #ifndef CONFIG_ISA_DMA_API
33 #define ALLOW_DMA	0
34 #else
35 #define ALLOW_DMA	1
36 #endif
37 
38 /*
39  * Set this to zero to remove all the debug statements via
40  * dead code elimination
41  */
42 #define DEBUGGING	1
43 
44 /* Sources:
45  *	Crynwr packet driver epktisa.
46  *	Crystal Semiconductor data sheets.
47  */
48 
49 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
50 
51 #include <linux/module.h>
52 #include <linux/printk.h>
53 #include <linux/errno.h>
54 #include <linux/netdevice.h>
55 #include <linux/etherdevice.h>
56 #include <linux/platform_device.h>
57 #include <linux/kernel.h>
58 #include <linux/types.h>
59 #include <linux/fcntl.h>
60 #include <linux/interrupt.h>
61 #include <linux/ioport.h>
62 #include <linux/in.h>
63 #include <linux/skbuff.h>
64 #include <linux/spinlock.h>
65 #include <linux/string.h>
66 #include <linux/init.h>
67 #include <linux/bitops.h>
68 #include <linux/delay.h>
69 #include <linux/gfp.h>
70 #include <linux/io.h>
71 
72 #include <asm/irq.h>
73 #include <linux/atomic.h>
74 #if ALLOW_DMA
75 #include <asm/dma.h>
76 #endif
77 
78 #include "cs89x0.h"
79 
80 #define cs89_dbg(val, level, fmt, ...)				\
81 do {								\
82 	if (val <= net_debug)					\
83 		pr_##level(fmt, ##__VA_ARGS__);			\
84 } while (0)
85 
86 static char version[] __initdata =
87 	"v2.4.3-pre1 Russell Nelson <nelson@crynwr.com>, Andrew Morton";
88 
89 #define DRV_NAME "cs89x0"
90 
91 /* First, a few definitions that the brave might change.
92  * A zero-terminated list of I/O addresses to be probed. Some special flags..
93  * Addr & 1 = Read back the address port, look for signature and reset
94  * the page window before probing
95  * Addr & 3 = Reset the page window and probe
96  * The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
97  * but it is possible that a Cirrus board could be plugged into the ISA
98  * slots.
99  */
100 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
101  * them to system IRQ numbers. This mapping is card specific and is set to
102  * the configuration of the Cirrus Eval board for this chip.
103  */
104 #ifndef CONFIG_CS89x0_PLATFORM
105 static unsigned int netcard_portlist[] __used __initdata = {
106 	0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240,
107 	0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0
108 };
109 static unsigned int cs8900_irq_map[] = {
110 	10, 11, 12, 5
111 };
112 #endif
113 
114 #if DEBUGGING
115 static unsigned int net_debug = DEBUGGING;
116 #else
117 #define net_debug 0	/* gcc will remove all the debug code for us */
118 #endif
119 
120 /* The number of low I/O ports used by the ethercard. */
121 #define NETCARD_IO_EXTENT	16
122 
123 /* we allow the user to override various values normally set in the EEPROM */
124 #define FORCE_RJ45	0x0001    /* pick one of these three */
125 #define FORCE_AUI	0x0002
126 #define FORCE_BNC	0x0004
127 
128 #define FORCE_AUTO	0x0010    /* pick one of these three */
129 #define FORCE_HALF	0x0020
130 #define FORCE_FULL	0x0030
131 
132 /* Information that need to be kept for each board. */
133 struct net_local {
134 	int chip_type;		/* one of: CS8900, CS8920, CS8920M */
135 	char chip_revision;	/* revision letter of the chip ('A'...) */
136 	int send_cmd;		/* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
137 	int auto_neg_cnf;	/* auto-negotiation word from EEPROM */
138 	int adapter_cnf;	/* adapter configuration from EEPROM */
139 	int isa_config;		/* ISA configuration from EEPROM */
140 	int irq_map;		/* IRQ map from EEPROM */
141 	int rx_mode;		/* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
142 	int curr_rx_cfg;	/* a copy of PP_RxCFG */
143 	int linectl;		/* either 0 or LOW_RX_SQUELCH, depending on configuration. */
144 	int send_underrun;	/* keep track of how many underruns in a row we get */
145 	int force;		/* force various values; see FORCE* above. */
146 	spinlock_t lock;
147 	void __iomem *virt_addr;/* CS89x0 virtual address. */
148 #if ALLOW_DMA
149 	int use_dma;		/* Flag: we're using dma */
150 	int dma;		/* DMA channel */
151 	int dmasize;		/* 16 or 64 */
152 	unsigned char *dma_buff;	/* points to the beginning of the buffer */
153 	unsigned char *end_dma_buff;	/* points to the end of the buffer */
154 	unsigned char *rx_dma_ptr;	/* points to the next packet  */
155 #endif
156 };
157 
158 /* Example routines you must write ;->. */
159 #define tx_done(dev) 1
160 
161 /*
162  * Permit 'cs89x0_dma=N' in the kernel boot environment
163  */
164 #if !defined(MODULE)
165 #if ALLOW_DMA
166 static int g_cs89x0_dma;
167 
168 static int __init dma_fn(char *str)
169 {
170 	g_cs89x0_dma = simple_strtol(str, NULL, 0);
171 	return 1;
172 }
173 
174 __setup("cs89x0_dma=", dma_fn);
175 #endif	/* ALLOW_DMA */
176 
177 static int g_cs89x0_media__force;
178 
179 static int __init media_fn(char *str)
180 {
181 	if (!strcmp(str, "rj45"))
182 		g_cs89x0_media__force = FORCE_RJ45;
183 	else if (!strcmp(str, "aui"))
184 		g_cs89x0_media__force = FORCE_AUI;
185 	else if (!strcmp(str, "bnc"))
186 		g_cs89x0_media__force = FORCE_BNC;
187 
188 	return 1;
189 }
190 
191 __setup("cs89x0_media=", media_fn);
192 #endif
193 
194 static void readwords(struct net_local *lp, int portno, void *buf, int length)
195 {
196 	u8 *buf8 = (u8 *)buf;
197 
198 	do {
199 		u16 tmp16;
200 
201 		tmp16 = ioread16(lp->virt_addr + portno);
202 		*buf8++ = (u8)tmp16;
203 		*buf8++ = (u8)(tmp16 >> 8);
204 	} while (--length);
205 }
206 
207 static void writewords(struct net_local *lp, int portno, void *buf, int length)
208 {
209 	u8 *buf8 = (u8 *)buf;
210 
211 	do {
212 		u16 tmp16;
213 
214 		tmp16 = *buf8++;
215 		tmp16 |= (*buf8++) << 8;
216 		iowrite16(tmp16, lp->virt_addr + portno);
217 	} while (--length);
218 }
219 
220 static u16
221 readreg(struct net_device *dev, u16 regno)
222 {
223 	struct net_local *lp = netdev_priv(dev);
224 
225 	iowrite16(regno, lp->virt_addr + ADD_PORT);
226 	return ioread16(lp->virt_addr + DATA_PORT);
227 }
228 
229 static void
230 writereg(struct net_device *dev, u16 regno, u16 value)
231 {
232 	struct net_local *lp = netdev_priv(dev);
233 
234 	iowrite16(regno, lp->virt_addr + ADD_PORT);
235 	iowrite16(value, lp->virt_addr + DATA_PORT);
236 }
237 
238 static int __init
239 wait_eeprom_ready(struct net_device *dev)
240 {
241 	int timeout = jiffies;
242 	/* check to see if the EEPROM is ready,
243 	 * a timeout is used just in case EEPROM is ready when
244 	 * SI_BUSY in the PP_SelfST is clear
245 	 */
246 	while (readreg(dev, PP_SelfST) & SI_BUSY)
247 		if (jiffies - timeout >= 40)
248 			return -1;
249 	return 0;
250 }
251 
252 static int __init
253 get_eeprom_data(struct net_device *dev, int off, int len, int *buffer)
254 {
255 	int i;
256 
257 	cs89_dbg(3, info, "EEPROM data from %x for %x:", off, len);
258 	for (i = 0; i < len; i++) {
259 		if (wait_eeprom_ready(dev) < 0)
260 			return -1;
261 		/* Now send the EEPROM read command and EEPROM location to read */
262 		writereg(dev, PP_EECMD, (off + i) | EEPROM_READ_CMD);
263 		if (wait_eeprom_ready(dev) < 0)
264 			return -1;
265 		buffer[i] = readreg(dev, PP_EEData);
266 		cs89_dbg(3, cont, " %04x", buffer[i]);
267 	}
268 	cs89_dbg(3, cont, "\n");
269 	return 0;
270 }
271 
272 static int  __init
273 get_eeprom_cksum(int off, int len, int *buffer)
274 {
275 	int i, cksum;
276 
277 	cksum = 0;
278 	for (i = 0; i < len; i++)
279 		cksum += buffer[i];
280 	cksum &= 0xffff;
281 	if (cksum == 0)
282 		return 0;
283 	return -1;
284 }
285 
286 static void
287 write_irq(struct net_device *dev, int chip_type, int irq)
288 {
289 	int i;
290 
291 	if (chip_type == CS8900) {
292 #ifndef CONFIG_CS89x0_PLATFORM
293 		/* Search the mapping table for the corresponding IRQ pin. */
294 		for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
295 			if (cs8900_irq_map[i] == irq)
296 				break;
297 		/* Not found */
298 		if (i == ARRAY_SIZE(cs8900_irq_map))
299 			i = 3;
300 #else
301 		/* INTRQ0 pin is used for interrupt generation. */
302 		i = 0;
303 #endif
304 		writereg(dev, PP_CS8900_ISAINT, i);
305 	} else {
306 		writereg(dev, PP_CS8920_ISAINT, irq);
307 	}
308 }
309 
310 static void
311 count_rx_errors(int status, struct net_device *dev)
312 {
313 	dev->stats.rx_errors++;
314 	if (status & RX_RUNT)
315 		dev->stats.rx_length_errors++;
316 	if (status & RX_EXTRA_DATA)
317 		dev->stats.rx_length_errors++;
318 	if ((status & RX_CRC_ERROR) && !(status & (RX_EXTRA_DATA | RX_RUNT)))
319 		/* per str 172 */
320 		dev->stats.rx_crc_errors++;
321 	if (status & RX_DRIBBLE)
322 		dev->stats.rx_frame_errors++;
323 }
324 
325 /*********************************
326  * This page contains DMA routines
327  *********************************/
328 
329 #if ALLOW_DMA
330 
331 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1) >> 17 == (long)(ptr2) >> 17)
332 
333 static void
334 get_dma_channel(struct net_device *dev)
335 {
336 	struct net_local *lp = netdev_priv(dev);
337 
338 	if (lp->dma) {
339 		dev->dma = lp->dma;
340 		lp->isa_config |= ISA_RxDMA;
341 	} else {
342 		if ((lp->isa_config & ANY_ISA_DMA) == 0)
343 			return;
344 		dev->dma = lp->isa_config & DMA_NO_MASK;
345 		if (lp->chip_type == CS8900)
346 			dev->dma += 5;
347 		if (dev->dma < 5 || dev->dma > 7) {
348 			lp->isa_config &= ~ANY_ISA_DMA;
349 			return;
350 		}
351 	}
352 }
353 
354 static void
355 write_dma(struct net_device *dev, int chip_type, int dma)
356 {
357 	struct net_local *lp = netdev_priv(dev);
358 	if ((lp->isa_config & ANY_ISA_DMA) == 0)
359 		return;
360 	if (chip_type == CS8900)
361 		writereg(dev, PP_CS8900_ISADMA, dma - 5);
362 	else
363 		writereg(dev, PP_CS8920_ISADMA, dma);
364 }
365 
366 static void
367 set_dma_cfg(struct net_device *dev)
368 {
369 	struct net_local *lp = netdev_priv(dev);
370 
371 	if (lp->use_dma) {
372 		if ((lp->isa_config & ANY_ISA_DMA) == 0) {
373 			cs89_dbg(3, err, "set_dma_cfg(): no DMA\n");
374 			return;
375 		}
376 		if (lp->isa_config & ISA_RxDMA) {
377 			lp->curr_rx_cfg |= RX_DMA_ONLY;
378 			cs89_dbg(3, info, "set_dma_cfg(): RX_DMA_ONLY\n");
379 		} else {
380 			lp->curr_rx_cfg |= AUTO_RX_DMA;	/* not that we support it... */
381 			cs89_dbg(3, info, "set_dma_cfg(): AUTO_RX_DMA\n");
382 		}
383 	}
384 }
385 
386 static int
387 dma_bufcfg(struct net_device *dev)
388 {
389 	struct net_local *lp = netdev_priv(dev);
390 	if (lp->use_dma)
391 		return (lp->isa_config & ANY_ISA_DMA) ? RX_DMA_ENBL : 0;
392 	else
393 		return 0;
394 }
395 
396 static int
397 dma_busctl(struct net_device *dev)
398 {
399 	int retval = 0;
400 	struct net_local *lp = netdev_priv(dev);
401 	if (lp->use_dma) {
402 		if (lp->isa_config & ANY_ISA_DMA)
403 			retval |= RESET_RX_DMA; /* Reset the DMA pointer */
404 		if (lp->isa_config & DMA_BURST)
405 			retval |= DMA_BURST_MODE; /* Does ISA config specify DMA burst ? */
406 		if (lp->dmasize == 64)
407 			retval |= RX_DMA_SIZE_64K; /* did they ask for 64K? */
408 		retval |= MEMORY_ON;	/* we need memory enabled to use DMA. */
409 	}
410 	return retval;
411 }
412 
413 static void
414 dma_rx(struct net_device *dev)
415 {
416 	struct net_local *lp = netdev_priv(dev);
417 	struct sk_buff *skb;
418 	int status, length;
419 	unsigned char *bp = lp->rx_dma_ptr;
420 
421 	status = bp[0] + (bp[1] << 8);
422 	length = bp[2] + (bp[3] << 8);
423 	bp += 4;
424 
425 	cs89_dbg(5, debug, "%s: receiving DMA packet at %lx, status %x, length %x\n",
426 		 dev->name, (unsigned long)bp, status, length);
427 
428 	if ((status & RX_OK) == 0) {
429 		count_rx_errors(status, dev);
430 		goto skip_this_frame;
431 	}
432 
433 	/* Malloc up new buffer. */
434 	skb = netdev_alloc_skb(dev, length + 2);
435 	if (skb == NULL) {
436 		dev->stats.rx_dropped++;
437 
438 		/* AKPM: advance bp to the next frame */
439 skip_this_frame:
440 		bp += (length + 3) & ~3;
441 		if (bp >= lp->end_dma_buff)
442 			bp -= lp->dmasize * 1024;
443 		lp->rx_dma_ptr = bp;
444 		return;
445 	}
446 	skb_reserve(skb, 2);	/* longword align L3 header */
447 
448 	if (bp + length > lp->end_dma_buff) {
449 		int semi_cnt = lp->end_dma_buff - bp;
450 		memcpy(skb_put(skb, semi_cnt), bp, semi_cnt);
451 		memcpy(skb_put(skb, length - semi_cnt), lp->dma_buff,
452 		       length - semi_cnt);
453 	} else {
454 		memcpy(skb_put(skb, length), bp, length);
455 	}
456 	bp += (length + 3) & ~3;
457 	if (bp >= lp->end_dma_buff)
458 		bp -= lp->dmasize*1024;
459 	lp->rx_dma_ptr = bp;
460 
461 	cs89_dbg(3, info, "%s: received %d byte DMA packet of type %x\n",
462 		 dev->name, length,
463 		 ((skb->data[ETH_ALEN + ETH_ALEN] << 8) |
464 		  skb->data[ETH_ALEN + ETH_ALEN + 1]));
465 
466 	skb->protocol = eth_type_trans(skb, dev);
467 	netif_rx(skb);
468 	dev->stats.rx_packets++;
469 	dev->stats.rx_bytes += length;
470 }
471 
472 static void release_dma_buff(struct net_local *lp)
473 {
474 	if (lp->dma_buff) {
475 		free_pages((unsigned long)(lp->dma_buff),
476 			   get_order(lp->dmasize * 1024));
477 		lp->dma_buff = NULL;
478 	}
479 }
480 
481 #endif	/* ALLOW_DMA */
482 
483 static void
484 control_dc_dc(struct net_device *dev, int on_not_off)
485 {
486 	struct net_local *lp = netdev_priv(dev);
487 	unsigned int selfcontrol;
488 	int timenow = jiffies;
489 	/* control the DC to DC convertor in the SelfControl register.
490 	 * Note: This is hooked up to a general purpose pin, might not
491 	 * always be a DC to DC convertor.
492 	 */
493 
494 	selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */
495 	if (((lp->adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off)
496 		selfcontrol |= HCB1;
497 	else
498 		selfcontrol &= ~HCB1;
499 	writereg(dev, PP_SelfCTL, selfcontrol);
500 
501 	/* Wait for the DC/DC converter to power up - 500ms */
502 	while (jiffies - timenow < HZ)
503 		;
504 }
505 
506 /* send a test packet - return true if carrier bits are ok */
507 static int
508 send_test_pkt(struct net_device *dev)
509 {
510 	struct net_local *lp = netdev_priv(dev);
511 	char test_packet[] = {
512 		0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,
513 		0, 46,		/* A 46 in network order */
514 		0, 0,		/* DSAP=0 & SSAP=0 fields */
515 		0xf3, 0		/* Control (Test Req + P bit set) */
516 	};
517 	long timenow = jiffies;
518 
519 	writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_TX_ON);
520 
521 	memcpy(test_packet,            dev->dev_addr, ETH_ALEN);
522 	memcpy(test_packet + ETH_ALEN, dev->dev_addr, ETH_ALEN);
523 
524 	iowrite16(TX_AFTER_ALL, lp->virt_addr + TX_CMD_PORT);
525 	iowrite16(ETH_ZLEN, lp->virt_addr + TX_LEN_PORT);
526 
527 	/* Test to see if the chip has allocated memory for the packet */
528 	while (jiffies - timenow < 5)
529 		if (readreg(dev, PP_BusST) & READY_FOR_TX_NOW)
530 			break;
531 	if (jiffies - timenow >= 5)
532 		return 0;	/* this shouldn't happen */
533 
534 	/* Write the contents of the packet */
535 	writewords(lp, TX_FRAME_PORT, test_packet, (ETH_ZLEN + 1) >> 1);
536 
537 	cs89_dbg(1, debug, "Sending test packet ");
538 	/* wait a couple of jiffies for packet to be received */
539 	for (timenow = jiffies; jiffies - timenow < 3;)
540 		;
541 	if ((readreg(dev, PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) {
542 		cs89_dbg(1, cont, "succeeded\n");
543 		return 1;
544 	}
545 	cs89_dbg(1, cont, "failed\n");
546 	return 0;
547 }
548 
549 #define DETECTED_NONE  0
550 #define DETECTED_RJ45H 1
551 #define DETECTED_RJ45F 2
552 #define DETECTED_AUI   3
553 #define DETECTED_BNC   4
554 
555 static int
556 detect_tp(struct net_device *dev)
557 {
558 	struct net_local *lp = netdev_priv(dev);
559 	int timenow = jiffies;
560 	int fdx;
561 
562 	cs89_dbg(1, debug, "%s: Attempting TP\n", dev->name);
563 
564 	/* If connected to another full duplex capable 10-Base-T card
565 	 * the link pulses seem to be lost when the auto detect bit in
566 	 * the LineCTL is set.  To overcome this the auto detect bit will
567 	 * be cleared whilst testing the 10-Base-T interface.  This would
568 	 * not be necessary for the sparrow chip but is simpler to do it
569 	 * anyway.
570 	 */
571 	writereg(dev, PP_LineCTL, lp->linectl & ~AUI_ONLY);
572 	control_dc_dc(dev, 0);
573 
574 	/* Delay for the hardware to work out if the TP cable is present
575 	 * - 150ms
576 	 */
577 	for (timenow = jiffies; jiffies - timenow < 15;)
578 		;
579 	if ((readreg(dev, PP_LineST) & LINK_OK) == 0)
580 		return DETECTED_NONE;
581 
582 	if (lp->chip_type == CS8900) {
583 		switch (lp->force & 0xf0) {
584 #if 0
585 		case FORCE_AUTO:
586 			pr_info("%s: cs8900 doesn't autonegotiate\n",
587 				dev->name);
588 			return DETECTED_NONE;
589 #endif
590 			/* CS8900 doesn't support AUTO, change to HALF*/
591 		case FORCE_AUTO:
592 			lp->force &= ~FORCE_AUTO;
593 			lp->force |= FORCE_HALF;
594 			break;
595 		case FORCE_HALF:
596 			break;
597 		case FORCE_FULL:
598 			writereg(dev, PP_TestCTL,
599 				 readreg(dev, PP_TestCTL) | FDX_8900);
600 			break;
601 		}
602 		fdx = readreg(dev, PP_TestCTL) & FDX_8900;
603 	} else {
604 		switch (lp->force & 0xf0) {
605 		case FORCE_AUTO:
606 			lp->auto_neg_cnf = AUTO_NEG_ENABLE;
607 			break;
608 		case FORCE_HALF:
609 			lp->auto_neg_cnf = 0;
610 			break;
611 		case FORCE_FULL:
612 			lp->auto_neg_cnf = RE_NEG_NOW | ALLOW_FDX;
613 			break;
614 		}
615 
616 		writereg(dev, PP_AutoNegCTL, lp->auto_neg_cnf & AUTO_NEG_MASK);
617 
618 		if ((lp->auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) {
619 			pr_info("%s: negotiating duplex...\n", dev->name);
620 			while (readreg(dev, PP_AutoNegST) & AUTO_NEG_BUSY) {
621 				if (jiffies - timenow > 4000) {
622 					pr_err("**** Full / half duplex auto-negotiation timed out ****\n");
623 					break;
624 				}
625 			}
626 		}
627 		fdx = readreg(dev, PP_AutoNegST) & FDX_ACTIVE;
628 	}
629 	if (fdx)
630 		return DETECTED_RJ45F;
631 	else
632 		return DETECTED_RJ45H;
633 }
634 
635 static int
636 detect_bnc(struct net_device *dev)
637 {
638 	struct net_local *lp = netdev_priv(dev);
639 
640 	cs89_dbg(1, debug, "%s: Attempting BNC\n", dev->name);
641 	control_dc_dc(dev, 1);
642 
643 	writereg(dev, PP_LineCTL, (lp->linectl & ~AUTO_AUI_10BASET) | AUI_ONLY);
644 
645 	if (send_test_pkt(dev))
646 		return DETECTED_BNC;
647 	else
648 		return DETECTED_NONE;
649 }
650 
651 static int
652 detect_aui(struct net_device *dev)
653 {
654 	struct net_local *lp = netdev_priv(dev);
655 
656 	cs89_dbg(1, debug, "%s: Attempting AUI\n", dev->name);
657 	control_dc_dc(dev, 0);
658 
659 	writereg(dev, PP_LineCTL, (lp->linectl & ~AUTO_AUI_10BASET) | AUI_ONLY);
660 
661 	if (send_test_pkt(dev))
662 		return DETECTED_AUI;
663 	else
664 		return DETECTED_NONE;
665 }
666 
667 /* We have a good packet(s), get it/them out of the buffers. */
668 static void
669 net_rx(struct net_device *dev)
670 {
671 	struct net_local *lp = netdev_priv(dev);
672 	struct sk_buff *skb;
673 	int status, length;
674 
675 	status = ioread16(lp->virt_addr + RX_FRAME_PORT);
676 	length = ioread16(lp->virt_addr + RX_FRAME_PORT);
677 
678 	if ((status & RX_OK) == 0) {
679 		count_rx_errors(status, dev);
680 		return;
681 	}
682 
683 	/* Malloc up new buffer. */
684 	skb = netdev_alloc_skb(dev, length + 2);
685 	if (skb == NULL) {
686 		dev->stats.rx_dropped++;
687 		return;
688 	}
689 	skb_reserve(skb, 2);	/* longword align L3 header */
690 
691 	readwords(lp, RX_FRAME_PORT, skb_put(skb, length), length >> 1);
692 	if (length & 1)
693 		skb->data[length-1] = ioread16(lp->virt_addr + RX_FRAME_PORT);
694 
695 	cs89_dbg(3, debug, "%s: received %d byte packet of type %x\n",
696 		 dev->name, length,
697 		 (skb->data[ETH_ALEN + ETH_ALEN] << 8) |
698 		 skb->data[ETH_ALEN + ETH_ALEN + 1]);
699 
700 	skb->protocol = eth_type_trans(skb, dev);
701 	netif_rx(skb);
702 	dev->stats.rx_packets++;
703 	dev->stats.rx_bytes += length;
704 }
705 
706 /* The typical workload of the driver:
707  * Handle the network interface interrupts.
708  */
709 
710 static irqreturn_t net_interrupt(int irq, void *dev_id)
711 {
712 	struct net_device *dev = dev_id;
713 	struct net_local *lp;
714 	int status;
715 	int handled = 0;
716 
717 	lp = netdev_priv(dev);
718 
719 	/* we MUST read all the events out of the ISQ, otherwise we'll never
720 	 * get interrupted again.  As a consequence, we can't have any limit
721 	 * on the number of times we loop in the interrupt handler.  The
722 	 * hardware guarantees that eventually we'll run out of events.  Of
723 	 * course, if you're on a slow machine, and packets are arriving
724 	 * faster than you can read them off, you're screwed.  Hasta la
725 	 * vista, baby!
726 	 */
727 	while ((status = ioread16(lp->virt_addr + ISQ_PORT))) {
728 		cs89_dbg(4, debug, "%s: event=%04x\n", dev->name, status);
729 		handled = 1;
730 		switch (status & ISQ_EVENT_MASK) {
731 		case ISQ_RECEIVER_EVENT:
732 			/* Got a packet(s). */
733 			net_rx(dev);
734 			break;
735 		case ISQ_TRANSMITTER_EVENT:
736 			dev->stats.tx_packets++;
737 			netif_wake_queue(dev);	/* Inform upper layers. */
738 			if ((status & (TX_OK |
739 				       TX_LOST_CRS |
740 				       TX_SQE_ERROR |
741 				       TX_LATE_COL |
742 				       TX_16_COL)) != TX_OK) {
743 				if ((status & TX_OK) == 0)
744 					dev->stats.tx_errors++;
745 				if (status & TX_LOST_CRS)
746 					dev->stats.tx_carrier_errors++;
747 				if (status & TX_SQE_ERROR)
748 					dev->stats.tx_heartbeat_errors++;
749 				if (status & TX_LATE_COL)
750 					dev->stats.tx_window_errors++;
751 				if (status & TX_16_COL)
752 					dev->stats.tx_aborted_errors++;
753 			}
754 			break;
755 		case ISQ_BUFFER_EVENT:
756 			if (status & READY_FOR_TX) {
757 				/* we tried to transmit a packet earlier,
758 				 * but inexplicably ran out of buffers.
759 				 * That shouldn't happen since we only ever
760 				 * load one packet.  Shrug.  Do the right
761 				 * thing anyway.
762 				 */
763 				netif_wake_queue(dev);	/* Inform upper layers. */
764 			}
765 			if (status & TX_UNDERRUN) {
766 				cs89_dbg(0, err, "%s: transmit underrun\n",
767 					 dev->name);
768 				lp->send_underrun++;
769 				if (lp->send_underrun == 3)
770 					lp->send_cmd = TX_AFTER_381;
771 				else if (lp->send_underrun == 6)
772 					lp->send_cmd = TX_AFTER_ALL;
773 				/* transmit cycle is done, although
774 				 * frame wasn't transmitted - this
775 				 * avoids having to wait for the upper
776 				 * layers to timeout on us, in the
777 				 * event of a tx underrun
778 				 */
779 				netif_wake_queue(dev);	/* Inform upper layers. */
780 			}
781 #if ALLOW_DMA
782 			if (lp->use_dma && (status & RX_DMA)) {
783 				int count = readreg(dev, PP_DmaFrameCnt);
784 				while (count) {
785 					cs89_dbg(5, debug,
786 						 "%s: receiving %d DMA frames\n",
787 						 dev->name, count);
788 					if (count > 1)
789 						cs89_dbg(2, debug,
790 							 "%s: receiving %d DMA frames\n",
791 							 dev->name, count);
792 					dma_rx(dev);
793 					if (--count == 0)
794 						count = readreg(dev, PP_DmaFrameCnt);
795 					if (count > 0)
796 						cs89_dbg(2, debug,
797 							 "%s: continuing with %d DMA frames\n",
798 							 dev->name, count);
799 				}
800 			}
801 #endif
802 			break;
803 		case ISQ_RX_MISS_EVENT:
804 			dev->stats.rx_missed_errors += (status >> 6);
805 			break;
806 		case ISQ_TX_COL_EVENT:
807 			dev->stats.collisions += (status >> 6);
808 			break;
809 		}
810 	}
811 	return IRQ_RETVAL(handled);
812 }
813 
814 /* Open/initialize the board.  This is called (in the current kernel)
815    sometime after booting when the 'ifconfig' program is run.
816 
817    This routine should set everything up anew at each open, even
818    registers that "should" only need to be set once at boot, so that
819    there is non-reboot way to recover if something goes wrong.
820 */
821 
822 /* AKPM: do we need to do any locking here? */
823 
824 static int
825 net_open(struct net_device *dev)
826 {
827 	struct net_local *lp = netdev_priv(dev);
828 	int result = 0;
829 	int i;
830 	int ret;
831 
832 	if (dev->irq < 2) {
833 		/* Allow interrupts to be generated by the chip */
834 /* Cirrus' release had this: */
835 #if 0
836 		writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) | ENABLE_IRQ);
837 #endif
838 /* And 2.3.47 had this: */
839 		writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
840 
841 		for (i = 2; i < CS8920_NO_INTS; i++) {
842 			if ((1 << i) & lp->irq_map) {
843 				if (request_irq(i, net_interrupt, 0, dev->name,
844 						dev) == 0) {
845 					dev->irq = i;
846 					write_irq(dev, lp->chip_type, i);
847 					/* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
848 					break;
849 				}
850 			}
851 		}
852 
853 		if (i >= CS8920_NO_INTS) {
854 			writereg(dev, PP_BusCTL, 0);	/* disable interrupts. */
855 			pr_err("can't get an interrupt\n");
856 			ret = -EAGAIN;
857 			goto bad_out;
858 		}
859 	} else {
860 #if !defined(CONFIG_CS89x0_PLATFORM)
861 		if (((1 << dev->irq) & lp->irq_map) == 0) {
862 			pr_err("%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
863 			       dev->name, dev->irq, lp->irq_map);
864 			ret = -EAGAIN;
865 			goto bad_out;
866 		}
867 #endif
868 /* FIXME: Cirrus' release had this: */
869 		writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ);
870 /* And 2.3.47 had this: */
871 #if 0
872 		writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
873 #endif
874 		write_irq(dev, lp->chip_type, dev->irq);
875 		ret = request_irq(dev->irq, net_interrupt, 0, dev->name, dev);
876 		if (ret) {
877 			pr_err("request_irq(%d) failed\n", dev->irq);
878 			goto bad_out;
879 		}
880 	}
881 
882 #if ALLOW_DMA
883 	if (lp->use_dma && (lp->isa_config & ANY_ISA_DMA)) {
884 		unsigned long flags;
885 		lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
886 								get_order(lp->dmasize * 1024));
887 		if (!lp->dma_buff) {
888 			pr_err("%s: cannot get %dK memory for DMA\n",
889 			       dev->name, lp->dmasize);
890 			goto release_irq;
891 		}
892 		cs89_dbg(1, debug, "%s: dma %lx %lx\n",
893 			 dev->name,
894 			 (unsigned long)lp->dma_buff,
895 			 (unsigned long)isa_virt_to_bus(lp->dma_buff));
896 		if ((unsigned long)lp->dma_buff >= MAX_DMA_ADDRESS ||
897 		    !dma_page_eq(lp->dma_buff,
898 				 lp->dma_buff + lp->dmasize * 1024 - 1)) {
899 			pr_err("%s: not usable as DMA buffer\n", dev->name);
900 			goto release_irq;
901 		}
902 		memset(lp->dma_buff, 0, lp->dmasize * 1024);	/* Why? */
903 		if (request_dma(dev->dma, dev->name)) {
904 			pr_err("%s: cannot get dma channel %d\n",
905 			       dev->name, dev->dma);
906 			goto release_irq;
907 		}
908 		write_dma(dev, lp->chip_type, dev->dma);
909 		lp->rx_dma_ptr = lp->dma_buff;
910 		lp->end_dma_buff = lp->dma_buff + lp->dmasize * 1024;
911 		spin_lock_irqsave(&lp->lock, flags);
912 		disable_dma(dev->dma);
913 		clear_dma_ff(dev->dma);
914 		set_dma_mode(dev->dma, DMA_RX_MODE); /* auto_init as well */
915 		set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));
916 		set_dma_count(dev->dma, lp->dmasize * 1024);
917 		enable_dma(dev->dma);
918 		spin_unlock_irqrestore(&lp->lock, flags);
919 	}
920 #endif	/* ALLOW_DMA */
921 
922 	/* set the Ethernet address */
923 	for (i = 0; i < ETH_ALEN / 2; i++)
924 		writereg(dev, PP_IA + i * 2,
925 			 (dev->dev_addr[i * 2] |
926 			  (dev->dev_addr[i * 2 + 1] << 8)));
927 
928 	/* while we're testing the interface, leave interrupts disabled */
929 	writereg(dev, PP_BusCTL, MEMORY_ON);
930 
931 	/* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
932 	if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) &&
933 	    (lp->adapter_cnf & A_CNF_LOW_RX_SQUELCH))
934 		lp->linectl = LOW_RX_SQUELCH;
935 	else
936 		lp->linectl = 0;
937 
938 	/* check to make sure that they have the "right" hardware available */
939 	switch (lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
940 	case A_CNF_MEDIA_10B_T:
941 		result = lp->adapter_cnf & A_CNF_10B_T;
942 		break;
943 	case A_CNF_MEDIA_AUI:
944 		result = lp->adapter_cnf & A_CNF_AUI;
945 		break;
946 	case A_CNF_MEDIA_10B_2:
947 		result = lp->adapter_cnf & A_CNF_10B_2;
948 		break;
949 	default:
950 		result = lp->adapter_cnf & (A_CNF_10B_T |
951 					    A_CNF_AUI |
952 					    A_CNF_10B_2);
953 	}
954 	if (!result) {
955 		pr_err("%s: EEPROM is configured for unavailable media\n",
956 		       dev->name);
957 release_dma:
958 #if ALLOW_DMA
959 		free_dma(dev->dma);
960 release_irq:
961 		release_dma_buff(lp);
962 #endif
963 		writereg(dev, PP_LineCTL,
964 			 readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));
965 		free_irq(dev->irq, dev);
966 		ret = -EAGAIN;
967 		goto bad_out;
968 	}
969 
970 	/* set the hardware to the configured choice */
971 	switch (lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
972 	case A_CNF_MEDIA_10B_T:
973 		result = detect_tp(dev);
974 		if (result == DETECTED_NONE) {
975 			pr_warn("%s: 10Base-T (RJ-45) has no cable\n",
976 				dev->name);
977 			if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
978 				result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */
979 		}
980 		break;
981 	case A_CNF_MEDIA_AUI:
982 		result = detect_aui(dev);
983 		if (result == DETECTED_NONE) {
984 			pr_warn("%s: 10Base-5 (AUI) has no cable\n", dev->name);
985 			if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
986 				result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */
987 		}
988 		break;
989 	case A_CNF_MEDIA_10B_2:
990 		result = detect_bnc(dev);
991 		if (result == DETECTED_NONE) {
992 			pr_warn("%s: 10Base-2 (BNC) has no cable\n", dev->name);
993 			if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
994 				result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */
995 		}
996 		break;
997 	case A_CNF_MEDIA_AUTO:
998 		writereg(dev, PP_LineCTL, lp->linectl | AUTO_AUI_10BASET);
999 		if (lp->adapter_cnf & A_CNF_10B_T) {
1000 			result = detect_tp(dev);
1001 			if (result != DETECTED_NONE)
1002 				break;
1003 		}
1004 		if (lp->adapter_cnf & A_CNF_AUI) {
1005 			result = detect_aui(dev);
1006 			if (result != DETECTED_NONE)
1007 				break;
1008 		}
1009 		if (lp->adapter_cnf & A_CNF_10B_2) {
1010 			result = detect_bnc(dev);
1011 			if (result != DETECTED_NONE)
1012 				break;
1013 		}
1014 		pr_err("%s: no media detected\n", dev->name);
1015 		goto release_dma;
1016 	}
1017 	switch (result) {
1018 	case DETECTED_NONE:
1019 		pr_err("%s: no network cable attached to configured media\n",
1020 		       dev->name);
1021 		goto release_dma;
1022 	case DETECTED_RJ45H:
1023 		pr_info("%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);
1024 		break;
1025 	case DETECTED_RJ45F:
1026 		pr_info("%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);
1027 		break;
1028 	case DETECTED_AUI:
1029 		pr_info("%s: using 10Base-5 (AUI)\n", dev->name);
1030 		break;
1031 	case DETECTED_BNC:
1032 		pr_info("%s: using 10Base-2 (BNC)\n", dev->name);
1033 		break;
1034 	}
1035 
1036 	/* Turn on both receive and transmit operations */
1037 	writereg(dev, PP_LineCTL,
1038 		 readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON);
1039 
1040 	/* Receive only error free packets addressed to this card */
1041 	lp->rx_mode = 0;
1042 	writereg(dev, PP_RxCTL, DEF_RX_ACCEPT);
1043 
1044 	lp->curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL;
1045 
1046 	if (lp->isa_config & STREAM_TRANSFER)
1047 		lp->curr_rx_cfg |= RX_STREAM_ENBL;
1048 #if ALLOW_DMA
1049 	set_dma_cfg(dev);
1050 #endif
1051 	writereg(dev, PP_RxCFG, lp->curr_rx_cfg);
1052 
1053 	writereg(dev, PP_TxCFG, (TX_LOST_CRS_ENBL |
1054 				 TX_SQE_ERROR_ENBL |
1055 				 TX_OK_ENBL |
1056 				 TX_LATE_COL_ENBL |
1057 				 TX_JBR_ENBL |
1058 				 TX_ANY_COL_ENBL |
1059 				 TX_16_COL_ENBL));
1060 
1061 	writereg(dev, PP_BufCFG, (READY_FOR_TX_ENBL |
1062 				  RX_MISS_COUNT_OVRFLOW_ENBL |
1063 #if ALLOW_DMA
1064 				  dma_bufcfg(dev) |
1065 #endif
1066 				  TX_COL_COUNT_OVRFLOW_ENBL |
1067 				  TX_UNDERRUN_ENBL));
1068 
1069 	/* now that we've got our act together, enable everything */
1070 	writereg(dev, PP_BusCTL, (ENABLE_IRQ
1071 				  | (dev->mem_start ? MEMORY_ON : 0) /* turn memory on */
1072 #if ALLOW_DMA
1073 				  | dma_busctl(dev)
1074 #endif
1075 			 ));
1076 	netif_start_queue(dev);
1077 	cs89_dbg(1, debug, "net_open() succeeded\n");
1078 	return 0;
1079 bad_out:
1080 	return ret;
1081 }
1082 
1083 /* The inverse routine to net_open(). */
1084 static int
1085 net_close(struct net_device *dev)
1086 {
1087 #if ALLOW_DMA
1088 	struct net_local *lp = netdev_priv(dev);
1089 #endif
1090 
1091 	netif_stop_queue(dev);
1092 
1093 	writereg(dev, PP_RxCFG, 0);
1094 	writereg(dev, PP_TxCFG, 0);
1095 	writereg(dev, PP_BufCFG, 0);
1096 	writereg(dev, PP_BusCTL, 0);
1097 
1098 	free_irq(dev->irq, dev);
1099 
1100 #if ALLOW_DMA
1101 	if (lp->use_dma && lp->dma) {
1102 		free_dma(dev->dma);
1103 		release_dma_buff(lp);
1104 	}
1105 #endif
1106 
1107 	/* Update the statistics here. */
1108 	return 0;
1109 }
1110 
1111 /* Get the current statistics.
1112  * This may be called with the card open or closed.
1113  */
1114 static struct net_device_stats *
1115 net_get_stats(struct net_device *dev)
1116 {
1117 	struct net_local *lp = netdev_priv(dev);
1118 	unsigned long flags;
1119 
1120 	spin_lock_irqsave(&lp->lock, flags);
1121 	/* Update the statistics from the device registers. */
1122 	dev->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);
1123 	dev->stats.collisions += (readreg(dev, PP_TxCol) >> 6);
1124 	spin_unlock_irqrestore(&lp->lock, flags);
1125 
1126 	return &dev->stats;
1127 }
1128 
1129 static void net_timeout(struct net_device *dev)
1130 {
1131 	/* If we get here, some higher level has decided we are broken.
1132 	   There should really be a "kick me" function call instead. */
1133 	cs89_dbg(0, err, "%s: transmit timed out, %s?\n",
1134 		 dev->name,
1135 		 tx_done(dev) ? "IRQ conflict" : "network cable problem");
1136 	/* Try to restart the adaptor. */
1137 	netif_wake_queue(dev);
1138 }
1139 
1140 static netdev_tx_t net_send_packet(struct sk_buff *skb, struct net_device *dev)
1141 {
1142 	struct net_local *lp = netdev_priv(dev);
1143 	unsigned long flags;
1144 
1145 	cs89_dbg(3, debug, "%s: sent %d byte packet of type %x\n",
1146 		 dev->name, skb->len,
1147 		 ((skb->data[ETH_ALEN + ETH_ALEN] << 8) |
1148 		  skb->data[ETH_ALEN + ETH_ALEN + 1]));
1149 
1150 	/* keep the upload from being interrupted, since we
1151 	 * ask the chip to start transmitting before the
1152 	 * whole packet has been completely uploaded.
1153 	 */
1154 
1155 	spin_lock_irqsave(&lp->lock, flags);
1156 	netif_stop_queue(dev);
1157 
1158 	/* initiate a transmit sequence */
1159 	iowrite16(lp->send_cmd, lp->virt_addr + TX_CMD_PORT);
1160 	iowrite16(skb->len, lp->virt_addr + TX_LEN_PORT);
1161 
1162 	/* Test to see if the chip has allocated memory for the packet */
1163 	if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) {
1164 		/* Gasp!  It hasn't.  But that shouldn't happen since
1165 		 * we're waiting for TxOk, so return 1 and requeue this packet.
1166 		 */
1167 
1168 		spin_unlock_irqrestore(&lp->lock, flags);
1169 		cs89_dbg(0, err, "Tx buffer not free!\n");
1170 		return NETDEV_TX_BUSY;
1171 	}
1172 	/* Write the contents of the packet */
1173 	writewords(lp, TX_FRAME_PORT, skb->data, (skb->len + 1) >> 1);
1174 	spin_unlock_irqrestore(&lp->lock, flags);
1175 	dev->stats.tx_bytes += skb->len;
1176 	dev_consume_skb_any(skb);
1177 
1178 	/* We DO NOT call netif_wake_queue() here.
1179 	 * We also DO NOT call netif_start_queue().
1180 	 *
1181 	 * Either of these would cause another bottom half run through
1182 	 * net_send_packet() before this packet has fully gone out.
1183 	 * That causes us to hit the "Gasp!" above and the send is rescheduled.
1184 	 * it runs like a dog.  We just return and wait for the Tx completion
1185 	 * interrupt handler to restart the netdevice layer
1186 	 */
1187 
1188 	return NETDEV_TX_OK;
1189 }
1190 
1191 static void set_multicast_list(struct net_device *dev)
1192 {
1193 	struct net_local *lp = netdev_priv(dev);
1194 	unsigned long flags;
1195 	u16 cfg;
1196 
1197 	spin_lock_irqsave(&lp->lock, flags);
1198 	if (dev->flags & IFF_PROMISC)
1199 		lp->rx_mode = RX_ALL_ACCEPT;
1200 	else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev))
1201 		/* The multicast-accept list is initialized to accept-all,
1202 		 * and we rely on higher-level filtering for now.
1203 		 */
1204 		lp->rx_mode = RX_MULTCAST_ACCEPT;
1205 	else
1206 		lp->rx_mode = 0;
1207 
1208 	writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode);
1209 
1210 	/* in promiscuous mode, we accept errored packets,
1211 	 * so we have to enable interrupts on them also
1212 	 */
1213 	cfg = lp->curr_rx_cfg;
1214 	if (lp->rx_mode == RX_ALL_ACCEPT)
1215 		cfg |= RX_CRC_ERROR_ENBL | RX_RUNT_ENBL | RX_EXTRA_DATA_ENBL;
1216 	writereg(dev, PP_RxCFG, cfg);
1217 	spin_unlock_irqrestore(&lp->lock, flags);
1218 }
1219 
1220 static int set_mac_address(struct net_device *dev, void *p)
1221 {
1222 	int i;
1223 	struct sockaddr *addr = p;
1224 
1225 	if (netif_running(dev))
1226 		return -EBUSY;
1227 
1228 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
1229 
1230 	cs89_dbg(0, debug, "%s: Setting MAC address to %pM\n",
1231 		 dev->name, dev->dev_addr);
1232 
1233 	/* set the Ethernet address */
1234 	for (i = 0; i < ETH_ALEN / 2; i++)
1235 		writereg(dev, PP_IA + i * 2,
1236 			 (dev->dev_addr[i * 2] |
1237 			  (dev->dev_addr[i * 2 + 1] << 8)));
1238 
1239 	return 0;
1240 }
1241 
1242 #ifdef CONFIG_NET_POLL_CONTROLLER
1243 /*
1244  * Polling receive - used by netconsole and other diagnostic tools
1245  * to allow network i/o with interrupts disabled.
1246  */
1247 static void net_poll_controller(struct net_device *dev)
1248 {
1249 	disable_irq(dev->irq);
1250 	net_interrupt(dev->irq, dev);
1251 	enable_irq(dev->irq);
1252 }
1253 #endif
1254 
1255 static const struct net_device_ops net_ops = {
1256 	.ndo_open		= net_open,
1257 	.ndo_stop		= net_close,
1258 	.ndo_tx_timeout		= net_timeout,
1259 	.ndo_start_xmit		= net_send_packet,
1260 	.ndo_get_stats		= net_get_stats,
1261 	.ndo_set_rx_mode	= set_multicast_list,
1262 	.ndo_set_mac_address	= set_mac_address,
1263 #ifdef CONFIG_NET_POLL_CONTROLLER
1264 	.ndo_poll_controller	= net_poll_controller,
1265 #endif
1266 	.ndo_change_mtu		= eth_change_mtu,
1267 	.ndo_validate_addr	= eth_validate_addr,
1268 };
1269 
1270 static void __init reset_chip(struct net_device *dev)
1271 {
1272 #if !defined(CONFIG_MACH_MX31ADS)
1273 	struct net_local *lp = netdev_priv(dev);
1274 	int reset_start_time;
1275 
1276 	writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
1277 
1278 	/* wait 30 ms */
1279 	msleep(30);
1280 
1281 	if (lp->chip_type != CS8900) {
1282 		/* Hardware problem requires PNP registers to be reconfigured after a reset */
1283 		iowrite16(PP_CS8920_ISAINT, lp->virt_addr + ADD_PORT);
1284 		iowrite8(dev->irq, lp->virt_addr + DATA_PORT);
1285 		iowrite8(0, lp->virt_addr + DATA_PORT + 1);
1286 
1287 		iowrite16(PP_CS8920_ISAMemB, lp->virt_addr + ADD_PORT);
1288 		iowrite8((dev->mem_start >> 16) & 0xff,
1289 			 lp->virt_addr + DATA_PORT);
1290 		iowrite8((dev->mem_start >> 8) & 0xff,
1291 			 lp->virt_addr + DATA_PORT + 1);
1292 	}
1293 
1294 	/* Wait until the chip is reset */
1295 	reset_start_time = jiffies;
1296 	while ((readreg(dev, PP_SelfST) & INIT_DONE) == 0 &&
1297 	       jiffies - reset_start_time < 2)
1298 		;
1299 #endif /* !CONFIG_MACH_MX31ADS */
1300 }
1301 
1302 /* This is the real probe routine.
1303  * Linux has a history of friendly device probes on the ISA bus.
1304  * A good device probes avoids doing writes, and
1305  * verifies that the correct device exists and functions.
1306  * Return 0 on success.
1307  */
1308 static int __init
1309 cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
1310 {
1311 	struct net_local *lp = netdev_priv(dev);
1312 	int i;
1313 	int tmp;
1314 	unsigned rev_type = 0;
1315 	int eeprom_buff[CHKSUM_LEN];
1316 	int retval;
1317 
1318 	/* Initialize the device structure. */
1319 	if (!modular) {
1320 		memset(lp, 0, sizeof(*lp));
1321 		spin_lock_init(&lp->lock);
1322 #ifndef MODULE
1323 #if ALLOW_DMA
1324 		if (g_cs89x0_dma) {
1325 			lp->use_dma = 1;
1326 			lp->dma = g_cs89x0_dma;
1327 			lp->dmasize = 16;	/* Could make this an option... */
1328 		}
1329 #endif
1330 		lp->force = g_cs89x0_media__force;
1331 #endif
1332 	}
1333 
1334 	pr_debug("PP_addr at %p[%x]: 0x%x\n",
1335 		 ioaddr, ADD_PORT, ioread16(ioaddr + ADD_PORT));
1336 	iowrite16(PP_ChipID, ioaddr + ADD_PORT);
1337 
1338 	tmp = ioread16(ioaddr + DATA_PORT);
1339 	if (tmp != CHIP_EISA_ID_SIG) {
1340 		pr_debug("%s: incorrect signature at %p[%x]: 0x%x!="
1341 			 CHIP_EISA_ID_SIG_STR "\n",
1342 			 dev->name, ioaddr, DATA_PORT, tmp);
1343 		retval = -ENODEV;
1344 		goto out1;
1345 	}
1346 
1347 	lp->virt_addr = ioaddr;
1348 
1349 	/* get the chip type */
1350 	rev_type = readreg(dev, PRODUCT_ID_ADD);
1351 	lp->chip_type = rev_type & ~REVISON_BITS;
1352 	lp->chip_revision = ((rev_type & REVISON_BITS) >> 8) + 'A';
1353 
1354 	/* Check the chip type and revision in order to set the correct
1355 	 * send command.  CS8920 revision C and CS8900 revision F can use
1356 	 * the faster send.
1357 	 */
1358 	lp->send_cmd = TX_AFTER_381;
1359 	if (lp->chip_type == CS8900 && lp->chip_revision >= 'F')
1360 		lp->send_cmd = TX_NOW;
1361 	if (lp->chip_type != CS8900 && lp->chip_revision >= 'C')
1362 		lp->send_cmd = TX_NOW;
1363 
1364 	pr_info_once("%s\n", version);
1365 
1366 	pr_info("%s: cs89%c0%s rev %c found at %p ",
1367 		dev->name,
1368 		lp->chip_type == CS8900  ? '0' : '2',
1369 		lp->chip_type == CS8920M ? "M" : "",
1370 		lp->chip_revision,
1371 		lp->virt_addr);
1372 
1373 	reset_chip(dev);
1374 
1375 	/* Here we read the current configuration of the chip.
1376 	 * If there is no Extended EEPROM then the idea is to not disturb
1377 	 * the chip configuration, it should have been correctly setup by
1378 	 * automatic EEPROM read on reset. So, if the chip says it read
1379 	 * the EEPROM the driver will always do *something* instead of
1380 	 * complain that adapter_cnf is 0.
1381 	 */
1382 
1383 	if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) ==
1384 	    (EEPROM_OK | EEPROM_PRESENT)) {
1385 		/* Load the MAC. */
1386 		for (i = 0; i < ETH_ALEN / 2; i++) {
1387 			unsigned int Addr;
1388 			Addr = readreg(dev, PP_IA + i * 2);
1389 			dev->dev_addr[i * 2] = Addr & 0xFF;
1390 			dev->dev_addr[i * 2 + 1] = Addr >> 8;
1391 		}
1392 
1393 		/* Load the Adapter Configuration.
1394 		 * Note:  Barring any more specific information from some
1395 		 * other source (ie EEPROM+Schematics), we would not know
1396 		 * how to operate a 10Base2 interface on the AUI port.
1397 		 * However, since we  do read the status of HCB1 and use
1398 		 * settings that always result in calls to control_dc_dc(dev,0)
1399 		 * a BNC interface should work if the enable pin
1400 		 * (dc/dc converter) is on HCB1.
1401 		 * It will be called AUI however.
1402 		 */
1403 
1404 		lp->adapter_cnf = 0;
1405 		i = readreg(dev, PP_LineCTL);
1406 		/* Preserve the setting of the HCB1 pin. */
1407 		if ((i & (HCB1 | HCB1_ENBL)) == (HCB1 | HCB1_ENBL))
1408 			lp->adapter_cnf |= A_CNF_DC_DC_POLARITY;
1409 		/* Save the sqelch bit */
1410 		if ((i & LOW_RX_SQUELCH) == LOW_RX_SQUELCH)
1411 			lp->adapter_cnf |= A_CNF_EXTND_10B_2 | A_CNF_LOW_RX_SQUELCH;
1412 		/* Check if the card is in 10Base-t only mode */
1413 		if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == 0)
1414 			lp->adapter_cnf |=  A_CNF_10B_T | A_CNF_MEDIA_10B_T;
1415 		/* Check if the card is in AUI only mode */
1416 		if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUI_ONLY)
1417 			lp->adapter_cnf |=  A_CNF_AUI | A_CNF_MEDIA_AUI;
1418 		/* Check if the card is in Auto mode. */
1419 		if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET)
1420 			lp->adapter_cnf |=  A_CNF_AUI | A_CNF_10B_T |
1421 				A_CNF_MEDIA_AUI | A_CNF_MEDIA_10B_T | A_CNF_MEDIA_AUTO;
1422 
1423 		cs89_dbg(1, info, "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
1424 			 dev->name, i, lp->adapter_cnf);
1425 
1426 		/* IRQ. Other chips already probe, see below. */
1427 		if (lp->chip_type == CS8900)
1428 			lp->isa_config = readreg(dev, PP_CS8900_ISAINT) & INT_NO_MASK;
1429 
1430 		pr_cont("[Cirrus EEPROM] ");
1431 	}
1432 
1433 	pr_cont("\n");
1434 
1435 	/* First check to see if an EEPROM is attached. */
1436 
1437 	if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0)
1438 		pr_warn("No EEPROM, relying on command line....\n");
1439 	else if (get_eeprom_data(dev, START_EEPROM_DATA, CHKSUM_LEN, eeprom_buff) < 0) {
1440 		pr_warn("EEPROM read failed, relying on command line\n");
1441 	} else if (get_eeprom_cksum(START_EEPROM_DATA, CHKSUM_LEN, eeprom_buff) < 0) {
1442 		/* Check if the chip was able to read its own configuration starting
1443 		   at 0 in the EEPROM*/
1444 		if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) !=
1445 		    (EEPROM_OK | EEPROM_PRESENT))
1446 			pr_warn("Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
1447 
1448 	} else {
1449 		/* This reads an extended EEPROM that is not documented
1450 		 * in the CS8900 datasheet.
1451 		 */
1452 
1453 		/* get transmission control word  but keep the autonegotiation bits */
1454 		if (!lp->auto_neg_cnf)
1455 			lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET / 2];
1456 		/* Store adapter configuration */
1457 		if (!lp->adapter_cnf)
1458 			lp->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET / 2];
1459 		/* Store ISA configuration */
1460 		lp->isa_config = eeprom_buff[ISA_CNF_OFFSET / 2];
1461 		dev->mem_start = eeprom_buff[PACKET_PAGE_OFFSET / 2] << 8;
1462 
1463 		/* eeprom_buff has 32-bit ints, so we can't just memcpy it */
1464 		/* store the initial memory base address */
1465 		for (i = 0; i < ETH_ALEN / 2; i++) {
1466 			dev->dev_addr[i * 2] = eeprom_buff[i];
1467 			dev->dev_addr[i * 2 + 1] = eeprom_buff[i] >> 8;
1468 		}
1469 		cs89_dbg(1, debug, "%s: new adapter_cnf: 0x%x\n",
1470 			 dev->name, lp->adapter_cnf);
1471 	}
1472 
1473 	/* allow them to force multiple transceivers.  If they force multiple, autosense */
1474 	{
1475 		int count = 0;
1476 		if (lp->force & FORCE_RJ45) {
1477 			lp->adapter_cnf |= A_CNF_10B_T;
1478 			count++;
1479 		}
1480 		if (lp->force & FORCE_AUI) {
1481 			lp->adapter_cnf |= A_CNF_AUI;
1482 			count++;
1483 		}
1484 		if (lp->force & FORCE_BNC) {
1485 			lp->adapter_cnf |= A_CNF_10B_2;
1486 			count++;
1487 		}
1488 		if (count > 1)
1489 			lp->adapter_cnf |= A_CNF_MEDIA_AUTO;
1490 		else if (lp->force & FORCE_RJ45)
1491 			lp->adapter_cnf |= A_CNF_MEDIA_10B_T;
1492 		else if (lp->force & FORCE_AUI)
1493 			lp->adapter_cnf |= A_CNF_MEDIA_AUI;
1494 		else if (lp->force & FORCE_BNC)
1495 			lp->adapter_cnf |= A_CNF_MEDIA_10B_2;
1496 	}
1497 
1498 	cs89_dbg(1, debug, "%s: after force 0x%x, adapter_cnf=0x%x\n",
1499 		 dev->name, lp->force, lp->adapter_cnf);
1500 
1501 	/* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
1502 
1503 	/* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
1504 
1505 	/* FIXME: we don't set the Ethernet address on the command line.  Use
1506 	 * ifconfig IFACE hw ether AABBCCDDEEFF
1507 	 */
1508 
1509 	pr_info("media %s%s%s",
1510 		(lp->adapter_cnf & A_CNF_10B_T) ? "RJ-45," : "",
1511 		(lp->adapter_cnf & A_CNF_AUI) ? "AUI," : "",
1512 		(lp->adapter_cnf & A_CNF_10B_2) ? "BNC," : "");
1513 
1514 	lp->irq_map = 0xffff;
1515 
1516 	/* If this is a CS8900 then no pnp soft */
1517 	if (lp->chip_type != CS8900 &&
1518 	    /* Check if the ISA IRQ has been set  */
1519 	    (i = readreg(dev, PP_CS8920_ISAINT) & 0xff,
1520 	     (i != 0 && i < CS8920_NO_INTS))) {
1521 		if (!dev->irq)
1522 			dev->irq = i;
1523 	} else {
1524 		i = lp->isa_config & INT_NO_MASK;
1525 #ifndef CONFIG_CS89x0_PLATFORM
1526 		if (lp->chip_type == CS8900) {
1527 			/* Translate the IRQ using the IRQ mapping table. */
1528 			if (i >= ARRAY_SIZE(cs8900_irq_map))
1529 				pr_err("invalid ISA interrupt number %d\n", i);
1530 			else
1531 				i = cs8900_irq_map[i];
1532 
1533 			lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */
1534 		} else {
1535 			int irq_map_buff[IRQ_MAP_LEN/2];
1536 
1537 			if (get_eeprom_data(dev, IRQ_MAP_EEPROM_DATA,
1538 					    IRQ_MAP_LEN / 2,
1539 					    irq_map_buff) >= 0) {
1540 				if ((irq_map_buff[0] & 0xff) == PNP_IRQ_FRMT)
1541 					lp->irq_map = ((irq_map_buff[0] >> 8) |
1542 						       (irq_map_buff[1] << 8));
1543 			}
1544 		}
1545 #endif
1546 		if (!dev->irq)
1547 			dev->irq = i;
1548 	}
1549 
1550 	pr_cont(" IRQ %d", dev->irq);
1551 
1552 #if ALLOW_DMA
1553 	if (lp->use_dma) {
1554 		get_dma_channel(dev);
1555 		pr_cont(", DMA %d", dev->dma);
1556 	} else
1557 #endif
1558 		pr_cont(", programmed I/O");
1559 
1560 	/* print the ethernet address. */
1561 	pr_cont(", MAC %pM\n", dev->dev_addr);
1562 
1563 	dev->netdev_ops	= &net_ops;
1564 	dev->watchdog_timeo = HZ;
1565 
1566 	cs89_dbg(0, info, "cs89x0_probe1() successful\n");
1567 
1568 	retval = register_netdev(dev);
1569 	if (retval)
1570 		goto out2;
1571 	return 0;
1572 out2:
1573 	iowrite16(PP_ChipID, lp->virt_addr + ADD_PORT);
1574 out1:
1575 	return retval;
1576 }
1577 
1578 #ifndef CONFIG_CS89x0_PLATFORM
1579 /*
1580  * This function converts the I/O port addres used by the cs89x0_probe() and
1581  * init_module() functions to the I/O memory address used by the
1582  * cs89x0_probe1() function.
1583  */
1584 static int __init
1585 cs89x0_ioport_probe(struct net_device *dev, unsigned long ioport, int modular)
1586 {
1587 	struct net_local *lp = netdev_priv(dev);
1588 	int ret;
1589 	void __iomem *io_mem;
1590 
1591 	if (!lp)
1592 		return -ENOMEM;
1593 
1594 	dev->base_addr = ioport;
1595 
1596 	if (!request_region(ioport, NETCARD_IO_EXTENT, DRV_NAME)) {
1597 		ret = -EBUSY;
1598 		goto out;
1599 	}
1600 
1601 	io_mem = ioport_map(ioport & ~3, NETCARD_IO_EXTENT);
1602 	if (!io_mem) {
1603 		ret = -ENOMEM;
1604 		goto release;
1605 	}
1606 
1607 	/* if they give us an odd I/O address, then do ONE write to
1608 	 * the address port, to get it back to address zero, where we
1609 	 * expect to find the EISA signature word. An IO with a base of 0x3
1610 	 * will skip the test for the ADD_PORT.
1611 	 */
1612 	if (ioport & 1) {
1613 		cs89_dbg(1, info, "%s: odd ioaddr 0x%lx\n", dev->name, ioport);
1614 		if ((ioport & 2) != 2) {
1615 			if ((ioread16(io_mem + ADD_PORT) & ADD_MASK) !=
1616 			    ADD_SIG) {
1617 				pr_err("%s: bad signature 0x%x\n",
1618 				       dev->name, ioread16(io_mem + ADD_PORT));
1619 				ret = -ENODEV;
1620 				goto unmap;
1621 			}
1622 		}
1623 	}
1624 
1625 	ret = cs89x0_probe1(dev, io_mem, modular);
1626 	if (!ret)
1627 		goto out;
1628 unmap:
1629 	ioport_unmap(io_mem);
1630 release:
1631 	release_region(ioport, NETCARD_IO_EXTENT);
1632 out:
1633 	return ret;
1634 }
1635 
1636 #ifndef MODULE
1637 /* Check for a network adaptor of this type, and return '0' iff one exists.
1638  * If dev->base_addr == 0, probe all likely locations.
1639  * If dev->base_addr == 1, always return failure.
1640  * If dev->base_addr == 2, allocate space for the device and return success
1641  * (detachable devices only).
1642  * Return 0 on success.
1643  */
1644 
1645 struct net_device * __init cs89x0_probe(int unit)
1646 {
1647 	struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1648 	unsigned *port;
1649 	int err = 0;
1650 	int irq;
1651 	int io;
1652 
1653 	if (!dev)
1654 		return ERR_PTR(-ENODEV);
1655 
1656 	sprintf(dev->name, "eth%d", unit);
1657 	netdev_boot_setup_check(dev);
1658 	io = dev->base_addr;
1659 	irq = dev->irq;
1660 
1661 	cs89_dbg(0, info, "cs89x0_probe(0x%x)\n", io);
1662 
1663 	if (io > 0x1ff)	{	/* Check a single specified location. */
1664 		err = cs89x0_ioport_probe(dev, io, 0);
1665 	} else if (io != 0) {	/* Don't probe at all. */
1666 		err = -ENXIO;
1667 	} else {
1668 		for (port = netcard_portlist; *port; port++) {
1669 			if (cs89x0_ioport_probe(dev, *port, 0) == 0)
1670 				break;
1671 			dev->irq = irq;
1672 		}
1673 		if (!*port)
1674 			err = -ENODEV;
1675 	}
1676 	if (err)
1677 		goto out;
1678 	return dev;
1679 out:
1680 	free_netdev(dev);
1681 	pr_warn("no cs8900 or cs8920 detected.  Be sure to disable PnP with SETUP\n");
1682 	return ERR_PTR(err);
1683 }
1684 #endif
1685 #endif
1686 
1687 #if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
1688 
1689 static struct net_device *dev_cs89x0;
1690 
1691 /* Support the 'debug' module parm even if we're compiled for non-debug to
1692  * avoid breaking someone's startup scripts
1693  */
1694 
1695 static int io;
1696 static int irq;
1697 static int debug;
1698 static char media[8];
1699 static int duplex = -1;
1700 
1701 static int use_dma;			/* These generate unused var warnings if ALLOW_DMA = 0 */
1702 static int dma;
1703 static int dmasize = 16;		/* or 64 */
1704 
1705 module_param(io, int, 0);
1706 module_param(irq, int, 0);
1707 module_param(debug, int, 0);
1708 module_param_string(media, media, sizeof(media), 0);
1709 module_param(duplex, int, 0);
1710 module_param(dma , int, 0);
1711 module_param(dmasize , int, 0);
1712 module_param(use_dma , int, 0);
1713 MODULE_PARM_DESC(io, "cs89x0 I/O base address");
1714 MODULE_PARM_DESC(irq, "cs89x0 IRQ number");
1715 #if DEBUGGING
1716 MODULE_PARM_DESC(debug, "cs89x0 debug level (0-6)");
1717 #else
1718 MODULE_PARM_DESC(debug, "(ignored)");
1719 #endif
1720 MODULE_PARM_DESC(media, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1721 /* No other value than -1 for duplex seems to be currently interpreted */
1722 MODULE_PARM_DESC(duplex, "(ignored)");
1723 #if ALLOW_DMA
1724 MODULE_PARM_DESC(dma , "cs89x0 ISA DMA channel; ignored if use_dma=0");
1725 MODULE_PARM_DESC(dmasize , "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1726 MODULE_PARM_DESC(use_dma , "cs89x0 using DMA (0-1)");
1727 #else
1728 MODULE_PARM_DESC(dma , "(ignored)");
1729 MODULE_PARM_DESC(dmasize , "(ignored)");
1730 MODULE_PARM_DESC(use_dma , "(ignored)");
1731 #endif
1732 
1733 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton");
1734 MODULE_LICENSE("GPL");
1735 
1736 /*
1737  * media=t             - specify media type
1738  * or media=2
1739  * or media=aui
1740  * or medai=auto
1741  * duplex=0            - specify forced half/full/autonegotiate duplex
1742  * debug=#             - debug level
1743  *
1744  * Default Chip Configuration:
1745  * DMA Burst = enabled
1746  * IOCHRDY Enabled = enabled
1747  * UseSA = enabled
1748  * CS8900 defaults to half-duplex if not specified on command-line
1749  * CS8920 defaults to autoneg if not specified on command-line
1750  * Use reset defaults for other config parameters
1751  *
1752  * Assumptions:
1753  * media type specified is supported (circuitry is present)
1754  * if memory address is > 1MB, then required mem decode hw is present
1755  * if 10B-2, then agent other than driver will enable DC/DC converter
1756  * (hw or software util)
1757  */
1758 
1759 int __init init_module(void)
1760 {
1761 	struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1762 	struct net_local *lp;
1763 	int ret = 0;
1764 
1765 #if DEBUGGING
1766 	net_debug = debug;
1767 #else
1768 	debug = 0;
1769 #endif
1770 	if (!dev)
1771 		return -ENOMEM;
1772 
1773 	dev->irq = irq;
1774 	dev->base_addr = io;
1775 	lp = netdev_priv(dev);
1776 
1777 #if ALLOW_DMA
1778 	if (use_dma) {
1779 		lp->use_dma = use_dma;
1780 		lp->dma = dma;
1781 		lp->dmasize = dmasize;
1782 	}
1783 #endif
1784 
1785 	spin_lock_init(&lp->lock);
1786 
1787 	/* boy, they'd better get these right */
1788 	if (!strcmp(media, "rj45"))
1789 		lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1790 	else if (!strcmp(media, "aui"))
1791 		lp->adapter_cnf = A_CNF_MEDIA_AUI   | A_CNF_AUI;
1792 	else if (!strcmp(media, "bnc"))
1793 		lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2;
1794 	else
1795 		lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1796 
1797 	if (duplex == -1)
1798 		lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1799 
1800 	if (io == 0) {
1801 		pr_err("Module autoprobing not allowed\n");
1802 		pr_err("Append io=0xNNN\n");
1803 		ret = -EPERM;
1804 		goto out;
1805 	} else if (io <= 0x1ff) {
1806 		ret = -ENXIO;
1807 		goto out;
1808 	}
1809 
1810 #if ALLOW_DMA
1811 	if (use_dma && dmasize != 16 && dmasize != 64) {
1812 		pr_err("dma size must be either 16K or 64K, not %dK\n",
1813 		       dmasize);
1814 		ret = -EPERM;
1815 		goto out;
1816 	}
1817 #endif
1818 	ret = cs89x0_ioport_probe(dev, io, 1);
1819 	if (ret)
1820 		goto out;
1821 
1822 	dev_cs89x0 = dev;
1823 	return 0;
1824 out:
1825 	free_netdev(dev);
1826 	return ret;
1827 }
1828 
1829 void __exit
1830 cleanup_module(void)
1831 {
1832 	struct net_local *lp = netdev_priv(dev_cs89x0);
1833 
1834 	unregister_netdev(dev_cs89x0);
1835 	iowrite16(PP_ChipID, lp->virt_addr + ADD_PORT);
1836 	ioport_unmap(lp->virt_addr);
1837 	release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
1838 	free_netdev(dev_cs89x0);
1839 }
1840 #endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
1841 
1842 #ifdef CONFIG_CS89x0_PLATFORM
1843 static int __init cs89x0_platform_probe(struct platform_device *pdev)
1844 {
1845 	struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1846 	struct net_local *lp;
1847 	struct resource *mem_res;
1848 	void __iomem *virt_addr;
1849 	int err;
1850 
1851 	if (!dev)
1852 		return -ENOMEM;
1853 
1854 	lp = netdev_priv(dev);
1855 
1856 	dev->irq = platform_get_irq(pdev, 0);
1857 	if (dev->irq <= 0) {
1858 		dev_warn(&dev->dev, "interrupt resource missing\n");
1859 		err = -ENXIO;
1860 		goto free;
1861 	}
1862 
1863 	mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1864 	virt_addr = devm_ioremap_resource(&pdev->dev, mem_res);
1865 	if (IS_ERR(virt_addr)) {
1866 		err = PTR_ERR(virt_addr);
1867 		goto free;
1868 	}
1869 
1870 	err = cs89x0_probe1(dev, virt_addr, 0);
1871 	if (err) {
1872 		dev_warn(&dev->dev, "no cs8900 or cs8920 detected\n");
1873 		goto free;
1874 	}
1875 
1876 	platform_set_drvdata(pdev, dev);
1877 	return 0;
1878 
1879 free:
1880 	free_netdev(dev);
1881 	return err;
1882 }
1883 
1884 static int cs89x0_platform_remove(struct platform_device *pdev)
1885 {
1886 	struct net_device *dev = platform_get_drvdata(pdev);
1887 
1888 	/* This platform_get_resource() call will not return NULL, because
1889 	 * the same call in cs89x0_platform_probe() has returned a non NULL
1890 	 * value.
1891 	 */
1892 	unregister_netdev(dev);
1893 	free_netdev(dev);
1894 	return 0;
1895 }
1896 
1897 static struct platform_driver cs89x0_driver = {
1898 	.driver	= {
1899 		.name	= DRV_NAME,
1900 		.owner	= THIS_MODULE,
1901 	},
1902 	.remove	= cs89x0_platform_remove,
1903 };
1904 
1905 module_platform_driver_probe(cs89x0_driver, cs89x0_platform_probe);
1906 
1907 #endif /* CONFIG_CS89x0_PLATFORM */
1908