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};
186 #ifndef CONFIG_CS89x0_PLATFORM
187 static unsigned int netcard_portlist[] __used __initdata =
188 { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
189 static unsigned int cs8900_irq_map[] = {10,11,12,5};
194 static unsigned int net_debug = DEBUGGING;
196 #define net_debug 0 /* gcc will remove all the debug code for us */
199 /* The number of low I/O ports used by the ethercard. */
200 #define NETCARD_IO_EXTENT 16
202 /* we allow the user to override various values normally set in the EEPROM */
203 #define FORCE_RJ45 0x0001 /* pick one of these three */
204 #define FORCE_AUI 0x0002
205 #define FORCE_BNC 0x0004
207 #define FORCE_AUTO 0x0010 /* pick one of these three */
208 #define FORCE_HALF 0x0020
209 #define FORCE_FULL 0x0030
211 /* Information that need to be kept for each board. */
213 int chip_type; /* one of: CS8900, CS8920, CS8920M */
214 char chip_revision; /* revision letter of the chip ('A'...) */
215 int send_cmd; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
216 int auto_neg_cnf; /* auto-negotiation word from EEPROM */
217 int adapter_cnf; /* adapter configuration from EEPROM */
218 int isa_config; /* ISA configuration from EEPROM */
219 int irq_map; /* IRQ map from EEPROM */
220 int rx_mode; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
221 int curr_rx_cfg; /* a copy of PP_RxCFG */
222 int linectl; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
223 int send_underrun; /* keep track of how many underruns in a row we get */
224 int force; /* force various values; see FORCE* above. */
227 int use_dma; /* Flag: we're using dma */
228 int dma; /* DMA channel */
229 int dmasize; /* 16 or 64 */
230 unsigned char *dma_buff; /* points to the beginning of the buffer */
231 unsigned char *end_dma_buff; /* points to the end of the buffer */
232 unsigned char *rx_dma_ptr; /* points to the next packet */
234 #ifdef CONFIG_CS89x0_PLATFORM
235 void __iomem *virt_addr;/* Virtual address for accessing the CS89x0. */
236 unsigned long phys_addr;/* Physical address for accessing the CS89x0. */
237 unsigned long size; /* Length of CS89x0 memory region. */
241 /* Index to functions, as function prototypes. */
243 static int cs89x0_probe1(struct net_device *dev, unsigned long ioaddr, int modular);
244 static int net_open(struct net_device *dev);
245 static netdev_tx_t net_send_packet(struct sk_buff *skb, struct net_device *dev);
246 static irqreturn_t net_interrupt(int irq, void *dev_id);
247 static void set_multicast_list(struct net_device *dev);
248 static void net_timeout(struct net_device *dev);
249 static void net_rx(struct net_device *dev);
250 static int net_close(struct net_device *dev);
251 static struct net_device_stats *net_get_stats(struct net_device *dev);
252 static void reset_chip(struct net_device *dev);
253 static int get_eeprom_data(struct net_device *dev, int off, int len, int *buffer);
254 static int get_eeprom_cksum(int off, int len, int *buffer);
255 static int set_mac_address(struct net_device *dev, void *addr);
256 static void count_rx_errors(int status, struct net_device *dev);
257 #ifdef CONFIG_NET_POLL_CONTROLLER
258 static void net_poll_controller(struct net_device *dev);
261 static void get_dma_channel(struct net_device *dev);
262 static void release_dma_buff(struct net_local *lp);
265 /* Example routines you must write ;->. */
266 #define tx_done(dev) 1
269 * Permit 'cs89x0_dma=N' in the kernel boot environment
271 #if !defined(MODULE) && (ALLOW_DMA != 0)
272 static int g_cs89x0_dma;
274 static int __init dma_fn(char *str)
276 g_cs89x0_dma = simple_strtol(str,NULL,0);
280 __setup("cs89x0_dma=", dma_fn);
281 #endif /* !defined(MODULE) && (ALLOW_DMA != 0) */
284 static int g_cs89x0_media__force;
286 static int __init media_fn(char *str)
288 if (!strcmp(str, "rj45")) g_cs89x0_media__force = FORCE_RJ45;
289 else if (!strcmp(str, "aui")) g_cs89x0_media__force = FORCE_AUI;
290 else if (!strcmp(str, "bnc")) g_cs89x0_media__force = FORCE_BNC;
294 __setup("cs89x0_media=", media_fn);
297 #ifndef CONFIG_CS89x0_PLATFORM
298 /* Check for a network adaptor of this type, and return '0' iff one exists.
299 If dev->base_addr == 0, probe all likely locations.
300 If dev->base_addr == 1, always return failure.
301 If dev->base_addr == 2, allocate space for the device and return success
302 (detachable devices only).
306 struct net_device * __init cs89x0_probe(int unit)
308 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
315 return ERR_PTR(-ENODEV);
317 sprintf(dev->name, "eth%d", unit);
318 netdev_boot_setup_check(dev);
323 printk("cs89x0:cs89x0_probe(0x%x)\n", io);
325 if (io > 0x1ff) { /* Check a single specified location. */
326 err = cs89x0_probe1(dev, io, 0);
327 } else if (io != 0) { /* Don't probe at all. */
330 for (port = netcard_portlist; *port; port++) {
331 if (cs89x0_probe1(dev, *port, 0) == 0)
343 printk(KERN_WARNING "cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
349 #if defined(CONFIG_MACH_IXDP2351)
351 readword(unsigned long base_addr, int portno)
353 return __raw_readw(base_addr + (portno << 1));
357 writeword(unsigned long base_addr, int portno, u16 value)
359 __raw_writew(value, base_addr + (portno << 1));
361 #elif defined(CONFIG_ARCH_IXDP2X01)
363 readword(unsigned long base_addr, int portno)
365 return __raw_readl(base_addr + (portno << 1));
369 writeword(unsigned long base_addr, int portno, u16 value)
371 __raw_writel(value, base_addr + (portno << 1));
375 readword(unsigned long base_addr, int portno)
377 return inw(base_addr + portno);
381 writeword(unsigned long base_addr, int portno, u16 value)
383 outw(value, base_addr + portno);
388 readwords(unsigned long base_addr, int portno, void *buf, int length)
390 u8 *buf8 = (u8 *)buf;
395 tmp16 = readword(base_addr, portno);
397 *buf8++ = (u8)(tmp16 >> 8);
402 writewords(unsigned long base_addr, int portno, void *buf, int length)
404 u8 *buf8 = (u8 *)buf;
410 tmp16 |= (*buf8++) << 8;
411 writeword(base_addr, portno, tmp16);
416 readreg(struct net_device *dev, u16 regno)
418 writeword(dev->base_addr, ADD_PORT, regno);
419 return readword(dev->base_addr, DATA_PORT);
423 writereg(struct net_device *dev, u16 regno, u16 value)
425 writeword(dev->base_addr, ADD_PORT, regno);
426 writeword(dev->base_addr, DATA_PORT, value);
430 wait_eeprom_ready(struct net_device *dev)
432 int timeout = jiffies;
433 /* check to see if the EEPROM is ready, a timeout is used -
434 just in case EEPROM is ready when SI_BUSY in the
435 PP_SelfST is clear */
436 while(readreg(dev, PP_SelfST) & SI_BUSY)
437 if (jiffies - timeout >= 40)
443 get_eeprom_data(struct net_device *dev, int off, int len, int *buffer)
447 if (net_debug > 3) printk("EEPROM data from %x for %x:\n",off,len);
448 for (i = 0; i < len; i++) {
449 if (wait_eeprom_ready(dev) < 0) return -1;
450 /* Now send the EEPROM read command and EEPROM location to read */
451 writereg(dev, PP_EECMD, (off + i) | EEPROM_READ_CMD);
452 if (wait_eeprom_ready(dev) < 0) return -1;
453 buffer[i] = readreg(dev, PP_EEData);
454 if (net_debug > 3) printk("%04x ", buffer[i]);
456 if (net_debug > 3) printk("\n");
461 get_eeprom_cksum(int off, int len, int *buffer)
466 for (i = 0; i < len; i++)
474 #ifdef CONFIG_NET_POLL_CONTROLLER
476 * Polling receive - used by netconsole and other diagnostic tools
477 * to allow network i/o with interrupts disabled.
479 static void net_poll_controller(struct net_device *dev)
481 disable_irq(dev->irq);
482 net_interrupt(dev->irq, dev);
483 enable_irq(dev->irq);
487 static const struct net_device_ops net_ops = {
488 .ndo_open = net_open,
489 .ndo_stop = net_close,
490 .ndo_tx_timeout = net_timeout,
491 .ndo_start_xmit = net_send_packet,
492 .ndo_get_stats = net_get_stats,
493 .ndo_set_rx_mode = set_multicast_list,
494 .ndo_set_mac_address = set_mac_address,
495 #ifdef CONFIG_NET_POLL_CONTROLLER
496 .ndo_poll_controller = net_poll_controller,
498 .ndo_change_mtu = eth_change_mtu,
499 .ndo_validate_addr = eth_validate_addr,
502 /* This is the real probe routine. Linux has a history of friendly device
503 probes on the ISA bus. A good device probes avoids doing writes, and
504 verifies that the correct device exists and functions.
509 cs89x0_probe1(struct net_device *dev, unsigned long ioaddr, int modular)
511 struct net_local *lp = netdev_priv(dev);
512 static unsigned version_printed;
515 unsigned rev_type = 0;
516 int eeprom_buff[CHKSUM_LEN];
519 /* Initialize the device structure. */
521 memset(lp, 0, sizeof(*lp));
522 spin_lock_init(&lp->lock);
527 lp->dma = g_cs89x0_dma;
528 lp->dmasize = 16; /* Could make this an option... */
531 lp->force = g_cs89x0_media__force;
536 /* Grab the region so we can find another board if autoIRQ fails. */
537 /* WTF is going on here? */
538 if (!request_region(ioaddr & ~3, NETCARD_IO_EXTENT, DRV_NAME)) {
539 printk(KERN_ERR "%s: request_region(0x%lx, 0x%x) failed\n",
540 DRV_NAME, ioaddr, NETCARD_IO_EXTENT);
545 /* if they give us an odd I/O address, then do ONE write to
546 the address port, to get it back to address zero, where we
547 expect to find the EISA signature word. An IO with a base of 0x3
548 will skip the test for the ADD_PORT. */
551 printk(KERN_INFO "%s: odd ioaddr 0x%lx\n", dev->name, ioaddr);
552 if ((ioaddr & 2) != 2)
553 if ((readword(ioaddr & ~3, ADD_PORT) & ADD_MASK) != ADD_SIG) {
554 printk(KERN_ERR "%s: bad signature 0x%x\n",
555 dev->name, readword(ioaddr & ~3, ADD_PORT));
562 printk(KERN_DEBUG "PP_addr at %lx[%x]: 0x%x\n",
563 ioaddr, ADD_PORT, readword(ioaddr, ADD_PORT));
564 writeword(ioaddr, ADD_PORT, PP_ChipID);
566 tmp = readword(ioaddr, DATA_PORT);
567 if (tmp != CHIP_EISA_ID_SIG) {
568 printk(KERN_DEBUG "%s: incorrect signature at %lx[%x]: 0x%x!="
569 CHIP_EISA_ID_SIG_STR "\n",
570 dev->name, ioaddr, DATA_PORT, tmp);
575 /* Fill in the 'dev' fields. */
576 dev->base_addr = ioaddr;
578 /* get the chip type */
579 rev_type = readreg(dev, PRODUCT_ID_ADD);
580 lp->chip_type = rev_type &~ REVISON_BITS;
581 lp->chip_revision = ((rev_type & REVISON_BITS) >> 8) + 'A';
583 /* Check the chip type and revision in order to set the correct send command
584 CS8920 revision C and CS8900 revision F can use the faster send. */
585 lp->send_cmd = TX_AFTER_381;
586 if (lp->chip_type == CS8900 && lp->chip_revision >= 'F')
587 lp->send_cmd = TX_NOW;
588 if (lp->chip_type != CS8900 && lp->chip_revision >= 'C')
589 lp->send_cmd = TX_NOW;
591 if (net_debug && version_printed++ == 0)
594 printk(KERN_INFO "%s: cs89%c0%s rev %c found at %#3lx ",
596 lp->chip_type==CS8900?'0':'2',
597 lp->chip_type==CS8920M?"M":"",
603 /* Here we read the current configuration of the chip. If there
604 is no Extended EEPROM then the idea is to not disturb the chip
605 configuration, it should have been correctly setup by automatic
606 EEPROM read on reset. So, if the chip says it read the EEPROM
607 the driver will always do *something* instead of complain that
611 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) ==
612 (EEPROM_OK|EEPROM_PRESENT)) {
614 for (i=0; i < ETH_ALEN/2; i++) {
616 Addr = readreg(dev, PP_IA+i*2);
617 dev->dev_addr[i*2] = Addr & 0xFF;
618 dev->dev_addr[i*2+1] = Addr >> 8;
621 /* Load the Adapter Configuration.
622 Note: Barring any more specific information from some
623 other source (ie EEPROM+Schematics), we would not know
624 how to operate a 10Base2 interface on the AUI port.
625 However, since we do read the status of HCB1 and use
626 settings that always result in calls to control_dc_dc(dev,0)
627 a BNC interface should work if the enable pin
628 (dc/dc converter) is on HCB1. It will be called AUI
632 i = readreg(dev, PP_LineCTL);
633 /* Preserve the setting of the HCB1 pin. */
634 if ((i & (HCB1 | HCB1_ENBL)) == (HCB1 | HCB1_ENBL))
635 lp->adapter_cnf |= A_CNF_DC_DC_POLARITY;
636 /* Save the sqelch bit */
637 if ((i & LOW_RX_SQUELCH) == LOW_RX_SQUELCH)
638 lp->adapter_cnf |= A_CNF_EXTND_10B_2 | A_CNF_LOW_RX_SQUELCH;
639 /* Check if the card is in 10Base-t only mode */
640 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == 0)
641 lp->adapter_cnf |= A_CNF_10B_T | A_CNF_MEDIA_10B_T;
642 /* Check if the card is in AUI only mode */
643 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUI_ONLY)
644 lp->adapter_cnf |= A_CNF_AUI | A_CNF_MEDIA_AUI;
645 /* Check if the card is in Auto mode. */
646 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET)
647 lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T |
648 A_CNF_MEDIA_AUI | A_CNF_MEDIA_10B_T | A_CNF_MEDIA_AUTO;
651 printk(KERN_INFO "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
652 dev->name, i, lp->adapter_cnf);
654 /* IRQ. Other chips already probe, see below. */
655 if (lp->chip_type == CS8900)
656 lp->isa_config = readreg(dev, PP_CS8900_ISAINT) & INT_NO_MASK;
658 printk( "[Cirrus EEPROM] ");
663 /* First check to see if an EEPROM is attached. */
665 if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0)
666 printk(KERN_WARNING "cs89x0: No EEPROM, relying on command line....\n");
667 else if (get_eeprom_data(dev, START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
668 printk(KERN_WARNING "\ncs89x0: EEPROM read failed, relying on command line.\n");
669 } else if (get_eeprom_cksum(START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) {
670 /* Check if the chip was able to read its own configuration starting
672 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) !=
673 (EEPROM_OK|EEPROM_PRESENT))
674 printk(KERN_WARNING "cs89x0: Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
677 /* This reads an extended EEPROM that is not documented
678 in the CS8900 datasheet. */
680 /* get transmission control word but keep the autonegotiation bits */
681 if (!lp->auto_neg_cnf) lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2];
682 /* Store adapter configuration */
683 if (!lp->adapter_cnf) lp->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET/2];
684 /* Store ISA configuration */
685 lp->isa_config = eeprom_buff[ISA_CNF_OFFSET/2];
686 dev->mem_start = eeprom_buff[PACKET_PAGE_OFFSET/2] << 8;
688 /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
689 /* store the initial memory base address */
690 for (i = 0; i < ETH_ALEN/2; i++) {
691 dev->dev_addr[i*2] = eeprom_buff[i];
692 dev->dev_addr[i*2+1] = eeprom_buff[i] >> 8;
695 printk(KERN_DEBUG "%s: new adapter_cnf: 0x%x\n",
696 dev->name, lp->adapter_cnf);
699 /* allow them to force multiple transceivers. If they force multiple, autosense */
702 if (lp->force & FORCE_RJ45) {lp->adapter_cnf |= A_CNF_10B_T; count++; }
703 if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_AUI; count++; }
704 if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_10B_2; count++; }
705 if (count > 1) {lp->adapter_cnf |= A_CNF_MEDIA_AUTO; }
706 else if (lp->force & FORCE_RJ45){lp->adapter_cnf |= A_CNF_MEDIA_10B_T; }
707 else if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_MEDIA_AUI; }
708 else if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_MEDIA_10B_2; }
712 printk(KERN_DEBUG "%s: after force 0x%x, adapter_cnf=0x%x\n",
713 dev->name, lp->force, lp->adapter_cnf);
715 /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
717 /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
719 /* FIXME: we don't set the Ethernet address on the command line. Use
720 ifconfig IFACE hw ether AABBCCDDEEFF */
722 printk(KERN_INFO "cs89x0 media %s%s%s",
723 (lp->adapter_cnf & A_CNF_10B_T)?"RJ-45,":"",
724 (lp->adapter_cnf & A_CNF_AUI)?"AUI,":"",
725 (lp->adapter_cnf & A_CNF_10B_2)?"BNC,":"");
727 lp->irq_map = 0xffff;
729 /* If this is a CS8900 then no pnp soft */
730 if (lp->chip_type != CS8900 &&
731 /* Check if the ISA IRQ has been set */
732 (i = readreg(dev, PP_CS8920_ISAINT) & 0xff,
733 (i != 0 && i < CS8920_NO_INTS))) {
737 i = lp->isa_config & INT_NO_MASK;
738 #ifndef CONFIG_CS89x0_PLATFORM
739 if (lp->chip_type == CS8900) {
740 #ifdef CS89x0_NONISA_IRQ
741 i = cs8900_irq_map[0];
743 /* Translate the IRQ using the IRQ mapping table. */
744 if (i >= ARRAY_SIZE(cs8900_irq_map))
745 printk("\ncs89x0: invalid ISA interrupt number %d\n", i);
747 i = cs8900_irq_map[i];
749 lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */
751 int irq_map_buff[IRQ_MAP_LEN/2];
753 if (get_eeprom_data(dev, IRQ_MAP_EEPROM_DATA,
755 irq_map_buff) >= 0) {
756 if ((irq_map_buff[0] & 0xff) == PNP_IRQ_FRMT)
757 lp->irq_map = (irq_map_buff[0]>>8) | (irq_map_buff[1] << 8);
766 printk(" IRQ %d", dev->irq);
770 get_dma_channel(dev);
771 printk(", DMA %d", dev->dma);
776 printk(", programmed I/O");
779 /* print the ethernet address. */
780 printk(", MAC %pM", dev->dev_addr);
782 dev->netdev_ops = &net_ops;
783 dev->watchdog_timeo = HZ;
787 printk("cs89x0_probe1() successful\n");
789 retval = register_netdev(dev);
794 writeword(dev->base_addr, ADD_PORT, PP_ChipID);
796 release_region(ioaddr & ~3, NETCARD_IO_EXTENT);
802 /*********************************
803 * This page contains DMA routines
804 **********************************/
808 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1)>>17 == (long)(ptr2)>>17)
811 get_dma_channel(struct net_device *dev)
813 struct net_local *lp = netdev_priv(dev);
817 lp->isa_config |= ISA_RxDMA;
819 if ((lp->isa_config & ANY_ISA_DMA) == 0)
821 dev->dma = lp->isa_config & DMA_NO_MASK;
822 if (lp->chip_type == CS8900)
824 if (dev->dma < 5 || dev->dma > 7) {
825 lp->isa_config &= ~ANY_ISA_DMA;
832 write_dma(struct net_device *dev, int chip_type, int dma)
834 struct net_local *lp = netdev_priv(dev);
835 if ((lp->isa_config & ANY_ISA_DMA) == 0)
837 if (chip_type == CS8900) {
838 writereg(dev, PP_CS8900_ISADMA, dma-5);
840 writereg(dev, PP_CS8920_ISADMA, dma);
845 set_dma_cfg(struct net_device *dev)
847 struct net_local *lp = netdev_priv(dev);
850 if ((lp->isa_config & ANY_ISA_DMA) == 0) {
852 printk("set_dma_cfg(): no DMA\n");
855 if (lp->isa_config & ISA_RxDMA) {
856 lp->curr_rx_cfg |= RX_DMA_ONLY;
858 printk("set_dma_cfg(): RX_DMA_ONLY\n");
860 lp->curr_rx_cfg |= AUTO_RX_DMA; /* not that we support it... */
862 printk("set_dma_cfg(): AUTO_RX_DMA\n");
868 dma_bufcfg(struct net_device *dev)
870 struct net_local *lp = netdev_priv(dev);
872 return (lp->isa_config & ANY_ISA_DMA)? RX_DMA_ENBL : 0;
878 dma_busctl(struct net_device *dev)
881 struct net_local *lp = netdev_priv(dev);
883 if (lp->isa_config & ANY_ISA_DMA)
884 retval |= RESET_RX_DMA; /* Reset the DMA pointer */
885 if (lp->isa_config & DMA_BURST)
886 retval |= DMA_BURST_MODE; /* Does ISA config specify DMA burst ? */
887 if (lp->dmasize == 64)
888 retval |= RX_DMA_SIZE_64K; /* did they ask for 64K? */
889 retval |= MEMORY_ON; /* we need memory enabled to use DMA. */
895 dma_rx(struct net_device *dev)
897 struct net_local *lp = netdev_priv(dev);
900 unsigned char *bp = lp->rx_dma_ptr;
902 status = bp[0] + (bp[1]<<8);
903 length = bp[2] + (bp[3]<<8);
906 printk( "%s: receiving DMA packet at %lx, status %x, length %x\n",
907 dev->name, (unsigned long)bp, status, length);
909 if ((status & RX_OK) == 0) {
910 count_rx_errors(status, dev);
911 goto skip_this_frame;
914 /* Malloc up new buffer. */
915 skb = netdev_alloc_skb(dev, length + 2);
917 if (net_debug) /* I don't think we want to do this to a stressed system */
918 printk("%s: Memory squeeze, dropping packet.\n", dev->name);
919 dev->stats.rx_dropped++;
921 /* AKPM: advance bp to the next frame */
923 bp += (length + 3) & ~3;
924 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
928 skb_reserve(skb, 2); /* longword align L3 header */
930 if (bp + length > lp->end_dma_buff) {
931 int semi_cnt = lp->end_dma_buff - bp;
932 memcpy(skb_put(skb,semi_cnt), bp, semi_cnt);
933 memcpy(skb_put(skb,length - semi_cnt), lp->dma_buff,
936 memcpy(skb_put(skb,length), bp, length);
938 bp += (length + 3) & ~3;
939 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
943 printk( "%s: received %d byte DMA packet of type %x\n",
945 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
947 skb->protocol=eth_type_trans(skb,dev);
949 dev->stats.rx_packets++;
950 dev->stats.rx_bytes += length;
953 #endif /* ALLOW_DMA */
955 static void __init reset_chip(struct net_device *dev)
957 #if !defined(CONFIG_MACH_MX31ADS)
958 #if !defined(CS89x0_NONISA_IRQ)
959 struct net_local *lp = netdev_priv(dev);
960 int ioaddr = dev->base_addr;
961 #endif /* CS89x0_NONISA_IRQ */
962 int reset_start_time;
964 writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
969 #if !defined(CS89x0_NONISA_IRQ)
970 if (lp->chip_type != CS8900) {
971 /* Hardware problem requires PNP registers to be reconfigured after a reset */
972 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAINT);
973 outb(dev->irq, ioaddr + DATA_PORT);
974 outb(0, ioaddr + DATA_PORT + 1);
976 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAMemB);
977 outb((dev->mem_start >> 16) & 0xff, ioaddr + DATA_PORT);
978 outb((dev->mem_start >> 8) & 0xff, ioaddr + DATA_PORT + 1);
980 #endif /* CS89x0_NONISA_IRQ */
982 /* Wait until the chip is reset */
983 reset_start_time = jiffies;
984 while( (readreg(dev, PP_SelfST) & INIT_DONE) == 0 && jiffies - reset_start_time < 2)
986 #endif /* !CONFIG_MACH_MX31ADS */
991 control_dc_dc(struct net_device *dev, int on_not_off)
993 struct net_local *lp = netdev_priv(dev);
994 unsigned int selfcontrol;
995 int timenow = jiffies;
996 /* control the DC to DC convertor in the SelfControl register.
997 Note: This is hooked up to a general purpose pin, might not
998 always be a DC to DC convertor. */
1000 selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */
1001 if (((lp->adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off)
1002 selfcontrol |= HCB1;
1004 selfcontrol &= ~HCB1;
1005 writereg(dev, PP_SelfCTL, selfcontrol);
1007 /* Wait for the DC/DC converter to power up - 500ms */
1008 while (jiffies - timenow < HZ)
1012 #define DETECTED_NONE 0
1013 #define DETECTED_RJ45H 1
1014 #define DETECTED_RJ45F 2
1015 #define DETECTED_AUI 3
1016 #define DETECTED_BNC 4
1019 detect_tp(struct net_device *dev)
1021 struct net_local *lp = netdev_priv(dev);
1022 int timenow = jiffies;
1025 if (net_debug > 1) printk("%s: Attempting TP\n", dev->name);
1027 /* If connected to another full duplex capable 10-Base-T card the link pulses
1028 seem to be lost when the auto detect bit in the LineCTL is set.
1029 To overcome this the auto detect bit will be cleared whilst testing the
1030 10-Base-T interface. This would not be necessary for the sparrow chip but
1031 is simpler to do it anyway. */
1032 writereg(dev, PP_LineCTL, lp->linectl &~ AUI_ONLY);
1033 control_dc_dc(dev, 0);
1035 /* Delay for the hardware to work out if the TP cable is present - 150ms */
1036 for (timenow = jiffies; jiffies - timenow < 15; )
1038 if ((readreg(dev, PP_LineST) & LINK_OK) == 0)
1039 return DETECTED_NONE;
1041 if (lp->chip_type == CS8900) {
1042 switch (lp->force & 0xf0) {
1045 printk("%s: cs8900 doesn't autonegotiate\n",dev->name);
1046 return DETECTED_NONE;
1048 /* CS8900 doesn't support AUTO, change to HALF*/
1050 lp->force &= ~FORCE_AUTO;
1051 lp->force |= FORCE_HALF;
1056 writereg(dev, PP_TestCTL, readreg(dev, PP_TestCTL) | FDX_8900);
1059 fdx = readreg(dev, PP_TestCTL) & FDX_8900;
1061 switch (lp->force & 0xf0) {
1063 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1066 lp->auto_neg_cnf = 0;
1069 lp->auto_neg_cnf = RE_NEG_NOW | ALLOW_FDX;
1073 writereg(dev, PP_AutoNegCTL, lp->auto_neg_cnf & AUTO_NEG_MASK);
1075 if ((lp->auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) {
1076 printk(KERN_INFO "%s: negotiating duplex...\n",dev->name);
1077 while (readreg(dev, PP_AutoNegST) & AUTO_NEG_BUSY) {
1078 if (jiffies - timenow > 4000) {
1079 printk(KERN_ERR "**** Full / half duplex auto-negotiation timed out ****\n");
1084 fdx = readreg(dev, PP_AutoNegST) & FDX_ACTIVE;
1087 return DETECTED_RJ45F;
1089 return DETECTED_RJ45H;
1092 /* send a test packet - return true if carrier bits are ok */
1094 send_test_pkt(struct net_device *dev)
1096 char test_packet[] = { 0,0,0,0,0,0, 0,0,0,0,0,0,
1097 0, 46, /* A 46 in network order */
1098 0, 0, /* DSAP=0 & SSAP=0 fields */
1099 0xf3, 0 /* Control (Test Req + P bit set) */ };
1100 long timenow = jiffies;
1102 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_TX_ON);
1104 memcpy(test_packet, dev->dev_addr, ETH_ALEN);
1105 memcpy(test_packet+ETH_ALEN, dev->dev_addr, ETH_ALEN);
1107 writeword(dev->base_addr, TX_CMD_PORT, TX_AFTER_ALL);
1108 writeword(dev->base_addr, TX_LEN_PORT, ETH_ZLEN);
1110 /* Test to see if the chip has allocated memory for the packet */
1111 while (jiffies - timenow < 5)
1112 if (readreg(dev, PP_BusST) & READY_FOR_TX_NOW)
1114 if (jiffies - timenow >= 5)
1115 return 0; /* this shouldn't happen */
1117 /* Write the contents of the packet */
1118 writewords(dev->base_addr, TX_FRAME_PORT,test_packet,(ETH_ZLEN+1) >>1);
1120 if (net_debug > 1) printk("Sending test packet ");
1121 /* wait a couple of jiffies for packet to be received */
1122 for (timenow = jiffies; jiffies - timenow < 3; )
1124 if ((readreg(dev, PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) {
1125 if (net_debug > 1) printk("succeeded\n");
1128 if (net_debug > 1) printk("failed\n");
1134 detect_aui(struct net_device *dev)
1136 struct net_local *lp = netdev_priv(dev);
1138 if (net_debug > 1) printk("%s: Attempting AUI\n", dev->name);
1139 control_dc_dc(dev, 0);
1141 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1143 if (send_test_pkt(dev))
1144 return DETECTED_AUI;
1146 return DETECTED_NONE;
1150 detect_bnc(struct net_device *dev)
1152 struct net_local *lp = netdev_priv(dev);
1154 if (net_debug > 1) printk("%s: Attempting BNC\n", dev->name);
1155 control_dc_dc(dev, 1);
1157 writereg(dev, PP_LineCTL, (lp->linectl &~ AUTO_AUI_10BASET) | AUI_ONLY);
1159 if (send_test_pkt(dev))
1160 return DETECTED_BNC;
1162 return DETECTED_NONE;
1167 write_irq(struct net_device *dev, int chip_type, int irq)
1171 if (chip_type == CS8900) {
1172 #ifndef CONFIG_CS89x0_PLATFORM
1173 /* Search the mapping table for the corresponding IRQ pin. */
1174 for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
1175 if (cs8900_irq_map[i] == irq)
1178 if (i == ARRAY_SIZE(cs8900_irq_map))
1181 /* INTRQ0 pin is used for interrupt generation. */
1184 writereg(dev, PP_CS8900_ISAINT, i);
1186 writereg(dev, PP_CS8920_ISAINT, irq);
1190 /* Open/initialize the board. This is called (in the current kernel)
1191 sometime after booting when the 'ifconfig' program is run.
1193 This routine should set everything up anew at each open, even
1194 registers that "should" only need to be set once at boot, so that
1195 there is non-reboot way to recover if something goes wrong.
1198 /* AKPM: do we need to do any locking here? */
1201 net_open(struct net_device *dev)
1203 struct net_local *lp = netdev_priv(dev);
1209 /* Allow interrupts to be generated by the chip */
1210 /* Cirrus' release had this: */
1212 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1214 /* And 2.3.47 had this: */
1215 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1217 for (i = 2; i < CS8920_NO_INTS; i++) {
1218 if ((1 << i) & lp->irq_map) {
1219 if (request_irq(i, net_interrupt, 0, dev->name, dev) == 0) {
1221 write_irq(dev, lp->chip_type, i);
1222 /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
1228 if (i >= CS8920_NO_INTS) {
1229 writereg(dev, PP_BusCTL, 0); /* disable interrupts. */
1230 printk(KERN_ERR "cs89x0: can't get an interrupt\n");
1237 #if !defined(CS89x0_NONISA_IRQ) && !defined(CONFIG_CS89x0_PLATFORM)
1238 if (((1 << dev->irq) & lp->irq_map) == 0) {
1239 printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1240 dev->name, dev->irq, lp->irq_map);
1245 /* FIXME: Cirrus' release had this: */
1246 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ );
1247 /* And 2.3.47 had this: */
1249 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1251 write_irq(dev, lp->chip_type, dev->irq);
1252 ret = request_irq(dev->irq, net_interrupt, 0, dev->name, dev);
1254 printk(KERN_ERR "cs89x0: request_irq(%d) failed\n", dev->irq);
1261 if (lp->isa_config & ANY_ISA_DMA) {
1262 unsigned long flags;
1263 lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
1264 get_order(lp->dmasize * 1024));
1266 if (!lp->dma_buff) {
1267 printk(KERN_ERR "%s: cannot get %dK memory for DMA\n", dev->name, lp->dmasize);
1270 if (net_debug > 1) {
1271 printk( "%s: dma %lx %lx\n",
1273 (unsigned long)lp->dma_buff,
1274 (unsigned long)isa_virt_to_bus(lp->dma_buff));
1276 if ((unsigned long) lp->dma_buff >= MAX_DMA_ADDRESS ||
1277 !dma_page_eq(lp->dma_buff, lp->dma_buff+lp->dmasize*1024-1)) {
1278 printk(KERN_ERR "%s: not usable as DMA buffer\n", dev->name);
1281 memset(lp->dma_buff, 0, lp->dmasize * 1024); /* Why? */
1282 if (request_dma(dev->dma, dev->name)) {
1283 printk(KERN_ERR "%s: cannot get dma channel %d\n", dev->name, dev->dma);
1286 write_dma(dev, lp->chip_type, dev->dma);
1287 lp->rx_dma_ptr = lp->dma_buff;
1288 lp->end_dma_buff = lp->dma_buff + lp->dmasize*1024;
1289 spin_lock_irqsave(&lp->lock, flags);
1290 disable_dma(dev->dma);
1291 clear_dma_ff(dev->dma);
1292 set_dma_mode(dev->dma, DMA_RX_MODE); /* auto_init as well */
1293 set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));
1294 set_dma_count(dev->dma, lp->dmasize*1024);
1295 enable_dma(dev->dma);
1296 spin_unlock_irqrestore(&lp->lock, flags);
1299 #endif /* ALLOW_DMA */
1301 /* set the Ethernet address */
1302 for (i=0; i < ETH_ALEN/2; i++)
1303 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1305 /* while we're testing the interface, leave interrupts disabled */
1306 writereg(dev, PP_BusCTL, MEMORY_ON);
1308 /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
1309 if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) && (lp->adapter_cnf & A_CNF_LOW_RX_SQUELCH))
1310 lp->linectl = LOW_RX_SQUELCH;
1314 /* check to make sure that they have the "right" hardware available */
1315 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1316 case A_CNF_MEDIA_10B_T: result = lp->adapter_cnf & A_CNF_10B_T; break;
1317 case A_CNF_MEDIA_AUI: result = lp->adapter_cnf & A_CNF_AUI; break;
1318 case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
1319 default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
1322 printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name);
1327 release_dma_buff(lp);
1329 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));
1330 free_irq(dev->irq, dev);
1335 /* set the hardware to the configured choice */
1336 switch(lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1337 case A_CNF_MEDIA_10B_T:
1338 result = detect_tp(dev);
1339 if (result==DETECTED_NONE) {
1340 printk(KERN_WARNING "%s: 10Base-T (RJ-45) has no cable\n", dev->name);
1341 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1342 result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */
1345 case A_CNF_MEDIA_AUI:
1346 result = detect_aui(dev);
1347 if (result==DETECTED_NONE) {
1348 printk(KERN_WARNING "%s: 10Base-5 (AUI) has no cable\n", dev->name);
1349 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1350 result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */
1353 case A_CNF_MEDIA_10B_2:
1354 result = detect_bnc(dev);
1355 if (result==DETECTED_NONE) {
1356 printk(KERN_WARNING "%s: 10Base-2 (BNC) has no cable\n", dev->name);
1357 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1358 result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */
1361 case A_CNF_MEDIA_AUTO:
1362 writereg(dev, PP_LineCTL, lp->linectl | AUTO_AUI_10BASET);
1363 if (lp->adapter_cnf & A_CNF_10B_T)
1364 if ((result = detect_tp(dev)) != DETECTED_NONE)
1366 if (lp->adapter_cnf & A_CNF_AUI)
1367 if ((result = detect_aui(dev)) != DETECTED_NONE)
1369 if (lp->adapter_cnf & A_CNF_10B_2)
1370 if ((result = detect_bnc(dev)) != DETECTED_NONE)
1372 printk(KERN_ERR "%s: no media detected\n", dev->name);
1377 printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name);
1379 case DETECTED_RJ45H:
1380 printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);
1382 case DETECTED_RJ45F:
1383 printk(KERN_INFO "%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);
1386 printk(KERN_INFO "%s: using 10Base-5 (AUI)\n", dev->name);
1389 printk(KERN_INFO "%s: using 10Base-2 (BNC)\n", dev->name);
1393 /* Turn on both receive and transmit operations */
1394 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON);
1396 /* Receive only error free packets addressed to this card */
1398 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT);
1400 lp->curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL;
1402 if (lp->isa_config & STREAM_TRANSFER)
1403 lp->curr_rx_cfg |= RX_STREAM_ENBL;
1407 writereg(dev, PP_RxCFG, lp->curr_rx_cfg);
1409 writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL |
1410 TX_LATE_COL_ENBL | TX_JBR_ENBL | TX_ANY_COL_ENBL | TX_16_COL_ENBL);
1412 writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL |
1416 TX_COL_COUNT_OVRFLOW_ENBL | TX_UNDERRUN_ENBL);
1418 /* now that we've got our act together, enable everything */
1419 writereg(dev, PP_BusCTL, ENABLE_IRQ
1420 | (dev->mem_start?MEMORY_ON : 0) /* turn memory on */
1425 netif_start_queue(dev);
1427 printk("cs89x0: net_open() succeeded\n");
1433 static void net_timeout(struct net_device *dev)
1435 /* If we get here, some higher level has decided we are broken.
1436 There should really be a "kick me" function call instead. */
1437 if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name,
1438 tx_done(dev) ? "IRQ conflict ?" : "network cable problem");
1439 /* Try to restart the adaptor. */
1440 netif_wake_queue(dev);
1443 static netdev_tx_t net_send_packet(struct sk_buff *skb,struct net_device *dev)
1445 struct net_local *lp = netdev_priv(dev);
1446 unsigned long flags;
1448 if (net_debug > 3) {
1449 printk("%s: sent %d byte packet of type %x\n",
1450 dev->name, skb->len,
1451 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1454 /* keep the upload from being interrupted, since we
1455 ask the chip to start transmitting before the
1456 whole packet has been completely uploaded. */
1458 spin_lock_irqsave(&lp->lock, flags);
1459 netif_stop_queue(dev);
1461 /* initiate a transmit sequence */
1462 writeword(dev->base_addr, TX_CMD_PORT, lp->send_cmd);
1463 writeword(dev->base_addr, TX_LEN_PORT, skb->len);
1465 /* Test to see if the chip has allocated memory for the packet */
1466 if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) {
1468 * Gasp! It hasn't. But that shouldn't happen since
1469 * we're waiting for TxOk, so return 1 and requeue this packet.
1472 spin_unlock_irqrestore(&lp->lock, flags);
1473 if (net_debug) printk("cs89x0: Tx buffer not free!\n");
1474 return NETDEV_TX_BUSY;
1476 /* Write the contents of the packet */
1477 writewords(dev->base_addr, TX_FRAME_PORT,skb->data,(skb->len+1) >>1);
1478 spin_unlock_irqrestore(&lp->lock, flags);
1479 dev->stats.tx_bytes += skb->len;
1480 dev_kfree_skb (skb);
1483 * We DO NOT call netif_wake_queue() here.
1484 * We also DO NOT call netif_start_queue().
1486 * Either of these would cause another bottom half run through
1487 * net_send_packet() before this packet has fully gone out. That causes
1488 * us to hit the "Gasp!" above and the send is rescheduled. it runs like
1489 * a dog. We just return and wait for the Tx completion interrupt handler
1490 * to restart the netdevice layer
1493 return NETDEV_TX_OK;
1496 /* The typical workload of the driver:
1497 Handle the network interface interrupts. */
1499 static irqreturn_t net_interrupt(int irq, void *dev_id)
1501 struct net_device *dev = dev_id;
1502 struct net_local *lp;
1506 ioaddr = dev->base_addr;
1507 lp = netdev_priv(dev);
1509 /* we MUST read all the events out of the ISQ, otherwise we'll never
1510 get interrupted again. As a consequence, we can't have any limit
1511 on the number of times we loop in the interrupt handler. The
1512 hardware guarantees that eventually we'll run out of events. Of
1513 course, if you're on a slow machine, and packets are arriving
1514 faster than you can read them off, you're screwed. Hasta la
1516 while ((status = readword(dev->base_addr, ISQ_PORT))) {
1517 if (net_debug > 4)printk("%s: event=%04x\n", dev->name, status);
1519 switch(status & ISQ_EVENT_MASK) {
1520 case ISQ_RECEIVER_EVENT:
1521 /* Got a packet(s). */
1524 case ISQ_TRANSMITTER_EVENT:
1525 dev->stats.tx_packets++;
1526 netif_wake_queue(dev); /* Inform upper layers. */
1527 if ((status & ( TX_OK |
1531 TX_16_COL)) != TX_OK) {
1532 if ((status & TX_OK) == 0)
1533 dev->stats.tx_errors++;
1534 if (status & TX_LOST_CRS)
1535 dev->stats.tx_carrier_errors++;
1536 if (status & TX_SQE_ERROR)
1537 dev->stats.tx_heartbeat_errors++;
1538 if (status & TX_LATE_COL)
1539 dev->stats.tx_window_errors++;
1540 if (status & TX_16_COL)
1541 dev->stats.tx_aborted_errors++;
1544 case ISQ_BUFFER_EVENT:
1545 if (status & READY_FOR_TX) {
1546 /* we tried to transmit a packet earlier,
1547 but inexplicably ran out of buffers.
1548 That shouldn't happen since we only ever
1549 load one packet. Shrug. Do the right
1551 netif_wake_queue(dev); /* Inform upper layers. */
1553 if (status & TX_UNDERRUN) {
1554 if (net_debug > 0) printk("%s: transmit underrun\n", dev->name);
1555 lp->send_underrun++;
1556 if (lp->send_underrun == 3) lp->send_cmd = TX_AFTER_381;
1557 else if (lp->send_underrun == 6) lp->send_cmd = TX_AFTER_ALL;
1558 /* transmit cycle is done, although
1559 frame wasn't transmitted - this
1560 avoids having to wait for the upper
1561 layers to timeout on us, in the
1562 event of a tx underrun */
1563 netif_wake_queue(dev); /* Inform upper layers. */
1566 if (lp->use_dma && (status & RX_DMA)) {
1567 int count = readreg(dev, PP_DmaFrameCnt);
1570 printk("%s: receiving %d DMA frames\n", dev->name, count);
1571 if (net_debug > 2 && count >1)
1572 printk("%s: receiving %d DMA frames\n", dev->name, count);
1575 count = readreg(dev, PP_DmaFrameCnt);
1576 if (net_debug > 2 && count > 0)
1577 printk("%s: continuing with %d DMA frames\n", dev->name, count);
1582 case ISQ_RX_MISS_EVENT:
1583 dev->stats.rx_missed_errors += (status >> 6);
1585 case ISQ_TX_COL_EVENT:
1586 dev->stats.collisions += (status >> 6);
1590 return IRQ_RETVAL(handled);
1594 count_rx_errors(int status, struct net_device *dev)
1596 dev->stats.rx_errors++;
1597 if (status & RX_RUNT)
1598 dev->stats.rx_length_errors++;
1599 if (status & RX_EXTRA_DATA)
1600 dev->stats.rx_length_errors++;
1601 if ((status & RX_CRC_ERROR) && !(status & (RX_EXTRA_DATA|RX_RUNT)))
1603 dev->stats.rx_crc_errors++;
1604 if (status & RX_DRIBBLE)
1605 dev->stats.rx_frame_errors++;
1608 /* We have a good packet(s), get it/them out of the buffers. */
1610 net_rx(struct net_device *dev)
1612 struct sk_buff *skb;
1615 int ioaddr = dev->base_addr;
1616 status = readword(ioaddr, RX_FRAME_PORT);
1617 length = readword(ioaddr, RX_FRAME_PORT);
1619 if ((status & RX_OK) == 0) {
1620 count_rx_errors(status, dev);
1624 /* Malloc up new buffer. */
1625 skb = netdev_alloc_skb(dev, length + 2);
1627 #if 0 /* Again, this seems a cruel thing to do */
1628 printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name);
1630 dev->stats.rx_dropped++;
1633 skb_reserve(skb, 2); /* longword align L3 header */
1635 readwords(ioaddr, RX_FRAME_PORT, skb_put(skb, length), length >> 1);
1637 skb->data[length-1] = readword(ioaddr, RX_FRAME_PORT);
1639 if (net_debug > 3) {
1640 printk( "%s: received %d byte packet of type %x\n",
1642 (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]);
1645 skb->protocol=eth_type_trans(skb,dev);
1647 dev->stats.rx_packets++;
1648 dev->stats.rx_bytes += length;
1652 static void release_dma_buff(struct net_local *lp)
1655 free_pages((unsigned long)(lp->dma_buff), get_order(lp->dmasize * 1024));
1656 lp->dma_buff = NULL;
1661 /* The inverse routine to net_open(). */
1663 net_close(struct net_device *dev)
1666 struct net_local *lp = netdev_priv(dev);
1669 netif_stop_queue(dev);
1671 writereg(dev, PP_RxCFG, 0);
1672 writereg(dev, PP_TxCFG, 0);
1673 writereg(dev, PP_BufCFG, 0);
1674 writereg(dev, PP_BusCTL, 0);
1676 free_irq(dev->irq, dev);
1679 if (lp->use_dma && lp->dma) {
1681 release_dma_buff(lp);
1685 /* Update the statistics here. */
1689 /* Get the current statistics. This may be called with the card open or
1691 static struct net_device_stats *
1692 net_get_stats(struct net_device *dev)
1694 struct net_local *lp = netdev_priv(dev);
1695 unsigned long flags;
1697 spin_lock_irqsave(&lp->lock, flags);
1698 /* Update the statistics from the device registers. */
1699 dev->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);
1700 dev->stats.collisions += (readreg(dev, PP_TxCol) >> 6);
1701 spin_unlock_irqrestore(&lp->lock, flags);
1706 static void set_multicast_list(struct net_device *dev)
1708 struct net_local *lp = netdev_priv(dev);
1709 unsigned long flags;
1711 spin_lock_irqsave(&lp->lock, flags);
1712 if(dev->flags&IFF_PROMISC)
1714 lp->rx_mode = RX_ALL_ACCEPT;
1716 else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev))
1718 /* The multicast-accept list is initialized to accept-all, and we
1719 rely on higher-level filtering for now. */
1720 lp->rx_mode = RX_MULTCAST_ACCEPT;
1725 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode);
1727 /* in promiscuous mode, we accept errored packets, so we have to enable interrupts on them also */
1728 writereg(dev, PP_RxCFG, lp->curr_rx_cfg |
1729 (lp->rx_mode == RX_ALL_ACCEPT? (RX_CRC_ERROR_ENBL|RX_RUNT_ENBL|RX_EXTRA_DATA_ENBL) : 0));
1730 spin_unlock_irqrestore(&lp->lock, flags);
1734 static int set_mac_address(struct net_device *dev, void *p)
1737 struct sockaddr *addr = p;
1739 if (netif_running(dev))
1742 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
1745 printk("%s: Setting MAC address to %pM.\n",
1746 dev->name, dev->dev_addr);
1748 /* set the Ethernet address */
1749 for (i=0; i < ETH_ALEN/2; i++)
1750 writereg(dev, PP_IA+i*2, dev->dev_addr[i*2] | (dev->dev_addr[i*2+1] << 8));
1755 #if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
1757 static struct net_device *dev_cs89x0;
1760 * Support the 'debug' module parm even if we're compiled for non-debug to
1761 * avoid breaking someone's startup scripts
1767 static char media[8];
1768 static int duplex=-1;
1770 static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
1772 static int dmasize=16; /* or 64 */
1774 module_param(io, int, 0);
1775 module_param(irq, int, 0);
1776 module_param(debug, int, 0);
1777 module_param_string(media, media, sizeof(media), 0);
1778 module_param(duplex, int, 0);
1779 module_param(dma , int, 0);
1780 module_param(dmasize , int, 0);
1781 module_param(use_dma , int, 0);
1782 MODULE_PARM_DESC(io, "cs89x0 I/O base address");
1783 MODULE_PARM_DESC(irq, "cs89x0 IRQ number");
1785 MODULE_PARM_DESC(debug, "cs89x0 debug level (0-6)");
1787 MODULE_PARM_DESC(debug, "(ignored)");
1789 MODULE_PARM_DESC(media, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1790 /* No other value than -1 for duplex seems to be currently interpreted */
1791 MODULE_PARM_DESC(duplex, "(ignored)");
1793 MODULE_PARM_DESC(dma , "cs89x0 ISA DMA channel; ignored if use_dma=0");
1794 MODULE_PARM_DESC(dmasize , "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1795 MODULE_PARM_DESC(use_dma , "cs89x0 using DMA (0-1)");
1797 MODULE_PARM_DESC(dma , "(ignored)");
1798 MODULE_PARM_DESC(dmasize , "(ignored)");
1799 MODULE_PARM_DESC(use_dma , "(ignored)");
1802 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton");
1803 MODULE_LICENSE("GPL");
1807 * media=t - specify media type
1811 * duplex=0 - specify forced half/full/autonegotiate duplex
1812 * debug=# - debug level
1815 * Default Chip Configuration:
1816 * DMA Burst = enabled
1817 * IOCHRDY Enabled = enabled
1819 * CS8900 defaults to half-duplex if not specified on command-line
1820 * CS8920 defaults to autoneg if not specified on command-line
1821 * Use reset defaults for other config parameters
1824 * media type specified is supported (circuitry is present)
1825 * if memory address is > 1MB, then required mem decode hw is present
1826 * if 10B-2, then agent other than driver will enable DC/DC converter
1827 (hw or software util)
1832 int __init init_module(void)
1834 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1835 struct net_local *lp;
1847 dev->base_addr = io;
1848 lp = netdev_priv(dev);
1852 lp->use_dma = use_dma;
1854 lp->dmasize = dmasize;
1858 spin_lock_init(&lp->lock);
1860 /* boy, they'd better get these right */
1861 if (!strcmp(media, "rj45"))
1862 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1863 else if (!strcmp(media, "aui"))
1864 lp->adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI;
1865 else if (!strcmp(media, "bnc"))
1866 lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2;
1868 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1871 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1874 printk(KERN_ERR "cs89x0.c: Module autoprobing not allowed.\n");
1875 printk(KERN_ERR "cs89x0.c: Append io=0xNNN\n");
1878 } else if (io <= 0x1ff) {
1884 if (use_dma && dmasize != 16 && dmasize != 64) {
1885 printk(KERN_ERR "cs89x0.c: dma size must be either 16K or 64K, not %dK\n", dmasize);
1890 ret = cs89x0_probe1(dev, io, 1);
1902 cleanup_module(void)
1904 unregister_netdev(dev_cs89x0);
1905 writeword(dev_cs89x0->base_addr, ADD_PORT, PP_ChipID);
1906 release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
1907 free_netdev(dev_cs89x0);
1909 #endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
1911 #ifdef CONFIG_CS89x0_PLATFORM
1912 static int __init cs89x0_platform_probe(struct platform_device *pdev)
1914 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1915 struct net_local *lp;
1916 struct resource *mem_res;
1922 lp = netdev_priv(dev);
1924 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1925 dev->irq = platform_get_irq(pdev, 0);
1926 if (mem_res == NULL || dev->irq <= 0) {
1927 dev_warn(&dev->dev, "memory/interrupt resource missing.\n");
1932 lp->phys_addr = mem_res->start;
1933 lp->size = resource_size(mem_res);
1934 if (!request_mem_region(lp->phys_addr, lp->size, DRV_NAME)) {
1935 dev_warn(&dev->dev, "request_mem_region() failed.\n");
1940 lp->virt_addr = ioremap(lp->phys_addr, lp->size);
1941 if (!lp->virt_addr) {
1942 dev_warn(&dev->dev, "ioremap() failed.\n");
1947 err = cs89x0_probe1(dev, (unsigned long)lp->virt_addr, 0);
1949 dev_warn(&dev->dev, "no cs8900 or cs8920 detected.\n");
1953 platform_set_drvdata(pdev, dev);
1957 iounmap(lp->virt_addr);
1959 release_mem_region(lp->phys_addr, lp->size);
1965 static int cs89x0_platform_remove(struct platform_device *pdev)
1967 struct net_device *dev = platform_get_drvdata(pdev);
1968 struct net_local *lp = netdev_priv(dev);
1970 unregister_netdev(dev);
1971 iounmap(lp->virt_addr);
1972 release_mem_region(lp->phys_addr, lp->size);
1977 static struct platform_driver cs89x0_driver = {
1980 .owner = THIS_MODULE,
1982 .remove = cs89x0_platform_remove,
1985 static int __init cs89x0_init(void)
1987 return platform_driver_probe(&cs89x0_driver, cs89x0_platform_probe);
1990 module_init(cs89x0_init);
1992 static void __exit cs89x0_cleanup(void)
1994 platform_driver_unregister(&cs89x0_driver);
1997 module_exit(cs89x0_cleanup);
1999 #endif /* CONFIG_CS89x0_PLATFORM */
2003 * version-control: t
2004 * kept-new-versions: 5