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 : Kernel 2.3.48
40 : Handle kmalloc() failures
41 : Other resource allocation fixes
43 : Integrate Russ Nelson's ALLOW_DMA functionality back in.
44 : If ALLOW_DMA is true, make DMA runtime selectable
45 : Folded in changes from Cirrus (Melody Lee
46 : <klee@crystal.cirrus.com>)
47 : Don't call netif_wake_queue() in net_send_packet()
48 : Fixed an out-of-mem bug in dma_rx()
49 : Updated Documentation/networking/cs89x0.txt
51 Andrew Morton : Kernel 2.3.99-pre1
52 : Use skb_reserve to longword align IP header (two places)
53 : Remove a delay loop from dma_rx()
54 : Replace '100' with HZ
55 : Clean up a couple of skb API abuses
56 : Added 'cs89x0_dma=N' kernel boot option
57 : Correctly initialise lp->lock in non-module compile
59 Andrew Morton : Kernel 2.3.99-pre4-1
60 : MOD_INC/DEC race fix (see
61 : http://www.uwsg.indiana.edu/hypermail/linux/kernel/0003.3/1532.html)
63 Andrew Morton : Kernel 2.4.0-test7-pre2
64 : Enhanced EEPROM support to cover more devices,
65 : abstracted IRQ mapping to support CONFIG_ARCH_CLPS7500 arch
66 : (Jason Gunthorpe <jgg@ualberta.ca>)
68 Andrew Morton : Kernel 2.4.0-test11-pre4
69 : Use dev->name in request_*() (Andrey Panin)
70 : Fix an error-path memleak in init_module()
71 : Preserve return value from request_irq()
72 : Fix type of `media' module parm (Keith Owens)
73 : Use SET_MODULE_OWNER()
74 : Tidied up strange request_irq() abuse in net_open().
76 Andrew Morton : Kernel 2.4.3-pre1
77 : Request correct number of pages for DMA (Hugh Dickens)
78 : Select PP_ChipID _after_ unregister_netdev in cleanup_module()
79 : because unregister_netdev() calls get_stats.
80 : Make `version[]' __initdata
81 : Uninlined the read/write reg/word functions.
83 Oskar Schirmer : oskar@scara.com
84 : HiCO.SH4 (superh) support added (irq#1, cs89x0_media=)
86 Deepak Saxena : dsaxena@plexity.net
87 : Intel IXDP2x01 (XScale ixp2x00 NPU) platform support
89 Dmitry Pervushin : dpervushin@ru.mvista.com
90 : PNX010X platform support
92 Deepak Saxena : dsaxena@plexity.net
93 : Intel IXDP2351 platform support
95 Dmitry Pervushin : dpervushin@ru.mvista.com
96 : PNX010X platform support
98 Domenico Andreoli : cavokz@gmail.com
99 : QQ2440 platform support
105 * Set this to zero to disable DMA code
107 * Note that even if DMA is turned off we still support the 'dma' and 'use_dma'
108 * module options so we don't break any startup scripts.
110 #ifndef CONFIG_ISA_DMA_API
117 * Set this to zero to remove all the debug statements via
118 * dead code elimination
125 Crynwr packet driver epktisa.
127 Crystal Semiconductor data sheets.
131 #include <linux/module.h>
132 #include <linux/printk.h>
133 #include <linux/errno.h>
134 #include <linux/netdevice.h>
135 #include <linux/etherdevice.h>
136 #include <linux/platform_device.h>
137 #include <linux/kernel.h>
138 #include <linux/types.h>
139 #include <linux/fcntl.h>
140 #include <linux/interrupt.h>
141 #include <linux/ioport.h>
142 #include <linux/in.h>
143 #include <linux/skbuff.h>
144 #include <linux/spinlock.h>
145 #include <linux/string.h>
146 #include <linux/init.h>
147 #include <linux/bitops.h>
148 #include <linux/delay.h>
149 #include <linux/gfp.h>
151 #include <asm/system.h>
154 #include <linux/atomic.h>
161 static char version[] __initdata =
162 "cs89x0.c: v2.4.3-pre1 Russell Nelson <nelson@crynwr.com>, Andrew Morton\n";
164 #define DRV_NAME "cs89x0"
166 /* First, a few definitions that the brave might change.
167 A zero-terminated list of I/O addresses to be probed. Some special flags..
168 Addr & 1 = Read back the address port, look for signature and reset
169 the page window before probing
170 Addr & 3 = Reset the page window and probe
171 The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
172 but it is possible that a Cirrus board could be plugged into the ISA
174 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
175 them to system IRQ numbers. This mapping is card specific and is set to
176 the configuration of the Cirrus Eval board for this chip. */
177 #if defined(CONFIG_MACH_IXDP2351)
178 #define CS89x0_NONISA_IRQ
179 static unsigned int netcard_portlist[] __used __initdata = {IXDP2351_VIRT_CS8900_BASE, 0};
180 static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0};
181 #elif defined(CONFIG_ARCH_IXDP2X01)
182 #define CS89x0_NONISA_IRQ
183 static unsigned int netcard_portlist[] __used __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
184 static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};
185 #elif defined(CONFIG_MACH_QQ2440)
186 #define CS89x0_NONISA_IRQ
187 #include <mach/qq2440.h>
188 static unsigned int netcard_portlist[] __used __initdata = { QQ2440_CS8900_VIRT_BASE + 0x300, 0 };
189 static unsigned int cs8900_irq_map[] = { QQ2440_CS8900_IRQ, 0, 0, 0 };
190 #elif defined(CONFIG_MACH_MX31ADS)
191 #define CS89x0_NONISA_IRQ
192 #include <mach/board-mx31ads.h>
193 static unsigned int netcard_portlist[] __used __initdata = {
194 PBC_BASE_ADDRESS + PBC_CS8900A_IOBASE + 0x300, 0
196 static unsigned cs8900_irq_map[] = {EXPIO_INT_ENET_INT, 0, 0, 0};
198 #ifndef CONFIG_CS89x0_PLATFORM
199 static unsigned int netcard_portlist[] __used __initdata =
200 { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
201 static unsigned int cs8900_irq_map[] = {10,11,12,5};
206 static unsigned int net_debug = DEBUGGING;
208 #define net_debug 0 /* gcc will remove all the debug code for us */
211 /* The number of low I/O ports used by the ethercard. */
212 #define NETCARD_IO_EXTENT 16
214 /* we allow the user to override various values normally set in the EEPROM */
215 #define FORCE_RJ45 0x0001 /* pick one of these three */
216 #define FORCE_AUI 0x0002
217 #define FORCE_BNC 0x0004
219 #define FORCE_AUTO 0x0010 /* pick one of these three */
220 #define FORCE_HALF 0x0020
221 #define FORCE_FULL 0x0030
223 /* Information that need to be kept for each board. */
225 int chip_type; /* one of: CS8900, CS8920, CS8920M */
226 char chip_revision; /* revision letter of the chip ('A'...) */
227 int send_cmd; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
228 int auto_neg_cnf; /* auto-negotiation word from EEPROM */
229 int adapter_cnf; /* adapter configuration from EEPROM */
230 int isa_config; /* ISA configuration from EEPROM */
231 int irq_map; /* IRQ map from EEPROM */
232 int rx_mode; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
233 int curr_rx_cfg; /* a copy of PP_RxCFG */
234 int linectl; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
235 int send_underrun; /* keep track of how many underruns in a row we get */
236 int force; /* force various values; see FORCE* above. */
239 int use_dma; /* Flag: we're using dma */
240 int dma; /* DMA channel */
241 int dmasize; /* 16 or 64 */
242 unsigned char *dma_buff; /* points to the beginning of the buffer */
243 unsigned char *end_dma_buff; /* points to the end of the buffer */
244 unsigned char *rx_dma_ptr; /* points to the next packet */
246 #ifdef CONFIG_CS89x0_PLATFORM
247 void __iomem *virt_addr;/* Virtual address for accessing the CS89x0. */
248 unsigned long phys_addr;/* Physical address for accessing the CS89x0. */
249 unsigned long size; /* Length of CS89x0 memory region. */
253 /* Index to functions, as function prototypes. */
255 static int cs89x0_probe1(struct net_device *dev, unsigned long ioaddr, int modular);
256 static int net_open(struct net_device *dev);
257 static netdev_tx_t net_send_packet(struct sk_buff *skb, struct net_device *dev);
258 static irqreturn_t net_interrupt(int irq, void *dev_id);
259 static void set_multicast_list(struct net_device *dev);
260 static void net_timeout(struct net_device *dev);
261 static void net_rx(struct net_device *dev);
262 static int net_close(struct net_device *dev);
263 static struct net_device_stats *net_get_stats(struct net_device *dev);
264 static void reset_chip(struct net_device *dev);
265 static int get_eeprom_data(struct net_device *dev, int off, int len, int *buffer);
266 static int get_eeprom_cksum(int off, int len, int *buffer);
267 static int set_mac_address(struct net_device *dev, void *addr);
268 static void count_rx_errors(int status, struct net_device *dev);
269 #ifdef CONFIG_NET_POLL_CONTROLLER
270 static void net_poll_controller(struct net_device *dev);
273 static void get_dma_channel(struct net_device *dev);
274 static void release_dma_buff(struct net_local *lp);
277 /* Example routines you must write ;->. */
278 #define tx_done(dev) 1
281 * Permit 'cs89x0_dma=N' in the kernel boot environment
283 #if !defined(MODULE) && (ALLOW_DMA != 0)
284 static int g_cs89x0_dma;
286 static int __init dma_fn(char *str)
288 g_cs89x0_dma = simple_strtol(str,NULL,0);
292 __setup("cs89x0_dma=", dma_fn);
293 #endif /* !defined(MODULE) && (ALLOW_DMA != 0) */
296 static int g_cs89x0_media__force;
298 static int __init media_fn(char *str)
300 if (!strcmp(str, "rj45")) g_cs89x0_media__force = FORCE_RJ45;
301 else if (!strcmp(str, "aui")) g_cs89x0_media__force = FORCE_AUI;
302 else if (!strcmp(str, "bnc")) g_cs89x0_media__force = FORCE_BNC;
306 __setup("cs89x0_media=", media_fn);
309 #ifndef CONFIG_CS89x0_PLATFORM
310 /* Check for a network adaptor of this type, and return '0' iff one exists.
311 If dev->base_addr == 0, probe all likely locations.
312 If dev->base_addr == 1, always return failure.
313 If dev->base_addr == 2, allocate space for the device and return success
314 (detachable devices only).
318 struct net_device * __init cs89x0_probe(int unit)
320 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
327 return ERR_PTR(-ENODEV);
329 sprintf(dev->name, "eth%d", unit);
330 netdev_boot_setup_check(dev);
335 printk("cs89x0:cs89x0_probe(0x%x)\n", io);
337 if (io > 0x1ff) { /* Check a single specified location. */
338 err = cs89x0_probe1(dev, io, 0);
339 } else if (io != 0) { /* Don't probe at all. */
342 for (port = netcard_portlist; *port; port++) {
343 if (cs89x0_probe1(dev, *port, 0) == 0)
355 printk(KERN_WARNING "cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
361 #if defined(CONFIG_MACH_IXDP2351)
363 readword(unsigned long base_addr, int portno)
365 return __raw_readw(base_addr + (portno << 1));
369 writeword(unsigned long base_addr, int portno, u16 value)
371 __raw_writew(value, base_addr + (portno << 1));
373 #elif defined(CONFIG_ARCH_IXDP2X01)
375 readword(unsigned long base_addr, int portno)
377 return __raw_readl(base_addr + (portno << 1));
381 writeword(unsigned long base_addr, int portno, u16 value)
383 __raw_writel(value, base_addr + (portno << 1));
387 readword(unsigned long base_addr, int portno)
389 return inw(base_addr + portno);
393 writeword(unsigned long base_addr, int portno, u16 value)
395 outw(value, base_addr + portno);
400 readwords(unsigned long base_addr, int portno, void *buf, int length)
402 u8 *buf8 = (u8 *)buf;
407 tmp16 = readword(base_addr, portno);
409 *buf8++ = (u8)(tmp16 >> 8);
414 writewords(unsigned long base_addr, int portno, void *buf, int length)
416 u8 *buf8 = (u8 *)buf;
422 tmp16 |= (*buf8++) << 8;
423 writeword(base_addr, portno, tmp16);
428 readreg(struct net_device *dev, u16 regno)
430 writeword(dev->base_addr, ADD_PORT, regno);
431 return readword(dev->base_addr, DATA_PORT);
435 writereg(struct net_device *dev, u16 regno, u16 value)
437 writeword(dev->base_addr, ADD_PORT, regno);
438 writeword(dev->base_addr, DATA_PORT, value);
442 wait_eeprom_ready(struct net_device *dev)
444 int timeout = jiffies;
445 /* check to see if the EEPROM is ready, a timeout is used -
446 just in case EEPROM is ready when SI_BUSY in the
447 PP_SelfST is clear */
448 while(readreg(dev, PP_SelfST) & SI_BUSY)
449 if (jiffies - timeout >= 40)
455 get_eeprom_data(struct net_device *dev, int off, int len, int *buffer)
459 if (net_debug > 3) printk("EEPROM data from %x for %x:\n",off,len);
460 for (i = 0; i < len; i++) {
461 if (wait_eeprom_ready(dev) < 0) return -1;
462 /* Now send the EEPROM read command and EEPROM location to read */
463 writereg(dev, PP_EECMD, (off + i) | EEPROM_READ_CMD);
464 if (wait_eeprom_ready(dev) < 0) return -1;
465 buffer[i] = readreg(dev, PP_EEData);
466 if (net_debug > 3) printk("%04x ", buffer[i]);
468 if (net_debug > 3) printk("\n");
473 get_eeprom_cksum(int off, int len, int *buffer)
478 for (i = 0; i < len; i++)
486 #ifdef CONFIG_NET_POLL_CONTROLLER
488 * Polling receive - used by netconsole and other diagnostic tools
489 * to allow network i/o with interrupts disabled.
491 static void net_poll_controller(struct net_device *dev)
493 disable_irq(dev->irq);
494 net_interrupt(dev->irq, dev);
495 enable_irq(dev->irq);
499 static const struct net_device_ops net_ops = {
500 .ndo_open = net_open,
501 .ndo_stop = net_close,
502 .ndo_tx_timeout = net_timeout,
503 .ndo_start_xmit = net_send_packet,
504 .ndo_get_stats = net_get_stats,
505 .ndo_set_rx_mode = set_multicast_list,
506 .ndo_set_mac_address = set_mac_address,
507 #ifdef CONFIG_NET_POLL_CONTROLLER
508 .ndo_poll_controller = net_poll_controller,
510 .ndo_change_mtu = eth_change_mtu,
511 .ndo_validate_addr = eth_validate_addr,
514 /* This is the real probe routine. Linux has a history of friendly device
515 probes on the ISA bus. A good device probes avoids doing writes, and
516 verifies that the correct device exists and functions.
521 cs89x0_probe1(struct net_device *dev, unsigned long ioaddr, int modular)
523 struct net_local *lp = netdev_priv(dev);
524 static unsigned version_printed;
527 unsigned rev_type = 0;
528 int eeprom_buff[CHKSUM_LEN];
531 /* Initialize the device structure. */
533 memset(lp, 0, sizeof(*lp));
534 spin_lock_init(&lp->lock);
539 lp->dma = g_cs89x0_dma;
540 lp->dmasize = 16; /* Could make this an option... */
543 lp->force = g_cs89x0_media__force;
546 #if defined(CONFIG_MACH_QQ2440)
547 lp->force |= FORCE_RJ45 | FORCE_FULL;
551 /* Grab the region so we can find another board if autoIRQ fails. */
552 /* WTF is going on here? */
553 if (!request_region(ioaddr & ~3, NETCARD_IO_EXTENT, DRV_NAME)) {
554 printk(KERN_ERR "%s: request_region(0x%lx, 0x%x) failed\n",
555 DRV_NAME, ioaddr, NETCARD_IO_EXTENT);
560 /* if they give us an odd I/O address, then do ONE write to
561 the address port, to get it back to address zero, where we
562 expect to find the EISA signature word. An IO with a base of 0x3
563 will skip the test for the ADD_PORT. */
566 printk(KERN_INFO "%s: odd ioaddr 0x%lx\n", dev->name, ioaddr);
567 if ((ioaddr & 2) != 2)
568 if ((readword(ioaddr & ~3, ADD_PORT) & ADD_MASK) != ADD_SIG) {
569 printk(KERN_ERR "%s: bad signature 0x%x\n",
570 dev->name, readword(ioaddr & ~3, ADD_PORT));
577 printk(KERN_DEBUG "PP_addr at %lx[%x]: 0x%x\n",
578 ioaddr, ADD_PORT, readword(ioaddr, ADD_PORT));
579 writeword(ioaddr, ADD_PORT, PP_ChipID);
581 tmp = readword(ioaddr, DATA_PORT);
582 if (tmp != CHIP_EISA_ID_SIG) {
583 printk(KERN_DEBUG "%s: incorrect signature at %lx[%x]: 0x%x!="
584 CHIP_EISA_ID_SIG_STR "\n",
585 dev->name, ioaddr, DATA_PORT, tmp);
590 /* Fill in the 'dev' fields. */
591 dev->base_addr = ioaddr;
593 /* get the chip type */
594 rev_type = readreg(dev, PRODUCT_ID_ADD);
595 lp->chip_type = rev_type &~ REVISON_BITS;
596 lp->chip_revision = ((rev_type & REVISON_BITS) >> 8) + 'A';
598 /* Check the chip type and revision in order to set the correct send command
599 CS8920 revision C and CS8900 revision F can use the faster send. */
600 lp->send_cmd = TX_AFTER_381;
601 if (lp->chip_type == CS8900 && lp->chip_revision >= 'F')
602 lp->send_cmd = TX_NOW;
603 if (lp->chip_type != CS8900 && lp->chip_revision >= 'C')
604 lp->send_cmd = TX_NOW;
606 if (net_debug && version_printed++ == 0)
609 printk(KERN_INFO "%s: cs89%c0%s rev %c found at %#3lx ",
611 lp->chip_type==CS8900?'0':'2',
612 lp->chip_type==CS8920M?"M":"",
618 /* Here we read the current configuration of the chip. If there
619 is no Extended EEPROM then the idea is to not disturb the chip
620 configuration, it should have been correctly setup by automatic
621 EEPROM read on reset. So, if the chip says it read the EEPROM
622 the driver will always do *something* instead of complain that
626 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) ==
627 (EEPROM_OK|EEPROM_PRESENT)) {
629 for (i=0; i < ETH_ALEN/2; i++) {
631 Addr = readreg(dev, PP_IA+i*2);
632 dev->dev_addr[i*2] = Addr & 0xFF;
633 dev->dev_addr[i*2+1] = Addr >> 8;
636 /* Load the Adapter Configuration.
637 Note: Barring any more specific information from some
638 other source (ie EEPROM+Schematics), we would not know
639 how to operate a 10Base2 interface on the AUI port.
640 However, since we do read the status of HCB1 and use
641 settings that always result in calls to control_dc_dc(dev,0)
642 a BNC interface should work if the enable pin
643 (dc/dc converter) is on HCB1. It will be called AUI
647 i = readreg(dev, PP_LineCTL);
648 /* Preserve the setting of the HCB1 pin. */
649 if ((i & (HCB1 | HCB1_ENBL)) == (HCB1 | HCB1_ENBL))
650 lp->adapter_cnf |= A_CNF_DC_DC_POLARITY;
651 /* Save the sqelch bit */
652 if ((i & LOW_RX_SQUELCH) == LOW_RX_SQUELCH)
653 lp->adapter_cnf |= A_CNF_EXTND_10B_2 | A_CNF_LOW_RX_SQUELCH;
654 /* Check if the card is in 10Base-t only mode */
655 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == 0)
656 lp->adapter_cnf |= A_CNF_10B_T | A_CNF_MEDIA_10B_T;
657 /* Check if the card is in AUI only mode */
658 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUI_ONLY)
659 lp->adapter_cnf |= A_CNF_AUI | A_CNF_MEDIA_AUI;
660 /* Check if the card is in Auto mode. */
661 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET)
662 lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T |
663 A_CNF_MEDIA_AUI | A_CNF_MEDIA_10B_T | A_CNF_MEDIA_AUTO;
666 printk(KERN_INFO "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
667 dev->name, i, lp->adapter_cnf);
669 /* IRQ. Other chips already probe, see below. */
670 if (lp->chip_type == CS8900)
671 lp->isa_config = readreg(dev, PP_CS8900_ISAINT) & INT_NO_MASK;
673 printk( "[Cirrus EEPROM] ");
678 /* First check to see if an EEPROM is attached. */
680 if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0)
681 printk(KERN_WARNING "cs89x0: No EEPROM, relying on command line....\n");
682 else if (get_eeprom_data(dev, START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
683 printk(KERN_WARNING "\ncs89x0: EEPROM read failed, relying on command line.\n");
684 } else if (get_eeprom_cksum(START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
685 /* Check if the chip was able to read its own configuration starting
687 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) !=
688 (EEPROM_OK|EEPROM_PRESENT))
689 printk(KERN_WARNING "cs89x0: Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
692 /* This reads an extended EEPROM that is not documented
693 in the CS8900 datasheet. */
695 /* get transmission control word but keep the autonegotiation bits */
696 if (!lp->auto_neg_cnf) lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2];
697 /* Store adapter configuration */
698 if (!lp->adapter_cnf) lp->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET/2];
699 /* Store ISA configuration */
700 lp->isa_config = eeprom_buff[ISA_CNF_OFFSET/2];
701 dev->mem_start = eeprom_buff[PACKET_PAGE_OFFSET/2] << 8;
703 /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
704 /* store the initial memory base address */
705 for (i = 0; i < ETH_ALEN/2; i++) {
706 dev->dev_addr[i*2] = eeprom_buff[i];
707 dev->dev_addr[i*2+1] = eeprom_buff[i] >> 8;
710 printk(KERN_DEBUG "%s: new adapter_cnf: 0x%x\n",
711 dev->name, lp->adapter_cnf);
714 /* allow them to force multiple transceivers. If they force multiple, autosense */
717 if (lp->force & FORCE_RJ45) {lp->adapter_cnf |= A_CNF_10B_T; count++; }
718 if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_AUI; count++; }
719 if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_10B_2; count++; }
720 if (count > 1) {lp->adapter_cnf |= A_CNF_MEDIA_AUTO; }
721 else if (lp->force & FORCE_RJ45){lp->adapter_cnf |= A_CNF_MEDIA_10B_T; }
722 else if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_MEDIA_AUI; }
723 else if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_MEDIA_10B_2; }
727 printk(KERN_DEBUG "%s: after force 0x%x, adapter_cnf=0x%x\n",
728 dev->name, lp->force, lp->adapter_cnf);
730 /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
732 /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
734 /* FIXME: we don't set the Ethernet address on the command line. Use
735 ifconfig IFACE hw ether AABBCCDDEEFF */
737 printk(KERN_INFO "cs89x0 media %s%s%s",
738 (lp->adapter_cnf & A_CNF_10B_T)?"RJ-45,":"",
739 (lp->adapter_cnf & A_CNF_AUI)?"AUI,":"",
740 (lp->adapter_cnf & A_CNF_10B_2)?"BNC,":"");
742 lp->irq_map = 0xffff;
744 /* If this is a CS8900 then no pnp soft */
745 if (lp->chip_type != CS8900 &&
746 /* Check if the ISA IRQ has been set */
747 (i = readreg(dev, PP_CS8920_ISAINT) & 0xff,
748 (i != 0 && i < CS8920_NO_INTS))) {
752 i = lp->isa_config & INT_NO_MASK;
753 #ifndef CONFIG_CS89x0_PLATFORM
754 if (lp->chip_type == CS8900) {
755 #ifdef CS89x0_NONISA_IRQ
756 i = cs8900_irq_map[0];
758 /* Translate the IRQ using the IRQ mapping table. */
759 if (i >= ARRAY_SIZE(cs8900_irq_map))
760 printk("\ncs89x0: invalid ISA interrupt number %d\n", i);
762 i = cs8900_irq_map[i];
764 lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */
766 int irq_map_buff[IRQ_MAP_LEN/2];
768 if (get_eeprom_data(dev, IRQ_MAP_EEPROM_DATA,
770 irq_map_buff) >= 0) {
771 if ((irq_map_buff[0] & 0xff) == PNP_IRQ_FRMT)
772 lp->irq_map = (irq_map_buff[0]>>8) | (irq_map_buff[1] << 8);
781 printk(" IRQ %d", dev->irq);
785 get_dma_channel(dev);
786 printk(", DMA %d", dev->dma);
791 printk(", programmed I/O");
794 /* print the ethernet address. */
795 printk(", MAC %pM", dev->dev_addr);
797 dev->netdev_ops = &net_ops;
798 dev->watchdog_timeo = HZ;
802 printk("cs89x0_probe1() successful\n");
804 retval = register_netdev(dev);
809 writeword(dev->base_addr, ADD_PORT, PP_ChipID);
811 release_region(ioaddr & ~3, NETCARD_IO_EXTENT);
817 /*********************************
818 * This page contains DMA routines
819 **********************************/
823 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1)>>17 == (long)(ptr2)>>17)
826 get_dma_channel(struct net_device *dev)
828 struct net_local *lp = netdev_priv(dev);
832 lp->isa_config |= ISA_RxDMA;
834 if ((lp->isa_config & ANY_ISA_DMA) == 0)
836 dev->dma = lp->isa_config & DMA_NO_MASK;
837 if (lp->chip_type == CS8900)
839 if (dev->dma < 5 || dev->dma > 7) {
840 lp->isa_config &= ~ANY_ISA_DMA;
847 write_dma(struct net_device *dev, int chip_type, int dma)
849 struct net_local *lp = netdev_priv(dev);
850 if ((lp->isa_config & ANY_ISA_DMA) == 0)
852 if (chip_type == CS8900) {
853 writereg(dev, PP_CS8900_ISADMA, dma-5);
855 writereg(dev, PP_CS8920_ISADMA, dma);
860 set_dma_cfg(struct net_device *dev)
862 struct net_local *lp = netdev_priv(dev);
865 if ((lp->isa_config & ANY_ISA_DMA) == 0) {
867 printk("set_dma_cfg(): no DMA\n");
870 if (lp->isa_config & ISA_RxDMA) {
871 lp->curr_rx_cfg |= RX_DMA_ONLY;
873 printk("set_dma_cfg(): RX_DMA_ONLY\n");
875 lp->curr_rx_cfg |= AUTO_RX_DMA; /* not that we support it... */
877 printk("set_dma_cfg(): AUTO_RX_DMA\n");
883 dma_bufcfg(struct net_device *dev)
885 struct net_local *lp = netdev_priv(dev);
887 return (lp->isa_config & ANY_ISA_DMA)? RX_DMA_ENBL : 0;
893 dma_busctl(struct net_device *dev)
896 struct net_local *lp = netdev_priv(dev);
898 if (lp->isa_config & ANY_ISA_DMA)
899 retval |= RESET_RX_DMA; /* Reset the DMA pointer */
900 if (lp->isa_config & DMA_BURST)
901 retval |= DMA_BURST_MODE; /* Does ISA config specify DMA burst ? */
902 if (lp->dmasize == 64)
903 retval |= RX_DMA_SIZE_64K; /* did they ask for 64K? */
904 retval |= MEMORY_ON; /* we need memory enabled to use DMA. */
910 dma_rx(struct net_device *dev)
912 struct net_local *lp = netdev_priv(dev);
915 unsigned char *bp = lp->rx_dma_ptr;
917 status = bp[0] + (bp[1]<<8);
918 length = bp[2] + (bp[3]<<8);
921 printk( "%s: receiving DMA packet at %lx, status %x, length %x\n",
922 dev->name, (unsigned long)bp, status, length);
924 if ((status & RX_OK) == 0) {
925 count_rx_errors(status, dev);
926 goto skip_this_frame;
929 /* Malloc up new buffer. */
930 skb = dev_alloc_skb(length + 2);
932 if (net_debug) /* I don't think we want to do this to a stressed system */
933 printk("%s: Memory squeeze, dropping packet.\n", dev->name);
934 dev->stats.rx_dropped++;
936 /* AKPM: advance bp to the next frame */
938 bp += (length + 3) & ~3;
939 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
943 skb_reserve(skb, 2); /* longword align L3 header */
945 if (bp + length > lp->end_dma_buff) {
946 int semi_cnt = lp->end_dma_buff - bp;
947 memcpy(skb_put(skb,semi_cnt), bp, semi_cnt);
948 memcpy(skb_put(skb,length - semi_cnt), lp->dma_buff,
951 memcpy(skb_put(skb,length), bp, length);
953 bp += (length + 3) & ~3;
954 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
958 printk( "%s: received %d byte DMA packet of type %x\n",
960 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
962 skb->protocol=eth_type_trans(skb,dev);
964 dev->stats.rx_packets++;
965 dev->stats.rx_bytes += length;
968 #endif /* ALLOW_DMA */
970 static void __init reset_chip(struct net_device *dev)
972 #if !defined(CONFIG_MACH_MX31ADS)
973 #if !defined(CS89x0_NONISA_IRQ)
974 struct net_local *lp = netdev_priv(dev);
975 int ioaddr = dev->base_addr;
976 #endif /* CS89x0_NONISA_IRQ */
977 int reset_start_time;
979 writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
984 #if !defined(CS89x0_NONISA_IRQ)
985 if (lp->chip_type != CS8900) {
986 /* Hardware problem requires PNP registers to be reconfigured after a reset */
987 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAINT);
988 outb(dev->irq, ioaddr + DATA_PORT);
989 outb(0, ioaddr + DATA_PORT + 1);
991 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAMemB);
992 outb((dev->mem_start >> 16) & 0xff, ioaddr + DATA_PORT);
993 outb((dev->mem_start >> 8) & 0xff, ioaddr + DATA_PORT + 1);
995 #endif /* CS89x0_NONISA_IRQ */
997 /* Wait until the chip is reset */
998 reset_start_time = jiffies;
999 while( (readreg(dev, PP_SelfST) & INIT_DONE) == 0 && jiffies - reset_start_time < 2)
1001 #endif /* !CONFIG_MACH_MX31ADS */
1006 control_dc_dc(struct net_device *dev, int on_not_off)
1008 struct net_local *lp = netdev_priv(dev);
1009 unsigned int selfcontrol;
1010 int timenow = jiffies;
1011 /* control the DC to DC convertor in the SelfControl register.
1012 Note: This is hooked up to a general purpose pin, might not
1013 always be a DC to DC convertor. */
1015 selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */
1016 if (((lp->adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off)
1017 selfcontrol |= HCB1;
1019 selfcontrol &= ~HCB1;
1020 writereg(dev, PP_SelfCTL, selfcontrol);
1022 /* Wait for the DC/DC converter to power up - 500ms */
1023 while (jiffies - timenow < HZ)
1027 #define DETECTED_NONE 0
1028 #define DETECTED_RJ45H 1
1029 #define DETECTED_RJ45F 2
1030 #define DETECTED_AUI 3
1031 #define DETECTED_BNC 4
1034 detect_tp(struct net_device *dev)
1036 struct net_local *lp = netdev_priv(dev);
1037 int timenow = jiffies;
1040 if (net_debug > 1) printk("%s: Attempting TP\n", dev->name);
1042 /* If connected to another full duplex capable 10-Base-T card the link pulses
1043 seem to be lost when the auto detect bit in the LineCTL is set.
1044 To overcome this the auto detect bit will be cleared whilst testing the
1045 10-Base-T interface. This would not be necessary for the sparrow chip but
1046 is simpler to do it anyway. */
1047 writereg(dev, PP_LineCTL, lp->linectl &~ AUI_ONLY);
1048 control_dc_dc(dev, 0);
1050 /* Delay for the hardware to work out if the TP cable is present - 150ms */
1051 for (timenow = jiffies; jiffies - timenow < 15; )
1053 if ((readreg(dev, PP_LineST) & LINK_OK) == 0)
1054 return DETECTED_NONE;
1056 if (lp->chip_type == CS8900) {
1057 switch (lp->force & 0xf0) {
1060 printk("%s: cs8900 doesn't autonegotiate\n",dev->name);
1061 return DETECTED_NONE;
1063 /* CS8900 doesn't support AUTO, change to HALF*/
1065 lp->force &= ~FORCE_AUTO;
1066 lp->force |= FORCE_HALF;
1071 writereg(dev, PP_TestCTL, readreg(dev, PP_TestCTL) | FDX_8900);
1074 fdx = readreg(dev, PP_TestCTL) & FDX_8900;
1076 switch (lp->force & 0xf0) {
1078 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1081 lp->auto_neg_cnf = 0;
1084 lp->auto_neg_cnf = RE_NEG_NOW | ALLOW_FDX;
1088 writereg(dev, PP_AutoNegCTL, lp->auto_neg_cnf & AUTO_NEG_MASK);
1090 if ((lp->auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) {
1091 printk(KERN_INFO "%s: negotiating duplex...\n",dev->name);
1092 while (readreg(dev, PP_AutoNegST) & AUTO_NEG_BUSY) {
1093 if (jiffies - timenow > 4000) {
1094 printk(KERN_ERR "**** Full / half duplex auto-negotiation timed out ****\n");
1099 fdx = readreg(dev, PP_AutoNegST) & FDX_ACTIVE;
1102 return DETECTED_RJ45F;
1104 return DETECTED_RJ45H;
1107 /* send a test packet - return true if carrier bits are ok */
1109 send_test_pkt(struct net_device *dev)
1111 char test_packet[] = { 0,0,0,0,0,0, 0,0,0,0,0,0,
1112 0, 46, /* A 46 in network order */
1113 0, 0, /* DSAP=0 & SSAP=0 fields */
1114 0xf3, 0 /* Control (Test Req + P bit set) */ };
1115 long timenow = jiffies;
1117 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_TX_ON);
1119 memcpy(test_packet, dev->dev_addr, ETH_ALEN);
1120 memcpy(test_packet+ETH_ALEN, dev->dev_addr, ETH_ALEN);
1122 writeword(dev->base_addr, TX_CMD_PORT, TX_AFTER_ALL);
1123 writeword(dev->base_addr, TX_LEN_PORT, ETH_ZLEN);
1125 /* Test to see if the chip has allocated memory for the packet */
1126 while (jiffies - timenow < 5)
1127 if (readreg(dev, PP_BusST) & READY_FOR_TX_NOW)
1129 if (jiffies - timenow >= 5)
1130 return 0; /* this shouldn't happen */
1132 /* Write the contents of the packet */
1133 writewords(dev->base_addr, TX_FRAME_PORT,test_packet,(ETH_ZLEN+1) >>1);
1135 if (net_debug > 1) printk("Sending test packet ");
1136 /* wait a couple of jiffies for packet to be received */
1137 for (timenow = jiffies; jiffies - timenow < 3; )
1139 if ((readreg(dev, PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) {
1140 if (net_debug > 1) printk("succeeded\n");
1143 if (net_debug > 1) printk("failed\n");
1149 detect_aui(struct net_device *dev)
1151 struct net_local *lp = netdev_priv(dev);
1153 if (net_debug > 1) printk("%s: Attempting AUI\n", dev->name);
1154 control_dc_dc(dev, 0);
1156 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1158 if (send_test_pkt(dev))
1159 return DETECTED_AUI;
1161 return DETECTED_NONE;
1165 detect_bnc(struct net_device *dev)
1167 struct net_local *lp = netdev_priv(dev);
1169 if (net_debug > 1) printk("%s: Attempting BNC\n", dev->name);
1170 control_dc_dc(dev, 1);
1172 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1174 if (send_test_pkt(dev))
1175 return DETECTED_BNC;
1177 return DETECTED_NONE;
1182 write_irq(struct net_device *dev, int chip_type, int irq)
1186 if (chip_type == CS8900) {
1187 #ifndef CONFIG_CS89x0_PLATFORM
1188 /* Search the mapping table for the corresponding IRQ pin. */
1189 for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
1190 if (cs8900_irq_map[i] == irq)
1193 if (i == ARRAY_SIZE(cs8900_irq_map))
1196 /* INTRQ0 pin is used for interrupt generation. */
1199 writereg(dev, PP_CS8900_ISAINT, i);
1201 writereg(dev, PP_CS8920_ISAINT, irq);
1205 /* Open/initialize the board. This is called (in the current kernel)
1206 sometime after booting when the 'ifconfig' program is run.
1208 This routine should set everything up anew at each open, even
1209 registers that "should" only need to be set once at boot, so that
1210 there is non-reboot way to recover if something goes wrong.
1213 /* AKPM: do we need to do any locking here? */
1216 net_open(struct net_device *dev)
1218 struct net_local *lp = netdev_priv(dev);
1224 /* Allow interrupts to be generated by the chip */
1225 /* Cirrus' release had this: */
1227 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1229 /* And 2.3.47 had this: */
1230 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1232 for (i = 2; i < CS8920_NO_INTS; i++) {
1233 if ((1 << i) & lp->irq_map) {
1234 if (request_irq(i, net_interrupt, 0, dev->name, dev) == 0) {
1236 write_irq(dev, lp->chip_type, i);
1237 /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
1243 if (i >= CS8920_NO_INTS) {
1244 writereg(dev, PP_BusCTL, 0); /* disable interrupts. */
1245 printk(KERN_ERR "cs89x0: can't get an interrupt\n");
1252 #if !defined(CS89x0_NONISA_IRQ) && !defined(CONFIG_CS89x0_PLATFORM)
1253 if (((1 << dev->irq) & lp->irq_map) == 0) {
1254 printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1255 dev->name, dev->irq, lp->irq_map);
1260 /* FIXME: Cirrus' release had this: */
1261 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1262 /* And 2.3.47 had this: */
1264 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1266 write_irq(dev, lp->chip_type, dev->irq);
1267 ret = request_irq(dev->irq, net_interrupt, 0, dev->name, dev);
1269 printk(KERN_ERR "cs89x0: request_irq(%d) failed\n", dev->irq);
1276 if (lp->isa_config & ANY_ISA_DMA) {
1277 unsigned long flags;
1278 lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
1279 get_order(lp->dmasize * 1024));
1281 if (!lp->dma_buff) {
1282 printk(KERN_ERR "%s: cannot get %dK memory for DMA\n", dev->name, lp->dmasize);
1285 if (net_debug > 1) {
1286 printk( "%s: dma %lx %lx\n",
1288 (unsigned long)lp->dma_buff,
1289 (unsigned long)isa_virt_to_bus(lp->dma_buff));
1291 if ((unsigned long) lp->dma_buff >= MAX_DMA_ADDRESS ||
1292 !dma_page_eq(lp->dma_buff, lp->dma_buff+lp->dmasize*1024-1)) {
1293 printk(KERN_ERR "%s: not usable as DMA buffer\n", dev->name);
1296 memset(lp->dma_buff, 0, lp->dmasize * 1024); /* Why? */
1297 if (request_dma(dev->dma, dev->name)) {
1298 printk(KERN_ERR "%s: cannot get dma channel %d\n", dev->name, dev->dma);
1301 write_dma(dev, lp->chip_type, dev->dma);
1302 lp->rx_dma_ptr = lp->dma_buff;
1303 lp->end_dma_buff = lp->dma_buff + lp->dmasize*1024;
1304 spin_lock_irqsave(&lp->lock, flags);
1305 disable_dma(dev->dma);
1306 clear_dma_ff(dev->dma);
1307 set_dma_mode(dev->dma, DMA_RX_MODE); /* auto_init as well */
1308 set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));
1309 set_dma_count(dev->dma, lp->dmasize*1024);
1310 enable_dma(dev->dma);
1311 spin_unlock_irqrestore(&lp->lock, flags);
1314 #endif /* ALLOW_DMA */
1316 /* set the Ethernet address */
1317 for (i=0; i < ETH_ALEN/2; i++)
1318 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1320 /* while we're testing the interface, leave interrupts disabled */
1321 writereg(dev, PP_BusCTL, MEMORY_ON);
1323 /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
1324 if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) && (lp->adapter_cnf & A_CNF_LOW_RX_SQUELCH))
1325 lp->linectl = LOW_RX_SQUELCH;
1329 /* check to make sure that they have the "right" hardware available */
1330 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1331 case A_CNF_MEDIA_10B_T: result = lp->adapter_cnf & A_CNF_10B_T; break;
1332 case A_CNF_MEDIA_AUI: result = lp->adapter_cnf & A_CNF_AUI; break;
1333 case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
1334 default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
1337 printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name);
1342 release_dma_buff(lp);
1344 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));
1345 free_irq(dev->irq, dev);
1350 /* set the hardware to the configured choice */
1351 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1352 case A_CNF_MEDIA_10B_T:
1353 result = detect_tp(dev);
1354 if (result==DETECTED_NONE) {
1355 printk(KERN_WARNING "%s: 10Base-T (RJ-45) has no cable\n", dev->name);
1356 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1357 result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */
1360 case A_CNF_MEDIA_AUI:
1361 result = detect_aui(dev);
1362 if (result==DETECTED_NONE) {
1363 printk(KERN_WARNING "%s: 10Base-5 (AUI) has no cable\n", dev->name);
1364 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1365 result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */
1368 case A_CNF_MEDIA_10B_2:
1369 result = detect_bnc(dev);
1370 if (result==DETECTED_NONE) {
1371 printk(KERN_WARNING "%s: 10Base-2 (BNC) has no cable\n", dev->name);
1372 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1373 result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */
1376 case A_CNF_MEDIA_AUTO:
1377 writereg(dev, PP_LineCTL, lp->linectl | AUTO_AUI_10BASET);
1378 if (lp->adapter_cnf & A_CNF_10B_T)
1379 if ((result = detect_tp(dev)) != DETECTED_NONE)
1381 if (lp->adapter_cnf & A_CNF_AUI)
1382 if ((result = detect_aui(dev)) != DETECTED_NONE)
1384 if (lp->adapter_cnf & A_CNF_10B_2)
1385 if ((result = detect_bnc(dev)) != DETECTED_NONE)
1387 printk(KERN_ERR "%s: no media detected\n", dev->name);
1392 printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name);
1394 case DETECTED_RJ45H:
1395 printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);
1397 case DETECTED_RJ45F:
1398 printk(KERN_INFO "%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);
1401 printk(KERN_INFO "%s: using 10Base-5 (AUI)\n", dev->name);
1404 printk(KERN_INFO "%s: using 10Base-2 (BNC)\n", dev->name);
1408 /* Turn on both receive and transmit operations */
1409 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON);
1411 /* Receive only error free packets addressed to this card */
1413 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT);
1415 lp->curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL;
1417 if (lp->isa_config & STREAM_TRANSFER)
1418 lp->curr_rx_cfg |= RX_STREAM_ENBL;
1422 writereg(dev, PP_RxCFG, lp->curr_rx_cfg);
1424 writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL |
1425 TX_LATE_COL_ENBL | TX_JBR_ENBL | TX_ANY_COL_ENBL | TX_16_COL_ENBL);
1427 writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL |
1431 TX_COL_COUNT_OVRFLOW_ENBL | TX_UNDERRUN_ENBL);
1433 /* now that we've got our act together, enable everything */
1434 writereg(dev, PP_BusCTL, ENABLE_IRQ
1435 | (dev->mem_start?MEMORY_ON : 0) /* turn memory on */
1440 netif_start_queue(dev);
1442 printk("cs89x0: net_open() succeeded\n");
1448 static void net_timeout(struct net_device *dev)
1450 /* If we get here, some higher level has decided we are broken.
1451 There should really be a "kick me" function call instead. */
1452 if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name,
1453 tx_done(dev) ? "IRQ conflict ?" : "network cable problem");
1454 /* Try to restart the adaptor. */
1455 netif_wake_queue(dev);
1458 static netdev_tx_t net_send_packet(struct sk_buff *skb,struct net_device *dev)
1460 struct net_local *lp = netdev_priv(dev);
1461 unsigned long flags;
1463 if (net_debug > 3) {
1464 printk("%s: sent %d byte packet of type %x\n",
1465 dev->name, skb->len,
1466 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1469 /* keep the upload from being interrupted, since we
1470 ask the chip to start transmitting before the
1471 whole packet has been completely uploaded. */
1473 spin_lock_irqsave(&lp->lock, flags);
1474 netif_stop_queue(dev);
1476 /* initiate a transmit sequence */
1477 writeword(dev->base_addr, TX_CMD_PORT, lp->send_cmd);
1478 writeword(dev->base_addr, TX_LEN_PORT, skb->len);
1480 /* Test to see if the chip has allocated memory for the packet */
1481 if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) {
1483 * Gasp! It hasn't. But that shouldn't happen since
1484 * we're waiting for TxOk, so return 1 and requeue this packet.
1487 spin_unlock_irqrestore(&lp->lock, flags);
1488 if (net_debug) printk("cs89x0: Tx buffer not free!\n");
1489 return NETDEV_TX_BUSY;
1491 /* Write the contents of the packet */
1492 writewords(dev->base_addr, TX_FRAME_PORT,skb->data,(skb->len+1) >>1);
1493 spin_unlock_irqrestore(&lp->lock, flags);
1494 dev->stats.tx_bytes += skb->len;
1495 dev_kfree_skb (skb);
1498 * We DO NOT call netif_wake_queue() here.
1499 * We also DO NOT call netif_start_queue().
1501 * Either of these would cause another bottom half run through
1502 * net_send_packet() before this packet has fully gone out. That causes
1503 * us to hit the "Gasp!" above and the send is rescheduled. it runs like
1504 * a dog. We just return and wait for the Tx completion interrupt handler
1505 * to restart the netdevice layer
1508 return NETDEV_TX_OK;
1511 /* The typical workload of the driver:
1512 Handle the network interface interrupts. */
1514 static irqreturn_t net_interrupt(int irq, void *dev_id)
1516 struct net_device *dev = dev_id;
1517 struct net_local *lp;
1521 ioaddr = dev->base_addr;
1522 lp = netdev_priv(dev);
1524 /* we MUST read all the events out of the ISQ, otherwise we'll never
1525 get interrupted again. As a consequence, we can't have any limit
1526 on the number of times we loop in the interrupt handler. The
1527 hardware guarantees that eventually we'll run out of events. Of
1528 course, if you're on a slow machine, and packets are arriving
1529 faster than you can read them off, you're screwed. Hasta la
1531 while ((status = readword(dev->base_addr, ISQ_PORT))) {
1532 if (net_debug > 4)printk("%s: event=%04x\n", dev->name, status);
1534 switch(status & ISQ_EVENT_MASK) {
1535 case ISQ_RECEIVER_EVENT:
1536 /* Got a packet(s). */
1539 case ISQ_TRANSMITTER_EVENT:
1540 dev->stats.tx_packets++;
1541 netif_wake_queue(dev); /* Inform upper layers. */
1542 if ((status & ( TX_OK |
1546 TX_16_COL)) != TX_OK) {
1547 if ((status & TX_OK) == 0)
1548 dev->stats.tx_errors++;
1549 if (status & TX_LOST_CRS)
1550 dev->stats.tx_carrier_errors++;
1551 if (status & TX_SQE_ERROR)
1552 dev->stats.tx_heartbeat_errors++;
1553 if (status & TX_LATE_COL)
1554 dev->stats.tx_window_errors++;
1555 if (status & TX_16_COL)
1556 dev->stats.tx_aborted_errors++;
1559 case ISQ_BUFFER_EVENT:
1560 if (status & READY_FOR_TX) {
1561 /* we tried to transmit a packet earlier,
1562 but inexplicably ran out of buffers.
1563 That shouldn't happen since we only ever
1564 load one packet. Shrug. Do the right
1566 netif_wake_queue(dev); /* Inform upper layers. */
1568 if (status & TX_UNDERRUN) {
1569 if (net_debug > 0) printk("%s: transmit underrun\n", dev->name);
1570 lp->send_underrun++;
1571 if (lp->send_underrun == 3) lp->send_cmd = TX_AFTER_381;
1572 else if (lp->send_underrun == 6) lp->send_cmd = TX_AFTER_ALL;
1573 /* transmit cycle is done, although
1574 frame wasn't transmitted - this
1575 avoids having to wait for the upper
1576 layers to timeout on us, in the
1577 event of a tx underrun */
1578 netif_wake_queue(dev); /* Inform upper layers. */
1581 if (lp->use_dma && (status & RX_DMA)) {
1582 int count = readreg(dev, PP_DmaFrameCnt);
1585 printk("%s: receiving %d DMA frames\n", dev->name, count);
1586 if (net_debug > 2 && count >1)
1587 printk("%s: receiving %d DMA frames\n", dev->name, count);
1590 count = readreg(dev, PP_DmaFrameCnt);
1591 if (net_debug > 2 && count > 0)
1592 printk("%s: continuing with %d DMA frames\n", dev->name, count);
1597 case ISQ_RX_MISS_EVENT:
1598 dev->stats.rx_missed_errors += (status >> 6);
1600 case ISQ_TX_COL_EVENT:
1601 dev->stats.collisions += (status >> 6);
1605 return IRQ_RETVAL(handled);
1609 count_rx_errors(int status, struct net_device *dev)
1611 dev->stats.rx_errors++;
1612 if (status & RX_RUNT)
1613 dev->stats.rx_length_errors++;
1614 if (status & RX_EXTRA_DATA)
1615 dev->stats.rx_length_errors++;
1616 if ((status & RX_CRC_ERROR) && !(status & (RX_EXTRA_DATA|RX_RUNT)))
1618 dev->stats.rx_crc_errors++;
1619 if (status & RX_DRIBBLE)
1620 dev->stats.rx_frame_errors++;
1623 /* We have a good packet(s), get it/them out of the buffers. */
1625 net_rx(struct net_device *dev)
1627 struct sk_buff *skb;
1630 int ioaddr = dev->base_addr;
1631 status = readword(ioaddr, RX_FRAME_PORT);
1632 length = readword(ioaddr, RX_FRAME_PORT);
1634 if ((status & RX_OK) == 0) {
1635 count_rx_errors(status, dev);
1639 /* Malloc up new buffer. */
1640 skb = dev_alloc_skb(length + 2);
1642 #if 0 /* Again, this seems a cruel thing to do */
1643 printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name);
1645 dev->stats.rx_dropped++;
1648 skb_reserve(skb, 2); /* longword align L3 header */
1650 readwords(ioaddr, RX_FRAME_PORT, skb_put(skb, length), length >> 1);
1652 skb->data[length-1] = readword(ioaddr, RX_FRAME_PORT);
1654 if (net_debug > 3) {
1655 printk( "%s: received %d byte packet of type %x\n",
1657 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1660 skb->protocol=eth_type_trans(skb,dev);
1662 dev->stats.rx_packets++;
1663 dev->stats.rx_bytes += length;
1667 static void release_dma_buff(struct net_local *lp)
1670 free_pages((unsigned long)(lp->dma_buff), get_order(lp->dmasize * 1024));
1671 lp->dma_buff = NULL;
1676 /* The inverse routine to net_open(). */
1678 net_close(struct net_device *dev)
1681 struct net_local *lp = netdev_priv(dev);
1684 netif_stop_queue(dev);
1686 writereg(dev, PP_RxCFG, 0);
1687 writereg(dev, PP_TxCFG, 0);
1688 writereg(dev, PP_BufCFG, 0);
1689 writereg(dev, PP_BusCTL, 0);
1691 free_irq(dev->irq, dev);
1694 if (lp->use_dma && lp->dma) {
1696 release_dma_buff(lp);
1700 /* Update the statistics here. */
1704 /* Get the current statistics. This may be called with the card open or
1706 static struct net_device_stats *
1707 net_get_stats(struct net_device *dev)
1709 struct net_local *lp = netdev_priv(dev);
1710 unsigned long flags;
1712 spin_lock_irqsave(&lp->lock, flags);
1713 /* Update the statistics from the device registers. */
1714 dev->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);
1715 dev->stats.collisions += (readreg(dev, PP_TxCol) >> 6);
1716 spin_unlock_irqrestore(&lp->lock, flags);
1721 static void set_multicast_list(struct net_device *dev)
1723 struct net_local *lp = netdev_priv(dev);
1724 unsigned long flags;
1726 spin_lock_irqsave(&lp->lock, flags);
1727 if(dev->flags&IFF_PROMISC)
1729 lp->rx_mode = RX_ALL_ACCEPT;
1731 else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev))
1733 /* The multicast-accept list is initialized to accept-all, and we
1734 rely on higher-level filtering for now. */
1735 lp->rx_mode = RX_MULTCAST_ACCEPT;
1740 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode);
1742 /* in promiscuous mode, we accept errored packets, so we have to enable interrupts on them also */
1743 writereg(dev, PP_RxCFG, lp->curr_rx_cfg |
1744 (lp->rx_mode == RX_ALL_ACCEPT? (RX_CRC_ERROR_ENBL|RX_RUNT_ENBL|RX_EXTRA_DATA_ENBL) : 0));
1745 spin_unlock_irqrestore(&lp->lock, flags);
1749 static int set_mac_address(struct net_device *dev, void *p)
1752 struct sockaddr *addr = p;
1754 if (netif_running(dev))
1757 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
1760 printk("%s: Setting MAC address to %pM.\n",
1761 dev->name, dev->dev_addr);
1763 /* set the Ethernet address */
1764 for (i=0; i < ETH_ALEN/2; i++)
1765 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1770 #if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
1772 static struct net_device *dev_cs89x0;
1775 * Support the 'debug' module parm even if we're compiled for non-debug to
1776 * avoid breaking someone's startup scripts
1782 static char media[8];
1783 static int duplex=-1;
1785 static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
1787 static int dmasize=16; /* or 64 */
1789 module_param(io, int, 0);
1790 module_param(irq, int, 0);
1791 module_param(debug, int, 0);
1792 module_param_string(media, media, sizeof(media), 0);
1793 module_param(duplex, int, 0);
1794 module_param(dma , int, 0);
1795 module_param(dmasize , int, 0);
1796 module_param(use_dma , int, 0);
1797 MODULE_PARM_DESC(io, "cs89x0 I/O base address");
1798 MODULE_PARM_DESC(irq, "cs89x0 IRQ number");
1800 MODULE_PARM_DESC(debug, "cs89x0 debug level (0-6)");
1802 MODULE_PARM_DESC(debug, "(ignored)");
1804 MODULE_PARM_DESC(media, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1805 /* No other value than -1 for duplex seems to be currently interpreted */
1806 MODULE_PARM_DESC(duplex, "(ignored)");
1808 MODULE_PARM_DESC(dma , "cs89x0 ISA DMA channel; ignored if use_dma=0");
1809 MODULE_PARM_DESC(dmasize , "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1810 MODULE_PARM_DESC(use_dma , "cs89x0 using DMA (0-1)");
1812 MODULE_PARM_DESC(dma , "(ignored)");
1813 MODULE_PARM_DESC(dmasize , "(ignored)");
1814 MODULE_PARM_DESC(use_dma , "(ignored)");
1817 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton");
1818 MODULE_LICENSE("GPL");
1822 * media=t - specify media type
1826 * duplex=0 - specify forced half/full/autonegotiate duplex
1827 * debug=# - debug level
1830 * Default Chip Configuration:
1831 * DMA Burst = enabled
1832 * IOCHRDY Enabled = enabled
1834 * CS8900 defaults to half-duplex if not specified on command-line
1835 * CS8920 defaults to autoneg if not specified on command-line
1836 * Use reset defaults for other config parameters
1839 * media type specified is supported (circuitry is present)
1840 * if memory address is > 1MB, then required mem decode hw is present
1841 * if 10B-2, then agent other than driver will enable DC/DC converter
1842 (hw or software util)
1847 int __init init_module(void)
1849 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1850 struct net_local *lp;
1862 dev->base_addr = io;
1863 lp = netdev_priv(dev);
1867 lp->use_dma = use_dma;
1869 lp->dmasize = dmasize;
1873 spin_lock_init(&lp->lock);
1875 /* boy, they'd better get these right */
1876 if (!strcmp(media, "rj45"))
1877 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1878 else if (!strcmp(media, "aui"))
1879 lp->adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI;
1880 else if (!strcmp(media, "bnc"))
1881 lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2;
1883 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1886 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1889 printk(KERN_ERR "cs89x0.c: Module autoprobing not allowed.\n");
1890 printk(KERN_ERR "cs89x0.c: Append io=0xNNN\n");
1893 } else if (io <= 0x1ff) {
1899 if (use_dma && dmasize != 16 && dmasize != 64) {
1900 printk(KERN_ERR "cs89x0.c: dma size must be either 16K or 64K, not %dK\n", dmasize);
1905 ret = cs89x0_probe1(dev, io, 1);
1917 cleanup_module(void)
1919 unregister_netdev(dev_cs89x0);
1920 writeword(dev_cs89x0->base_addr, ADD_PORT, PP_ChipID);
1921 release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
1922 free_netdev(dev_cs89x0);
1924 #endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
1926 #ifdef CONFIG_CS89x0_PLATFORM
1927 static int __init cs89x0_platform_probe(struct platform_device *pdev)
1929 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1930 struct net_local *lp;
1931 struct resource *mem_res;
1937 lp = netdev_priv(dev);
1939 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1940 dev->irq = platform_get_irq(pdev, 0);
1941 if (mem_res == NULL || dev->irq <= 0) {
1942 dev_warn(&dev->dev, "memory/interrupt resource missing.\n");
1947 lp->phys_addr = mem_res->start;
1948 lp->size = resource_size(mem_res);
1949 if (!request_mem_region(lp->phys_addr, lp->size, DRV_NAME)) {
1950 dev_warn(&dev->dev, "request_mem_region() failed.\n");
1955 lp->virt_addr = ioremap(lp->phys_addr, lp->size);
1956 if (!lp->virt_addr) {
1957 dev_warn(&dev->dev, "ioremap() failed.\n");
1962 err = cs89x0_probe1(dev, (unsigned long)lp->virt_addr, 0);
1964 dev_warn(&dev->dev, "no cs8900 or cs8920 detected.\n");
1968 platform_set_drvdata(pdev, dev);
1972 iounmap(lp->virt_addr);
1974 release_mem_region(lp->phys_addr, lp->size);
1980 static int cs89x0_platform_remove(struct platform_device *pdev)
1982 struct net_device *dev = platform_get_drvdata(pdev);
1983 struct net_local *lp = netdev_priv(dev);
1985 unregister_netdev(dev);
1986 iounmap(lp->virt_addr);
1987 release_mem_region(lp->phys_addr, lp->size);
1992 static struct platform_driver cs89x0_driver = {
1995 .owner = THIS_MODULE,
1997 .remove = cs89x0_platform_remove,
2000 static int __init cs89x0_init(void)
2002 return platform_driver_probe(&cs89x0_driver, cs89x0_platform_probe);
2005 module_init(cs89x0_init);
2007 static void __exit cs89x0_cleanup(void)
2009 platform_driver_unregister(&cs89x0_driver);
2012 module_exit(cs89x0_cleanup);
2014 #endif /* CONFIG_CS89x0_PLATFORM */
2018 * version-control: t
2019 * kept-new-versions: 5