1 /* cs89x0.c: A Crystal Semiconductor (Now Cirrus Logic) CS89[02]0
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
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
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
41 : Handle kmalloc() failures
42 : Other resource allocation fixes
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
92 /* Always include 'config.h' first in case the user wants to turn on
93 or override something. */
94 #include <linux/config.h>
95 #include <linux/module.h>
98 * Set this to zero to disable DMA code
100 * Note that even if DMA is turned off we still support the 'dma' and 'use_dma'
101 * module options so we don't break any startup scripts.
103 #ifndef CONFIG_ARCH_IXDP2X01
110 * Set this to zero to remove all the debug statements via
111 * dead code elimination
118 Crynwr packet driver epktisa.
120 Crystal Semiconductor data sheets.
124 #include <linux/errno.h>
125 #include <linux/netdevice.h>
126 #include <linux/etherdevice.h>
127 #include <linux/kernel.h>
128 #include <linux/types.h>
129 #include <linux/fcntl.h>
130 #include <linux/interrupt.h>
131 #include <linux/ioport.h>
132 #include <linux/in.h>
133 #include <linux/skbuff.h>
134 #include <linux/slab.h>
135 #include <linux/spinlock.h>
136 #include <linux/string.h>
137 #include <linux/init.h>
138 #include <linux/bitops.h>
139 #include <linux/delay.h>
141 #include <asm/system.h>
149 static char version[] __initdata =
150 "cs89x0.c: v2.4.3-pre1 Russell Nelson <nelson@crynwr.com>, Andrew Morton <andrewm@uow.edu.au>\n";
152 #define DRV_NAME "cs89x0"
154 /* First, a few definitions that the brave might change.
155 A zero-terminated list of I/O addresses to be probed. Some special flags..
156 Addr & 1 = Read back the address port, look for signature and reset
157 the page window before probing
158 Addr & 3 = Reset the page window and probe
159 The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
160 but it is possible that a Cirrus board could be plugged into the ISA
162 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
163 them to system IRQ numbers. This mapping is card specific and is set to
164 the configuration of the Cirrus Eval board for this chip. */
165 #ifdef CONFIG_ARCH_CLPS7500
166 static unsigned int netcard_portlist[] __initdata =
167 { 0x80090303, 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
168 static unsigned int cs8900_irq_map[] = {12,0,0,0};
169 #elif defined(CONFIG_SH_HICOSH4)
170 static unsigned int netcard_portlist[] __initdata =
172 static unsigned int cs8900_irq_map[] = {1,0,0,0};
173 #elif defined(CONFIG_ARCH_IXDP2X01)
175 static unsigned int netcard_portlist[] __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
176 static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};
177 #elif defined(CONFIG_ARCH_PNX0105)
179 #include <asm/arch/gpio.h>
180 #define CIRRUS_DEFAULT_BASE IO_ADDRESS(EXT_STATIC2_s0_BASE + 0x200000) /* = Physical address 0x48200000 */
181 #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */
182 static unsigned int netcard_portlist[] __initdata = {CIRRUS_DEFAULT_BASE, 0};
183 static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};
185 static unsigned int netcard_portlist[] __initdata =
186 { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
187 static unsigned int cs8900_irq_map[] = {10,11,12,5};
191 static unsigned int net_debug = DEBUGGING;
193 #define net_debug 0 /* gcc will remove all the debug code for us */
196 /* The number of low I/O ports used by the ethercard. */
197 #define NETCARD_IO_EXTENT 16
199 /* we allow the user to override various values normally set in the EEPROM */
200 #define FORCE_RJ45 0x0001 /* pick one of these three */
201 #define FORCE_AUI 0x0002
202 #define FORCE_BNC 0x0004
204 #define FORCE_AUTO 0x0010 /* pick one of these three */
205 #define FORCE_HALF 0x0020
206 #define FORCE_FULL 0x0030
208 /* Information that need to be kept for each board. */
210 struct net_device_stats stats;
211 int chip_type; /* one of: CS8900, CS8920, CS8920M */
212 char chip_revision; /* revision letter of the chip ('A'...) */
213 int send_cmd; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
214 int auto_neg_cnf; /* auto-negotiation word from EEPROM */
215 int adapter_cnf; /* adapter configuration from EEPROM */
216 int isa_config; /* ISA configuration from EEPROM */
217 int irq_map; /* IRQ map from EEPROM */
218 int rx_mode; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
219 int curr_rx_cfg; /* a copy of PP_RxCFG */
220 int linectl; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
221 int send_underrun; /* keep track of how many underruns in a row we get */
222 int force; /* force various values; see FORCE* above. */
225 int use_dma; /* Flag: we're using dma */
226 int dma; /* DMA channel */
227 int dmasize; /* 16 or 64 */
228 unsigned char *dma_buff; /* points to the beginning of the buffer */
229 unsigned char *end_dma_buff; /* points to the end of the buffer */
230 unsigned char *rx_dma_ptr; /* points to the next packet */
234 /* Index to functions, as function prototypes. */
236 static int cs89x0_probe1(struct net_device *dev, int ioaddr, int modular);
237 static int net_open(struct net_device *dev);
238 static int net_send_packet(struct sk_buff *skb, struct net_device *dev);
239 static irqreturn_t net_interrupt(int irq, void *dev_id, struct pt_regs *regs);
240 static void set_multicast_list(struct net_device *dev);
241 static void net_timeout(struct net_device *dev);
242 static void net_rx(struct net_device *dev);
243 static int net_close(struct net_device *dev);
244 static struct net_device_stats *net_get_stats(struct net_device *dev);
245 static void reset_chip(struct net_device *dev);
246 static int get_eeprom_data(struct net_device *dev, int off, int len, int *buffer);
247 static int get_eeprom_cksum(int off, int len, int *buffer);
248 static int set_mac_address(struct net_device *dev, void *addr);
249 static void count_rx_errors(int status, struct net_local *lp);
251 static void get_dma_channel(struct net_device *dev);
252 static void release_dma_buff(struct net_local *lp);
255 /* Example routines you must write ;->. */
256 #define tx_done(dev) 1
259 * Permit 'cs89x0_dma=N' in the kernel boot environment
261 #if !defined(MODULE) && (ALLOW_DMA != 0)
262 static int g_cs89x0_dma;
264 static int __init dma_fn(char *str)
266 g_cs89x0_dma = simple_strtol(str,NULL,0);
270 __setup("cs89x0_dma=", dma_fn);
271 #endif /* !defined(MODULE) && (ALLOW_DMA != 0) */
274 static int g_cs89x0_media__force;
276 static int __init media_fn(char *str)
278 if (!strcmp(str, "rj45")) g_cs89x0_media__force = FORCE_RJ45;
279 else if (!strcmp(str, "aui")) g_cs89x0_media__force = FORCE_AUI;
280 else if (!strcmp(str, "bnc")) g_cs89x0_media__force = FORCE_BNC;
284 __setup("cs89x0_media=", media_fn);
287 /* Check for a network adaptor of this type, and return '0' iff one exists.
288 If dev->base_addr == 0, probe all likely locations.
289 If dev->base_addr == 1, always return failure.
290 If dev->base_addr == 2, allocate space for the device and return success
291 (detachable devices only).
295 struct net_device * __init cs89x0_probe(int unit)
297 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
304 return ERR_PTR(-ENODEV);
306 sprintf(dev->name, "eth%d", unit);
307 netdev_boot_setup_check(dev);
312 printk("cs89x0:cs89x0_probe(0x%x)\n", io);
314 if (io > 0x1ff) { /* Check a single specified location. */
315 err = cs89x0_probe1(dev, io, 0);
316 } else if (io != 0) { /* Don't probe at all. */
319 for (port = netcard_portlist; *port; port++) {
320 if (cs89x0_probe1(dev, *port, 0) == 0)
332 printk(KERN_WARNING "cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
338 readreg(struct net_device *dev, int portno)
340 outw(portno, dev->base_addr + ADD_PORT);
341 return inw(dev->base_addr + DATA_PORT);
345 writereg(struct net_device *dev, int portno, int value)
347 outw(portno, dev->base_addr + ADD_PORT);
348 outw(value, dev->base_addr + DATA_PORT);
352 readword(struct net_device *dev, int portno)
354 return inw(dev->base_addr + portno);
358 writeword(struct net_device *dev, int portno, int value)
360 outw(value, dev->base_addr + portno);
364 wait_eeprom_ready(struct net_device *dev)
366 int timeout = jiffies;
367 /* check to see if the EEPROM is ready, a timeout is used -
368 just in case EEPROM is ready when SI_BUSY in the
369 PP_SelfST is clear */
370 while(readreg(dev, PP_SelfST) & SI_BUSY)
371 if (jiffies - timeout >= 40)
377 get_eeprom_data(struct net_device *dev, int off, int len, int *buffer)
381 if (net_debug > 3) printk("EEPROM data from %x for %x:\n",off,len);
382 for (i = 0; i < len; i++) {
383 if (wait_eeprom_ready(dev) < 0) return -1;
384 /* Now send the EEPROM read command and EEPROM location to read */
385 writereg(dev, PP_EECMD, (off + i) | EEPROM_READ_CMD);
386 if (wait_eeprom_ready(dev) < 0) return -1;
387 buffer[i] = readreg(dev, PP_EEData);
388 if (net_debug > 3) printk("%04x ", buffer[i]);
390 if (net_debug > 3) printk("\n");
395 get_eeprom_cksum(int off, int len, int *buffer)
400 for (i = 0; i < len; i++)
408 /* This is the real probe routine. Linux has a history of friendly device
409 probes on the ISA bus. A good device probes avoids doing writes, and
410 verifies that the correct device exists and functions.
415 cs89x0_probe1(struct net_device *dev, int ioaddr, int modular)
417 struct net_local *lp = netdev_priv(dev);
418 static unsigned version_printed;
420 unsigned rev_type = 0;
421 int eeprom_buff[CHKSUM_LEN];
424 SET_MODULE_OWNER(dev);
425 /* Initialize the device structure. */
427 memset(lp, 0, sizeof(*lp));
428 spin_lock_init(&lp->lock);
433 lp->dma = g_cs89x0_dma;
434 lp->dmasize = 16; /* Could make this an option... */
437 lp->force = g_cs89x0_media__force;
441 #ifdef CONFIG_ARCH_PNX0105
444 /* Map GPIO registers for the pins connected to the CS8900a. */
445 if (map_cirrus_gpio() < 0)
450 /* Map event-router registers. */
451 if (map_event_router() < 0)
457 unmap_event_router();
459 dev->base_addr = ioaddr;
461 for (i = 0 ; i < 3 ; i++)
465 /* Grab the region so we can find another board if autoIRQ fails. */
466 /* WTF is going on here? */
467 if (!request_region(ioaddr & ~3, NETCARD_IO_EXTENT, DRV_NAME)) {
468 printk(KERN_ERR "%s: request_region(0x%x, 0x%x) failed\n",
469 DRV_NAME, ioaddr, NETCARD_IO_EXTENT);
474 #ifdef CONFIG_SH_HICOSH4
475 /* truely reset the chip */
476 outw(0x0114, ioaddr + ADD_PORT);
477 outw(0x0040, ioaddr + DATA_PORT);
480 /* if they give us an odd I/O address, then do ONE write to
481 the address port, to get it back to address zero, where we
482 expect to find the EISA signature word. An IO with a base of 0x3
483 will skip the test for the ADD_PORT. */
486 printk(KERN_INFO "%s: odd ioaddr 0x%x\n", dev->name, ioaddr);
487 if ((ioaddr & 2) != 2)
488 if ((inw((ioaddr & ~3)+ ADD_PORT) & ADD_MASK) != ADD_SIG) {
489 printk(KERN_ERR "%s: bad signature 0x%x\n",
490 dev->name, inw((ioaddr & ~3)+ ADD_PORT));
495 printk("PP_addr=0x%x\n", inw(ioaddr + ADD_PORT));
498 outw(PP_ChipID, ioaddr + ADD_PORT);
500 if (inw(ioaddr + DATA_PORT) != CHIP_EISA_ID_SIG) {
501 printk(KERN_ERR "%s: incorrect signature 0x%x\n",
502 dev->name, inw(ioaddr + DATA_PORT));
507 /* Fill in the 'dev' fields. */
508 dev->base_addr = ioaddr;
510 /* get the chip type */
511 rev_type = readreg(dev, PRODUCT_ID_ADD);
512 lp->chip_type = rev_type &~ REVISON_BITS;
513 lp->chip_revision = ((rev_type & REVISON_BITS) >> 8) + 'A';
515 /* Check the chip type and revision in order to set the correct send command
516 CS8920 revision C and CS8900 revision F can use the faster send. */
517 lp->send_cmd = TX_AFTER_381;
518 if (lp->chip_type == CS8900 && lp->chip_revision >= 'F')
519 lp->send_cmd = TX_NOW;
520 if (lp->chip_type != CS8900 && lp->chip_revision >= 'C')
521 lp->send_cmd = TX_NOW;
523 if (net_debug && version_printed++ == 0)
526 printk(KERN_INFO "%s: cs89%c0%s rev %c found at %#3lx ",
528 lp->chip_type==CS8900?'0':'2',
529 lp->chip_type==CS8920M?"M":"",
535 /* Here we read the current configuration of the chip. If there
536 is no Extended EEPROM then the idea is to not disturb the chip
537 configuration, it should have been correctly setup by automatic
538 EEPROM read on reset. So, if the chip says it read the EEPROM
539 the driver will always do *something* instead of complain that
542 #ifdef CONFIG_SH_HICOSH4
544 /* For the HiCO.SH4 board, things are different: we don't
545 have EEPROM, but there is some data in flash, so we go
546 get it there directly (MAC). */
549 if (((* (volatile __u32 *) 0xa0013ff0) & 0x00ffffff)
551 confd = (__u16*) 0xa0013fc0;
553 confd = (__u16*) 0xa001ffc0;
555 cnt = (*confd++ & 0x00ff) >> 1;
559 switch (j & 0x0fff) {
561 for (i = 0; i < ETH_ALEN/2; i++) {
562 dev->dev_addr[i*2] = confd[i] & 0xFF;
563 dev->dev_addr[i*2+1] = confd[i] >> 8;
574 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) ==
575 (EEPROM_OK|EEPROM_PRESENT)) {
577 for (i=0; i < ETH_ALEN/2; i++) {
579 Addr = readreg(dev, PP_IA+i*2);
580 dev->dev_addr[i*2] = Addr & 0xFF;
581 dev->dev_addr[i*2+1] = Addr >> 8;
584 /* Load the Adapter Configuration.
585 Note: Barring any more specific information from some
586 other source (ie EEPROM+Schematics), we would not know
587 how to operate a 10Base2 interface on the AUI port.
588 However, since we do read the status of HCB1 and use
589 settings that always result in calls to control_dc_dc(dev,0)
590 a BNC interface should work if the enable pin
591 (dc/dc converter) is on HCB1. It will be called AUI
595 i = readreg(dev, PP_LineCTL);
596 /* Preserve the setting of the HCB1 pin. */
597 if ((i & (HCB1 | HCB1_ENBL)) == (HCB1 | HCB1_ENBL))
598 lp->adapter_cnf |= A_CNF_DC_DC_POLARITY;
599 /* Save the sqelch bit */
600 if ((i & LOW_RX_SQUELCH) == LOW_RX_SQUELCH)
601 lp->adapter_cnf |= A_CNF_EXTND_10B_2 | A_CNF_LOW_RX_SQUELCH;
602 /* Check if the card is in 10Base-t only mode */
603 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == 0)
604 lp->adapter_cnf |= A_CNF_10B_T | A_CNF_MEDIA_10B_T;
605 /* Check if the card is in AUI only mode */
606 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUI_ONLY)
607 lp->adapter_cnf |= A_CNF_AUI | A_CNF_MEDIA_AUI;
608 /* Check if the card is in Auto mode. */
609 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET)
610 lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T |
611 A_CNF_MEDIA_AUI | A_CNF_MEDIA_10B_T | A_CNF_MEDIA_AUTO;
614 printk(KERN_INFO "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
615 dev->name, i, lp->adapter_cnf);
617 /* IRQ. Other chips already probe, see below. */
618 if (lp->chip_type == CS8900)
619 lp->isa_config = readreg(dev, PP_CS8900_ISAINT) & INT_NO_MASK;
621 printk( "[Cirrus EEPROM] ");
626 /* First check to see if an EEPROM is attached. */
627 #ifdef CONFIG_SH_HICOSH4 /* no EEPROM on HiCO, don't hazzle with it here */
629 printk(KERN_NOTICE "cs89x0: No EEPROM on HiCO.SH4\n");
632 if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0)
633 printk(KERN_WARNING "cs89x0: No EEPROM, relying on command line....\n");
634 else if (get_eeprom_data(dev, START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
635 printk(KERN_WARNING "\ncs89x0: EEPROM read failed, relying on command line.\n");
636 } else if (get_eeprom_cksum(START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
637 /* Check if the chip was able to read its own configuration starting
639 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) !=
640 (EEPROM_OK|EEPROM_PRESENT))
641 printk(KERN_WARNING "cs89x0: Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
644 /* This reads an extended EEPROM that is not documented
645 in the CS8900 datasheet. */
647 /* get transmission control word but keep the autonegotiation bits */
648 if (!lp->auto_neg_cnf) lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2];
649 /* Store adapter configuration */
650 if (!lp->adapter_cnf) lp->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET/2];
651 /* Store ISA configuration */
652 lp->isa_config = eeprom_buff[ISA_CNF_OFFSET/2];
653 dev->mem_start = eeprom_buff[PACKET_PAGE_OFFSET/2] << 8;
655 /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
656 /* store the initial memory base address */
657 for (i = 0; i < ETH_ALEN/2; i++) {
658 dev->dev_addr[i*2] = eeprom_buff[i];
659 dev->dev_addr[i*2+1] = eeprom_buff[i] >> 8;
662 printk(KERN_DEBUG "%s: new adapter_cnf: 0x%x\n",
663 dev->name, lp->adapter_cnf);
666 /* allow them to force multiple transceivers. If they force multiple, autosense */
669 if (lp->force & FORCE_RJ45) {lp->adapter_cnf |= A_CNF_10B_T; count++; }
670 if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_AUI; count++; }
671 if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_10B_2; count++; }
672 if (count > 1) {lp->adapter_cnf |= A_CNF_MEDIA_AUTO; }
673 else if (lp->force & FORCE_RJ45){lp->adapter_cnf |= A_CNF_MEDIA_10B_T; }
674 else if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_MEDIA_AUI; }
675 else if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_MEDIA_10B_2; }
679 printk(KERN_DEBUG "%s: after force 0x%x, adapter_cnf=0x%x\n",
680 dev->name, lp->force, lp->adapter_cnf);
682 /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
684 /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
686 /* FIXME: we don't set the Ethernet address on the command line. Use
687 ifconfig IFACE hw ether AABBCCDDEEFF */
689 printk(KERN_INFO "cs89x0 media %s%s%s",
690 (lp->adapter_cnf & A_CNF_10B_T)?"RJ-45,":"",
691 (lp->adapter_cnf & A_CNF_AUI)?"AUI,":"",
692 (lp->adapter_cnf & A_CNF_10B_2)?"BNC,":"");
694 lp->irq_map = 0xffff;
696 /* If this is a CS8900 then no pnp soft */
697 if (lp->chip_type != CS8900 &&
698 /* Check if the ISA IRQ has been set */
699 (i = readreg(dev, PP_CS8920_ISAINT) & 0xff,
700 (i != 0 && i < CS8920_NO_INTS))) {
704 i = lp->isa_config & INT_NO_MASK;
705 if (lp->chip_type == CS8900) {
706 #if defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX0105)
707 i = cs8900_irq_map[0];
709 /* Translate the IRQ using the IRQ mapping table. */
710 if (i >= sizeof(cs8900_irq_map)/sizeof(cs8900_irq_map[0]))
711 printk("\ncs89x0: invalid ISA interrupt number %d\n", i);
713 i = cs8900_irq_map[i];
715 lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */
717 int irq_map_buff[IRQ_MAP_LEN/2];
719 if (get_eeprom_data(dev, IRQ_MAP_EEPROM_DATA,
721 irq_map_buff) >= 0) {
722 if ((irq_map_buff[0] & 0xff) == PNP_IRQ_FRMT)
723 lp->irq_map = (irq_map_buff[0]>>8) | (irq_map_buff[1] << 8);
731 printk(" IRQ %d", dev->irq);
735 get_dma_channel(dev);
736 printk(", DMA %d", dev->dma);
741 printk(", programmed I/O");
744 /* print the ethernet address. */
746 for (i = 0; i < ETH_ALEN; i++)
748 printk("%c%02x", i ? ':' : ' ', dev->dev_addr[i]);
751 dev->open = net_open;
752 dev->stop = net_close;
753 dev->tx_timeout = net_timeout;
754 dev->watchdog_timeo = HZ;
755 dev->hard_start_xmit = net_send_packet;
756 dev->get_stats = net_get_stats;
757 dev->set_multicast_list = set_multicast_list;
758 dev->set_mac_address = set_mac_address;
762 printk("cs89x0_probe1() successful\n");
764 retval = register_netdev(dev);
769 outw(PP_ChipID, dev->base_addr + ADD_PORT);
771 release_region(ioaddr & ~3, NETCARD_IO_EXTENT);
777 /*********************************
778 * This page contains DMA routines
779 **********************************/
783 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1)>>17 == (long)(ptr2)>>17)
786 get_dma_channel(struct net_device *dev)
788 struct net_local *lp = netdev_priv(dev);
792 lp->isa_config |= ISA_RxDMA;
794 if ((lp->isa_config & ANY_ISA_DMA) == 0)
796 dev->dma = lp->isa_config & DMA_NO_MASK;
797 if (lp->chip_type == CS8900)
799 if (dev->dma < 5 || dev->dma > 7) {
800 lp->isa_config &= ~ANY_ISA_DMA;
808 write_dma(struct net_device *dev, int chip_type, int dma)
810 struct net_local *lp = netdev_priv(dev);
811 if ((lp->isa_config & ANY_ISA_DMA) == 0)
813 if (chip_type == CS8900) {
814 writereg(dev, PP_CS8900_ISADMA, dma-5);
816 writereg(dev, PP_CS8920_ISADMA, dma);
821 set_dma_cfg(struct net_device *dev)
823 struct net_local *lp = netdev_priv(dev);
826 if ((lp->isa_config & ANY_ISA_DMA) == 0) {
828 printk("set_dma_cfg(): no DMA\n");
831 if (lp->isa_config & ISA_RxDMA) {
832 lp->curr_rx_cfg |= RX_DMA_ONLY;
834 printk("set_dma_cfg(): RX_DMA_ONLY\n");
836 lp->curr_rx_cfg |= AUTO_RX_DMA; /* not that we support it... */
838 printk("set_dma_cfg(): AUTO_RX_DMA\n");
844 dma_bufcfg(struct net_device *dev)
846 struct net_local *lp = netdev_priv(dev);
848 return (lp->isa_config & ANY_ISA_DMA)? RX_DMA_ENBL : 0;
854 dma_busctl(struct net_device *dev)
857 struct net_local *lp = netdev_priv(dev);
859 if (lp->isa_config & ANY_ISA_DMA)
860 retval |= RESET_RX_DMA; /* Reset the DMA pointer */
861 if (lp->isa_config & DMA_BURST)
862 retval |= DMA_BURST_MODE; /* Does ISA config specify DMA burst ? */
863 if (lp->dmasize == 64)
864 retval |= RX_DMA_SIZE_64K; /* did they ask for 64K? */
865 retval |= MEMORY_ON; /* we need memory enabled to use DMA. */
871 dma_rx(struct net_device *dev)
873 struct net_local *lp = netdev_priv(dev);
876 unsigned char *bp = lp->rx_dma_ptr;
878 status = bp[0] + (bp[1]<<8);
879 length = bp[2] + (bp[3]<<8);
882 printk( "%s: receiving DMA packet at %lx, status %x, length %x\n",
883 dev->name, (unsigned long)bp, status, length);
885 if ((status & RX_OK) == 0) {
886 count_rx_errors(status, lp);
887 goto skip_this_frame;
890 /* Malloc up new buffer. */
891 skb = dev_alloc_skb(length + 2);
893 if (net_debug) /* I don't think we want to do this to a stressed system */
894 printk("%s: Memory squeeze, dropping packet.\n", dev->name);
895 lp->stats.rx_dropped++;
897 /* AKPM: advance bp to the next frame */
899 bp += (length + 3) & ~3;
900 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
904 skb_reserve(skb, 2); /* longword align L3 header */
907 if (bp + length > lp->end_dma_buff) {
908 int semi_cnt = lp->end_dma_buff - bp;
909 memcpy(skb_put(skb,semi_cnt), bp, semi_cnt);
910 memcpy(skb_put(skb,length - semi_cnt), lp->dma_buff,
913 memcpy(skb_put(skb,length), bp, length);
915 bp += (length + 3) & ~3;
916 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
920 printk( "%s: received %d byte DMA packet of type %x\n",
922 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
924 skb->protocol=eth_type_trans(skb,dev);
926 dev->last_rx = jiffies;
927 lp->stats.rx_packets++;
928 lp->stats.rx_bytes += length;
931 #endif /* ALLOW_DMA */
933 void __init reset_chip(struct net_device *dev)
935 #ifndef CONFIG_ARCH_IXDP2X01
936 struct net_local *lp = netdev_priv(dev);
937 int ioaddr = dev->base_addr;
939 int reset_start_time;
941 writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
946 #ifndef CONFIG_ARCH_IXDP2X01
947 if (lp->chip_type != CS8900) {
948 /* Hardware problem requires PNP registers to be reconfigured after a reset */
949 outw(PP_CS8920_ISAINT, ioaddr + ADD_PORT);
950 outb(dev->irq, ioaddr + DATA_PORT);
951 outb(0, ioaddr + DATA_PORT + 1);
953 outw(PP_CS8920_ISAMemB, ioaddr + ADD_PORT);
954 outb((dev->mem_start >> 16) & 0xff, ioaddr + DATA_PORT);
955 outb((dev->mem_start >> 8) & 0xff, ioaddr + DATA_PORT + 1);
957 #endif /* IXDP2x01 */
959 /* Wait until the chip is reset */
960 reset_start_time = jiffies;
961 while( (readreg(dev, PP_SelfST) & INIT_DONE) == 0 && jiffies - reset_start_time < 2)
967 control_dc_dc(struct net_device *dev, int on_not_off)
969 struct net_local *lp = netdev_priv(dev);
970 unsigned int selfcontrol;
971 int timenow = jiffies;
972 /* control the DC to DC convertor in the SelfControl register.
973 Note: This is hooked up to a general purpose pin, might not
974 always be a DC to DC convertor. */
976 selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */
977 if (((lp->adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off)
980 selfcontrol &= ~HCB1;
981 writereg(dev, PP_SelfCTL, selfcontrol);
983 /* Wait for the DC/DC converter to power up - 500ms */
984 while (jiffies - timenow < HZ)
988 #define DETECTED_NONE 0
989 #define DETECTED_RJ45H 1
990 #define DETECTED_RJ45F 2
991 #define DETECTED_AUI 3
992 #define DETECTED_BNC 4
995 detect_tp(struct net_device *dev)
997 struct net_local *lp = netdev_priv(dev);
998 int timenow = jiffies;
1001 if (net_debug > 1) printk("%s: Attempting TP\n", dev->name);
1003 /* If connected to another full duplex capable 10-Base-T card the link pulses
1004 seem to be lost when the auto detect bit in the LineCTL is set.
1005 To overcome this the auto detect bit will be cleared whilst testing the
1006 10-Base-T interface. This would not be necessary for the sparrow chip but
1007 is simpler to do it anyway. */
1008 writereg(dev, PP_LineCTL, lp->linectl &~ AUI_ONLY);
1009 control_dc_dc(dev, 0);
1011 /* Delay for the hardware to work out if the TP cable is present - 150ms */
1012 for (timenow = jiffies; jiffies - timenow < 15; )
1014 if ((readreg(dev, PP_LineST) & LINK_OK) == 0)
1015 return DETECTED_NONE;
1017 if (lp->chip_type == CS8900) {
1018 switch (lp->force & 0xf0) {
1021 printk("%s: cs8900 doesn't autonegotiate\n",dev->name);
1022 return DETECTED_NONE;
1024 /* CS8900 doesn't support AUTO, change to HALF*/
1026 lp->force &= ~FORCE_AUTO;
1027 lp->force |= FORCE_HALF;
1032 writereg(dev, PP_TestCTL, readreg(dev, PP_TestCTL) | FDX_8900);
1035 fdx = readreg(dev, PP_TestCTL) & FDX_8900;
1037 switch (lp->force & 0xf0) {
1039 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1042 lp->auto_neg_cnf = 0;
1045 lp->auto_neg_cnf = RE_NEG_NOW | ALLOW_FDX;
1049 writereg(dev, PP_AutoNegCTL, lp->auto_neg_cnf & AUTO_NEG_MASK);
1051 if ((lp->auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) {
1052 printk(KERN_INFO "%s: negotiating duplex...\n",dev->name);
1053 while (readreg(dev, PP_AutoNegST) & AUTO_NEG_BUSY) {
1054 if (jiffies - timenow > 4000) {
1055 printk(KERN_ERR "**** Full / half duplex auto-negotiation timed out ****\n");
1060 fdx = readreg(dev, PP_AutoNegST) & FDX_ACTIVE;
1063 return DETECTED_RJ45F;
1065 return DETECTED_RJ45H;
1068 /* send a test packet - return true if carrier bits are ok */
1070 send_test_pkt(struct net_device *dev)
1072 char test_packet[] = { 0,0,0,0,0,0, 0,0,0,0,0,0,
1073 0, 46, /* A 46 in network order */
1074 0, 0, /* DSAP=0 & SSAP=0 fields */
1075 0xf3, 0 /* Control (Test Req + P bit set) */ };
1076 long timenow = jiffies;
1078 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_TX_ON);
1080 memcpy(test_packet, dev->dev_addr, ETH_ALEN);
1081 memcpy(test_packet+ETH_ALEN, dev->dev_addr, ETH_ALEN);
1083 writeword(dev, TX_CMD_PORT, TX_AFTER_ALL);
1084 writeword(dev, TX_LEN_PORT, ETH_ZLEN);
1086 /* Test to see if the chip has allocated memory for the packet */
1087 while (jiffies - timenow < 5)
1088 if (readreg(dev, PP_BusST) & READY_FOR_TX_NOW)
1090 if (jiffies - timenow >= 5)
1091 return 0; /* this shouldn't happen */
1093 /* Write the contents of the packet */
1094 outsw(dev->base_addr + TX_FRAME_PORT,test_packet,(ETH_ZLEN+1) >>1);
1096 if (net_debug > 1) printk("Sending test packet ");
1097 /* wait a couple of jiffies for packet to be received */
1098 for (timenow = jiffies; jiffies - timenow < 3; )
1100 if ((readreg(dev, PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) {
1101 if (net_debug > 1) printk("succeeded\n");
1104 if (net_debug > 1) printk("failed\n");
1110 detect_aui(struct net_device *dev)
1112 struct net_local *lp = netdev_priv(dev);
1114 if (net_debug > 1) printk("%s: Attempting AUI\n", dev->name);
1115 control_dc_dc(dev, 0);
1117 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1119 if (send_test_pkt(dev))
1120 return DETECTED_AUI;
1122 return DETECTED_NONE;
1126 detect_bnc(struct net_device *dev)
1128 struct net_local *lp = netdev_priv(dev);
1130 if (net_debug > 1) printk("%s: Attempting BNC\n", dev->name);
1131 control_dc_dc(dev, 1);
1133 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1135 if (send_test_pkt(dev))
1136 return DETECTED_BNC;
1138 return DETECTED_NONE;
1143 write_irq(struct net_device *dev, int chip_type, int irq)
1147 if (chip_type == CS8900) {
1148 /* Search the mapping table for the corresponding IRQ pin. */
1149 for (i = 0; i != sizeof(cs8900_irq_map)/sizeof(cs8900_irq_map[0]); i++)
1150 if (cs8900_irq_map[i] == irq)
1153 if (i == sizeof(cs8900_irq_map)/sizeof(cs8900_irq_map[0]))
1155 writereg(dev, PP_CS8900_ISAINT, i);
1157 writereg(dev, PP_CS8920_ISAINT, irq);
1161 /* Open/initialize the board. This is called (in the current kernel)
1162 sometime after booting when the 'ifconfig' program is run.
1164 This routine should set everything up anew at each open, even
1165 registers that "should" only need to be set once at boot, so that
1166 there is non-reboot way to recover if something goes wrong.
1169 /* AKPM: do we need to do any locking here? */
1172 net_open(struct net_device *dev)
1174 struct net_local *lp = netdev_priv(dev);
1179 #if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX0105) /* uses irq#1, so this won't work */
1181 /* Allow interrupts to be generated by the chip */
1182 /* Cirrus' release had this: */
1184 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1186 /* And 2.3.47 had this: */
1187 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1189 for (i = 2; i < CS8920_NO_INTS; i++) {
1190 if ((1 << i) & lp->irq_map) {
1191 if (request_irq(i, net_interrupt, 0, dev->name, dev) == 0) {
1193 write_irq(dev, lp->chip_type, i);
1194 /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
1200 if (i >= CS8920_NO_INTS) {
1201 writereg(dev, PP_BusCTL, 0); /* disable interrupts. */
1202 printk(KERN_ERR "cs89x0: can't get an interrupt\n");
1210 #if !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX0105)
1211 if (((1 << dev->irq) & lp->irq_map) == 0) {
1212 printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1213 dev->name, dev->irq, lp->irq_map);
1218 /* FIXME: Cirrus' release had this: */
1219 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1220 /* And 2.3.47 had this: */
1222 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1224 write_irq(dev, lp->chip_type, dev->irq);
1225 ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
1228 printk(KERN_DEBUG "cs89x0: request_irq(%d) failed\n", dev->irq);
1235 if (lp->isa_config & ANY_ISA_DMA) {
1236 unsigned long flags;
1237 lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
1238 get_order(lp->dmasize * 1024));
1240 if (!lp->dma_buff) {
1241 printk(KERN_ERR "%s: cannot get %dK memory for DMA\n", dev->name, lp->dmasize);
1244 if (net_debug > 1) {
1245 printk( "%s: dma %lx %lx\n",
1247 (unsigned long)lp->dma_buff,
1248 (unsigned long)isa_virt_to_bus(lp->dma_buff));
1250 if ((unsigned long) lp->dma_buff >= MAX_DMA_ADDRESS ||
1251 !dma_page_eq(lp->dma_buff, lp->dma_buff+lp->dmasize*1024-1)) {
1252 printk(KERN_ERR "%s: not usable as DMA buffer\n", dev->name);
1255 memset(lp->dma_buff, 0, lp->dmasize * 1024); /* Why? */
1256 if (request_dma(dev->dma, dev->name)) {
1257 printk(KERN_ERR "%s: cannot get dma channel %d\n", dev->name, dev->dma);
1260 write_dma(dev, lp->chip_type, dev->dma);
1261 lp->rx_dma_ptr = lp->dma_buff;
1262 lp->end_dma_buff = lp->dma_buff + lp->dmasize*1024;
1263 spin_lock_irqsave(&lp->lock, flags);
1264 disable_dma(dev->dma);
1265 clear_dma_ff(dev->dma);
1266 set_dma_mode(dev->dma, 0x14); /* auto_init as well */
1267 set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));
1268 set_dma_count(dev->dma, lp->dmasize*1024);
1269 enable_dma(dev->dma);
1270 spin_unlock_irqrestore(&lp->lock, flags);
1273 #endif /* ALLOW_DMA */
1275 /* set the Ethernet address */
1276 for (i=0; i < ETH_ALEN/2; i++)
1277 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1279 /* while we're testing the interface, leave interrupts disabled */
1280 writereg(dev, PP_BusCTL, MEMORY_ON);
1282 /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
1283 if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) && (lp->adapter_cnf & A_CNF_LOW_RX_SQUELCH))
1284 lp->linectl = LOW_RX_SQUELCH;
1288 /* check to make sure that they have the "right" hardware available */
1289 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1290 case A_CNF_MEDIA_10B_T: result = lp->adapter_cnf & A_CNF_10B_T; break;
1291 case A_CNF_MEDIA_AUI: result = lp->adapter_cnf & A_CNF_AUI; break;
1292 case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
1293 default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
1295 #ifdef CONFIG_ARCH_PNX0105
1296 result = A_CNF_10B_T;
1299 printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name);
1302 release_dma_buff(lp);
1304 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));
1305 free_irq(dev->irq, dev);
1310 /* set the hardware to the configured choice */
1311 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1312 case A_CNF_MEDIA_10B_T:
1313 result = detect_tp(dev);
1314 if (result==DETECTED_NONE) {
1315 printk(KERN_WARNING "%s: 10Base-T (RJ-45) has no cable\n", dev->name);
1316 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1317 result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */
1320 case A_CNF_MEDIA_AUI:
1321 result = detect_aui(dev);
1322 if (result==DETECTED_NONE) {
1323 printk(KERN_WARNING "%s: 10Base-5 (AUI) has no cable\n", dev->name);
1324 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1325 result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */
1328 case A_CNF_MEDIA_10B_2:
1329 result = detect_bnc(dev);
1330 if (result==DETECTED_NONE) {
1331 printk(KERN_WARNING "%s: 10Base-2 (BNC) has no cable\n", dev->name);
1332 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1333 result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */
1336 case A_CNF_MEDIA_AUTO:
1337 writereg(dev, PP_LineCTL, lp->linectl | AUTO_AUI_10BASET);
1338 if (lp->adapter_cnf & A_CNF_10B_T)
1339 if ((result = detect_tp(dev)) != DETECTED_NONE)
1341 if (lp->adapter_cnf & A_CNF_AUI)
1342 if ((result = detect_aui(dev)) != DETECTED_NONE)
1344 if (lp->adapter_cnf & A_CNF_10B_2)
1345 if ((result = detect_bnc(dev)) != DETECTED_NONE)
1347 printk(KERN_ERR "%s: no media detected\n", dev->name);
1352 printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name);
1354 case DETECTED_RJ45H:
1355 printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);
1357 case DETECTED_RJ45F:
1358 printk(KERN_INFO "%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);
1361 printk(KERN_INFO "%s: using 10Base-5 (AUI)\n", dev->name);
1364 printk(KERN_INFO "%s: using 10Base-2 (BNC)\n", dev->name);
1368 /* Turn on both receive and transmit operations */
1369 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON);
1371 /* Receive only error free packets addressed to this card */
1373 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT);
1375 lp->curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL;
1377 if (lp->isa_config & STREAM_TRANSFER)
1378 lp->curr_rx_cfg |= RX_STREAM_ENBL;
1382 writereg(dev, PP_RxCFG, lp->curr_rx_cfg);
1384 writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL |
1385 TX_LATE_COL_ENBL | TX_JBR_ENBL | TX_ANY_COL_ENBL | TX_16_COL_ENBL);
1387 writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL |
1391 TX_COL_COUNT_OVRFLOW_ENBL | TX_UNDERRUN_ENBL);
1393 /* now that we've got our act together, enable everything */
1394 writereg(dev, PP_BusCTL, ENABLE_IRQ
1395 | (dev->mem_start?MEMORY_ON : 0) /* turn memory on */
1400 netif_start_queue(dev);
1402 printk("cs89x0: net_open() succeeded\n");
1408 static void net_timeout(struct net_device *dev)
1410 /* If we get here, some higher level has decided we are broken.
1411 There should really be a "kick me" function call instead. */
1412 if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name,
1413 tx_done(dev) ? "IRQ conflict ?" : "network cable problem");
1414 /* Try to restart the adaptor. */
1415 netif_wake_queue(dev);
1418 static int net_send_packet(struct sk_buff *skb, struct net_device *dev)
1420 struct net_local *lp = netdev_priv(dev);
1422 if (net_debug > 3) {
1423 printk("%s: sent %d byte packet of type %x\n",
1424 dev->name, skb->len,
1425 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1428 /* keep the upload from being interrupted, since we
1429 ask the chip to start transmitting before the
1430 whole packet has been completely uploaded. */
1432 spin_lock_irq(&lp->lock);
1433 netif_stop_queue(dev);
1435 /* initiate a transmit sequence */
1436 writeword(dev, TX_CMD_PORT, lp->send_cmd);
1437 writeword(dev, TX_LEN_PORT, skb->len);
1439 /* Test to see if the chip has allocated memory for the packet */
1440 if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) {
1442 * Gasp! It hasn't. But that shouldn't happen since
1443 * we're waiting for TxOk, so return 1 and requeue this packet.
1446 spin_unlock_irq(&lp->lock);
1447 if (net_debug) printk("cs89x0: Tx buffer not free!\n");
1450 /* Write the contents of the packet */
1451 outsw(dev->base_addr + TX_FRAME_PORT,skb->data,(skb->len+1) >>1);
1452 spin_unlock_irq(&lp->lock);
1453 lp->stats.tx_bytes += skb->len;
1454 dev->trans_start = jiffies;
1455 dev_kfree_skb (skb);
1458 * We DO NOT call netif_wake_queue() here.
1459 * We also DO NOT call netif_start_queue().
1461 * Either of these would cause another bottom half run through
1462 * net_send_packet() before this packet has fully gone out. That causes
1463 * us to hit the "Gasp!" above and the send is rescheduled. it runs like
1464 * a dog. We just return and wait for the Tx completion interrupt handler
1465 * to restart the netdevice layer
1471 /* The typical workload of the driver:
1472 Handle the network interface interrupts. */
1474 static irqreturn_t net_interrupt(int irq, void *dev_id, struct pt_regs * regs)
1476 struct net_device *dev = dev_id;
1477 struct net_local *lp;
1481 ioaddr = dev->base_addr;
1482 lp = netdev_priv(dev);
1484 /* we MUST read all the events out of the ISQ, otherwise we'll never
1485 get interrupted again. As a consequence, we can't have any limit
1486 on the number of times we loop in the interrupt handler. The
1487 hardware guarantees that eventually we'll run out of events. Of
1488 course, if you're on a slow machine, and packets are arriving
1489 faster than you can read them off, you're screwed. Hasta la
1491 while ((status = readword(dev, ISQ_PORT))) {
1492 if (net_debug > 4)printk("%s: event=%04x\n", dev->name, status);
1494 switch(status & ISQ_EVENT_MASK) {
1495 case ISQ_RECEIVER_EVENT:
1496 /* Got a packet(s). */
1499 case ISQ_TRANSMITTER_EVENT:
1500 lp->stats.tx_packets++;
1501 netif_wake_queue(dev); /* Inform upper layers. */
1502 if ((status & ( TX_OK |
1506 TX_16_COL)) != TX_OK) {
1507 if ((status & TX_OK) == 0) lp->stats.tx_errors++;
1508 if (status & TX_LOST_CRS) lp->stats.tx_carrier_errors++;
1509 if (status & TX_SQE_ERROR) lp->stats.tx_heartbeat_errors++;
1510 if (status & TX_LATE_COL) lp->stats.tx_window_errors++;
1511 if (status & TX_16_COL) lp->stats.tx_aborted_errors++;
1514 case ISQ_BUFFER_EVENT:
1515 if (status & READY_FOR_TX) {
1516 /* we tried to transmit a packet earlier,
1517 but inexplicably ran out of buffers.
1518 That shouldn't happen since we only ever
1519 load one packet. Shrug. Do the right
1521 netif_wake_queue(dev); /* Inform upper layers. */
1523 if (status & TX_UNDERRUN) {
1524 if (net_debug > 0) printk("%s: transmit underrun\n", dev->name);
1525 lp->send_underrun++;
1526 if (lp->send_underrun == 3) lp->send_cmd = TX_AFTER_381;
1527 else if (lp->send_underrun == 6) lp->send_cmd = TX_AFTER_ALL;
1528 /* transmit cycle is done, although
1529 frame wasn't transmitted - this
1530 avoids having to wait for the upper
1531 layers to timeout on us, in the
1532 event of a tx underrun */
1533 netif_wake_queue(dev); /* Inform upper layers. */
1536 if (lp->use_dma && (status & RX_DMA)) {
1537 int count = readreg(dev, PP_DmaFrameCnt);
1540 printk("%s: receiving %d DMA frames\n", dev->name, count);
1541 if (net_debug > 2 && count >1)
1542 printk("%s: receiving %d DMA frames\n", dev->name, count);
1545 count = readreg(dev, PP_DmaFrameCnt);
1546 if (net_debug > 2 && count > 0)
1547 printk("%s: continuing with %d DMA frames\n", dev->name, count);
1552 case ISQ_RX_MISS_EVENT:
1553 lp->stats.rx_missed_errors += (status >>6);
1555 case ISQ_TX_COL_EVENT:
1556 lp->stats.collisions += (status >>6);
1560 return IRQ_RETVAL(handled);
1564 count_rx_errors(int status, struct net_local *lp)
1566 lp->stats.rx_errors++;
1567 if (status & RX_RUNT) lp->stats.rx_length_errors++;
1568 if (status & RX_EXTRA_DATA) lp->stats.rx_length_errors++;
1569 if (status & RX_CRC_ERROR) if (!(status & (RX_EXTRA_DATA|RX_RUNT)))
1571 lp->stats.rx_crc_errors++;
1572 if (status & RX_DRIBBLE) lp->stats.rx_frame_errors++;
1576 /* We have a good packet(s), get it/them out of the buffers. */
1578 net_rx(struct net_device *dev)
1580 struct net_local *lp = netdev_priv(dev);
1581 struct sk_buff *skb;
1584 int ioaddr = dev->base_addr;
1585 status = inw(ioaddr + RX_FRAME_PORT);
1586 length = inw(ioaddr + RX_FRAME_PORT);
1588 if ((status & RX_OK) == 0) {
1589 count_rx_errors(status, lp);
1593 /* Malloc up new buffer. */
1594 skb = dev_alloc_skb(length + 2);
1596 #if 0 /* Again, this seems a cruel thing to do */
1597 printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name);
1599 lp->stats.rx_dropped++;
1602 skb_reserve(skb, 2); /* longword align L3 header */
1605 insw(ioaddr + RX_FRAME_PORT, skb_put(skb, length), length >> 1);
1607 skb->data[length-1] = inw(ioaddr + RX_FRAME_PORT);
1609 if (net_debug > 3) {
1610 printk( "%s: received %d byte packet of type %x\n",
1612 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1615 skb->protocol=eth_type_trans(skb,dev);
1617 dev->last_rx = jiffies;
1618 lp->stats.rx_packets++;
1619 lp->stats.rx_bytes += length;
1623 static void release_dma_buff(struct net_local *lp)
1626 free_pages((unsigned long)(lp->dma_buff), get_order(lp->dmasize * 1024));
1627 lp->dma_buff = NULL;
1632 /* The inverse routine to net_open(). */
1634 net_close(struct net_device *dev)
1637 struct net_local *lp = netdev_priv(dev);
1640 netif_stop_queue(dev);
1642 writereg(dev, PP_RxCFG, 0);
1643 writereg(dev, PP_TxCFG, 0);
1644 writereg(dev, PP_BufCFG, 0);
1645 writereg(dev, PP_BusCTL, 0);
1647 free_irq(dev->irq, dev);
1650 if (lp->use_dma && lp->dma) {
1652 release_dma_buff(lp);
1656 /* Update the statistics here. */
1660 /* Get the current statistics. This may be called with the card open or
1662 static struct net_device_stats *
1663 net_get_stats(struct net_device *dev)
1665 struct net_local *lp = netdev_priv(dev);
1666 unsigned long flags;
1668 spin_lock_irqsave(&lp->lock, flags);
1669 /* Update the statistics from the device registers. */
1670 lp->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);
1671 lp->stats.collisions += (readreg(dev, PP_TxCol) >> 6);
1672 spin_unlock_irqrestore(&lp->lock, flags);
1677 static void set_multicast_list(struct net_device *dev)
1679 struct net_local *lp = netdev_priv(dev);
1680 unsigned long flags;
1682 spin_lock_irqsave(&lp->lock, flags);
1683 if(dev->flags&IFF_PROMISC)
1685 lp->rx_mode = RX_ALL_ACCEPT;
1687 else if((dev->flags&IFF_ALLMULTI)||dev->mc_list)
1689 /* The multicast-accept list is initialized to accept-all, and we
1690 rely on higher-level filtering for now. */
1691 lp->rx_mode = RX_MULTCAST_ACCEPT;
1696 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode);
1698 /* in promiscuous mode, we accept errored packets, so we have to enable interrupts on them also */
1699 writereg(dev, PP_RxCFG, lp->curr_rx_cfg |
1700 (lp->rx_mode == RX_ALL_ACCEPT? (RX_CRC_ERROR_ENBL|RX_RUNT_ENBL|RX_EXTRA_DATA_ENBL) : 0));
1701 spin_unlock_irqrestore(&lp->lock, flags);
1705 static int set_mac_address(struct net_device *dev, void *p)
1708 struct sockaddr *addr = p;
1711 if (netif_running(dev))
1714 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
1717 printk("%s: Setting MAC address to ", dev->name);
1718 for (i = 0; i < dev->addr_len; i++)
1719 printk(" %2.2x", dev->dev_addr[i]);
1722 /* set the Ethernet address */
1723 for (i=0; i < ETH_ALEN/2; i++)
1724 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1731 static struct net_device *dev_cs89x0;
1734 * Support the 'debug' module parm even if we're compiled for non-debug to
1735 * avoid breaking someone's startup scripts
1741 static char media[8];
1742 static int duplex=-1;
1744 static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
1746 static int dmasize=16; /* or 64 */
1748 module_param(io, int, 0);
1749 module_param(irq, int, 0);
1750 module_param(debug, int, 0);
1751 module_param_string(media, media, sizeof(media), 0);
1752 module_param(duplex, int, 0);
1753 module_param(dma , int, 0);
1754 module_param(dmasize , int, 0);
1755 module_param(use_dma , int, 0);
1756 MODULE_PARM_DESC(io, "cs89x0 I/O base address");
1757 MODULE_PARM_DESC(irq, "cs89x0 IRQ number");
1759 MODULE_PARM_DESC(debug, "cs89x0 debug level (0-6)");
1761 MODULE_PARM_DESC(debug, "(ignored)");
1763 MODULE_PARM_DESC(media, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1764 /* No other value than -1 for duplex seems to be currently interpreted */
1765 MODULE_PARM_DESC(duplex, "(ignored)");
1767 MODULE_PARM_DESC(dma , "cs89x0 ISA DMA channel; ignored if use_dma=0");
1768 MODULE_PARM_DESC(dmasize , "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1769 MODULE_PARM_DESC(use_dma , "cs89x0 using DMA (0-1)");
1771 MODULE_PARM_DESC(dma , "(ignored)");
1772 MODULE_PARM_DESC(dmasize , "(ignored)");
1773 MODULE_PARM_DESC(use_dma , "(ignored)");
1776 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton <andrewm@uow.edu.au>");
1777 MODULE_LICENSE("GPL");
1781 * media=t - specify media type
1785 * duplex=0 - specify forced half/full/autonegotiate duplex
1786 * debug=# - debug level
1789 * Default Chip Configuration:
1790 * DMA Burst = enabled
1791 * IOCHRDY Enabled = enabled
1793 * CS8900 defaults to half-duplex if not specified on command-line
1794 * CS8920 defaults to autoneg if not specified on command-line
1795 * Use reset defaults for other config parameters
1798 * media type specified is supported (circuitry is present)
1799 * if memory address is > 1MB, then required mem decode hw is present
1800 * if 10B-2, then agent other than driver will enable DC/DC converter
1801 (hw or software util)
1809 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1810 struct net_local *lp;
1822 dev->base_addr = io;
1823 lp = netdev_priv(dev);
1827 lp->use_dma = use_dma;
1829 lp->dmasize = dmasize;
1833 spin_lock_init(&lp->lock);
1835 /* boy, they'd better get these right */
1836 if (!strcmp(media, "rj45"))
1837 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1838 else if (!strcmp(media, "aui"))
1839 lp->adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI;
1840 else if (!strcmp(media, "bnc"))
1841 lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2;
1843 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1846 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1849 printk(KERN_ERR "cs89x0.c: Module autoprobing not allowed.\n");
1850 printk(KERN_ERR "cs89x0.c: Append io=0xNNN\n");
1853 } else if (io <= 0x1ff) {
1859 if (use_dma && dmasize != 16 && dmasize != 64) {
1860 printk(KERN_ERR "cs89x0.c: dma size must be either 16K or 64K, not %dK\n", dmasize);
1865 ret = cs89x0_probe1(dev, io, 1);
1877 cleanup_module(void)
1879 unregister_netdev(dev_cs89x0);
1880 outw(PP_ChipID, dev_cs89x0->base_addr + ADD_PORT);
1881 release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
1882 free_netdev(dev_cs89x0);
1888 * version-control: t
1889 * kept-new-versions: 5