Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[wrt350n-kernel.git] / drivers / net / cs89x0.c
blob32cbf68e9e8aa6b1ce78f50bb937436b03d6f8ca
1 /* cs89x0.c: A Crystal Semiconductor (Now Cirrus Logic) CS89[02]0
2 * driver for linux.
3 */
5 /*
6 Written 1996 by Russell Nelson, with reference to skeleton.c
7 written 1993-1994 by Donald Becker.
9 This software may be used and distributed according to the terms
10 of the GNU General Public License, incorporated herein by reference.
12 The author may be reached at nelson@crynwr.com, Crynwr
13 Software, 521 Pleasant Valley Rd., Potsdam, NY 13676
15 Changelog:
17 Mike Cruse : mcruse@cti-ltd.com
18 : Changes for Linux 2.0 compatibility.
19 : Added dev_id parameter in net_interrupt(),
20 : request_irq() and free_irq(). Just NULL for now.
22 Mike Cruse : Added MOD_INC_USE_COUNT and MOD_DEC_USE_COUNT macros
23 : in net_open() and net_close() so kerneld would know
24 : that the module is in use and wouldn't eject the
25 : driver prematurely.
27 Mike Cruse : Rewrote init_module() and cleanup_module using 8390.c
28 : as an example. Disabled autoprobing in init_module(),
29 : not a good thing to do to other devices while Linux
30 : is running from all accounts.
32 Russ Nelson : Jul 13 1998. Added RxOnly DMA support.
34 Melody Lee : Aug 10 1999. Changes for Linux 2.2.5 compatibility.
35 : email: ethernet@crystal.cirrus.com
37 Alan Cox : Removed 1.2 support, added 2.1 extra counters.
39 Andrew Morton : andrewm@uow.edu.au
40 : Kernel 2.3.48
41 : Handle kmalloc() failures
42 : Other resource allocation fixes
43 : Add SMP locks
44 : Integrate Russ Nelson's ALLOW_DMA functionality back in.
45 : If ALLOW_DMA is true, make DMA runtime selectable
46 : Folded in changes from Cirrus (Melody Lee
47 : <klee@crystal.cirrus.com>)
48 : Don't call netif_wake_queue() in net_send_packet()
49 : Fixed an out-of-mem bug in dma_rx()
50 : Updated Documentation/networking/cs89x0.txt
52 Andrew Morton : andrewm@uow.edu.au / Kernel 2.3.99-pre1
53 : Use skb_reserve to longword align IP header (two places)
54 : Remove a delay loop from dma_rx()
55 : Replace '100' with HZ
56 : Clean up a couple of skb API abuses
57 : Added 'cs89x0_dma=N' kernel boot option
58 : Correctly initialise lp->lock in non-module compile
60 Andrew Morton : andrewm@uow.edu.au / Kernel 2.3.99-pre4-1
61 : MOD_INC/DEC race fix (see
62 : http://www.uwsg.indiana.edu/hypermail/linux/kernel/0003.3/1532.html)
64 Andrew Morton : andrewm@uow.edu.au / Kernel 2.4.0-test7-pre2
65 : Enhanced EEPROM support to cover more devices,
66 : abstracted IRQ mapping to support CONFIG_ARCH_CLPS7500 arch
67 : (Jason Gunthorpe <jgg@ualberta.ca>)
69 Andrew Morton : Kernel 2.4.0-test11-pre4
70 : Use dev->name in request_*() (Andrey Panin)
71 : Fix an error-path memleak in init_module()
72 : Preserve return value from request_irq()
73 : Fix type of `media' module parm (Keith Owens)
74 : Use SET_MODULE_OWNER()
75 : Tidied up strange request_irq() abuse in net_open().
77 Andrew Morton : Kernel 2.4.3-pre1
78 : Request correct number of pages for DMA (Hugh Dickens)
79 : Select PP_ChipID _after_ unregister_netdev in cleanup_module()
80 : because unregister_netdev() calls get_stats.
81 : Make `version[]' __initdata
82 : Uninlined the read/write reg/word functions.
84 Oskar Schirmer : oskar@scara.com
85 : HiCO.SH4 (superh) support added (irq#1, cs89x0_media=)
87 Deepak Saxena : dsaxena@plexity.net
88 : Intel IXDP2x01 (XScale ixp2x00 NPU) platform support
90 Dmitry Pervushin : dpervushin@ru.mvista.com
91 : PNX010X platform support
93 Deepak Saxena : dsaxena@plexity.net
94 : Intel IXDP2351 platform support
96 Dmitry Pervushin : dpervushin@ru.mvista.com
97 : PNX010X platform support
101 /* Always include 'config.h' first in case the user wants to turn on
102 or override something. */
103 #include <linux/module.h>
106 * Set this to zero to disable DMA code
108 * Note that even if DMA is turned off we still support the 'dma' and 'use_dma'
109 * module options so we don't break any startup scripts.
111 #ifndef CONFIG_ISA_DMA_API
112 #define ALLOW_DMA 0
113 #else
114 #define ALLOW_DMA 1
115 #endif
118 * Set this to zero to remove all the debug statements via
119 * dead code elimination
121 #define DEBUGGING 1
124 Sources:
126 Crynwr packet driver epktisa.
128 Crystal Semiconductor data sheets.
132 #include <linux/errno.h>
133 #include <linux/netdevice.h>
134 #include <linux/etherdevice.h>
135 #include <linux/kernel.h>
136 #include <linux/types.h>
137 #include <linux/fcntl.h>
138 #include <linux/interrupt.h>
139 #include <linux/ioport.h>
140 #include <linux/in.h>
141 #include <linux/skbuff.h>
142 #include <linux/slab.h>
143 #include <linux/spinlock.h>
144 #include <linux/string.h>
145 #include <linux/init.h>
146 #include <linux/bitops.h>
147 #include <linux/delay.h>
149 #include <asm/system.h>
150 #include <asm/io.h>
151 #include <asm/irq.h>
152 #if ALLOW_DMA
153 #include <asm/dma.h>
154 #endif
156 #include "cs89x0.h"
158 static char version[] __initdata =
159 "cs89x0.c: v2.4.3-pre1 Russell Nelson <nelson@crynwr.com>, Andrew Morton <andrewm@uow.edu.au>\n";
161 #define DRV_NAME "cs89x0"
163 /* First, a few definitions that the brave might change.
164 A zero-terminated list of I/O addresses to be probed. Some special flags..
165 Addr & 1 = Read back the address port, look for signature and reset
166 the page window before probing
167 Addr & 3 = Reset the page window and probe
168 The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
169 but it is possible that a Cirrus board could be plugged into the ISA
170 slots. */
171 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
172 them to system IRQ numbers. This mapping is card specific and is set to
173 the configuration of the Cirrus Eval board for this chip. */
174 #ifdef CONFIG_ARCH_CLPS7500
175 <<<<<<< HEAD:drivers/net/cs89x0.c
176 static unsigned int netcard_portlist[] __initdata =
177 =======
178 static unsigned int netcard_portlist[] __used __initdata =
179 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a:drivers/net/cs89x0.c
180 { 0x80090303, 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
181 static unsigned int cs8900_irq_map[] = {12,0,0,0};
182 #elif defined(CONFIG_SH_HICOSH4)
183 <<<<<<< HEAD:drivers/net/cs89x0.c
184 static unsigned int netcard_portlist[] __initdata =
185 =======
186 static unsigned int netcard_portlist[] __used __initdata =
187 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a:drivers/net/cs89x0.c
188 { 0x0300, 0};
189 static unsigned int cs8900_irq_map[] = {1,0,0,0};
190 #elif defined(CONFIG_MACH_IXDP2351)
191 <<<<<<< HEAD:drivers/net/cs89x0.c
192 static unsigned int netcard_portlist[] __initdata = {IXDP2351_VIRT_CS8900_BASE, 0};
193 =======
194 static unsigned int netcard_portlist[] __used __initdata = {IXDP2351_VIRT_CS8900_BASE, 0};
195 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a:drivers/net/cs89x0.c
196 static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0};
197 #include <asm/irq.h>
198 #elif defined(CONFIG_ARCH_IXDP2X01)
199 #include <asm/irq.h>
200 <<<<<<< HEAD:drivers/net/cs89x0.c
201 static unsigned int netcard_portlist[] __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
202 =======
203 static unsigned int netcard_portlist[] __used __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
204 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a:drivers/net/cs89x0.c
205 static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};
206 #elif defined(CONFIG_ARCH_PNX010X)
207 #include <asm/irq.h>
208 #include <asm/arch/gpio.h>
209 #define CIRRUS_DEFAULT_BASE IO_ADDRESS(EXT_STATIC2_s0_BASE + 0x200000) /* = Physical address 0x48200000 */
210 #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */
211 <<<<<<< HEAD:drivers/net/cs89x0.c
212 static unsigned int netcard_portlist[] __initdata = {CIRRUS_DEFAULT_BASE, 0};
213 =======
214 static unsigned int netcard_portlist[] __used __initdata = {CIRRUS_DEFAULT_BASE, 0};
215 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a:drivers/net/cs89x0.c
216 static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};
217 #else
218 <<<<<<< HEAD:drivers/net/cs89x0.c
219 static unsigned int netcard_portlist[] __initdata =
220 =======
221 static unsigned int netcard_portlist[] __used __initdata =
222 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a:drivers/net/cs89x0.c
223 { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
224 static unsigned int cs8900_irq_map[] = {10,11,12,5};
225 #endif
227 #if DEBUGGING
228 static unsigned int net_debug = DEBUGGING;
229 #else
230 #define net_debug 0 /* gcc will remove all the debug code for us */
231 #endif
233 /* The number of low I/O ports used by the ethercard. */
234 #define NETCARD_IO_EXTENT 16
236 /* we allow the user to override various values normally set in the EEPROM */
237 #define FORCE_RJ45 0x0001 /* pick one of these three */
238 #define FORCE_AUI 0x0002
239 #define FORCE_BNC 0x0004
241 #define FORCE_AUTO 0x0010 /* pick one of these three */
242 #define FORCE_HALF 0x0020
243 #define FORCE_FULL 0x0030
245 /* Information that need to be kept for each board. */
246 struct net_local {
247 struct net_device_stats stats;
248 int chip_type; /* one of: CS8900, CS8920, CS8920M */
249 char chip_revision; /* revision letter of the chip ('A'...) */
250 int send_cmd; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
251 int auto_neg_cnf; /* auto-negotiation word from EEPROM */
252 int adapter_cnf; /* adapter configuration from EEPROM */
253 int isa_config; /* ISA configuration from EEPROM */
254 int irq_map; /* IRQ map from EEPROM */
255 int rx_mode; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
256 int curr_rx_cfg; /* a copy of PP_RxCFG */
257 int linectl; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
258 int send_underrun; /* keep track of how many underruns in a row we get */
259 int force; /* force various values; see FORCE* above. */
260 spinlock_t lock;
261 #if ALLOW_DMA
262 int use_dma; /* Flag: we're using dma */
263 int dma; /* DMA channel */
264 int dmasize; /* 16 or 64 */
265 unsigned char *dma_buff; /* points to the beginning of the buffer */
266 unsigned char *end_dma_buff; /* points to the end of the buffer */
267 unsigned char *rx_dma_ptr; /* points to the next packet */
268 #endif
271 /* Index to functions, as function prototypes. */
273 static int cs89x0_probe1(struct net_device *dev, int ioaddr, int modular);
274 static int net_open(struct net_device *dev);
275 static int net_send_packet(struct sk_buff *skb, struct net_device *dev);
276 static irqreturn_t net_interrupt(int irq, void *dev_id);
277 static void set_multicast_list(struct net_device *dev);
278 static void net_timeout(struct net_device *dev);
279 static void net_rx(struct net_device *dev);
280 static int net_close(struct net_device *dev);
281 static struct net_device_stats *net_get_stats(struct net_device *dev);
282 static void reset_chip(struct net_device *dev);
283 static int get_eeprom_data(struct net_device *dev, int off, int len, int *buffer);
284 static int get_eeprom_cksum(int off, int len, int *buffer);
285 static int set_mac_address(struct net_device *dev, void *addr);
286 static void count_rx_errors(int status, struct net_local *lp);
287 #ifdef CONFIG_NET_POLL_CONTROLLER
288 static void net_poll_controller(struct net_device *dev);
289 #endif
290 #if ALLOW_DMA
291 static void get_dma_channel(struct net_device *dev);
292 static void release_dma_buff(struct net_local *lp);
293 #endif
295 /* Example routines you must write ;->. */
296 #define tx_done(dev) 1
299 * Permit 'cs89x0_dma=N' in the kernel boot environment
301 #if !defined(MODULE) && (ALLOW_DMA != 0)
302 static int g_cs89x0_dma;
304 static int __init dma_fn(char *str)
306 g_cs89x0_dma = simple_strtol(str,NULL,0);
307 return 1;
310 __setup("cs89x0_dma=", dma_fn);
311 #endif /* !defined(MODULE) && (ALLOW_DMA != 0) */
313 #ifndef MODULE
314 static int g_cs89x0_media__force;
316 static int __init media_fn(char *str)
318 if (!strcmp(str, "rj45")) g_cs89x0_media__force = FORCE_RJ45;
319 else if (!strcmp(str, "aui")) g_cs89x0_media__force = FORCE_AUI;
320 else if (!strcmp(str, "bnc")) g_cs89x0_media__force = FORCE_BNC;
321 return 1;
324 __setup("cs89x0_media=", media_fn);
327 /* Check for a network adaptor of this type, and return '0' iff one exists.
328 If dev->base_addr == 0, probe all likely locations.
329 If dev->base_addr == 1, always return failure.
330 If dev->base_addr == 2, allocate space for the device and return success
331 (detachable devices only).
332 Return 0 on success.
335 struct net_device * __init cs89x0_probe(int unit)
337 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
338 unsigned *port;
339 int err = 0;
340 int irq;
341 int io;
343 if (!dev)
344 return ERR_PTR(-ENODEV);
346 sprintf(dev->name, "eth%d", unit);
347 netdev_boot_setup_check(dev);
348 io = dev->base_addr;
349 irq = dev->irq;
351 if (net_debug)
352 printk("cs89x0:cs89x0_probe(0x%x)\n", io);
354 if (io > 0x1ff) { /* Check a single specified location. */
355 err = cs89x0_probe1(dev, io, 0);
356 } else if (io != 0) { /* Don't probe at all. */
357 err = -ENXIO;
358 } else {
359 for (port = netcard_portlist; *port; port++) {
360 if (cs89x0_probe1(dev, *port, 0) == 0)
361 break;
362 dev->irq = irq;
364 if (!*port)
365 err = -ENODEV;
367 if (err)
368 goto out;
369 return dev;
370 out:
371 free_netdev(dev);
372 printk(KERN_WARNING "cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
373 return ERR_PTR(err);
375 #endif
377 #if defined(CONFIG_MACH_IXDP2351)
378 static u16
379 readword(unsigned long base_addr, int portno)
381 return __raw_readw(base_addr + (portno << 1));
384 static void
385 writeword(unsigned long base_addr, int portno, u16 value)
387 __raw_writew(value, base_addr + (portno << 1));
389 #elif defined(CONFIG_ARCH_IXDP2X01)
390 static u16
391 readword(unsigned long base_addr, int portno)
393 return __raw_readl(base_addr + (portno << 1));
396 static void
397 writeword(unsigned long base_addr, int portno, u16 value)
399 __raw_writel(value, base_addr + (portno << 1));
401 #elif defined(CONFIG_ARCH_PNX010X)
402 static u16
403 readword(unsigned long base_addr, int portno)
405 return inw(base_addr + (portno << 1));
408 static void
409 writeword(unsigned long base_addr, int portno, u16 value)
411 outw(value, base_addr + (portno << 1));
413 #else
414 static u16
415 readword(unsigned long base_addr, int portno)
417 return inw(base_addr + portno);
420 static void
421 writeword(unsigned long base_addr, int portno, u16 value)
423 outw(value, base_addr + portno);
425 #endif
427 static void
428 readwords(unsigned long base_addr, int portno, void *buf, int length)
430 u8 *buf8 = (u8 *)buf;
432 do {
433 u16 tmp16;
435 tmp16 = readword(base_addr, portno);
436 *buf8++ = (u8)tmp16;
437 *buf8++ = (u8)(tmp16 >> 8);
438 } while (--length);
441 static void
442 writewords(unsigned long base_addr, int portno, void *buf, int length)
444 u8 *buf8 = (u8 *)buf;
446 do {
447 u16 tmp16;
449 tmp16 = *buf8++;
450 tmp16 |= (*buf8++) << 8;
451 writeword(base_addr, portno, tmp16);
452 } while (--length);
455 static u16
456 readreg(struct net_device *dev, u16 regno)
458 writeword(dev->base_addr, ADD_PORT, regno);
459 return readword(dev->base_addr, DATA_PORT);
462 static void
463 writereg(struct net_device *dev, u16 regno, u16 value)
465 writeword(dev->base_addr, ADD_PORT, regno);
466 writeword(dev->base_addr, DATA_PORT, value);
469 static int __init
470 wait_eeprom_ready(struct net_device *dev)
472 int timeout = jiffies;
473 /* check to see if the EEPROM is ready, a timeout is used -
474 just in case EEPROM is ready when SI_BUSY in the
475 PP_SelfST is clear */
476 while(readreg(dev, PP_SelfST) & SI_BUSY)
477 if (jiffies - timeout >= 40)
478 return -1;
479 return 0;
482 static int __init
483 get_eeprom_data(struct net_device *dev, int off, int len, int *buffer)
485 int i;
487 if (net_debug > 3) printk("EEPROM data from %x for %x:\n",off,len);
488 for (i = 0; i < len; i++) {
489 if (wait_eeprom_ready(dev) < 0) return -1;
490 /* Now send the EEPROM read command and EEPROM location to read */
491 writereg(dev, PP_EECMD, (off + i) | EEPROM_READ_CMD);
492 if (wait_eeprom_ready(dev) < 0) return -1;
493 buffer[i] = readreg(dev, PP_EEData);
494 if (net_debug > 3) printk("%04x ", buffer[i]);
496 if (net_debug > 3) printk("\n");
497 return 0;
500 static int __init
501 get_eeprom_cksum(int off, int len, int *buffer)
503 int i, cksum;
505 cksum = 0;
506 for (i = 0; i < len; i++)
507 cksum += buffer[i];
508 cksum &= 0xffff;
509 if (cksum == 0)
510 return 0;
511 return -1;
514 #ifdef CONFIG_NET_POLL_CONTROLLER
516 * Polling receive - used by netconsole and other diagnostic tools
517 * to allow network i/o with interrupts disabled.
519 static void net_poll_controller(struct net_device *dev)
521 disable_irq(dev->irq);
522 net_interrupt(dev->irq, dev);
523 enable_irq(dev->irq);
525 #endif
527 /* This is the real probe routine. Linux has a history of friendly device
528 probes on the ISA bus. A good device probes avoids doing writes, and
529 verifies that the correct device exists and functions.
530 Return 0 on success.
533 static int __init
534 cs89x0_probe1(struct net_device *dev, int ioaddr, int modular)
536 struct net_local *lp = netdev_priv(dev);
537 static unsigned version_printed;
538 int i;
539 int tmp;
540 unsigned rev_type = 0;
541 int eeprom_buff[CHKSUM_LEN];
542 int retval;
543 DECLARE_MAC_BUF(mac);
545 /* Initialize the device structure. */
546 if (!modular) {
547 memset(lp, 0, sizeof(*lp));
548 spin_lock_init(&lp->lock);
549 #ifndef MODULE
550 #if ALLOW_DMA
551 if (g_cs89x0_dma) {
552 lp->use_dma = 1;
553 lp->dma = g_cs89x0_dma;
554 lp->dmasize = 16; /* Could make this an option... */
556 #endif
557 lp->force = g_cs89x0_media__force;
558 #endif
561 #ifdef CONFIG_ARCH_PNX010X
562 initialize_ebi();
564 /* Map GPIO registers for the pins connected to the CS8900a. */
565 if (map_cirrus_gpio() < 0)
566 return -ENODEV;
568 reset_cirrus();
570 /* Map event-router registers. */
571 if (map_event_router() < 0)
572 return -ENODEV;
574 enable_cirrus_irq();
576 unmap_cirrus_gpio();
577 unmap_event_router();
579 dev->base_addr = ioaddr;
581 for (i = 0 ; i < 3 ; i++)
582 readreg(dev, 0);
583 #endif
585 /* Grab the region so we can find another board if autoIRQ fails. */
586 /* WTF is going on here? */
587 if (!request_region(ioaddr & ~3, NETCARD_IO_EXTENT, DRV_NAME)) {
588 printk(KERN_ERR "%s: request_region(0x%x, 0x%x) failed\n",
589 DRV_NAME, ioaddr, NETCARD_IO_EXTENT);
590 retval = -EBUSY;
591 goto out1;
594 #ifdef CONFIG_SH_HICOSH4
595 /* truely reset the chip */
596 writeword(ioaddr, ADD_PORT, 0x0114);
597 writeword(ioaddr, DATA_PORT, 0x0040);
598 #endif
600 /* if they give us an odd I/O address, then do ONE write to
601 the address port, to get it back to address zero, where we
602 expect to find the EISA signature word. An IO with a base of 0x3
603 will skip the test for the ADD_PORT. */
604 if (ioaddr & 1) {
605 if (net_debug > 1)
606 printk(KERN_INFO "%s: odd ioaddr 0x%x\n", dev->name, ioaddr);
607 if ((ioaddr & 2) != 2)
608 if ((readword(ioaddr & ~3, ADD_PORT) & ADD_MASK) != ADD_SIG) {
609 printk(KERN_ERR "%s: bad signature 0x%x\n",
610 dev->name, readword(ioaddr & ~3, ADD_PORT));
611 retval = -ENODEV;
612 goto out2;
616 ioaddr &= ~3;
617 printk(KERN_DEBUG "PP_addr at %x[%x]: 0x%x\n",
618 ioaddr, ADD_PORT, readword(ioaddr, ADD_PORT));
619 writeword(ioaddr, ADD_PORT, PP_ChipID);
621 tmp = readword(ioaddr, DATA_PORT);
622 if (tmp != CHIP_EISA_ID_SIG) {
623 printk(KERN_DEBUG "%s: incorrect signature at %x[%x]: 0x%x!="
624 CHIP_EISA_ID_SIG_STR "\n",
625 dev->name, ioaddr, DATA_PORT, tmp);
626 retval = -ENODEV;
627 goto out2;
630 /* Fill in the 'dev' fields. */
631 dev->base_addr = ioaddr;
633 /* get the chip type */
634 rev_type = readreg(dev, PRODUCT_ID_ADD);
635 lp->chip_type = rev_type &~ REVISON_BITS;
636 lp->chip_revision = ((rev_type & REVISON_BITS) >> 8) + 'A';
638 /* Check the chip type and revision in order to set the correct send command
639 CS8920 revision C and CS8900 revision F can use the faster send. */
640 lp->send_cmd = TX_AFTER_381;
641 if (lp->chip_type == CS8900 && lp->chip_revision >= 'F')
642 lp->send_cmd = TX_NOW;
643 if (lp->chip_type != CS8900 && lp->chip_revision >= 'C')
644 lp->send_cmd = TX_NOW;
646 if (net_debug && version_printed++ == 0)
647 printk(version);
649 printk(KERN_INFO "%s: cs89%c0%s rev %c found at %#3lx ",
650 dev->name,
651 lp->chip_type==CS8900?'0':'2',
652 lp->chip_type==CS8920M?"M":"",
653 lp->chip_revision,
654 dev->base_addr);
656 reset_chip(dev);
658 /* Here we read the current configuration of the chip. If there
659 is no Extended EEPROM then the idea is to not disturb the chip
660 configuration, it should have been correctly setup by automatic
661 EEPROM read on reset. So, if the chip says it read the EEPROM
662 the driver will always do *something* instead of complain that
663 adapter_cnf is 0. */
665 #ifdef CONFIG_SH_HICOSH4
666 if (1) {
667 /* For the HiCO.SH4 board, things are different: we don't
668 have EEPROM, but there is some data in flash, so we go
669 get it there directly (MAC). */
670 __u16 *confd;
671 short cnt;
672 if (((* (volatile __u32 *) 0xa0013ff0) & 0x00ffffff)
673 == 0x006c3000) {
674 confd = (__u16*) 0xa0013fc0;
675 } else {
676 confd = (__u16*) 0xa001ffc0;
678 cnt = (*confd++ & 0x00ff) >> 1;
679 while (--cnt > 0) {
680 __u16 j = *confd++;
682 switch (j & 0x0fff) {
683 case PP_IA:
684 for (i = 0; i < ETH_ALEN/2; i++) {
685 dev->dev_addr[i*2] = confd[i] & 0xFF;
686 dev->dev_addr[i*2+1] = confd[i] >> 8;
688 break;
690 j = (j >> 12) + 1;
691 confd += j;
692 cnt -= j;
694 } else
695 #endif
697 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) ==
698 (EEPROM_OK|EEPROM_PRESENT)) {
699 /* Load the MAC. */
700 for (i=0; i < ETH_ALEN/2; i++) {
701 unsigned int Addr;
702 Addr = readreg(dev, PP_IA+i*2);
703 dev->dev_addr[i*2] = Addr & 0xFF;
704 dev->dev_addr[i*2+1] = Addr >> 8;
707 /* Load the Adapter Configuration.
708 Note: Barring any more specific information from some
709 other source (ie EEPROM+Schematics), we would not know
710 how to operate a 10Base2 interface on the AUI port.
711 However, since we do read the status of HCB1 and use
712 settings that always result in calls to control_dc_dc(dev,0)
713 a BNC interface should work if the enable pin
714 (dc/dc converter) is on HCB1. It will be called AUI
715 however. */
717 lp->adapter_cnf = 0;
718 i = readreg(dev, PP_LineCTL);
719 /* Preserve the setting of the HCB1 pin. */
720 if ((i & (HCB1 | HCB1_ENBL)) == (HCB1 | HCB1_ENBL))
721 lp->adapter_cnf |= A_CNF_DC_DC_POLARITY;
722 /* Save the sqelch bit */
723 if ((i & LOW_RX_SQUELCH) == LOW_RX_SQUELCH)
724 lp->adapter_cnf |= A_CNF_EXTND_10B_2 | A_CNF_LOW_RX_SQUELCH;
725 /* Check if the card is in 10Base-t only mode */
726 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == 0)
727 lp->adapter_cnf |= A_CNF_10B_T | A_CNF_MEDIA_10B_T;
728 /* Check if the card is in AUI only mode */
729 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUI_ONLY)
730 lp->adapter_cnf |= A_CNF_AUI | A_CNF_MEDIA_AUI;
731 /* Check if the card is in Auto mode. */
732 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET)
733 lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T |
734 A_CNF_MEDIA_AUI | A_CNF_MEDIA_10B_T | A_CNF_MEDIA_AUTO;
736 if (net_debug > 1)
737 printk(KERN_INFO "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
738 dev->name, i, lp->adapter_cnf);
740 /* IRQ. Other chips already probe, see below. */
741 if (lp->chip_type == CS8900)
742 lp->isa_config = readreg(dev, PP_CS8900_ISAINT) & INT_NO_MASK;
744 printk( "[Cirrus EEPROM] ");
747 printk("\n");
749 /* First check to see if an EEPROM is attached. */
750 #ifdef CONFIG_SH_HICOSH4 /* no EEPROM on HiCO, don't hazzle with it here */
751 if (1) {
752 printk(KERN_NOTICE "cs89x0: No EEPROM on HiCO.SH4\n");
753 } else
754 #endif
755 if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0)
756 printk(KERN_WARNING "cs89x0: No EEPROM, relying on command line....\n");
757 else if (get_eeprom_data(dev, START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
758 printk(KERN_WARNING "\ncs89x0: EEPROM read failed, relying on command line.\n");
759 } else if (get_eeprom_cksum(START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
760 /* Check if the chip was able to read its own configuration starting
761 at 0 in the EEPROM*/
762 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) !=
763 (EEPROM_OK|EEPROM_PRESENT))
764 printk(KERN_WARNING "cs89x0: Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
766 } else {
767 /* This reads an extended EEPROM that is not documented
768 in the CS8900 datasheet. */
770 /* get transmission control word but keep the autonegotiation bits */
771 if (!lp->auto_neg_cnf) lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2];
772 /* Store adapter configuration */
773 if (!lp->adapter_cnf) lp->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET/2];
774 /* Store ISA configuration */
775 lp->isa_config = eeprom_buff[ISA_CNF_OFFSET/2];
776 dev->mem_start = eeprom_buff[PACKET_PAGE_OFFSET/2] << 8;
778 /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
779 /* store the initial memory base address */
780 for (i = 0; i < ETH_ALEN/2; i++) {
781 dev->dev_addr[i*2] = eeprom_buff[i];
782 dev->dev_addr[i*2+1] = eeprom_buff[i] >> 8;
784 if (net_debug > 1)
785 printk(KERN_DEBUG "%s: new adapter_cnf: 0x%x\n",
786 dev->name, lp->adapter_cnf);
789 /* allow them to force multiple transceivers. If they force multiple, autosense */
791 int count = 0;
792 if (lp->force & FORCE_RJ45) {lp->adapter_cnf |= A_CNF_10B_T; count++; }
793 if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_AUI; count++; }
794 if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_10B_2; count++; }
795 if (count > 1) {lp->adapter_cnf |= A_CNF_MEDIA_AUTO; }
796 else if (lp->force & FORCE_RJ45){lp->adapter_cnf |= A_CNF_MEDIA_10B_T; }
797 else if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_MEDIA_AUI; }
798 else if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_MEDIA_10B_2; }
801 if (net_debug > 1)
802 printk(KERN_DEBUG "%s: after force 0x%x, adapter_cnf=0x%x\n",
803 dev->name, lp->force, lp->adapter_cnf);
805 /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
807 /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
809 /* FIXME: we don't set the Ethernet address on the command line. Use
810 ifconfig IFACE hw ether AABBCCDDEEFF */
812 printk(KERN_INFO "cs89x0 media %s%s%s",
813 (lp->adapter_cnf & A_CNF_10B_T)?"RJ-45,":"",
814 (lp->adapter_cnf & A_CNF_AUI)?"AUI,":"",
815 (lp->adapter_cnf & A_CNF_10B_2)?"BNC,":"");
817 lp->irq_map = 0xffff;
819 /* If this is a CS8900 then no pnp soft */
820 if (lp->chip_type != CS8900 &&
821 /* Check if the ISA IRQ has been set */
822 (i = readreg(dev, PP_CS8920_ISAINT) & 0xff,
823 (i != 0 && i < CS8920_NO_INTS))) {
824 if (!dev->irq)
825 dev->irq = i;
826 } else {
827 i = lp->isa_config & INT_NO_MASK;
828 if (lp->chip_type == CS8900) {
829 #if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X)
830 i = cs8900_irq_map[0];
831 #else
832 /* Translate the IRQ using the IRQ mapping table. */
833 if (i >= ARRAY_SIZE(cs8900_irq_map))
834 printk("\ncs89x0: invalid ISA interrupt number %d\n", i);
835 else
836 i = cs8900_irq_map[i];
838 lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */
839 } else {
840 int irq_map_buff[IRQ_MAP_LEN/2];
842 if (get_eeprom_data(dev, IRQ_MAP_EEPROM_DATA,
843 IRQ_MAP_LEN/2,
844 irq_map_buff) >= 0) {
845 if ((irq_map_buff[0] & 0xff) == PNP_IRQ_FRMT)
846 lp->irq_map = (irq_map_buff[0]>>8) | (irq_map_buff[1] << 8);
848 #endif
850 if (!dev->irq)
851 dev->irq = i;
854 printk(" IRQ %d", dev->irq);
856 #if ALLOW_DMA
857 if (lp->use_dma) {
858 get_dma_channel(dev);
859 printk(", DMA %d", dev->dma);
861 else
862 #endif
864 printk(", programmed I/O");
867 /* print the ethernet address. */
868 printk(", MAC %s", print_mac(mac, dev->dev_addr));
870 dev->open = net_open;
871 dev->stop = net_close;
872 dev->tx_timeout = net_timeout;
873 dev->watchdog_timeo = HZ;
874 dev->hard_start_xmit = net_send_packet;
875 dev->get_stats = net_get_stats;
876 dev->set_multicast_list = set_multicast_list;
877 dev->set_mac_address = set_mac_address;
878 #ifdef CONFIG_NET_POLL_CONTROLLER
879 dev->poll_controller = net_poll_controller;
880 #endif
882 printk("\n");
883 if (net_debug)
884 printk("cs89x0_probe1() successful\n");
886 retval = register_netdev(dev);
887 if (retval)
888 goto out3;
889 return 0;
890 out3:
891 writeword(dev->base_addr, ADD_PORT, PP_ChipID);
892 out2:
893 release_region(ioaddr & ~3, NETCARD_IO_EXTENT);
894 out1:
895 return retval;
899 /*********************************
900 * This page contains DMA routines
901 **********************************/
903 #if ALLOW_DMA
905 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1)>>17 == (long)(ptr2)>>17)
907 static void
908 get_dma_channel(struct net_device *dev)
910 struct net_local *lp = netdev_priv(dev);
912 if (lp->dma) {
913 dev->dma = lp->dma;
914 lp->isa_config |= ISA_RxDMA;
915 } else {
916 if ((lp->isa_config & ANY_ISA_DMA) == 0)
917 return;
918 dev->dma = lp->isa_config & DMA_NO_MASK;
919 if (lp->chip_type == CS8900)
920 dev->dma += 5;
921 if (dev->dma < 5 || dev->dma > 7) {
922 lp->isa_config &= ~ANY_ISA_DMA;
923 return;
926 return;
929 static void
930 write_dma(struct net_device *dev, int chip_type, int dma)
932 struct net_local *lp = netdev_priv(dev);
933 if ((lp->isa_config & ANY_ISA_DMA) == 0)
934 return;
935 if (chip_type == CS8900) {
936 writereg(dev, PP_CS8900_ISADMA, dma-5);
937 } else {
938 writereg(dev, PP_CS8920_ISADMA, dma);
942 static void
943 set_dma_cfg(struct net_device *dev)
945 struct net_local *lp = netdev_priv(dev);
947 if (lp->use_dma) {
948 if ((lp->isa_config & ANY_ISA_DMA) == 0) {
949 if (net_debug > 3)
950 printk("set_dma_cfg(): no DMA\n");
951 return;
953 if (lp->isa_config & ISA_RxDMA) {
954 lp->curr_rx_cfg |= RX_DMA_ONLY;
955 if (net_debug > 3)
956 printk("set_dma_cfg(): RX_DMA_ONLY\n");
957 } else {
958 lp->curr_rx_cfg |= AUTO_RX_DMA; /* not that we support it... */
959 if (net_debug > 3)
960 printk("set_dma_cfg(): AUTO_RX_DMA\n");
965 static int
966 dma_bufcfg(struct net_device *dev)
968 struct net_local *lp = netdev_priv(dev);
969 if (lp->use_dma)
970 return (lp->isa_config & ANY_ISA_DMA)? RX_DMA_ENBL : 0;
971 else
972 return 0;
975 static int
976 dma_busctl(struct net_device *dev)
978 int retval = 0;
979 struct net_local *lp = netdev_priv(dev);
980 if (lp->use_dma) {
981 if (lp->isa_config & ANY_ISA_DMA)
982 retval |= RESET_RX_DMA; /* Reset the DMA pointer */
983 if (lp->isa_config & DMA_BURST)
984 retval |= DMA_BURST_MODE; /* Does ISA config specify DMA burst ? */
985 if (lp->dmasize == 64)
986 retval |= RX_DMA_SIZE_64K; /* did they ask for 64K? */
987 retval |= MEMORY_ON; /* we need memory enabled to use DMA. */
989 return retval;
992 static void
993 dma_rx(struct net_device *dev)
995 struct net_local *lp = netdev_priv(dev);
996 struct sk_buff *skb;
997 int status, length;
998 unsigned char *bp = lp->rx_dma_ptr;
1000 status = bp[0] + (bp[1]<<8);
1001 length = bp[2] + (bp[3]<<8);
1002 bp += 4;
1003 if (net_debug > 5) {
1004 printk( "%s: receiving DMA packet at %lx, status %x, length %x\n",
1005 dev->name, (unsigned long)bp, status, length);
1007 if ((status & RX_OK) == 0) {
1008 count_rx_errors(status, lp);
1009 goto skip_this_frame;
1012 /* Malloc up new buffer. */
1013 skb = dev_alloc_skb(length + 2);
1014 if (skb == NULL) {
1015 if (net_debug) /* I don't think we want to do this to a stressed system */
1016 printk("%s: Memory squeeze, dropping packet.\n", dev->name);
1017 lp->stats.rx_dropped++;
1019 /* AKPM: advance bp to the next frame */
1020 skip_this_frame:
1021 bp += (length + 3) & ~3;
1022 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
1023 lp->rx_dma_ptr = bp;
1024 return;
1026 skb_reserve(skb, 2); /* longword align L3 header */
1028 if (bp + length > lp->end_dma_buff) {
1029 int semi_cnt = lp->end_dma_buff - bp;
1030 memcpy(skb_put(skb,semi_cnt), bp, semi_cnt);
1031 memcpy(skb_put(skb,length - semi_cnt), lp->dma_buff,
1032 length - semi_cnt);
1033 } else {
1034 memcpy(skb_put(skb,length), bp, length);
1036 bp += (length + 3) & ~3;
1037 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
1038 lp->rx_dma_ptr = bp;
1040 if (net_debug > 3) {
1041 printk( "%s: received %d byte DMA packet of type %x\n",
1042 dev->name, length,
1043 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1045 skb->protocol=eth_type_trans(skb,dev);
1046 netif_rx(skb);
1047 dev->last_rx = jiffies;
1048 lp->stats.rx_packets++;
1049 lp->stats.rx_bytes += length;
1052 #endif /* ALLOW_DMA */
1054 void __init reset_chip(struct net_device *dev)
1056 #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
1057 struct net_local *lp = netdev_priv(dev);
1058 int ioaddr = dev->base_addr;
1059 #endif
1060 int reset_start_time;
1062 writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
1064 /* wait 30 ms */
1065 msleep(30);
1067 #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
1068 if (lp->chip_type != CS8900) {
1069 /* Hardware problem requires PNP registers to be reconfigured after a reset */
1070 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAINT);
1071 outb(dev->irq, ioaddr + DATA_PORT);
1072 outb(0, ioaddr + DATA_PORT + 1);
1074 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAMemB);
1075 outb((dev->mem_start >> 16) & 0xff, ioaddr + DATA_PORT);
1076 outb((dev->mem_start >> 8) & 0xff, ioaddr + DATA_PORT + 1);
1078 #endif /* IXDP2x01 */
1080 /* Wait until the chip is reset */
1081 reset_start_time = jiffies;
1082 while( (readreg(dev, PP_SelfST) & INIT_DONE) == 0 && jiffies - reset_start_time < 2)
1087 static void
1088 control_dc_dc(struct net_device *dev, int on_not_off)
1090 struct net_local *lp = netdev_priv(dev);
1091 unsigned int selfcontrol;
1092 int timenow = jiffies;
1093 /* control the DC to DC convertor in the SelfControl register.
1094 Note: This is hooked up to a general purpose pin, might not
1095 always be a DC to DC convertor. */
1097 selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */
1098 if (((lp->adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off)
1099 selfcontrol |= HCB1;
1100 else
1101 selfcontrol &= ~HCB1;
1102 writereg(dev, PP_SelfCTL, selfcontrol);
1104 /* Wait for the DC/DC converter to power up - 500ms */
1105 while (jiffies - timenow < HZ)
1109 #define DETECTED_NONE 0
1110 #define DETECTED_RJ45H 1
1111 #define DETECTED_RJ45F 2
1112 #define DETECTED_AUI 3
1113 #define DETECTED_BNC 4
1115 static int
1116 detect_tp(struct net_device *dev)
1118 struct net_local *lp = netdev_priv(dev);
1119 int timenow = jiffies;
1120 int fdx;
1122 if (net_debug > 1) printk("%s: Attempting TP\n", dev->name);
1124 /* If connected to another full duplex capable 10-Base-T card the link pulses
1125 seem to be lost when the auto detect bit in the LineCTL is set.
1126 To overcome this the auto detect bit will be cleared whilst testing the
1127 10-Base-T interface. This would not be necessary for the sparrow chip but
1128 is simpler to do it anyway. */
1129 writereg(dev, PP_LineCTL, lp->linectl &~ AUI_ONLY);
1130 control_dc_dc(dev, 0);
1132 /* Delay for the hardware to work out if the TP cable is present - 150ms */
1133 for (timenow = jiffies; jiffies - timenow < 15; )
1135 if ((readreg(dev, PP_LineST) & LINK_OK) == 0)
1136 return DETECTED_NONE;
1138 if (lp->chip_type == CS8900) {
1139 switch (lp->force & 0xf0) {
1140 #if 0
1141 case FORCE_AUTO:
1142 printk("%s: cs8900 doesn't autonegotiate\n",dev->name);
1143 return DETECTED_NONE;
1144 #endif
1145 /* CS8900 doesn't support AUTO, change to HALF*/
1146 case FORCE_AUTO:
1147 lp->force &= ~FORCE_AUTO;
1148 lp->force |= FORCE_HALF;
1149 break;
1150 case FORCE_HALF:
1151 break;
1152 case FORCE_FULL:
1153 writereg(dev, PP_TestCTL, readreg(dev, PP_TestCTL) | FDX_8900);
1154 break;
1156 fdx = readreg(dev, PP_TestCTL) & FDX_8900;
1157 } else {
1158 switch (lp->force & 0xf0) {
1159 case FORCE_AUTO:
1160 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1161 break;
1162 case FORCE_HALF:
1163 lp->auto_neg_cnf = 0;
1164 break;
1165 case FORCE_FULL:
1166 lp->auto_neg_cnf = RE_NEG_NOW | ALLOW_FDX;
1167 break;
1170 writereg(dev, PP_AutoNegCTL, lp->auto_neg_cnf & AUTO_NEG_MASK);
1172 if ((lp->auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) {
1173 printk(KERN_INFO "%s: negotiating duplex...\n",dev->name);
1174 while (readreg(dev, PP_AutoNegST) & AUTO_NEG_BUSY) {
1175 if (jiffies - timenow > 4000) {
1176 printk(KERN_ERR "**** Full / half duplex auto-negotiation timed out ****\n");
1177 break;
1181 fdx = readreg(dev, PP_AutoNegST) & FDX_ACTIVE;
1183 if (fdx)
1184 return DETECTED_RJ45F;
1185 else
1186 return DETECTED_RJ45H;
1189 /* send a test packet - return true if carrier bits are ok */
1190 static int
1191 send_test_pkt(struct net_device *dev)
1193 char test_packet[] = { 0,0,0,0,0,0, 0,0,0,0,0,0,
1194 0, 46, /* A 46 in network order */
1195 0, 0, /* DSAP=0 & SSAP=0 fields */
1196 0xf3, 0 /* Control (Test Req + P bit set) */ };
1197 long timenow = jiffies;
1199 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_TX_ON);
1201 memcpy(test_packet, dev->dev_addr, ETH_ALEN);
1202 memcpy(test_packet+ETH_ALEN, dev->dev_addr, ETH_ALEN);
1204 writeword(dev->base_addr, TX_CMD_PORT, TX_AFTER_ALL);
1205 writeword(dev->base_addr, TX_LEN_PORT, ETH_ZLEN);
1207 /* Test to see if the chip has allocated memory for the packet */
1208 while (jiffies - timenow < 5)
1209 if (readreg(dev, PP_BusST) & READY_FOR_TX_NOW)
1210 break;
1211 if (jiffies - timenow >= 5)
1212 return 0; /* this shouldn't happen */
1214 /* Write the contents of the packet */
1215 writewords(dev->base_addr, TX_FRAME_PORT,test_packet,(ETH_ZLEN+1) >>1);
1217 if (net_debug > 1) printk("Sending test packet ");
1218 /* wait a couple of jiffies for packet to be received */
1219 for (timenow = jiffies; jiffies - timenow < 3; )
1221 if ((readreg(dev, PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) {
1222 if (net_debug > 1) printk("succeeded\n");
1223 return 1;
1225 if (net_debug > 1) printk("failed\n");
1226 return 0;
1230 static int
1231 detect_aui(struct net_device *dev)
1233 struct net_local *lp = netdev_priv(dev);
1235 if (net_debug > 1) printk("%s: Attempting AUI\n", dev->name);
1236 control_dc_dc(dev, 0);
1238 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1240 if (send_test_pkt(dev))
1241 return DETECTED_AUI;
1242 else
1243 return DETECTED_NONE;
1246 static int
1247 detect_bnc(struct net_device *dev)
1249 struct net_local *lp = netdev_priv(dev);
1251 if (net_debug > 1) printk("%s: Attempting BNC\n", dev->name);
1252 control_dc_dc(dev, 1);
1254 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1256 if (send_test_pkt(dev))
1257 return DETECTED_BNC;
1258 else
1259 return DETECTED_NONE;
1263 static void
1264 write_irq(struct net_device *dev, int chip_type, int irq)
1266 int i;
1268 if (chip_type == CS8900) {
1269 /* Search the mapping table for the corresponding IRQ pin. */
1270 for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
1271 if (cs8900_irq_map[i] == irq)
1272 break;
1273 /* Not found */
1274 if (i == ARRAY_SIZE(cs8900_irq_map))
1275 i = 3;
1276 writereg(dev, PP_CS8900_ISAINT, i);
1277 } else {
1278 writereg(dev, PP_CS8920_ISAINT, irq);
1282 /* Open/initialize the board. This is called (in the current kernel)
1283 sometime after booting when the 'ifconfig' program is run.
1285 This routine should set everything up anew at each open, even
1286 registers that "should" only need to be set once at boot, so that
1287 there is non-reboot way to recover if something goes wrong.
1290 /* AKPM: do we need to do any locking here? */
1292 static int
1293 net_open(struct net_device *dev)
1295 struct net_local *lp = netdev_priv(dev);
1296 int result = 0;
1297 int i;
1298 int ret;
1300 #if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) /* uses irq#1, so this won't work */
1301 if (dev->irq < 2) {
1302 /* Allow interrupts to be generated by the chip */
1303 /* Cirrus' release had this: */
1304 #if 0
1305 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1306 #endif
1307 /* And 2.3.47 had this: */
1308 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1310 for (i = 2; i < CS8920_NO_INTS; i++) {
1311 if ((1 << i) & lp->irq_map) {
1312 if (request_irq(i, net_interrupt, 0, dev->name, dev) == 0) {
1313 dev->irq = i;
1314 write_irq(dev, lp->chip_type, i);
1315 /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
1316 break;
1321 if (i >= CS8920_NO_INTS) {
1322 writereg(dev, PP_BusCTL, 0); /* disable interrupts. */
1323 printk(KERN_ERR "cs89x0: can't get an interrupt\n");
1324 ret = -EAGAIN;
1325 goto bad_out;
1328 else
1329 #endif
1331 #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
1332 if (((1 << dev->irq) & lp->irq_map) == 0) {
1333 printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1334 dev->name, dev->irq, lp->irq_map);
1335 ret = -EAGAIN;
1336 goto bad_out;
1338 #endif
1339 /* FIXME: Cirrus' release had this: */
1340 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1341 /* And 2.3.47 had this: */
1342 #if 0
1343 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1344 #endif
1345 write_irq(dev, lp->chip_type, dev->irq);
1346 ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
1347 if (ret) {
1348 if (net_debug)
1349 printk(KERN_DEBUG "cs89x0: request_irq(%d) failed\n", dev->irq);
1350 goto bad_out;
1354 #if ALLOW_DMA
1355 if (lp->use_dma) {
1356 if (lp->isa_config & ANY_ISA_DMA) {
1357 unsigned long flags;
1358 lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
1359 get_order(lp->dmasize * 1024));
1361 if (!lp->dma_buff) {
1362 printk(KERN_ERR "%s: cannot get %dK memory for DMA\n", dev->name, lp->dmasize);
1363 goto release_irq;
1365 if (net_debug > 1) {
1366 printk( "%s: dma %lx %lx\n",
1367 dev->name,
1368 (unsigned long)lp->dma_buff,
1369 (unsigned long)isa_virt_to_bus(lp->dma_buff));
1371 if ((unsigned long) lp->dma_buff >= MAX_DMA_ADDRESS ||
1372 !dma_page_eq(lp->dma_buff, lp->dma_buff+lp->dmasize*1024-1)) {
1373 printk(KERN_ERR "%s: not usable as DMA buffer\n", dev->name);
1374 goto release_irq;
1376 memset(lp->dma_buff, 0, lp->dmasize * 1024); /* Why? */
1377 if (request_dma(dev->dma, dev->name)) {
1378 printk(KERN_ERR "%s: cannot get dma channel %d\n", dev->name, dev->dma);
1379 goto release_irq;
1381 write_dma(dev, lp->chip_type, dev->dma);
1382 lp->rx_dma_ptr = lp->dma_buff;
1383 lp->end_dma_buff = lp->dma_buff + lp->dmasize*1024;
1384 spin_lock_irqsave(&lp->lock, flags);
1385 disable_dma(dev->dma);
1386 clear_dma_ff(dev->dma);
1387 set_dma_mode(dev->dma, 0x14); /* auto_init as well */
1388 set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));
1389 set_dma_count(dev->dma, lp->dmasize*1024);
1390 enable_dma(dev->dma);
1391 spin_unlock_irqrestore(&lp->lock, flags);
1394 #endif /* ALLOW_DMA */
1396 /* set the Ethernet address */
1397 for (i=0; i < ETH_ALEN/2; i++)
1398 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1400 /* while we're testing the interface, leave interrupts disabled */
1401 writereg(dev, PP_BusCTL, MEMORY_ON);
1403 /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
1404 if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) && (lp->adapter_cnf & A_CNF_LOW_RX_SQUELCH))
1405 lp->linectl = LOW_RX_SQUELCH;
1406 else
1407 lp->linectl = 0;
1409 /* check to make sure that they have the "right" hardware available */
1410 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1411 case A_CNF_MEDIA_10B_T: result = lp->adapter_cnf & A_CNF_10B_T; break;
1412 case A_CNF_MEDIA_AUI: result = lp->adapter_cnf & A_CNF_AUI; break;
1413 case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
1414 default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
1416 #ifdef CONFIG_ARCH_PNX010X
1417 result = A_CNF_10B_T;
1418 #endif
1419 if (!result) {
1420 printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name);
1421 release_irq:
1422 #if ALLOW_DMA
1423 release_dma_buff(lp);
1424 #endif
1425 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));
1426 free_irq(dev->irq, dev);
1427 ret = -EAGAIN;
1428 goto bad_out;
1431 /* set the hardware to the configured choice */
1432 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1433 case A_CNF_MEDIA_10B_T:
1434 result = detect_tp(dev);
1435 if (result==DETECTED_NONE) {
1436 printk(KERN_WARNING "%s: 10Base-T (RJ-45) has no cable\n", dev->name);
1437 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1438 result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */
1440 break;
1441 case A_CNF_MEDIA_AUI:
1442 result = detect_aui(dev);
1443 if (result==DETECTED_NONE) {
1444 printk(KERN_WARNING "%s: 10Base-5 (AUI) has no cable\n", dev->name);
1445 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1446 result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */
1448 break;
1449 case A_CNF_MEDIA_10B_2:
1450 result = detect_bnc(dev);
1451 if (result==DETECTED_NONE) {
1452 printk(KERN_WARNING "%s: 10Base-2 (BNC) has no cable\n", dev->name);
1453 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1454 result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */
1456 break;
1457 case A_CNF_MEDIA_AUTO:
1458 writereg(dev, PP_LineCTL, lp->linectl | AUTO_AUI_10BASET);
1459 if (lp->adapter_cnf & A_CNF_10B_T)
1460 if ((result = detect_tp(dev)) != DETECTED_NONE)
1461 break;
1462 if (lp->adapter_cnf & A_CNF_AUI)
1463 if ((result = detect_aui(dev)) != DETECTED_NONE)
1464 break;
1465 if (lp->adapter_cnf & A_CNF_10B_2)
1466 if ((result = detect_bnc(dev)) != DETECTED_NONE)
1467 break;
1468 printk(KERN_ERR "%s: no media detected\n", dev->name);
1469 goto release_irq;
1471 switch(result) {
1472 case DETECTED_NONE:
1473 printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name);
1474 goto release_irq;
1475 case DETECTED_RJ45H:
1476 printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);
1477 break;
1478 case DETECTED_RJ45F:
1479 printk(KERN_INFO "%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);
1480 break;
1481 case DETECTED_AUI:
1482 printk(KERN_INFO "%s: using 10Base-5 (AUI)\n", dev->name);
1483 break;
1484 case DETECTED_BNC:
1485 printk(KERN_INFO "%s: using 10Base-2 (BNC)\n", dev->name);
1486 break;
1489 /* Turn on both receive and transmit operations */
1490 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON);
1492 /* Receive only error free packets addressed to this card */
1493 lp->rx_mode = 0;
1494 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT);
1496 lp->curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL;
1498 if (lp->isa_config & STREAM_TRANSFER)
1499 lp->curr_rx_cfg |= RX_STREAM_ENBL;
1500 #if ALLOW_DMA
1501 set_dma_cfg(dev);
1502 #endif
1503 writereg(dev, PP_RxCFG, lp->curr_rx_cfg);
1505 writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL |
1506 TX_LATE_COL_ENBL | TX_JBR_ENBL | TX_ANY_COL_ENBL | TX_16_COL_ENBL);
1508 writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL |
1509 #if ALLOW_DMA
1510 dma_bufcfg(dev) |
1511 #endif
1512 TX_COL_COUNT_OVRFLOW_ENBL | TX_UNDERRUN_ENBL);
1514 /* now that we've got our act together, enable everything */
1515 writereg(dev, PP_BusCTL, ENABLE_IRQ
1516 | (dev->mem_start?MEMORY_ON : 0) /* turn memory on */
1517 #if ALLOW_DMA
1518 | dma_busctl(dev)
1519 #endif
1521 netif_start_queue(dev);
1522 if (net_debug > 1)
1523 printk("cs89x0: net_open() succeeded\n");
1524 return 0;
1525 bad_out:
1526 return ret;
1529 static void net_timeout(struct net_device *dev)
1531 /* If we get here, some higher level has decided we are broken.
1532 There should really be a "kick me" function call instead. */
1533 if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name,
1534 tx_done(dev) ? "IRQ conflict ?" : "network cable problem");
1535 /* Try to restart the adaptor. */
1536 netif_wake_queue(dev);
1539 static int net_send_packet(struct sk_buff *skb, struct net_device *dev)
1541 struct net_local *lp = netdev_priv(dev);
1543 if (net_debug > 3) {
1544 printk("%s: sent %d byte packet of type %x\n",
1545 dev->name, skb->len,
1546 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1549 /* keep the upload from being interrupted, since we
1550 ask the chip to start transmitting before the
1551 whole packet has been completely uploaded. */
1553 spin_lock_irq(&lp->lock);
1554 netif_stop_queue(dev);
1556 /* initiate a transmit sequence */
1557 writeword(dev->base_addr, TX_CMD_PORT, lp->send_cmd);
1558 writeword(dev->base_addr, TX_LEN_PORT, skb->len);
1560 /* Test to see if the chip has allocated memory for the packet */
1561 if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) {
1563 * Gasp! It hasn't. But that shouldn't happen since
1564 * we're waiting for TxOk, so return 1 and requeue this packet.
1567 spin_unlock_irq(&lp->lock);
1568 if (net_debug) printk("cs89x0: Tx buffer not free!\n");
1569 return 1;
1571 /* Write the contents of the packet */
1572 writewords(dev->base_addr, TX_FRAME_PORT,skb->data,(skb->len+1) >>1);
1573 spin_unlock_irq(&lp->lock);
1574 lp->stats.tx_bytes += skb->len;
1575 dev->trans_start = jiffies;
1576 dev_kfree_skb (skb);
1579 * We DO NOT call netif_wake_queue() here.
1580 * We also DO NOT call netif_start_queue().
1582 * Either of these would cause another bottom half run through
1583 * net_send_packet() before this packet has fully gone out. That causes
1584 * us to hit the "Gasp!" above and the send is rescheduled. it runs like
1585 * a dog. We just return and wait for the Tx completion interrupt handler
1586 * to restart the netdevice layer
1589 return 0;
1592 /* The typical workload of the driver:
1593 Handle the network interface interrupts. */
1595 static irqreturn_t net_interrupt(int irq, void *dev_id)
1597 struct net_device *dev = dev_id;
1598 struct net_local *lp;
1599 int ioaddr, status;
1600 int handled = 0;
1602 ioaddr = dev->base_addr;
1603 lp = netdev_priv(dev);
1605 /* we MUST read all the events out of the ISQ, otherwise we'll never
1606 get interrupted again. As a consequence, we can't have any limit
1607 on the number of times we loop in the interrupt handler. The
1608 hardware guarantees that eventually we'll run out of events. Of
1609 course, if you're on a slow machine, and packets are arriving
1610 faster than you can read them off, you're screwed. Hasta la
1611 vista, baby! */
1612 while ((status = readword(dev->base_addr, ISQ_PORT))) {
1613 if (net_debug > 4)printk("%s: event=%04x\n", dev->name, status);
1614 handled = 1;
1615 switch(status & ISQ_EVENT_MASK) {
1616 case ISQ_RECEIVER_EVENT:
1617 /* Got a packet(s). */
1618 net_rx(dev);
1619 break;
1620 case ISQ_TRANSMITTER_EVENT:
1621 lp->stats.tx_packets++;
1622 netif_wake_queue(dev); /* Inform upper layers. */
1623 if ((status & ( TX_OK |
1624 TX_LOST_CRS |
1625 TX_SQE_ERROR |
1626 TX_LATE_COL |
1627 TX_16_COL)) != TX_OK) {
1628 if ((status & TX_OK) == 0) lp->stats.tx_errors++;
1629 if (status & TX_LOST_CRS) lp->stats.tx_carrier_errors++;
1630 if (status & TX_SQE_ERROR) lp->stats.tx_heartbeat_errors++;
1631 if (status & TX_LATE_COL) lp->stats.tx_window_errors++;
1632 if (status & TX_16_COL) lp->stats.tx_aborted_errors++;
1634 break;
1635 case ISQ_BUFFER_EVENT:
1636 if (status & READY_FOR_TX) {
1637 /* we tried to transmit a packet earlier,
1638 but inexplicably ran out of buffers.
1639 That shouldn't happen since we only ever
1640 load one packet. Shrug. Do the right
1641 thing anyway. */
1642 netif_wake_queue(dev); /* Inform upper layers. */
1644 if (status & TX_UNDERRUN) {
1645 if (net_debug > 0) printk("%s: transmit underrun\n", dev->name);
1646 lp->send_underrun++;
1647 if (lp->send_underrun == 3) lp->send_cmd = TX_AFTER_381;
1648 else if (lp->send_underrun == 6) lp->send_cmd = TX_AFTER_ALL;
1649 /* transmit cycle is done, although
1650 frame wasn't transmitted - this
1651 avoids having to wait for the upper
1652 layers to timeout on us, in the
1653 event of a tx underrun */
1654 netif_wake_queue(dev); /* Inform upper layers. */
1656 #if ALLOW_DMA
1657 if (lp->use_dma && (status & RX_DMA)) {
1658 int count = readreg(dev, PP_DmaFrameCnt);
1659 while(count) {
1660 if (net_debug > 5)
1661 printk("%s: receiving %d DMA frames\n", dev->name, count);
1662 if (net_debug > 2 && count >1)
1663 printk("%s: receiving %d DMA frames\n", dev->name, count);
1664 dma_rx(dev);
1665 if (--count == 0)
1666 count = readreg(dev, PP_DmaFrameCnt);
1667 if (net_debug > 2 && count > 0)
1668 printk("%s: continuing with %d DMA frames\n", dev->name, count);
1671 #endif
1672 break;
1673 case ISQ_RX_MISS_EVENT:
1674 lp->stats.rx_missed_errors += (status >>6);
1675 break;
1676 case ISQ_TX_COL_EVENT:
1677 lp->stats.collisions += (status >>6);
1678 break;
1681 return IRQ_RETVAL(handled);
1684 static void
1685 count_rx_errors(int status, struct net_local *lp)
1687 lp->stats.rx_errors++;
1688 if (status & RX_RUNT) lp->stats.rx_length_errors++;
1689 if (status & RX_EXTRA_DATA) lp->stats.rx_length_errors++;
1690 if (status & RX_CRC_ERROR) if (!(status & (RX_EXTRA_DATA|RX_RUNT)))
1691 /* per str 172 */
1692 lp->stats.rx_crc_errors++;
1693 if (status & RX_DRIBBLE) lp->stats.rx_frame_errors++;
1694 return;
1697 /* We have a good packet(s), get it/them out of the buffers. */
1698 static void
1699 net_rx(struct net_device *dev)
1701 struct net_local *lp = netdev_priv(dev);
1702 struct sk_buff *skb;
1703 int status, length;
1705 int ioaddr = dev->base_addr;
1706 status = readword(ioaddr, RX_FRAME_PORT);
1707 length = readword(ioaddr, RX_FRAME_PORT);
1709 if ((status & RX_OK) == 0) {
1710 count_rx_errors(status, lp);
1711 return;
1714 /* Malloc up new buffer. */
1715 skb = dev_alloc_skb(length + 2);
1716 if (skb == NULL) {
1717 #if 0 /* Again, this seems a cruel thing to do */
1718 printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name);
1719 #endif
1720 lp->stats.rx_dropped++;
1721 return;
1723 skb_reserve(skb, 2); /* longword align L3 header */
1725 readwords(ioaddr, RX_FRAME_PORT, skb_put(skb, length), length >> 1);
1726 if (length & 1)
1727 skb->data[length-1] = readword(ioaddr, RX_FRAME_PORT);
1729 if (net_debug > 3) {
1730 printk( "%s: received %d byte packet of type %x\n",
1731 dev->name, length,
1732 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1735 skb->protocol=eth_type_trans(skb,dev);
1736 netif_rx(skb);
1737 dev->last_rx = jiffies;
1738 lp->stats.rx_packets++;
1739 lp->stats.rx_bytes += length;
1742 #if ALLOW_DMA
1743 static void release_dma_buff(struct net_local *lp)
1745 if (lp->dma_buff) {
1746 free_pages((unsigned long)(lp->dma_buff), get_order(lp->dmasize * 1024));
1747 lp->dma_buff = NULL;
1750 #endif
1752 /* The inverse routine to net_open(). */
1753 static int
1754 net_close(struct net_device *dev)
1756 #if ALLOW_DMA
1757 struct net_local *lp = netdev_priv(dev);
1758 #endif
1760 netif_stop_queue(dev);
1762 writereg(dev, PP_RxCFG, 0);
1763 writereg(dev, PP_TxCFG, 0);
1764 writereg(dev, PP_BufCFG, 0);
1765 writereg(dev, PP_BusCTL, 0);
1767 free_irq(dev->irq, dev);
1769 #if ALLOW_DMA
1770 if (lp->use_dma && lp->dma) {
1771 free_dma(dev->dma);
1772 release_dma_buff(lp);
1774 #endif
1776 /* Update the statistics here. */
1777 return 0;
1780 /* Get the current statistics. This may be called with the card open or
1781 closed. */
1782 static struct net_device_stats *
1783 net_get_stats(struct net_device *dev)
1785 struct net_local *lp = netdev_priv(dev);
1786 unsigned long flags;
1788 spin_lock_irqsave(&lp->lock, flags);
1789 /* Update the statistics from the device registers. */
1790 lp->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);
1791 lp->stats.collisions += (readreg(dev, PP_TxCol) >> 6);
1792 spin_unlock_irqrestore(&lp->lock, flags);
1794 return &lp->stats;
1797 static void set_multicast_list(struct net_device *dev)
1799 struct net_local *lp = netdev_priv(dev);
1800 unsigned long flags;
1802 spin_lock_irqsave(&lp->lock, flags);
1803 if(dev->flags&IFF_PROMISC)
1805 lp->rx_mode = RX_ALL_ACCEPT;
1807 else if((dev->flags&IFF_ALLMULTI)||dev->mc_list)
1809 /* The multicast-accept list is initialized to accept-all, and we
1810 rely on higher-level filtering for now. */
1811 lp->rx_mode = RX_MULTCAST_ACCEPT;
1813 else
1814 lp->rx_mode = 0;
1816 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode);
1818 /* in promiscuous mode, we accept errored packets, so we have to enable interrupts on them also */
1819 writereg(dev, PP_RxCFG, lp->curr_rx_cfg |
1820 (lp->rx_mode == RX_ALL_ACCEPT? (RX_CRC_ERROR_ENBL|RX_RUNT_ENBL|RX_EXTRA_DATA_ENBL) : 0));
1821 spin_unlock_irqrestore(&lp->lock, flags);
1825 static int set_mac_address(struct net_device *dev, void *p)
1827 int i;
1828 struct sockaddr *addr = p;
1830 if (netif_running(dev))
1831 return -EBUSY;
1833 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
1835 if (net_debug) {
1836 DECLARE_MAC_BUF(mac);
1837 printk("%s: Setting MAC address to %s.\n",
1838 dev->name, print_mac(mac, dev->dev_addr));
1840 /* set the Ethernet address */
1841 for (i=0; i < ETH_ALEN/2; i++)
1842 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1844 return 0;
1847 #ifdef MODULE
1849 static struct net_device *dev_cs89x0;
1852 * Support the 'debug' module parm even if we're compiled for non-debug to
1853 * avoid breaking someone's startup scripts
1856 static int io;
1857 static int irq;
1858 static int debug;
1859 static char media[8];
1860 static int duplex=-1;
1862 static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
1863 static int dma;
1864 static int dmasize=16; /* or 64 */
1866 module_param(io, int, 0);
1867 module_param(irq, int, 0);
1868 module_param(debug, int, 0);
1869 module_param_string(media, media, sizeof(media), 0);
1870 module_param(duplex, int, 0);
1871 module_param(dma , int, 0);
1872 module_param(dmasize , int, 0);
1873 module_param(use_dma , int, 0);
1874 MODULE_PARM_DESC(io, "cs89x0 I/O base address");
1875 MODULE_PARM_DESC(irq, "cs89x0 IRQ number");
1876 #if DEBUGGING
1877 MODULE_PARM_DESC(debug, "cs89x0 debug level (0-6)");
1878 #else
1879 MODULE_PARM_DESC(debug, "(ignored)");
1880 #endif
1881 MODULE_PARM_DESC(media, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1882 /* No other value than -1 for duplex seems to be currently interpreted */
1883 MODULE_PARM_DESC(duplex, "(ignored)");
1884 #if ALLOW_DMA
1885 MODULE_PARM_DESC(dma , "cs89x0 ISA DMA channel; ignored if use_dma=0");
1886 MODULE_PARM_DESC(dmasize , "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1887 MODULE_PARM_DESC(use_dma , "cs89x0 using DMA (0-1)");
1888 #else
1889 MODULE_PARM_DESC(dma , "(ignored)");
1890 MODULE_PARM_DESC(dmasize , "(ignored)");
1891 MODULE_PARM_DESC(use_dma , "(ignored)");
1892 #endif
1894 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton <andrewm@uow.edu.au>");
1895 MODULE_LICENSE("GPL");
1899 * media=t - specify media type
1900 or media=2
1901 or media=aui
1902 or medai=auto
1903 * duplex=0 - specify forced half/full/autonegotiate duplex
1904 * debug=# - debug level
1907 * Default Chip Configuration:
1908 * DMA Burst = enabled
1909 * IOCHRDY Enabled = enabled
1910 * UseSA = enabled
1911 * CS8900 defaults to half-duplex if not specified on command-line
1912 * CS8920 defaults to autoneg if not specified on command-line
1913 * Use reset defaults for other config parameters
1915 * Assumptions:
1916 * media type specified is supported (circuitry is present)
1917 * if memory address is > 1MB, then required mem decode hw is present
1918 * if 10B-2, then agent other than driver will enable DC/DC converter
1919 (hw or software util)
1924 int __init init_module(void)
1926 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1927 struct net_local *lp;
1928 int ret = 0;
1930 #if DEBUGGING
1931 net_debug = debug;
1932 #else
1933 debug = 0;
1934 #endif
1935 if (!dev)
1936 return -ENOMEM;
1938 dev->irq = irq;
1939 dev->base_addr = io;
1940 lp = netdev_priv(dev);
1942 #if ALLOW_DMA
1943 if (use_dma) {
1944 lp->use_dma = use_dma;
1945 lp->dma = dma;
1946 lp->dmasize = dmasize;
1948 #endif
1950 spin_lock_init(&lp->lock);
1952 /* boy, they'd better get these right */
1953 if (!strcmp(media, "rj45"))
1954 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1955 else if (!strcmp(media, "aui"))
1956 lp->adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI;
1957 else if (!strcmp(media, "bnc"))
1958 lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2;
1959 else
1960 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1962 if (duplex==-1)
1963 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1965 if (io == 0) {
1966 printk(KERN_ERR "cs89x0.c: Module autoprobing not allowed.\n");
1967 printk(KERN_ERR "cs89x0.c: Append io=0xNNN\n");
1968 ret = -EPERM;
1969 goto out;
1970 } else if (io <= 0x1ff) {
1971 ret = -ENXIO;
1972 goto out;
1975 #if ALLOW_DMA
1976 if (use_dma && dmasize != 16 && dmasize != 64) {
1977 printk(KERN_ERR "cs89x0.c: dma size must be either 16K or 64K, not %dK\n", dmasize);
1978 ret = -EPERM;
1979 goto out;
1981 #endif
1982 ret = cs89x0_probe1(dev, io, 1);
1983 if (ret)
1984 goto out;
1986 dev_cs89x0 = dev;
1987 return 0;
1988 out:
1989 free_netdev(dev);
1990 return ret;
1993 void __exit
1994 cleanup_module(void)
1996 unregister_netdev(dev_cs89x0);
1997 writeword(dev_cs89x0->base_addr, ADD_PORT, PP_ChipID);
1998 release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
1999 free_netdev(dev_cs89x0);
2001 #endif /* MODULE */
2004 * Local variables:
2005 * version-control: t
2006 * kept-new-versions: 5
2007 * c-indent-level: 8
2008 * tab-width: 8
2009 * End: