1 /* cs89x0.c: A Crystal Semiconductor (Now Cirrus Logic) CS89[02]0
3 * Written 1996 by Russell Nelson, with reference to skeleton.c
4 * written 1993-1994 by Donald Becker.
6 * This software may be used and distributed according to the terms
7 * of the GNU General Public License, incorporated herein by reference.
9 * The author may be reached at nelson@crynwr.com, Crynwr
10 * Software, 521 Pleasant Valley Rd., Potsdam, NY 13676
13 * Mike Cruse : mcruse@cti-ltd.com
15 * Melody Lee : ethernet@crystal.cirrus.com
18 * Oskar Schirmer : oskar@scara.com
19 * Deepak Saxena : dsaxena@plexity.net
20 * Dmitry Pervushin : dpervushin@ru.mvista.com
21 * Deepak Saxena : dsaxena@plexity.net
22 * Domenico Andreoli : cavokz@gmail.com
27 * Set this to zero to disable DMA code
29 * Note that even if DMA is turned off we still support the 'dma' and 'use_dma'
30 * module options so we don't break any startup scripts.
32 #ifndef CONFIG_ISA_DMA_API
39 * Set this to zero to remove all the debug statements via
40 * dead code elimination
45 * Crynwr packet driver epktisa.
46 * Crystal Semiconductor data sheets.
49 #include <linux/module.h>
50 #include <linux/printk.h>
51 #include <linux/errno.h>
52 #include <linux/netdevice.h>
53 #include <linux/etherdevice.h>
54 #include <linux/platform_device.h>
55 #include <linux/kernel.h>
56 #include <linux/types.h>
57 #include <linux/fcntl.h>
58 #include <linux/interrupt.h>
59 #include <linux/ioport.h>
61 #include <linux/skbuff.h>
62 #include <linux/spinlock.h>
63 #include <linux/string.h>
64 #include <linux/init.h>
65 #include <linux/bitops.h>
66 #include <linux/delay.h>
67 #include <linux/gfp.h>
71 #include <linux/atomic.h>
78 static char version[] __initdata =
79 "cs89x0.c: v2.4.3-pre1 Russell Nelson <nelson@crynwr.com>, Andrew Morton\n";
81 #define DRV_NAME "cs89x0"
83 /* First, a few definitions that the brave might change.
84 * A zero-terminated list of I/O addresses to be probed. Some special flags..
85 * Addr & 1 = Read back the address port, look for signature and reset
86 * the page window before probing
87 * Addr & 3 = Reset the page window and probe
88 * The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
89 * but it is possible that a Cirrus board could be plugged into the ISA
92 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
93 * them to system IRQ numbers. This mapping is card specific and is set to
94 * the configuration of the Cirrus Eval board for this chip.
96 #if defined(CONFIG_MACH_IXDP2351)
97 #define CS89x0_NONISA_IRQ
98 static unsigned int netcard_portlist[] __used __initdata = {IXDP2351_VIRT_CS8900_BASE, 0};
99 static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0};
100 #elif defined(CONFIG_ARCH_IXDP2X01)
101 #define CS89x0_NONISA_IRQ
102 static unsigned int netcard_portlist[] __used __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
103 static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};
105 #ifndef CONFIG_CS89x0_PLATFORM
106 static unsigned int netcard_portlist[] __used __initdata =
107 { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
108 static unsigned int cs8900_irq_map[] = {10, 11, 12, 5};
113 static unsigned int net_debug = DEBUGGING;
115 #define net_debug 0 /* gcc will remove all the debug code for us */
118 /* The number of low I/O ports used by the ethercard. */
119 #define NETCARD_IO_EXTENT 16
121 /* we allow the user to override various values normally set in the EEPROM */
122 #define FORCE_RJ45 0x0001 /* pick one of these three */
123 #define FORCE_AUI 0x0002
124 #define FORCE_BNC 0x0004
126 #define FORCE_AUTO 0x0010 /* pick one of these three */
127 #define FORCE_HALF 0x0020
128 #define FORCE_FULL 0x0030
130 /* Information that need to be kept for each board. */
132 int chip_type; /* one of: CS8900, CS8920, CS8920M */
133 char chip_revision; /* revision letter of the chip ('A'...) */
134 int send_cmd; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
135 int auto_neg_cnf; /* auto-negotiation word from EEPROM */
136 int adapter_cnf; /* adapter configuration from EEPROM */
137 int isa_config; /* ISA configuration from EEPROM */
138 int irq_map; /* IRQ map from EEPROM */
139 int rx_mode; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
140 int curr_rx_cfg; /* a copy of PP_RxCFG */
141 int linectl; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
142 int send_underrun; /* keep track of how many underruns in a row we get */
143 int force; /* force various values; see FORCE* above. */
145 void __iomem *virt_addr;/* CS89x0 virtual address. */
146 unsigned long size; /* Length of CS89x0 memory region. */
148 int use_dma; /* Flag: we're using dma */
149 int dma; /* DMA channel */
150 int dmasize; /* 16 or 64 */
151 unsigned char *dma_buff; /* points to the beginning of the buffer */
152 unsigned char *end_dma_buff; /* points to the end of the buffer */
153 unsigned char *rx_dma_ptr; /* points to the next packet */
157 /* Index to functions, as function prototypes. */
158 static int net_open(struct net_device *dev);
159 static netdev_tx_t net_send_packet(struct sk_buff *skb, struct net_device *dev);
160 static irqreturn_t net_interrupt(int irq, void *dev_id);
161 static void set_multicast_list(struct net_device *dev);
162 static void net_timeout(struct net_device *dev);
163 static void net_rx(struct net_device *dev);
164 static int net_close(struct net_device *dev);
165 static struct net_device_stats *net_get_stats(struct net_device *dev);
166 static void reset_chip(struct net_device *dev);
167 static int get_eeprom_data(struct net_device *dev, int off, int len, int *buffer);
168 static int get_eeprom_cksum(int off, int len, int *buffer);
169 static int set_mac_address(struct net_device *dev, void *addr);
170 static void count_rx_errors(int status, struct net_device *dev);
171 #ifdef CONFIG_NET_POLL_CONTROLLER
172 static void net_poll_controller(struct net_device *dev);
175 static void get_dma_channel(struct net_device *dev);
176 static void release_dma_buff(struct net_local *lp);
179 /* Example routines you must write ;->. */
180 #define tx_done(dev) 1
183 * Permit 'cs89x0_dma=N' in the kernel boot environment
187 static int g_cs89x0_dma;
189 static int __init dma_fn(char *str)
191 g_cs89x0_dma = simple_strtol(str, NULL, 0);
195 __setup("cs89x0_dma=", dma_fn);
196 #endif /* ALLOW_DMA */
198 static int g_cs89x0_media__force;
200 static int __init media_fn(char *str)
202 if (!strcmp(str, "rj45")) g_cs89x0_media__force = FORCE_RJ45;
203 else if (!strcmp(str, "aui")) g_cs89x0_media__force = FORCE_AUI;
204 else if (!strcmp(str, "bnc")) g_cs89x0_media__force = FORCE_BNC;
208 __setup("cs89x0_media=", media_fn);
211 #if defined(CONFIG_MACH_IXDP2351)
213 readword(unsigned long base_addr, int portno)
215 return __raw_readw(base_addr + (portno << 1));
219 writeword(unsigned long base_addr, int portno, u16 value)
221 __raw_writew(value, base_addr + (portno << 1));
223 #elif defined(CONFIG_ARCH_IXDP2X01)
225 readword(unsigned long base_addr, int portno)
227 return __raw_readl(base_addr + (portno << 1));
231 writeword(unsigned long base_addr, int portno, u16 value)
233 __raw_writel(value, base_addr + (portno << 1));
237 static void readwords(struct net_local *lp, int portno, void *buf, int length)
239 u8 *buf8 = (u8 *)buf;
244 tmp16 = ioread16(lp->virt_addr + portno);
246 *buf8++ = (u8)(tmp16 >> 8);
250 static void writewords(struct net_local *lp, int portno, void *buf, int length)
252 u8 *buf8 = (u8 *)buf;
258 tmp16 |= (*buf8++) << 8;
259 iowrite16(tmp16, lp->virt_addr + portno);
264 readreg(struct net_device *dev, u16 regno)
266 struct net_local *lp = netdev_priv(dev);
268 iowrite16(regno, lp->virt_addr + ADD_PORT);
269 return ioread16(lp->virt_addr + DATA_PORT);
273 writereg(struct net_device *dev, u16 regno, u16 value)
275 struct net_local *lp = netdev_priv(dev);
277 iowrite16(regno, lp->virt_addr + ADD_PORT);
278 iowrite16(value, lp->virt_addr + DATA_PORT);
282 wait_eeprom_ready(struct net_device *dev)
284 int timeout = jiffies;
285 /* check to see if the EEPROM is ready,
286 * a timeout is used just in case EEPROM is ready when
287 * SI_BUSY in the PP_SelfST is clear
289 while (readreg(dev, PP_SelfST) & SI_BUSY)
290 if (jiffies - timeout >= 40)
296 get_eeprom_data(struct net_device *dev, int off, int len, int *buffer)
300 if (net_debug > 3) printk("EEPROM data from %x for %x:\n", off, len);
301 for (i = 0; i < len; i++) {
302 if (wait_eeprom_ready(dev) < 0) return -1;
303 /* Now send the EEPROM read command and EEPROM location to read */
304 writereg(dev, PP_EECMD, (off + i) | EEPROM_READ_CMD);
305 if (wait_eeprom_ready(dev) < 0) return -1;
306 buffer[i] = readreg(dev, PP_EEData);
307 if (net_debug > 3) printk("%04x ", buffer[i]);
309 if (net_debug > 3) printk("\n");
314 get_eeprom_cksum(int off, int len, int *buffer)
319 for (i = 0; i < len; i++)
327 #ifdef CONFIG_NET_POLL_CONTROLLER
329 * Polling receive - used by netconsole and other diagnostic tools
330 * to allow network i/o with interrupts disabled.
332 static void net_poll_controller(struct net_device *dev)
334 disable_irq(dev->irq);
335 net_interrupt(dev->irq, dev);
336 enable_irq(dev->irq);
340 static const struct net_device_ops net_ops = {
341 .ndo_open = net_open,
342 .ndo_stop = net_close,
343 .ndo_tx_timeout = net_timeout,
344 .ndo_start_xmit = net_send_packet,
345 .ndo_get_stats = net_get_stats,
346 .ndo_set_rx_mode = set_multicast_list,
347 .ndo_set_mac_address = set_mac_address,
348 #ifdef CONFIG_NET_POLL_CONTROLLER
349 .ndo_poll_controller = net_poll_controller,
351 .ndo_change_mtu = eth_change_mtu,
352 .ndo_validate_addr = eth_validate_addr,
355 /* This is the real probe routine.
356 * Linux has a history of friendly device probes on the ISA bus.
357 * A good device probes avoids doing writes, and
358 * verifies that the correct device exists and functions.
359 * Return 0 on success.
362 cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
364 struct net_local *lp = netdev_priv(dev);
365 static unsigned version_printed;
368 unsigned rev_type = 0;
369 int eeprom_buff[CHKSUM_LEN];
372 /* Initialize the device structure. */
374 memset(lp, 0, sizeof(*lp));
375 spin_lock_init(&lp->lock);
380 lp->dma = g_cs89x0_dma;
381 lp->dmasize = 16; /* Could make this an option... */
384 lp->force = g_cs89x0_media__force;
388 printk(KERN_DEBUG "PP_addr at %p[%x]: 0x%x\n",
389 ioaddr, ADD_PORT, ioread16(ioaddr + ADD_PORT));
390 iowrite16(PP_ChipID, ioaddr + ADD_PORT);
392 tmp = ioread16(ioaddr + DATA_PORT);
393 if (tmp != CHIP_EISA_ID_SIG) {
394 printk(KERN_DEBUG "%s: incorrect signature at %p[%x]: 0x%x!="
395 CHIP_EISA_ID_SIG_STR "\n",
396 dev->name, ioaddr, DATA_PORT, tmp);
401 lp->virt_addr = ioaddr;
403 /* get the chip type */
404 rev_type = readreg(dev, PRODUCT_ID_ADD);
405 lp->chip_type = rev_type & ~REVISON_BITS;
406 lp->chip_revision = ((rev_type & REVISON_BITS) >> 8) + 'A';
408 /* Check the chip type and revision in order to set the correct send command
409 CS8920 revision C and CS8900 revision F can use the faster send. */
410 lp->send_cmd = TX_AFTER_381;
411 if (lp->chip_type == CS8900 && lp->chip_revision >= 'F')
412 lp->send_cmd = TX_NOW;
413 if (lp->chip_type != CS8900 && lp->chip_revision >= 'C')
414 lp->send_cmd = TX_NOW;
416 if (net_debug && version_printed++ == 0)
419 printk(KERN_INFO "%s: cs89%c0%s rev %c found at %p ",
421 lp->chip_type == CS8900 ? '0' : '2',
422 lp->chip_type == CS8920M ? "M" : "",
428 /* Here we read the current configuration of the chip.
429 * If there is no Extended EEPROM then the idea is to not disturb
430 * the chip configuration, it should have been correctly setup by
431 * automatic EEPROM read on reset. So, if the chip says it read
432 * the EEPROM the driver will always do *something* instead of
433 * complain that adapter_cnf is 0.
436 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) ==
437 (EEPROM_OK|EEPROM_PRESENT)) {
439 for (i = 0; i < ETH_ALEN / 2; i++) {
441 Addr = readreg(dev, PP_IA + i * 2);
442 dev->dev_addr[i * 2] = Addr & 0xFF;
443 dev->dev_addr[i * 2 + 1] = Addr >> 8;
446 /* Load the Adapter Configuration.
447 * Note: Barring any more specific information from some
448 * other source (ie EEPROM+Schematics), we would not know
449 * how to operate a 10Base2 interface on the AUI port.
450 * However, since we do read the status of HCB1 and use
451 * settings that always result in calls to control_dc_dc(dev,0)
452 * a BNC interface should work if the enable pin
453 * (dc/dc converter) is on HCB1.
454 * It will be called AUI however.
458 i = readreg(dev, PP_LineCTL);
459 /* Preserve the setting of the HCB1 pin. */
460 if ((i & (HCB1 | HCB1_ENBL)) == (HCB1 | HCB1_ENBL))
461 lp->adapter_cnf |= A_CNF_DC_DC_POLARITY;
462 /* Save the sqelch bit */
463 if ((i & LOW_RX_SQUELCH) == LOW_RX_SQUELCH)
464 lp->adapter_cnf |= A_CNF_EXTND_10B_2 | A_CNF_LOW_RX_SQUELCH;
465 /* Check if the card is in 10Base-t only mode */
466 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == 0)
467 lp->adapter_cnf |= A_CNF_10B_T | A_CNF_MEDIA_10B_T;
468 /* Check if the card is in AUI only mode */
469 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUI_ONLY)
470 lp->adapter_cnf |= A_CNF_AUI | A_CNF_MEDIA_AUI;
471 /* Check if the card is in Auto mode. */
472 if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET)
473 lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T |
474 A_CNF_MEDIA_AUI | A_CNF_MEDIA_10B_T | A_CNF_MEDIA_AUTO;
477 printk(KERN_INFO "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
478 dev->name, i, lp->adapter_cnf);
480 /* IRQ. Other chips already probe, see below. */
481 if (lp->chip_type == CS8900)
482 lp->isa_config = readreg(dev, PP_CS8900_ISAINT) & INT_NO_MASK;
484 printk("[Cirrus EEPROM] ");
489 /* First check to see if an EEPROM is attached. */
491 if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0)
492 printk(KERN_WARNING "cs89x0: No EEPROM, relying on command line....\n");
493 else if (get_eeprom_data(dev, START_EEPROM_DATA, CHKSUM_LEN, eeprom_buff) < 0) {
494 printk(KERN_WARNING "\ncs89x0: EEPROM read failed, relying on command line.\n");
495 } else if (get_eeprom_cksum(START_EEPROM_DATA, CHKSUM_LEN, eeprom_buff) < 0) {
496 /* Check if the chip was able to read its own configuration starting
498 if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) !=
499 (EEPROM_OK | EEPROM_PRESENT))
500 printk(KERN_WARNING "cs89x0: Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
503 /* This reads an extended EEPROM that is not documented
504 * in the CS8900 datasheet.
507 /* get transmission control word but keep the autonegotiation bits */
508 if (!lp->auto_neg_cnf) lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2];
509 /* Store adapter configuration */
510 if (!lp->adapter_cnf) lp->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET/2];
511 /* Store ISA configuration */
512 lp->isa_config = eeprom_buff[ISA_CNF_OFFSET/2];
513 dev->mem_start = eeprom_buff[PACKET_PAGE_OFFSET/2] << 8;
515 /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
516 /* store the initial memory base address */
517 for (i = 0; i < ETH_ALEN / 2; i++) {
518 dev->dev_addr[i * 2] = eeprom_buff[i];
519 dev->dev_addr[i * 2 + 1] = eeprom_buff[i] >> 8;
522 printk(KERN_DEBUG "%s: new adapter_cnf: 0x%x\n",
523 dev->name, lp->adapter_cnf);
526 /* allow them to force multiple transceivers. If they force multiple, autosense */
529 if (lp->force & FORCE_RJ45) {lp->adapter_cnf |= A_CNF_10B_T; count++; }
530 if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_AUI; count++; }
531 if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_10B_2; count++; }
532 if (count > 1) {lp->adapter_cnf |= A_CNF_MEDIA_AUTO; }
533 else if (lp->force & FORCE_RJ45){lp->adapter_cnf |= A_CNF_MEDIA_10B_T; }
534 else if (lp->force & FORCE_AUI) {lp->adapter_cnf |= A_CNF_MEDIA_AUI; }
535 else if (lp->force & FORCE_BNC) {lp->adapter_cnf |= A_CNF_MEDIA_10B_2; }
539 printk(KERN_DEBUG "%s: after force 0x%x, adapter_cnf=0x%x\n",
540 dev->name, lp->force, lp->adapter_cnf);
542 /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
544 /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
546 /* FIXME: we don't set the Ethernet address on the command line. Use
547 * ifconfig IFACE hw ether AABBCCDDEEFF
550 printk(KERN_INFO "cs89x0 media %s%s%s",
551 (lp->adapter_cnf & A_CNF_10B_T) ? "RJ-45," : "",
552 (lp->adapter_cnf & A_CNF_AUI) ? "AUI," : "",
553 (lp->adapter_cnf & A_CNF_10B_2) ? "BNC," : "");
555 lp->irq_map = 0xffff;
557 /* If this is a CS8900 then no pnp soft */
558 if (lp->chip_type != CS8900 &&
559 /* Check if the ISA IRQ has been set */
560 (i = readreg(dev, PP_CS8920_ISAINT) & 0xff,
561 (i != 0 && i < CS8920_NO_INTS))) {
565 i = lp->isa_config & INT_NO_MASK;
566 #ifndef CONFIG_CS89x0_PLATFORM
567 if (lp->chip_type == CS8900) {
568 #ifdef CS89x0_NONISA_IRQ
569 i = cs8900_irq_map[0];
571 /* Translate the IRQ using the IRQ mapping table. */
572 if (i >= ARRAY_SIZE(cs8900_irq_map))
573 printk("\ncs89x0: invalid ISA interrupt number %d\n", i);
575 i = cs8900_irq_map[i];
577 lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */
579 int irq_map_buff[IRQ_MAP_LEN/2];
581 if (get_eeprom_data(dev, IRQ_MAP_EEPROM_DATA,
583 irq_map_buff) >= 0) {
584 if ((irq_map_buff[0] & 0xff) == PNP_IRQ_FRMT)
585 lp->irq_map = (irq_map_buff[0] >> 8) | (irq_map_buff[1] << 8);
594 printk(" IRQ %d", dev->irq);
598 get_dma_channel(dev);
599 printk(", DMA %d", dev->dma);
604 printk(", programmed I/O");
607 /* print the ethernet address. */
608 printk(", MAC %pM", dev->dev_addr);
610 dev->netdev_ops = &net_ops;
611 dev->watchdog_timeo = HZ;
615 printk("cs89x0_probe1() successful\n");
617 retval = register_netdev(dev);
622 iowrite16(PP_ChipID, lp->virt_addr + ADD_PORT);
627 #ifndef CONFIG_CS89x0_PLATFORM
629 * This function converts the I/O port addres used by the cs89x0_probe() and
630 * init_module() functions to the I/O memory address used by the
631 * cs89x0_probe1() function.
634 cs89x0_ioport_probe(struct net_device *dev, unsigned long ioport, int modular)
636 struct net_local *lp = netdev_priv(dev);
638 void __iomem *io_mem;
643 dev->base_addr = ioport;
645 if (!request_region(ioport, NETCARD_IO_EXTENT, DRV_NAME)) {
650 io_mem = ioport_map(ioport & ~3, NETCARD_IO_EXTENT);
656 /* if they give us an odd I/O address, then do ONE write to
657 * the address port, to get it back to address zero, where we
658 * expect to find the EISA signature word. An IO with a base of 0x3
659 * will skip the test for the ADD_PORT.
663 printk(KERN_INFO "%s: odd ioaddr 0x%lx\n",
666 if ((ioport & 2) != 2)
667 if ((ioread16(io_mem + ADD_PORT) & ADD_MASK) !=
669 printk(KERN_ERR "%s: bad signature 0x%x\n",
671 ioread16(io_mem + ADD_PORT));
677 ret = cs89x0_probe1(dev, io_mem, modular);
681 ioport_unmap(io_mem);
683 release_region(ioport, NETCARD_IO_EXTENT);
689 /* Check for a network adaptor of this type, and return '0' iff one exists.
690 * If dev->base_addr == 0, probe all likely locations.
691 * If dev->base_addr == 1, always return failure.
692 * If dev->base_addr == 2, allocate space for the device and return success
693 * (detachable devices only).
694 * Return 0 on success.
697 struct net_device * __init cs89x0_probe(int unit)
699 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
706 return ERR_PTR(-ENODEV);
708 sprintf(dev->name, "eth%d", unit);
709 netdev_boot_setup_check(dev);
714 printk(KERN_INFO "cs89x0:cs89x0_probe(0x%x)\n", io);
716 if (io > 0x1ff) { /* Check a single specified location. */
717 err = cs89x0_ioport_probe(dev, io, 0);
718 } else if (io != 0) { /* Don't probe at all. */
721 for (port = netcard_portlist; *port; port++) {
722 if (cs89x0_ioport_probe(dev, *port, 0) == 0)
734 printk(KERN_WARNING "cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
740 /*********************************
741 * This page contains DMA routines
742 *********************************/
746 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1)>>17 == (long)(ptr2)>>17)
749 get_dma_channel(struct net_device *dev)
751 struct net_local *lp = netdev_priv(dev);
755 lp->isa_config |= ISA_RxDMA;
757 if ((lp->isa_config & ANY_ISA_DMA) == 0)
759 dev->dma = lp->isa_config & DMA_NO_MASK;
760 if (lp->chip_type == CS8900)
762 if (dev->dma < 5 || dev->dma > 7) {
763 lp->isa_config &= ~ANY_ISA_DMA;
770 write_dma(struct net_device *dev, int chip_type, int dma)
772 struct net_local *lp = netdev_priv(dev);
773 if ((lp->isa_config & ANY_ISA_DMA) == 0)
775 if (chip_type == CS8900) {
776 writereg(dev, PP_CS8900_ISADMA, dma-5);
778 writereg(dev, PP_CS8920_ISADMA, dma);
783 set_dma_cfg(struct net_device *dev)
785 struct net_local *lp = netdev_priv(dev);
788 if ((lp->isa_config & ANY_ISA_DMA) == 0) {
790 printk("set_dma_cfg(): no DMA\n");
793 if (lp->isa_config & ISA_RxDMA) {
794 lp->curr_rx_cfg |= RX_DMA_ONLY;
796 printk("set_dma_cfg(): RX_DMA_ONLY\n");
798 lp->curr_rx_cfg |= AUTO_RX_DMA; /* not that we support it... */
800 printk("set_dma_cfg(): AUTO_RX_DMA\n");
806 dma_bufcfg(struct net_device *dev)
808 struct net_local *lp = netdev_priv(dev);
810 return (lp->isa_config & ANY_ISA_DMA) ? RX_DMA_ENBL : 0;
816 dma_busctl(struct net_device *dev)
819 struct net_local *lp = netdev_priv(dev);
821 if (lp->isa_config & ANY_ISA_DMA)
822 retval |= RESET_RX_DMA; /* Reset the DMA pointer */
823 if (lp->isa_config & DMA_BURST)
824 retval |= DMA_BURST_MODE; /* Does ISA config specify DMA burst ? */
825 if (lp->dmasize == 64)
826 retval |= RX_DMA_SIZE_64K; /* did they ask for 64K? */
827 retval |= MEMORY_ON; /* we need memory enabled to use DMA. */
833 dma_rx(struct net_device *dev)
835 struct net_local *lp = netdev_priv(dev);
838 unsigned char *bp = lp->rx_dma_ptr;
840 status = bp[0] + (bp[1]<<8);
841 length = bp[2] + (bp[3]<<8);
844 printk("%s: receiving DMA packet at %lx, status %x, length %x\n",
845 dev->name, (unsigned long)bp, status, length);
847 if ((status & RX_OK) == 0) {
848 count_rx_errors(status, dev);
849 goto skip_this_frame;
852 /* Malloc up new buffer. */
853 skb = netdev_alloc_skb(dev, length + 2);
855 if (net_debug) /* I don't think we want to do this to a stressed system */
856 printk("%s: Memory squeeze, dropping packet.\n", dev->name);
857 dev->stats.rx_dropped++;
859 /* AKPM: advance bp to the next frame */
861 bp += (length + 3) & ~3;
862 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
866 skb_reserve(skb, 2); /* longword align L3 header */
868 if (bp + length > lp->end_dma_buff) {
869 int semi_cnt = lp->end_dma_buff - bp;
870 memcpy(skb_put(skb, semi_cnt), bp, semi_cnt);
871 memcpy(skb_put(skb, length - semi_cnt), lp->dma_buff,
874 memcpy(skb_put(skb, length), bp, length);
876 bp += (length + 3) & ~3;
877 if (bp >= lp->end_dma_buff) bp -= lp->dmasize*1024;
881 printk("%s: received %d byte DMA packet of type %x\n",
883 (skb->data[ETH_ALEN + ETH_ALEN] << 8) | skb->data[ETH_ALEN + ETH_ALEN + 1]);
885 skb->protocol = eth_type_trans(skb, dev);
887 dev->stats.rx_packets++;
888 dev->stats.rx_bytes += length;
891 #endif /* ALLOW_DMA */
893 static void __init reset_chip(struct net_device *dev)
895 #if !defined(CONFIG_MACH_MX31ADS)
896 #if !defined(CS89x0_NONISA_IRQ)
897 struct net_local *lp = netdev_priv(dev);
898 #endif /* CS89x0_NONISA_IRQ */
899 int reset_start_time;
901 writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
906 #if !defined(CS89x0_NONISA_IRQ)
907 if (lp->chip_type != CS8900) {
908 /* Hardware problem requires PNP registers to be reconfigured after a reset */
909 iowrite16(PP_CS8920_ISAINT, lp->virt_addr + ADD_PORT);
910 iowrite8(dev->irq, lp->virt_addr + DATA_PORT);
911 iowrite8(0, lp->virt_addr + DATA_PORT + 1);
913 iowrite16(PP_CS8920_ISAMemB, lp->virt_addr + ADD_PORT);
914 iowrite8((dev->mem_start >> 16) & 0xff,
915 lp->virt_addr + DATA_PORT);
916 iowrite8((dev->mem_start >> 8) & 0xff,
917 lp->virt_addr + DATA_PORT + 1);
919 #endif /* CS89x0_NONISA_IRQ */
921 /* Wait until the chip is reset */
922 reset_start_time = jiffies;
923 while ((readreg(dev, PP_SelfST) & INIT_DONE) == 0 && jiffies - reset_start_time < 2)
925 #endif /* !CONFIG_MACH_MX31ADS */
930 control_dc_dc(struct net_device *dev, int on_not_off)
932 struct net_local *lp = netdev_priv(dev);
933 unsigned int selfcontrol;
934 int timenow = jiffies;
935 /* control the DC to DC convertor in the SelfControl register.
936 Note: This is hooked up to a general purpose pin, might not
937 always be a DC to DC convertor. */
939 selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */
940 if (((lp->adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off)
943 selfcontrol &= ~HCB1;
944 writereg(dev, PP_SelfCTL, selfcontrol);
946 /* Wait for the DC/DC converter to power up - 500ms */
947 while (jiffies - timenow < HZ)
951 #define DETECTED_NONE 0
952 #define DETECTED_RJ45H 1
953 #define DETECTED_RJ45F 2
954 #define DETECTED_AUI 3
955 #define DETECTED_BNC 4
958 detect_tp(struct net_device *dev)
960 struct net_local *lp = netdev_priv(dev);
961 int timenow = jiffies;
964 if (net_debug > 1) printk("%s: Attempting TP\n", dev->name);
966 /* If connected to another full duplex capable 10-Base-T card the link pulses
967 seem to be lost when the auto detect bit in the LineCTL is set.
968 To overcome this the auto detect bit will be cleared whilst testing the
969 10-Base-T interface. This would not be necessary for the sparrow chip but
970 is simpler to do it anyway. */
971 writereg(dev, PP_LineCTL, lp->linectl & ~AUI_ONLY);
972 control_dc_dc(dev, 0);
974 /* Delay for the hardware to work out if the TP cable is present - 150ms */
975 for (timenow = jiffies; jiffies - timenow < 15; )
977 if ((readreg(dev, PP_LineST) & LINK_OK) == 0)
978 return DETECTED_NONE;
980 if (lp->chip_type == CS8900) {
981 switch (lp->force & 0xf0) {
984 printk("%s: cs8900 doesn't autonegotiate\n", dev->name);
985 return DETECTED_NONE;
987 /* CS8900 doesn't support AUTO, change to HALF*/
989 lp->force &= ~FORCE_AUTO;
990 lp->force |= FORCE_HALF;
995 writereg(dev, PP_TestCTL, readreg(dev, PP_TestCTL) | FDX_8900);
998 fdx = readreg(dev, PP_TestCTL) & FDX_8900;
1000 switch (lp->force & 0xf0) {
1002 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1005 lp->auto_neg_cnf = 0;
1008 lp->auto_neg_cnf = RE_NEG_NOW | ALLOW_FDX;
1012 writereg(dev, PP_AutoNegCTL, lp->auto_neg_cnf & AUTO_NEG_MASK);
1014 if ((lp->auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) {
1015 printk(KERN_INFO "%s: negotiating duplex...\n", dev->name);
1016 while (readreg(dev, PP_AutoNegST) & AUTO_NEG_BUSY) {
1017 if (jiffies - timenow > 4000) {
1018 printk(KERN_ERR "**** Full / half duplex auto-negotiation timed out ****\n");
1023 fdx = readreg(dev, PP_AutoNegST) & FDX_ACTIVE;
1026 return DETECTED_RJ45F;
1028 return DETECTED_RJ45H;
1031 /* send a test packet - return true if carrier bits are ok */
1033 send_test_pkt(struct net_device *dev)
1035 struct net_local *lp = netdev_priv(dev);
1036 char test_packet[] = { 0,0,0,0,0,0, 0,0,0,0,0,0,
1037 0, 46, /* A 46 in network order */
1038 0, 0, /* DSAP=0 & SSAP=0 fields */
1039 0xf3, 0 /* Control (Test Req + P bit set) */ };
1040 long timenow = jiffies;
1042 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_TX_ON);
1044 memcpy(test_packet, dev->dev_addr, ETH_ALEN);
1045 memcpy(test_packet + ETH_ALEN, dev->dev_addr, ETH_ALEN);
1047 iowrite16(TX_AFTER_ALL, lp->virt_addr + TX_CMD_PORT);
1048 iowrite16(ETH_ZLEN, lp->virt_addr + TX_LEN_PORT);
1050 /* Test to see if the chip has allocated memory for the packet */
1051 while (jiffies - timenow < 5)
1052 if (readreg(dev, PP_BusST) & READY_FOR_TX_NOW)
1054 if (jiffies - timenow >= 5)
1055 return 0; /* this shouldn't happen */
1057 /* Write the contents of the packet */
1058 writewords(lp, TX_FRAME_PORT, test_packet, (ETH_ZLEN+1) >> 1);
1060 if (net_debug > 1) printk("Sending test packet ");
1061 /* wait a couple of jiffies for packet to be received */
1062 for (timenow = jiffies; jiffies - timenow < 3; )
1064 if ((readreg(dev, PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) {
1065 if (net_debug > 1) printk("succeeded\n");
1068 if (net_debug > 1) printk("failed\n");
1074 detect_aui(struct net_device *dev)
1076 struct net_local *lp = netdev_priv(dev);
1078 if (net_debug > 1) printk("%s: Attempting AUI\n", dev->name);
1079 control_dc_dc(dev, 0);
1081 writereg(dev, PP_LineCTL, (lp->linectl & ~AUTO_AUI_10BASET) | AUI_ONLY);
1083 if (send_test_pkt(dev))
1084 return DETECTED_AUI;
1086 return DETECTED_NONE;
1090 detect_bnc(struct net_device *dev)
1092 struct net_local *lp = netdev_priv(dev);
1094 if (net_debug > 1) printk("%s: Attempting BNC\n", dev->name);
1095 control_dc_dc(dev, 1);
1097 writereg(dev, PP_LineCTL, (lp->linectl & ~AUTO_AUI_10BASET) | AUI_ONLY);
1099 if (send_test_pkt(dev))
1100 return DETECTED_BNC;
1102 return DETECTED_NONE;
1107 write_irq(struct net_device *dev, int chip_type, int irq)
1111 if (chip_type == CS8900) {
1112 #ifndef CONFIG_CS89x0_PLATFORM
1113 /* Search the mapping table for the corresponding IRQ pin. */
1114 for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
1115 if (cs8900_irq_map[i] == irq)
1118 if (i == ARRAY_SIZE(cs8900_irq_map))
1121 /* INTRQ0 pin is used for interrupt generation. */
1124 writereg(dev, PP_CS8900_ISAINT, i);
1126 writereg(dev, PP_CS8920_ISAINT, irq);
1130 /* Open/initialize the board. This is called (in the current kernel)
1131 sometime after booting when the 'ifconfig' program is run.
1133 This routine should set everything up anew at each open, even
1134 registers that "should" only need to be set once at boot, so that
1135 there is non-reboot way to recover if something goes wrong.
1138 /* AKPM: do we need to do any locking here? */
1141 net_open(struct net_device *dev)
1143 struct net_local *lp = netdev_priv(dev);
1149 /* Allow interrupts to be generated by the chip */
1150 /* Cirrus' release had this: */
1152 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) | ENABLE_IRQ);
1154 /* And 2.3.47 had this: */
1155 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1157 for (i = 2; i < CS8920_NO_INTS; i++) {
1158 if ((1 << i) & lp->irq_map) {
1159 if (request_irq(i, net_interrupt, 0, dev->name, dev) == 0) {
1161 write_irq(dev, lp->chip_type, i);
1162 /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
1168 if (i >= CS8920_NO_INTS) {
1169 writereg(dev, PP_BusCTL, 0); /* disable interrupts. */
1170 printk(KERN_ERR "cs89x0: can't get an interrupt\n");
1177 #if !defined(CS89x0_NONISA_IRQ) && !defined(CONFIG_CS89x0_PLATFORM)
1178 if (((1 << dev->irq) & lp->irq_map) == 0) {
1179 printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1180 dev->name, dev->irq, lp->irq_map);
1185 /* FIXME: Cirrus' release had this: */
1186 writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL)|ENABLE_IRQ);
1187 /* And 2.3.47 had this: */
1189 writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
1191 write_irq(dev, lp->chip_type, dev->irq);
1192 ret = request_irq(dev->irq, net_interrupt, 0, dev->name, dev);
1194 printk(KERN_ERR "cs89x0: request_irq(%d) failed\n", dev->irq);
1201 if (lp->isa_config & ANY_ISA_DMA) {
1202 unsigned long flags;
1203 lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
1204 get_order(lp->dmasize * 1024));
1206 if (!lp->dma_buff) {
1207 printk(KERN_ERR "%s: cannot get %dK memory for DMA\n", dev->name, lp->dmasize);
1210 if (net_debug > 1) {
1211 printk("%s: dma %lx %lx\n",
1213 (unsigned long)lp->dma_buff,
1214 (unsigned long)isa_virt_to_bus(lp->dma_buff));
1216 if ((unsigned long) lp->dma_buff >= MAX_DMA_ADDRESS ||
1217 !dma_page_eq(lp->dma_buff, lp->dma_buff+lp->dmasize*1024-1)) {
1218 printk(KERN_ERR "%s: not usable as DMA buffer\n", dev->name);
1221 memset(lp->dma_buff, 0, lp->dmasize * 1024); /* Why? */
1222 if (request_dma(dev->dma, dev->name)) {
1223 printk(KERN_ERR "%s: cannot get dma channel %d\n", dev->name, dev->dma);
1226 write_dma(dev, lp->chip_type, dev->dma);
1227 lp->rx_dma_ptr = lp->dma_buff;
1228 lp->end_dma_buff = lp->dma_buff + lp->dmasize*1024;
1229 spin_lock_irqsave(&lp->lock, flags);
1230 disable_dma(dev->dma);
1231 clear_dma_ff(dev->dma);
1232 set_dma_mode(dev->dma, DMA_RX_MODE); /* auto_init as well */
1233 set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));
1234 set_dma_count(dev->dma, lp->dmasize*1024);
1235 enable_dma(dev->dma);
1236 spin_unlock_irqrestore(&lp->lock, flags);
1239 #endif /* ALLOW_DMA */
1241 /* set the Ethernet address */
1242 for (i = 0; i < ETH_ALEN / 2; i++)
1243 writereg(dev, PP_IA + i * 2, dev->dev_addr[i * 2] | (dev->dev_addr[i * 2 + 1] << 8));
1245 /* while we're testing the interface, leave interrupts disabled */
1246 writereg(dev, PP_BusCTL, MEMORY_ON);
1248 /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
1249 if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) && (lp->adapter_cnf & A_CNF_LOW_RX_SQUELCH))
1250 lp->linectl = LOW_RX_SQUELCH;
1254 /* check to make sure that they have the "right" hardware available */
1255 switch (lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1256 case A_CNF_MEDIA_10B_T: result = lp->adapter_cnf & A_CNF_10B_T; break;
1257 case A_CNF_MEDIA_AUI: result = lp->adapter_cnf & A_CNF_AUI; break;
1258 case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
1259 default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
1262 printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name);
1267 release_dma_buff(lp);
1269 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) & ~(SERIAL_TX_ON | SERIAL_RX_ON));
1270 free_irq(dev->irq, dev);
1275 /* set the hardware to the configured choice */
1276 switch (lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1277 case A_CNF_MEDIA_10B_T:
1278 result = detect_tp(dev);
1279 if (result == DETECTED_NONE) {
1280 printk(KERN_WARNING "%s: 10Base-T (RJ-45) has no cable\n", dev->name);
1281 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1282 result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */
1285 case A_CNF_MEDIA_AUI:
1286 result = detect_aui(dev);
1287 if (result == DETECTED_NONE) {
1288 printk(KERN_WARNING "%s: 10Base-5 (AUI) has no cable\n", dev->name);
1289 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1290 result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */
1293 case A_CNF_MEDIA_10B_2:
1294 result = detect_bnc(dev);
1295 if (result == DETECTED_NONE) {
1296 printk(KERN_WARNING "%s: 10Base-2 (BNC) has no cable\n", dev->name);
1297 if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1298 result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */
1301 case A_CNF_MEDIA_AUTO:
1302 writereg(dev, PP_LineCTL, lp->linectl | AUTO_AUI_10BASET);
1303 if (lp->adapter_cnf & A_CNF_10B_T)
1304 if ((result = detect_tp(dev)) != DETECTED_NONE)
1306 if (lp->adapter_cnf & A_CNF_AUI)
1307 if ((result = detect_aui(dev)) != DETECTED_NONE)
1309 if (lp->adapter_cnf & A_CNF_10B_2)
1310 if ((result = detect_bnc(dev)) != DETECTED_NONE)
1312 printk(KERN_ERR "%s: no media detected\n", dev->name);
1317 printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name);
1319 case DETECTED_RJ45H:
1320 printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);
1322 case DETECTED_RJ45F:
1323 printk(KERN_INFO "%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);
1326 printk(KERN_INFO "%s: using 10Base-5 (AUI)\n", dev->name);
1329 printk(KERN_INFO "%s: using 10Base-2 (BNC)\n", dev->name);
1333 /* Turn on both receive and transmit operations */
1334 writereg(dev, PP_LineCTL, readreg(dev, PP_LineCTL) | SERIAL_RX_ON | SERIAL_TX_ON);
1336 /* Receive only error free packets addressed to this card */
1338 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT);
1340 lp->curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL;
1342 if (lp->isa_config & STREAM_TRANSFER)
1343 lp->curr_rx_cfg |= RX_STREAM_ENBL;
1347 writereg(dev, PP_RxCFG, lp->curr_rx_cfg);
1349 writereg(dev, PP_TxCFG, TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL |
1350 TX_LATE_COL_ENBL | TX_JBR_ENBL | TX_ANY_COL_ENBL | TX_16_COL_ENBL);
1352 writereg(dev, PP_BufCFG, READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL |
1356 TX_COL_COUNT_OVRFLOW_ENBL | TX_UNDERRUN_ENBL);
1358 /* now that we've got our act together, enable everything */
1359 writereg(dev, PP_BusCTL, ENABLE_IRQ
1360 | (dev->mem_start ? MEMORY_ON : 0) /* turn memory on */
1365 netif_start_queue(dev);
1367 printk("cs89x0: net_open() succeeded\n");
1373 static void net_timeout(struct net_device *dev)
1375 /* If we get here, some higher level has decided we are broken.
1376 There should really be a "kick me" function call instead. */
1377 if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name,
1378 tx_done(dev) ? "IRQ conflict ?" : "network cable problem");
1379 /* Try to restart the adaptor. */
1380 netif_wake_queue(dev);
1383 static netdev_tx_t net_send_packet(struct sk_buff *skb, struct net_device *dev)
1385 struct net_local *lp = netdev_priv(dev);
1386 unsigned long flags;
1388 if (net_debug > 3) {
1389 printk("%s: sent %d byte packet of type %x\n",
1390 dev->name, skb->len,
1391 (skb->data[ETH_ALEN + ETH_ALEN] << 8) | skb->data[ETH_ALEN + ETH_ALEN + 1]);
1394 /* keep the upload from being interrupted, since we
1395 ask the chip to start transmitting before the
1396 whole packet has been completely uploaded. */
1398 spin_lock_irqsave(&lp->lock, flags);
1399 netif_stop_queue(dev);
1401 /* initiate a transmit sequence */
1402 iowrite16(lp->send_cmd, lp->virt_addr + TX_CMD_PORT);
1403 iowrite16(skb->len, lp->virt_addr + TX_LEN_PORT);
1405 /* Test to see if the chip has allocated memory for the packet */
1406 if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) {
1407 /* Gasp! It hasn't. But that shouldn't happen since
1408 * we're waiting for TxOk, so return 1 and requeue this packet.
1411 spin_unlock_irqrestore(&lp->lock, flags);
1412 if (net_debug) printk("cs89x0: Tx buffer not free!\n");
1413 return NETDEV_TX_BUSY;
1415 /* Write the contents of the packet */
1416 writewords(lp, TX_FRAME_PORT, skb->data, (skb->len+1) >> 1);
1417 spin_unlock_irqrestore(&lp->lock, flags);
1418 dev->stats.tx_bytes += skb->len;
1421 /* We DO NOT call netif_wake_queue() here.
1422 * We also DO NOT call netif_start_queue().
1424 * Either of these would cause another bottom half run through
1425 * net_send_packet() before this packet has fully gone out. That causes
1426 * us to hit the "Gasp!" above and the send is rescheduled. it runs like
1427 * a dog. We just return and wait for the Tx completion interrupt handler
1428 * to restart the netdevice layer
1431 return NETDEV_TX_OK;
1434 /* The typical workload of the driver:
1435 * Handle the network interface interrupts.
1438 static irqreturn_t net_interrupt(int irq, void *dev_id)
1440 struct net_device *dev = dev_id;
1441 struct net_local *lp;
1445 lp = netdev_priv(dev);
1447 /* we MUST read all the events out of the ISQ, otherwise we'll never
1448 * get interrupted again. As a consequence, we can't have any limit
1449 * on the number of times we loop in the interrupt handler. The
1450 * hardware guarantees that eventually we'll run out of events. Of
1451 * course, if you're on a slow machine, and packets are arriving
1452 * faster than you can read them off, you're screwed. Hasta la
1455 while ((status = ioread16(lp->virt_addr + ISQ_PORT))) {
1456 if (net_debug > 4)printk("%s: event=%04x\n", dev->name, status);
1458 switch (status & ISQ_EVENT_MASK) {
1459 case ISQ_RECEIVER_EVENT:
1460 /* Got a packet(s). */
1463 case ISQ_TRANSMITTER_EVENT:
1464 dev->stats.tx_packets++;
1465 netif_wake_queue(dev); /* Inform upper layers. */
1466 if ((status & (TX_OK |
1470 TX_16_COL)) != TX_OK) {
1471 if ((status & TX_OK) == 0)
1472 dev->stats.tx_errors++;
1473 if (status & TX_LOST_CRS)
1474 dev->stats.tx_carrier_errors++;
1475 if (status & TX_SQE_ERROR)
1476 dev->stats.tx_heartbeat_errors++;
1477 if (status & TX_LATE_COL)
1478 dev->stats.tx_window_errors++;
1479 if (status & TX_16_COL)
1480 dev->stats.tx_aborted_errors++;
1483 case ISQ_BUFFER_EVENT:
1484 if (status & READY_FOR_TX) {
1485 /* we tried to transmit a packet earlier,
1486 * but inexplicably ran out of buffers.
1487 * That shouldn't happen since we only ever
1488 * load one packet. Shrug. Do the right
1491 netif_wake_queue(dev); /* Inform upper layers. */
1493 if (status & TX_UNDERRUN) {
1494 if (net_debug > 0) printk("%s: transmit underrun\n", dev->name);
1495 lp->send_underrun++;
1496 if (lp->send_underrun == 3) lp->send_cmd = TX_AFTER_381;
1497 else if (lp->send_underrun == 6) lp->send_cmd = TX_AFTER_ALL;
1498 /* transmit cycle is done, although
1499 * frame wasn't transmitted - this
1500 * avoids having to wait for the upper
1501 * layers to timeout on us, in the
1502 * event of a tx underrun
1504 netif_wake_queue(dev); /* Inform upper layers. */
1507 if (lp->use_dma && (status & RX_DMA)) {
1508 int count = readreg(dev, PP_DmaFrameCnt);
1511 printk("%s: receiving %d DMA frames\n", dev->name, count);
1512 if (net_debug > 2 && count > 1)
1513 printk("%s: receiving %d DMA frames\n", dev->name, count);
1516 count = readreg(dev, PP_DmaFrameCnt);
1517 if (net_debug > 2 && count > 0)
1518 printk("%s: continuing with %d DMA frames\n", dev->name, count);
1523 case ISQ_RX_MISS_EVENT:
1524 dev->stats.rx_missed_errors += (status >> 6);
1526 case ISQ_TX_COL_EVENT:
1527 dev->stats.collisions += (status >> 6);
1531 return IRQ_RETVAL(handled);
1535 count_rx_errors(int status, struct net_device *dev)
1537 dev->stats.rx_errors++;
1538 if (status & RX_RUNT)
1539 dev->stats.rx_length_errors++;
1540 if (status & RX_EXTRA_DATA)
1541 dev->stats.rx_length_errors++;
1542 if ((status & RX_CRC_ERROR) && !(status & (RX_EXTRA_DATA|RX_RUNT)))
1544 dev->stats.rx_crc_errors++;
1545 if (status & RX_DRIBBLE)
1546 dev->stats.rx_frame_errors++;
1549 /* We have a good packet(s), get it/them out of the buffers. */
1551 net_rx(struct net_device *dev)
1553 struct net_local *lp = netdev_priv(dev);
1554 struct sk_buff *skb;
1557 status = ioread16(lp->virt_addr + RX_FRAME_PORT);
1558 length = ioread16(lp->virt_addr + RX_FRAME_PORT);
1560 if ((status & RX_OK) == 0) {
1561 count_rx_errors(status, dev);
1565 /* Malloc up new buffer. */
1566 skb = netdev_alloc_skb(dev, length + 2);
1568 #if 0 /* Again, this seems a cruel thing to do */
1569 printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name);
1571 dev->stats.rx_dropped++;
1574 skb_reserve(skb, 2); /* longword align L3 header */
1576 readwords(lp, RX_FRAME_PORT, skb_put(skb, length), length >> 1);
1578 skb->data[length-1] = ioread16(lp->virt_addr + RX_FRAME_PORT);
1580 if (net_debug > 3) {
1581 printk("%s: received %d byte packet of type %x\n",
1583 (skb->data[ETH_ALEN + ETH_ALEN] << 8) | skb->data[ETH_ALEN + ETH_ALEN + 1]);
1586 skb->protocol = eth_type_trans(skb, dev);
1588 dev->stats.rx_packets++;
1589 dev->stats.rx_bytes += length;
1593 static void release_dma_buff(struct net_local *lp)
1596 free_pages((unsigned long)(lp->dma_buff), get_order(lp->dmasize * 1024));
1597 lp->dma_buff = NULL;
1602 /* The inverse routine to net_open(). */
1604 net_close(struct net_device *dev)
1607 struct net_local *lp = netdev_priv(dev);
1610 netif_stop_queue(dev);
1612 writereg(dev, PP_RxCFG, 0);
1613 writereg(dev, PP_TxCFG, 0);
1614 writereg(dev, PP_BufCFG, 0);
1615 writereg(dev, PP_BusCTL, 0);
1617 free_irq(dev->irq, dev);
1620 if (lp->use_dma && lp->dma) {
1622 release_dma_buff(lp);
1626 /* Update the statistics here. */
1630 /* Get the current statistics.
1631 * This may be called with the card open or closed.
1633 static struct net_device_stats *
1634 net_get_stats(struct net_device *dev)
1636 struct net_local *lp = netdev_priv(dev);
1637 unsigned long flags;
1639 spin_lock_irqsave(&lp->lock, flags);
1640 /* Update the statistics from the device registers. */
1641 dev->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);
1642 dev->stats.collisions += (readreg(dev, PP_TxCol) >> 6);
1643 spin_unlock_irqrestore(&lp->lock, flags);
1648 static void set_multicast_list(struct net_device *dev)
1650 struct net_local *lp = netdev_priv(dev);
1651 unsigned long flags;
1653 spin_lock_irqsave(&lp->lock, flags);
1654 if (dev->flags&IFF_PROMISC)
1656 lp->rx_mode = RX_ALL_ACCEPT;
1658 else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev))
1660 /* The multicast-accept list is initialized to accept-all, and we
1661 rely on higher-level filtering for now. */
1662 lp->rx_mode = RX_MULTCAST_ACCEPT;
1667 writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode);
1669 /* in promiscuous mode, we accept errored packets, so we have to enable interrupts on them also */
1670 writereg(dev, PP_RxCFG, lp->curr_rx_cfg |
1671 (lp->rx_mode == RX_ALL_ACCEPT ? (RX_CRC_ERROR_ENBL|RX_RUNT_ENBL|RX_EXTRA_DATA_ENBL) : 0));
1672 spin_unlock_irqrestore(&lp->lock, flags);
1676 static int set_mac_address(struct net_device *dev, void *p)
1679 struct sockaddr *addr = p;
1681 if (netif_running(dev))
1684 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
1687 printk("%s: Setting MAC address to %pM.\n",
1688 dev->name, dev->dev_addr);
1690 /* set the Ethernet address */
1691 for (i = 0; i < ETH_ALEN / 2; i++)
1692 writereg(dev, PP_IA + i * 2, dev->dev_addr[i * 2] | (dev->dev_addr[i * 2 + 1] << 8));
1697 #if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
1699 static struct net_device *dev_cs89x0;
1701 /* Support the 'debug' module parm even if we're compiled for non-debug to
1702 * avoid breaking someone's startup scripts
1708 static char media[8];
1709 static int duplex = -1;
1711 static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
1713 static int dmasize = 16; /* or 64 */
1715 module_param(io, int, 0);
1716 module_param(irq, int, 0);
1717 module_param(debug, int, 0);
1718 module_param_string(media, media, sizeof(media), 0);
1719 module_param(duplex, int, 0);
1720 module_param(dma , int, 0);
1721 module_param(dmasize , int, 0);
1722 module_param(use_dma , int, 0);
1723 MODULE_PARM_DESC(io, "cs89x0 I/O base address");
1724 MODULE_PARM_DESC(irq, "cs89x0 IRQ number");
1726 MODULE_PARM_DESC(debug, "cs89x0 debug level (0-6)");
1728 MODULE_PARM_DESC(debug, "(ignored)");
1730 MODULE_PARM_DESC(media, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1731 /* No other value than -1 for duplex seems to be currently interpreted */
1732 MODULE_PARM_DESC(duplex, "(ignored)");
1734 MODULE_PARM_DESC(dma , "cs89x0 ISA DMA channel; ignored if use_dma=0");
1735 MODULE_PARM_DESC(dmasize , "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1736 MODULE_PARM_DESC(use_dma , "cs89x0 using DMA (0-1)");
1738 MODULE_PARM_DESC(dma , "(ignored)");
1739 MODULE_PARM_DESC(dmasize , "(ignored)");
1740 MODULE_PARM_DESC(use_dma , "(ignored)");
1743 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton");
1744 MODULE_LICENSE("GPL");
1747 * media=t - specify media type
1751 * duplex=0 - specify forced half/full/autonegotiate duplex
1752 * debug=# - debug level
1754 * Default Chip Configuration:
1755 * DMA Burst = enabled
1756 * IOCHRDY Enabled = enabled
1758 * CS8900 defaults to half-duplex if not specified on command-line
1759 * CS8920 defaults to autoneg if not specified on command-line
1760 * Use reset defaults for other config parameters
1763 * media type specified is supported (circuitry is present)
1764 * if memory address is > 1MB, then required mem decode hw is present
1765 * if 10B-2, then agent other than driver will enable DC/DC converter
1766 * (hw or software util)
1769 int __init init_module(void)
1771 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1772 struct net_local *lp;
1784 dev->base_addr = io;
1785 lp = netdev_priv(dev);
1789 lp->use_dma = use_dma;
1791 lp->dmasize = dmasize;
1795 spin_lock_init(&lp->lock);
1797 /* boy, they'd better get these right */
1798 if (!strcmp(media, "rj45"))
1799 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1800 else if (!strcmp(media, "aui"))
1801 lp->adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI;
1802 else if (!strcmp(media, "bnc"))
1803 lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2;
1805 lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
1808 lp->auto_neg_cnf = AUTO_NEG_ENABLE;
1811 printk(KERN_ERR "cs89x0.c: Module autoprobing not allowed.\n");
1812 printk(KERN_ERR "cs89x0.c: Append io=0xNNN\n");
1815 } else if (io <= 0x1ff) {
1821 if (use_dma && dmasize != 16 && dmasize != 64) {
1822 printk(KERN_ERR "cs89x0.c: dma size must be either 16K or 64K, not %dK\n", dmasize);
1827 ret = cs89x0_ioport_probe(dev, io, 1);
1839 cleanup_module(void)
1841 struct net_local *lp = netdev_priv(dev_cs89x0);
1843 unregister_netdev(dev_cs89x0);
1844 iowrite16(PP_ChipID, lp->virt_addr + ADD_PORT);
1845 ioport_unmap(lp->virt_addr);
1846 release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
1847 free_netdev(dev_cs89x0);
1849 #endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
1851 #ifdef CONFIG_CS89x0_PLATFORM
1852 static int __init cs89x0_platform_probe(struct platform_device *pdev)
1854 struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1855 struct net_local *lp;
1856 struct resource *mem_res;
1857 void __iomem *virt_addr;
1863 lp = netdev_priv(dev);
1865 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1866 dev->irq = platform_get_irq(pdev, 0);
1867 if (mem_res == NULL || dev->irq <= 0) {
1868 dev_warn(&dev->dev, "memory/interrupt resource missing.\n");
1873 lp->size = resource_size(mem_res);
1874 if (!request_mem_region(mem_res->start, lp->size, DRV_NAME)) {
1875 dev_warn(&dev->dev, "request_mem_region() failed.\n");
1880 virt_addr = ioremap(mem_res->start, lp->size);
1882 dev_warn(&dev->dev, "ioremap() failed.\n");
1887 err = cs89x0_probe1(dev, virt_addr, 0);
1889 dev_warn(&dev->dev, "no cs8900 or cs8920 detected.\n");
1893 platform_set_drvdata(pdev, dev);
1899 release_mem_region(mem_res->start, lp->size);
1905 static int cs89x0_platform_remove(struct platform_device *pdev)
1907 struct net_device *dev = platform_get_drvdata(pdev);
1908 struct net_local *lp = netdev_priv(dev);
1909 struct resource *mem_res;
1911 /* This platform_get_resource() call will not return NULL, because
1912 * the same call in cs89x0_platform_probe() has returned a non NULL
1915 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1916 unregister_netdev(dev);
1917 iounmap(lp->virt_addr);
1918 release_mem_region(mem_res->start, lp->size);
1923 static struct platform_driver cs89x0_driver = {
1926 .owner = THIS_MODULE,
1928 .remove = cs89x0_platform_remove,
1931 static int __init cs89x0_init(void)
1933 return platform_driver_probe(&cs89x0_driver, cs89x0_platform_probe);
1936 module_init(cs89x0_init);
1938 static void __exit cs89x0_cleanup(void)
1940 platform_driver_unregister(&cs89x0_driver);
1943 module_exit(cs89x0_cleanup);
1945 #endif /* CONFIG_CS89x0_PLATFORM */