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