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 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
51 #include <linux/module.h>
52 #include <linux/printk.h>
53 #include <linux/errno.h>
54 #include <linux/netdevice.h>
55 #include <linux/etherdevice.h>
56 #include <linux/platform_device.h>
57 #include <linux/kernel.h>
58 #include <linux/types.h>
59 #include <linux/fcntl.h>
60 #include <linux/interrupt.h>
61 #include <linux/ioport.h>
63 #include <linux/skbuff.h>
64 #include <linux/spinlock.h>
65 #include <linux/string.h>
66 #include <linux/init.h>
67 #include <linux/bitops.h>
68 #include <linux/delay.h>
69 #include <linux/gfp.h>
73 #include <linux/atomic.h>
80 static char version
[] __initdata
=
81 "cs89x0.c: v2.4.3-pre1 Russell Nelson <nelson@crynwr.com>, Andrew Morton\n";
83 #define DRV_NAME "cs89x0"
85 /* First, a few definitions that the brave might change.
86 * A zero-terminated list of I/O addresses to be probed. Some special flags..
87 * Addr & 1 = Read back the address port, look for signature and reset
88 * the page window before probing
89 * Addr & 3 = Reset the page window and probe
90 * The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
91 * but it is possible that a Cirrus board could be plugged into the ISA
94 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
95 * them to system IRQ numbers. This mapping is card specific and is set to
96 * the configuration of the Cirrus Eval board for this chip.
98 #if defined(CONFIG_MACH_IXDP2351)
99 #define CS89x0_NONISA_IRQ
100 static unsigned int netcard_portlist
[] __used __initdata
= {IXDP2351_VIRT_CS8900_BASE
, 0};
101 static unsigned int cs8900_irq_map
[] = {IRQ_IXDP2351_CS8900
, 0, 0, 0};
102 #elif defined(CONFIG_ARCH_IXDP2X01)
103 #define CS89x0_NONISA_IRQ
104 static unsigned int netcard_portlist
[] __used __initdata
= {IXDP2X01_CS8900_VIRT_BASE
, 0};
105 static unsigned int cs8900_irq_map
[] = {IRQ_IXDP2X01_CS8900
, 0, 0, 0};
107 #ifndef CONFIG_CS89x0_PLATFORM
108 static unsigned int netcard_portlist
[] __used __initdata
=
109 { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
110 static unsigned int cs8900_irq_map
[] = {10, 11, 12, 5};
115 static unsigned int net_debug
= DEBUGGING
;
117 #define net_debug 0 /* gcc will remove all the debug code for us */
120 /* The number of low I/O ports used by the ethercard. */
121 #define NETCARD_IO_EXTENT 16
123 /* we allow the user to override various values normally set in the EEPROM */
124 #define FORCE_RJ45 0x0001 /* pick one of these three */
125 #define FORCE_AUI 0x0002
126 #define FORCE_BNC 0x0004
128 #define FORCE_AUTO 0x0010 /* pick one of these three */
129 #define FORCE_HALF 0x0020
130 #define FORCE_FULL 0x0030
132 /* Information that need to be kept for each board. */
134 int chip_type
; /* one of: CS8900, CS8920, CS8920M */
135 char chip_revision
; /* revision letter of the chip ('A'...) */
136 int send_cmd
; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
137 int auto_neg_cnf
; /* auto-negotiation word from EEPROM */
138 int adapter_cnf
; /* adapter configuration from EEPROM */
139 int isa_config
; /* ISA configuration from EEPROM */
140 int irq_map
; /* IRQ map from EEPROM */
141 int rx_mode
; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
142 int curr_rx_cfg
; /* a copy of PP_RxCFG */
143 int linectl
; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
144 int send_underrun
; /* keep track of how many underruns in a row we get */
145 int force
; /* force various values; see FORCE* above. */
147 void __iomem
*virt_addr
;/* CS89x0 virtual address. */
148 unsigned long size
; /* Length of CS89x0 memory region. */
150 int use_dma
; /* Flag: we're using dma */
151 int dma
; /* DMA channel */
152 int dmasize
; /* 16 or 64 */
153 unsigned char *dma_buff
; /* points to the beginning of the buffer */
154 unsigned char *end_dma_buff
; /* points to the end of the buffer */
155 unsigned char *rx_dma_ptr
; /* points to the next packet */
159 /* Index to functions, as function prototypes. */
160 static int net_open(struct net_device
*dev
);
161 static netdev_tx_t
net_send_packet(struct sk_buff
*skb
, struct net_device
*dev
);
162 static irqreturn_t
net_interrupt(int irq
, void *dev_id
);
163 static void set_multicast_list(struct net_device
*dev
);
164 static void net_timeout(struct net_device
*dev
);
165 static void net_rx(struct net_device
*dev
);
166 static int net_close(struct net_device
*dev
);
167 static struct net_device_stats
*net_get_stats(struct net_device
*dev
);
168 static void reset_chip(struct net_device
*dev
);
169 static int get_eeprom_data(struct net_device
*dev
, int off
, int len
, int *buffer
);
170 static int get_eeprom_cksum(int off
, int len
, int *buffer
);
171 static int set_mac_address(struct net_device
*dev
, void *addr
);
172 static void count_rx_errors(int status
, struct net_device
*dev
);
173 #ifdef CONFIG_NET_POLL_CONTROLLER
174 static void net_poll_controller(struct net_device
*dev
);
177 static void get_dma_channel(struct net_device
*dev
);
178 static void release_dma_buff(struct net_local
*lp
);
181 /* Example routines you must write ;->. */
182 #define tx_done(dev) 1
185 * Permit 'cs89x0_dma=N' in the kernel boot environment
189 static int g_cs89x0_dma
;
191 static int __init
dma_fn(char *str
)
193 g_cs89x0_dma
= simple_strtol(str
, NULL
, 0);
197 __setup("cs89x0_dma=", dma_fn
);
198 #endif /* ALLOW_DMA */
200 static int g_cs89x0_media__force
;
202 static int __init
media_fn(char *str
)
204 if (!strcmp(str
, "rj45")) g_cs89x0_media__force
= FORCE_RJ45
;
205 else if (!strcmp(str
, "aui")) g_cs89x0_media__force
= FORCE_AUI
;
206 else if (!strcmp(str
, "bnc")) g_cs89x0_media__force
= FORCE_BNC
;
210 __setup("cs89x0_media=", media_fn
);
213 #if defined(CONFIG_MACH_IXDP2351)
215 readword(unsigned long base_addr
, int portno
)
217 return __raw_readw(base_addr
+ (portno
<< 1));
221 writeword(unsigned long base_addr
, int portno
, u16 value
)
223 __raw_writew(value
, base_addr
+ (portno
<< 1));
225 #elif defined(CONFIG_ARCH_IXDP2X01)
227 readword(unsigned long base_addr
, int portno
)
229 return __raw_readl(base_addr
+ (portno
<< 1));
233 writeword(unsigned long base_addr
, int portno
, u16 value
)
235 __raw_writel(value
, base_addr
+ (portno
<< 1));
239 static void readwords(struct net_local
*lp
, int portno
, void *buf
, int length
)
241 u8
*buf8
= (u8
*)buf
;
246 tmp16
= ioread16(lp
->virt_addr
+ portno
);
248 *buf8
++ = (u8
)(tmp16
>> 8);
252 static void writewords(struct net_local
*lp
, int portno
, void *buf
, int length
)
254 u8
*buf8
= (u8
*)buf
;
260 tmp16
|= (*buf8
++) << 8;
261 iowrite16(tmp16
, lp
->virt_addr
+ portno
);
266 readreg(struct net_device
*dev
, u16 regno
)
268 struct net_local
*lp
= netdev_priv(dev
);
270 iowrite16(regno
, lp
->virt_addr
+ ADD_PORT
);
271 return ioread16(lp
->virt_addr
+ DATA_PORT
);
275 writereg(struct net_device
*dev
, u16 regno
, u16 value
)
277 struct net_local
*lp
= netdev_priv(dev
);
279 iowrite16(regno
, lp
->virt_addr
+ ADD_PORT
);
280 iowrite16(value
, lp
->virt_addr
+ DATA_PORT
);
284 wait_eeprom_ready(struct net_device
*dev
)
286 int timeout
= jiffies
;
287 /* check to see if the EEPROM is ready,
288 * a timeout is used just in case EEPROM is ready when
289 * SI_BUSY in the PP_SelfST is clear
291 while (readreg(dev
, PP_SelfST
) & SI_BUSY
)
292 if (jiffies
- timeout
>= 40)
298 get_eeprom_data(struct net_device
*dev
, int off
, int len
, int *buffer
)
302 if (net_debug
> 3) printk("EEPROM data from %x for %x:\n", off
, len
);
303 for (i
= 0; i
< len
; i
++) {
304 if (wait_eeprom_ready(dev
) < 0) return -1;
305 /* Now send the EEPROM read command and EEPROM location to read */
306 writereg(dev
, PP_EECMD
, (off
+ i
) | EEPROM_READ_CMD
);
307 if (wait_eeprom_ready(dev
) < 0) return -1;
308 buffer
[i
] = readreg(dev
, PP_EEData
);
309 if (net_debug
> 3) printk("%04x ", buffer
[i
]);
311 if (net_debug
> 3) printk("\n");
316 get_eeprom_cksum(int off
, int len
, int *buffer
)
321 for (i
= 0; i
< len
; i
++)
329 #ifdef CONFIG_NET_POLL_CONTROLLER
331 * Polling receive - used by netconsole and other diagnostic tools
332 * to allow network i/o with interrupts disabled.
334 static void net_poll_controller(struct net_device
*dev
)
336 disable_irq(dev
->irq
);
337 net_interrupt(dev
->irq
, dev
);
338 enable_irq(dev
->irq
);
342 static const struct net_device_ops net_ops
= {
343 .ndo_open
= net_open
,
344 .ndo_stop
= net_close
,
345 .ndo_tx_timeout
= net_timeout
,
346 .ndo_start_xmit
= net_send_packet
,
347 .ndo_get_stats
= net_get_stats
,
348 .ndo_set_rx_mode
= set_multicast_list
,
349 .ndo_set_mac_address
= set_mac_address
,
350 #ifdef CONFIG_NET_POLL_CONTROLLER
351 .ndo_poll_controller
= net_poll_controller
,
353 .ndo_change_mtu
= eth_change_mtu
,
354 .ndo_validate_addr
= eth_validate_addr
,
357 /* This is the real probe routine.
358 * Linux has a history of friendly device probes on the ISA bus.
359 * A good device probes avoids doing writes, and
360 * verifies that the correct device exists and functions.
361 * Return 0 on success.
364 cs89x0_probe1(struct net_device
*dev
, void __iomem
*ioaddr
, int modular
)
366 struct net_local
*lp
= netdev_priv(dev
);
367 static unsigned version_printed
;
370 unsigned rev_type
= 0;
371 int eeprom_buff
[CHKSUM_LEN
];
374 /* Initialize the device structure. */
376 memset(lp
, 0, sizeof(*lp
));
377 spin_lock_init(&lp
->lock
);
382 lp
->dma
= g_cs89x0_dma
;
383 lp
->dmasize
= 16; /* Could make this an option... */
386 lp
->force
= g_cs89x0_media__force
;
390 pr_debug("PP_addr at %p[%x]: 0x%x\n",
391 ioaddr
, ADD_PORT
, ioread16(ioaddr
+ ADD_PORT
));
392 iowrite16(PP_ChipID
, ioaddr
+ ADD_PORT
);
394 tmp
= ioread16(ioaddr
+ DATA_PORT
);
395 if (tmp
!= CHIP_EISA_ID_SIG
) {
396 pr_debug("%s: incorrect signature at %p[%x]: 0x%x!="
397 CHIP_EISA_ID_SIG_STR
"\n",
398 dev
->name
, ioaddr
, DATA_PORT
, tmp
);
403 lp
->virt_addr
= ioaddr
;
405 /* get the chip type */
406 rev_type
= readreg(dev
, PRODUCT_ID_ADD
);
407 lp
->chip_type
= rev_type
& ~REVISON_BITS
;
408 lp
->chip_revision
= ((rev_type
& REVISON_BITS
) >> 8) + 'A';
410 /* Check the chip type and revision in order to set the correct send command
411 CS8920 revision C and CS8900 revision F can use the faster send. */
412 lp
->send_cmd
= TX_AFTER_381
;
413 if (lp
->chip_type
== CS8900
&& lp
->chip_revision
>= 'F')
414 lp
->send_cmd
= TX_NOW
;
415 if (lp
->chip_type
!= CS8900
&& lp
->chip_revision
>= 'C')
416 lp
->send_cmd
= TX_NOW
;
418 if (net_debug
&& version_printed
++ == 0)
421 pr_info("%s: cs89%c0%s rev %c found at %p ",
423 lp
->chip_type
== CS8900
? '0' : '2',
424 lp
->chip_type
== CS8920M
? "M" : "",
430 /* Here we read the current configuration of the chip.
431 * If there is no Extended EEPROM then the idea is to not disturb
432 * the chip configuration, it should have been correctly setup by
433 * automatic EEPROM read on reset. So, if the chip says it read
434 * the EEPROM the driver will always do *something* instead of
435 * complain that adapter_cnf is 0.
438 if ((readreg(dev
, PP_SelfST
) & (EEPROM_OK
| EEPROM_PRESENT
)) ==
439 (EEPROM_OK
|EEPROM_PRESENT
)) {
441 for (i
= 0; i
< ETH_ALEN
/ 2; i
++) {
443 Addr
= readreg(dev
, PP_IA
+ i
* 2);
444 dev
->dev_addr
[i
* 2] = Addr
& 0xFF;
445 dev
->dev_addr
[i
* 2 + 1] = Addr
>> 8;
448 /* Load the Adapter Configuration.
449 * Note: Barring any more specific information from some
450 * other source (ie EEPROM+Schematics), we would not know
451 * how to operate a 10Base2 interface on the AUI port.
452 * However, since we do read the status of HCB1 and use
453 * settings that always result in calls to control_dc_dc(dev,0)
454 * a BNC interface should work if the enable pin
455 * (dc/dc converter) is on HCB1.
456 * It will be called AUI however.
460 i
= readreg(dev
, PP_LineCTL
);
461 /* Preserve the setting of the HCB1 pin. */
462 if ((i
& (HCB1
| HCB1_ENBL
)) == (HCB1
| HCB1_ENBL
))
463 lp
->adapter_cnf
|= A_CNF_DC_DC_POLARITY
;
464 /* Save the sqelch bit */
465 if ((i
& LOW_RX_SQUELCH
) == LOW_RX_SQUELCH
)
466 lp
->adapter_cnf
|= A_CNF_EXTND_10B_2
| A_CNF_LOW_RX_SQUELCH
;
467 /* Check if the card is in 10Base-t only mode */
468 if ((i
& (AUI_ONLY
| AUTO_AUI_10BASET
)) == 0)
469 lp
->adapter_cnf
|= A_CNF_10B_T
| A_CNF_MEDIA_10B_T
;
470 /* Check if the card is in AUI only mode */
471 if ((i
& (AUI_ONLY
| AUTO_AUI_10BASET
)) == AUI_ONLY
)
472 lp
->adapter_cnf
|= A_CNF_AUI
| A_CNF_MEDIA_AUI
;
473 /* Check if the card is in Auto mode. */
474 if ((i
& (AUI_ONLY
| AUTO_AUI_10BASET
)) == AUTO_AUI_10BASET
)
475 lp
->adapter_cnf
|= A_CNF_AUI
| A_CNF_10B_T
|
476 A_CNF_MEDIA_AUI
| A_CNF_MEDIA_10B_T
| A_CNF_MEDIA_AUTO
;
479 pr_info("%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
480 dev
->name
, i
, lp
->adapter_cnf
);
482 /* IRQ. Other chips already probe, see below. */
483 if (lp
->chip_type
== CS8900
)
484 lp
->isa_config
= readreg(dev
, PP_CS8900_ISAINT
) & INT_NO_MASK
;
486 printk("[Cirrus EEPROM] ");
491 /* First check to see if an EEPROM is attached. */
493 if ((readreg(dev
, PP_SelfST
) & EEPROM_PRESENT
) == 0)
494 pr_warn("No EEPROM, relying on command line....\n");
495 else if (get_eeprom_data(dev
, START_EEPROM_DATA
, CHKSUM_LEN
, eeprom_buff
) < 0) {
496 pr_warn("EEPROM read failed, relying on command line\n");
497 } else if (get_eeprom_cksum(START_EEPROM_DATA
, CHKSUM_LEN
, eeprom_buff
) < 0) {
498 /* Check if the chip was able to read its own configuration starting
500 if ((readreg(dev
, PP_SelfST
) & (EEPROM_OK
| EEPROM_PRESENT
)) !=
501 (EEPROM_OK
| EEPROM_PRESENT
))
502 pr_warn("Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
505 /* This reads an extended EEPROM that is not documented
506 * in the CS8900 datasheet.
509 /* get transmission control word but keep the autonegotiation bits */
510 if (!lp
->auto_neg_cnf
) lp
->auto_neg_cnf
= eeprom_buff
[AUTO_NEG_CNF_OFFSET
/2];
511 /* Store adapter configuration */
512 if (!lp
->adapter_cnf
) lp
->adapter_cnf
= eeprom_buff
[ADAPTER_CNF_OFFSET
/2];
513 /* Store ISA configuration */
514 lp
->isa_config
= eeprom_buff
[ISA_CNF_OFFSET
/2];
515 dev
->mem_start
= eeprom_buff
[PACKET_PAGE_OFFSET
/2] << 8;
517 /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
518 /* store the initial memory base address */
519 for (i
= 0; i
< ETH_ALEN
/ 2; i
++) {
520 dev
->dev_addr
[i
* 2] = eeprom_buff
[i
];
521 dev
->dev_addr
[i
* 2 + 1] = eeprom_buff
[i
] >> 8;
524 pr_debug("%s: new adapter_cnf: 0x%x\n",
525 dev
->name
, lp
->adapter_cnf
);
528 /* allow them to force multiple transceivers. If they force multiple, autosense */
531 if (lp
->force
& FORCE_RJ45
) {lp
->adapter_cnf
|= A_CNF_10B_T
; count
++; }
532 if (lp
->force
& FORCE_AUI
) {lp
->adapter_cnf
|= A_CNF_AUI
; count
++; }
533 if (lp
->force
& FORCE_BNC
) {lp
->adapter_cnf
|= A_CNF_10B_2
; count
++; }
534 if (count
> 1) {lp
->adapter_cnf
|= A_CNF_MEDIA_AUTO
; }
535 else if (lp
->force
& FORCE_RJ45
){lp
->adapter_cnf
|= A_CNF_MEDIA_10B_T
; }
536 else if (lp
->force
& FORCE_AUI
) {lp
->adapter_cnf
|= A_CNF_MEDIA_AUI
; }
537 else if (lp
->force
& FORCE_BNC
) {lp
->adapter_cnf
|= A_CNF_MEDIA_10B_2
; }
541 pr_debug("%s: after force 0x%x, adapter_cnf=0x%x\n",
542 dev
->name
, lp
->force
, lp
->adapter_cnf
);
544 /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
546 /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
548 /* FIXME: we don't set the Ethernet address on the command line. Use
549 * ifconfig IFACE hw ether AABBCCDDEEFF
552 pr_info("media %s%s%s",
553 (lp
->adapter_cnf
& A_CNF_10B_T
) ? "RJ-45," : "",
554 (lp
->adapter_cnf
& A_CNF_AUI
) ? "AUI," : "",
555 (lp
->adapter_cnf
& A_CNF_10B_2
) ? "BNC," : "");
557 lp
->irq_map
= 0xffff;
559 /* If this is a CS8900 then no pnp soft */
560 if (lp
->chip_type
!= CS8900
&&
561 /* Check if the ISA IRQ has been set */
562 (i
= readreg(dev
, PP_CS8920_ISAINT
) & 0xff,
563 (i
!= 0 && i
< CS8920_NO_INTS
))) {
567 i
= lp
->isa_config
& INT_NO_MASK
;
568 #ifndef CONFIG_CS89x0_PLATFORM
569 if (lp
->chip_type
== CS8900
) {
570 #ifdef CS89x0_NONISA_IRQ
571 i
= cs8900_irq_map
[0];
573 /* Translate the IRQ using the IRQ mapping table. */
574 if (i
>= ARRAY_SIZE(cs8900_irq_map
))
575 pr_err("invalid ISA interrupt number %d\n", i
);
577 i
= cs8900_irq_map
[i
];
579 lp
->irq_map
= CS8900_IRQ_MAP
; /* fixed IRQ map for CS8900 */
581 int irq_map_buff
[IRQ_MAP_LEN
/2];
583 if (get_eeprom_data(dev
, IRQ_MAP_EEPROM_DATA
,
585 irq_map_buff
) >= 0) {
586 if ((irq_map_buff
[0] & 0xff) == PNP_IRQ_FRMT
)
587 lp
->irq_map
= (irq_map_buff
[0] >> 8) | (irq_map_buff
[1] << 8);
596 printk(" IRQ %d", dev
->irq
);
600 get_dma_channel(dev
);
601 printk(", DMA %d", dev
->dma
);
606 printk(", programmed I/O");
609 /* print the ethernet address. */
610 printk(", MAC %pM", dev
->dev_addr
);
612 dev
->netdev_ops
= &net_ops
;
613 dev
->watchdog_timeo
= HZ
;
617 printk("cs89x0_probe1() successful\n");
619 retval
= register_netdev(dev
);
624 iowrite16(PP_ChipID
, lp
->virt_addr
+ ADD_PORT
);
629 #ifndef CONFIG_CS89x0_PLATFORM
631 * This function converts the I/O port addres used by the cs89x0_probe() and
632 * init_module() functions to the I/O memory address used by the
633 * cs89x0_probe1() function.
636 cs89x0_ioport_probe(struct net_device
*dev
, unsigned long ioport
, int modular
)
638 struct net_local
*lp
= netdev_priv(dev
);
640 void __iomem
*io_mem
;
645 dev
->base_addr
= ioport
;
647 if (!request_region(ioport
, NETCARD_IO_EXTENT
, DRV_NAME
)) {
652 io_mem
= ioport_map(ioport
& ~3, NETCARD_IO_EXTENT
);
658 /* if they give us an odd I/O address, then do ONE write to
659 * the address port, to get it back to address zero, where we
660 * expect to find the EISA signature word. An IO with a base of 0x3
661 * will skip the test for the ADD_PORT.
665 pr_info("%s: odd ioaddr 0x%lx\n", dev
->name
, ioport
);
666 if ((ioport
& 2) != 2)
667 if ((ioread16(io_mem
+ ADD_PORT
) & ADD_MASK
) !=
669 pr_err("%s: bad signature 0x%x\n",
670 dev
->name
, ioread16(io_mem
+ ADD_PORT
));
676 ret
= cs89x0_probe1(dev
, io_mem
, modular
);
680 ioport_unmap(io_mem
);
682 release_region(ioport
, NETCARD_IO_EXTENT
);
688 /* Check for a network adaptor of this type, and return '0' iff one exists.
689 * If dev->base_addr == 0, probe all likely locations.
690 * If dev->base_addr == 1, always return failure.
691 * If dev->base_addr == 2, allocate space for the device and return success
692 * (detachable devices only).
693 * Return 0 on success.
696 struct net_device
* __init
cs89x0_probe(int unit
)
698 struct net_device
*dev
= alloc_etherdev(sizeof(struct net_local
));
705 return ERR_PTR(-ENODEV
);
707 sprintf(dev
->name
, "eth%d", unit
);
708 netdev_boot_setup_check(dev
);
713 pr_info("cs89x0_probe(0x%x)\n", io
);
715 if (io
> 0x1ff) { /* Check a single specified location. */
716 err
= cs89x0_ioport_probe(dev
, io
, 0);
717 } else if (io
!= 0) { /* Don't probe at all. */
720 for (port
= netcard_portlist
; *port
; port
++) {
721 if (cs89x0_ioport_probe(dev
, *port
, 0) == 0)
733 pr_warn("no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
739 /*********************************
740 * This page contains DMA routines
741 *********************************/
745 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1)>>17 == (long)(ptr2)>>17)
748 get_dma_channel(struct net_device
*dev
)
750 struct net_local
*lp
= netdev_priv(dev
);
754 lp
->isa_config
|= ISA_RxDMA
;
756 if ((lp
->isa_config
& ANY_ISA_DMA
) == 0)
758 dev
->dma
= lp
->isa_config
& DMA_NO_MASK
;
759 if (lp
->chip_type
== CS8900
)
761 if (dev
->dma
< 5 || dev
->dma
> 7) {
762 lp
->isa_config
&= ~ANY_ISA_DMA
;
769 write_dma(struct net_device
*dev
, int chip_type
, int dma
)
771 struct net_local
*lp
= netdev_priv(dev
);
772 if ((lp
->isa_config
& ANY_ISA_DMA
) == 0)
774 if (chip_type
== CS8900
) {
775 writereg(dev
, PP_CS8900_ISADMA
, dma
-5);
777 writereg(dev
, PP_CS8920_ISADMA
, dma
);
782 set_dma_cfg(struct net_device
*dev
)
784 struct net_local
*lp
= netdev_priv(dev
);
787 if ((lp
->isa_config
& ANY_ISA_DMA
) == 0) {
789 printk("set_dma_cfg(): no DMA\n");
792 if (lp
->isa_config
& ISA_RxDMA
) {
793 lp
->curr_rx_cfg
|= RX_DMA_ONLY
;
795 printk("set_dma_cfg(): RX_DMA_ONLY\n");
797 lp
->curr_rx_cfg
|= AUTO_RX_DMA
; /* not that we support it... */
799 printk("set_dma_cfg(): AUTO_RX_DMA\n");
805 dma_bufcfg(struct net_device
*dev
)
807 struct net_local
*lp
= netdev_priv(dev
);
809 return (lp
->isa_config
& ANY_ISA_DMA
) ? RX_DMA_ENBL
: 0;
815 dma_busctl(struct net_device
*dev
)
818 struct net_local
*lp
= netdev_priv(dev
);
820 if (lp
->isa_config
& ANY_ISA_DMA
)
821 retval
|= RESET_RX_DMA
; /* Reset the DMA pointer */
822 if (lp
->isa_config
& DMA_BURST
)
823 retval
|= DMA_BURST_MODE
; /* Does ISA config specify DMA burst ? */
824 if (lp
->dmasize
== 64)
825 retval
|= RX_DMA_SIZE_64K
; /* did they ask for 64K? */
826 retval
|= MEMORY_ON
; /* we need memory enabled to use DMA. */
832 dma_rx(struct net_device
*dev
)
834 struct net_local
*lp
= netdev_priv(dev
);
837 unsigned char *bp
= lp
->rx_dma_ptr
;
839 status
= bp
[0] + (bp
[1]<<8);
840 length
= bp
[2] + (bp
[3]<<8);
843 printk("%s: receiving DMA packet at %lx, status %x, length %x\n",
844 dev
->name
, (unsigned long)bp
, status
, length
);
846 if ((status
& RX_OK
) == 0) {
847 count_rx_errors(status
, dev
);
848 goto skip_this_frame
;
851 /* Malloc up new buffer. */
852 skb
= netdev_alloc_skb(dev
, length
+ 2);
854 if (net_debug
) /* I don't think we want to do this to a stressed system */
855 printk("%s: Memory squeeze, dropping packet.\n", dev
->name
);
856 dev
->stats
.rx_dropped
++;
858 /* AKPM: advance bp to the next frame */
860 bp
+= (length
+ 3) & ~3;
861 if (bp
>= lp
->end_dma_buff
) bp
-= lp
->dmasize
*1024;
865 skb_reserve(skb
, 2); /* longword align L3 header */
867 if (bp
+ length
> lp
->end_dma_buff
) {
868 int semi_cnt
= lp
->end_dma_buff
- bp
;
869 memcpy(skb_put(skb
, semi_cnt
), bp
, semi_cnt
);
870 memcpy(skb_put(skb
, length
- semi_cnt
), lp
->dma_buff
,
873 memcpy(skb_put(skb
, length
), bp
, length
);
875 bp
+= (length
+ 3) & ~3;
876 if (bp
>= lp
->end_dma_buff
) bp
-= lp
->dmasize
*1024;
880 printk("%s: received %d byte DMA packet of type %x\n",
882 (skb
->data
[ETH_ALEN
+ ETH_ALEN
] << 8) | skb
->data
[ETH_ALEN
+ ETH_ALEN
+ 1]);
884 skb
->protocol
= eth_type_trans(skb
, dev
);
886 dev
->stats
.rx_packets
++;
887 dev
->stats
.rx_bytes
+= length
;
890 #endif /* ALLOW_DMA */
892 static void __init
reset_chip(struct net_device
*dev
)
894 #if !defined(CONFIG_MACH_MX31ADS)
895 #if !defined(CS89x0_NONISA_IRQ)
896 struct net_local
*lp
= netdev_priv(dev
);
897 #endif /* CS89x0_NONISA_IRQ */
898 int reset_start_time
;
900 writereg(dev
, PP_SelfCTL
, readreg(dev
, PP_SelfCTL
) | POWER_ON_RESET
);
905 #if !defined(CS89x0_NONISA_IRQ)
906 if (lp
->chip_type
!= CS8900
) {
907 /* Hardware problem requires PNP registers to be reconfigured after a reset */
908 iowrite16(PP_CS8920_ISAINT
, lp
->virt_addr
+ ADD_PORT
);
909 iowrite8(dev
->irq
, lp
->virt_addr
+ DATA_PORT
);
910 iowrite8(0, lp
->virt_addr
+ DATA_PORT
+ 1);
912 iowrite16(PP_CS8920_ISAMemB
, lp
->virt_addr
+ ADD_PORT
);
913 iowrite8((dev
->mem_start
>> 16) & 0xff,
914 lp
->virt_addr
+ DATA_PORT
);
915 iowrite8((dev
->mem_start
>> 8) & 0xff,
916 lp
->virt_addr
+ DATA_PORT
+ 1);
918 #endif /* CS89x0_NONISA_IRQ */
920 /* Wait until the chip is reset */
921 reset_start_time
= jiffies
;
922 while ((readreg(dev
, PP_SelfST
) & INIT_DONE
) == 0 && jiffies
- reset_start_time
< 2)
924 #endif /* !CONFIG_MACH_MX31ADS */
929 control_dc_dc(struct net_device
*dev
, int on_not_off
)
931 struct net_local
*lp
= netdev_priv(dev
);
932 unsigned int selfcontrol
;
933 int timenow
= jiffies
;
934 /* control the DC to DC convertor in the SelfControl register.
935 Note: This is hooked up to a general purpose pin, might not
936 always be a DC to DC convertor. */
938 selfcontrol
= HCB1_ENBL
; /* Enable the HCB1 bit as an output */
939 if (((lp
->adapter_cnf
& A_CNF_DC_DC_POLARITY
) != 0) ^ on_not_off
)
942 selfcontrol
&= ~HCB1
;
943 writereg(dev
, PP_SelfCTL
, selfcontrol
);
945 /* Wait for the DC/DC converter to power up - 500ms */
946 while (jiffies
- timenow
< HZ
)
950 #define DETECTED_NONE 0
951 #define DETECTED_RJ45H 1
952 #define DETECTED_RJ45F 2
953 #define DETECTED_AUI 3
954 #define DETECTED_BNC 4
957 detect_tp(struct net_device
*dev
)
959 struct net_local
*lp
= netdev_priv(dev
);
960 int timenow
= jiffies
;
963 if (net_debug
> 1) printk("%s: Attempting TP\n", dev
->name
);
965 /* If connected to another full duplex capable 10-Base-T card the link pulses
966 seem to be lost when the auto detect bit in the LineCTL is set.
967 To overcome this the auto detect bit will be cleared whilst testing the
968 10-Base-T interface. This would not be necessary for the sparrow chip but
969 is simpler to do it anyway. */
970 writereg(dev
, PP_LineCTL
, lp
->linectl
& ~AUI_ONLY
);
971 control_dc_dc(dev
, 0);
973 /* Delay for the hardware to work out if the TP cable is present - 150ms */
974 for (timenow
= jiffies
; jiffies
- timenow
< 15; )
976 if ((readreg(dev
, PP_LineST
) & LINK_OK
) == 0)
977 return DETECTED_NONE
;
979 if (lp
->chip_type
== CS8900
) {
980 switch (lp
->force
& 0xf0) {
983 printk("%s: cs8900 doesn't autonegotiate\n", dev
->name
);
984 return DETECTED_NONE
;
986 /* CS8900 doesn't support AUTO, change to HALF*/
988 lp
->force
&= ~FORCE_AUTO
;
989 lp
->force
|= FORCE_HALF
;
994 writereg(dev
, PP_TestCTL
, readreg(dev
, PP_TestCTL
) | FDX_8900
);
997 fdx
= readreg(dev
, PP_TestCTL
) & FDX_8900
;
999 switch (lp
->force
& 0xf0) {
1001 lp
->auto_neg_cnf
= AUTO_NEG_ENABLE
;
1004 lp
->auto_neg_cnf
= 0;
1007 lp
->auto_neg_cnf
= RE_NEG_NOW
| ALLOW_FDX
;
1011 writereg(dev
, PP_AutoNegCTL
, lp
->auto_neg_cnf
& AUTO_NEG_MASK
);
1013 if ((lp
->auto_neg_cnf
& AUTO_NEG_BITS
) == AUTO_NEG_ENABLE
) {
1014 pr_info("%s: negotiating duplex...\n", dev
->name
);
1015 while (readreg(dev
, PP_AutoNegST
) & AUTO_NEG_BUSY
) {
1016 if (jiffies
- timenow
> 4000) {
1017 pr_err("**** Full / half duplex auto-negotiation timed out ****\n");
1022 fdx
= readreg(dev
, PP_AutoNegST
) & FDX_ACTIVE
;
1025 return DETECTED_RJ45F
;
1027 return DETECTED_RJ45H
;
1030 /* send a test packet - return true if carrier bits are ok */
1032 send_test_pkt(struct net_device
*dev
)
1034 struct net_local
*lp
= netdev_priv(dev
);
1035 char test_packet
[] = { 0,0,0,0,0,0, 0,0,0,0,0,0,
1036 0, 46, /* A 46 in network order */
1037 0, 0, /* DSAP=0 & SSAP=0 fields */
1038 0xf3, 0 /* Control (Test Req + P bit set) */ };
1039 long timenow
= jiffies
;
1041 writereg(dev
, PP_LineCTL
, readreg(dev
, PP_LineCTL
) | SERIAL_TX_ON
);
1043 memcpy(test_packet
, dev
->dev_addr
, ETH_ALEN
);
1044 memcpy(test_packet
+ ETH_ALEN
, dev
->dev_addr
, ETH_ALEN
);
1046 iowrite16(TX_AFTER_ALL
, lp
->virt_addr
+ TX_CMD_PORT
);
1047 iowrite16(ETH_ZLEN
, lp
->virt_addr
+ TX_LEN_PORT
);
1049 /* Test to see if the chip has allocated memory for the packet */
1050 while (jiffies
- timenow
< 5)
1051 if (readreg(dev
, PP_BusST
) & READY_FOR_TX_NOW
)
1053 if (jiffies
- timenow
>= 5)
1054 return 0; /* this shouldn't happen */
1056 /* Write the contents of the packet */
1057 writewords(lp
, TX_FRAME_PORT
, test_packet
, (ETH_ZLEN
+1) >> 1);
1059 if (net_debug
> 1) printk("Sending test packet ");
1060 /* wait a couple of jiffies for packet to be received */
1061 for (timenow
= jiffies
; jiffies
- timenow
< 3; )
1063 if ((readreg(dev
, PP_TxEvent
) & TX_SEND_OK_BITS
) == TX_OK
) {
1064 if (net_debug
> 1) printk("succeeded\n");
1067 if (net_debug
> 1) printk("failed\n");
1073 detect_aui(struct net_device
*dev
)
1075 struct net_local
*lp
= netdev_priv(dev
);
1077 if (net_debug
> 1) printk("%s: Attempting AUI\n", dev
->name
);
1078 control_dc_dc(dev
, 0);
1080 writereg(dev
, PP_LineCTL
, (lp
->linectl
& ~AUTO_AUI_10BASET
) | AUI_ONLY
);
1082 if (send_test_pkt(dev
))
1083 return DETECTED_AUI
;
1085 return DETECTED_NONE
;
1089 detect_bnc(struct net_device
*dev
)
1091 struct net_local
*lp
= netdev_priv(dev
);
1093 if (net_debug
> 1) printk("%s: Attempting BNC\n", dev
->name
);
1094 control_dc_dc(dev
, 1);
1096 writereg(dev
, PP_LineCTL
, (lp
->linectl
& ~AUTO_AUI_10BASET
) | AUI_ONLY
);
1098 if (send_test_pkt(dev
))
1099 return DETECTED_BNC
;
1101 return DETECTED_NONE
;
1106 write_irq(struct net_device
*dev
, int chip_type
, int irq
)
1110 if (chip_type
== CS8900
) {
1111 #ifndef CONFIG_CS89x0_PLATFORM
1112 /* Search the mapping table for the corresponding IRQ pin. */
1113 for (i
= 0; i
!= ARRAY_SIZE(cs8900_irq_map
); i
++)
1114 if (cs8900_irq_map
[i
] == irq
)
1117 if (i
== ARRAY_SIZE(cs8900_irq_map
))
1120 /* INTRQ0 pin is used for interrupt generation. */
1123 writereg(dev
, PP_CS8900_ISAINT
, i
);
1125 writereg(dev
, PP_CS8920_ISAINT
, irq
);
1129 /* Open/initialize the board. This is called (in the current kernel)
1130 sometime after booting when the 'ifconfig' program is run.
1132 This routine should set everything up anew at each open, even
1133 registers that "should" only need to be set once at boot, so that
1134 there is non-reboot way to recover if something goes wrong.
1137 /* AKPM: do we need to do any locking here? */
1140 net_open(struct net_device
*dev
)
1142 struct net_local
*lp
= netdev_priv(dev
);
1148 /* Allow interrupts to be generated by the chip */
1149 /* Cirrus' release had this: */
1151 writereg(dev
, PP_BusCTL
, readreg(dev
, PP_BusCTL
) | ENABLE_IRQ
);
1153 /* And 2.3.47 had this: */
1154 writereg(dev
, PP_BusCTL
, ENABLE_IRQ
| MEMORY_ON
);
1156 for (i
= 2; i
< CS8920_NO_INTS
; i
++) {
1157 if ((1 << i
) & lp
->irq_map
) {
1158 if (request_irq(i
, net_interrupt
, 0, dev
->name
, dev
) == 0) {
1160 write_irq(dev
, lp
->chip_type
, i
);
1161 /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
1167 if (i
>= CS8920_NO_INTS
) {
1168 writereg(dev
, PP_BusCTL
, 0); /* disable interrupts. */
1169 pr_err("can't get an interrupt\n");
1176 #if !defined(CS89x0_NONISA_IRQ) && !defined(CONFIG_CS89x0_PLATFORM)
1177 if (((1 << dev
->irq
) & lp
->irq_map
) == 0) {
1178 pr_err("%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1179 dev
->name
, dev
->irq
, lp
->irq_map
);
1184 /* FIXME: Cirrus' release had this: */
1185 writereg(dev
, PP_BusCTL
, readreg(dev
, PP_BusCTL
)|ENABLE_IRQ
);
1186 /* And 2.3.47 had this: */
1188 writereg(dev
, PP_BusCTL
, ENABLE_IRQ
| MEMORY_ON
);
1190 write_irq(dev
, lp
->chip_type
, dev
->irq
);
1191 ret
= request_irq(dev
->irq
, net_interrupt
, 0, dev
->name
, dev
);
1193 pr_err("request_irq(%d) failed\n", dev
->irq
);
1200 if (lp
->isa_config
& ANY_ISA_DMA
) {
1201 unsigned long flags
;
1202 lp
->dma_buff
= (unsigned char *)__get_dma_pages(GFP_KERNEL
,
1203 get_order(lp
->dmasize
* 1024));
1205 if (!lp
->dma_buff
) {
1206 pr_err("%s: cannot get %dK memory for DMA\n",
1207 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 pr_err("%s: not usable as DMA buffer\n",
1222 memset(lp
->dma_buff
, 0, lp
->dmasize
* 1024); /* Why? */
1223 if (request_dma(dev
->dma
, dev
->name
)) {
1224 pr_err("%s: cannot get dma channel %d\n",
1225 dev
->name
, dev
->dma
);
1228 write_dma(dev
, lp
->chip_type
, dev
->dma
);
1229 lp
->rx_dma_ptr
= lp
->dma_buff
;
1230 lp
->end_dma_buff
= lp
->dma_buff
+ lp
->dmasize
*1024;
1231 spin_lock_irqsave(&lp
->lock
, flags
);
1232 disable_dma(dev
->dma
);
1233 clear_dma_ff(dev
->dma
);
1234 set_dma_mode(dev
->dma
, DMA_RX_MODE
); /* auto_init as well */
1235 set_dma_addr(dev
->dma
, isa_virt_to_bus(lp
->dma_buff
));
1236 set_dma_count(dev
->dma
, lp
->dmasize
*1024);
1237 enable_dma(dev
->dma
);
1238 spin_unlock_irqrestore(&lp
->lock
, flags
);
1241 #endif /* ALLOW_DMA */
1243 /* set the Ethernet address */
1244 for (i
= 0; i
< ETH_ALEN
/ 2; i
++)
1245 writereg(dev
, PP_IA
+ i
* 2, dev
->dev_addr
[i
* 2] | (dev
->dev_addr
[i
* 2 + 1] << 8));
1247 /* while we're testing the interface, leave interrupts disabled */
1248 writereg(dev
, PP_BusCTL
, MEMORY_ON
);
1250 /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
1251 if ((lp
->adapter_cnf
& A_CNF_EXTND_10B_2
) && (lp
->adapter_cnf
& A_CNF_LOW_RX_SQUELCH
))
1252 lp
->linectl
= LOW_RX_SQUELCH
;
1256 /* check to make sure that they have the "right" hardware available */
1257 switch (lp
->adapter_cnf
& A_CNF_MEDIA_TYPE
) {
1258 case A_CNF_MEDIA_10B_T
: result
= lp
->adapter_cnf
& A_CNF_10B_T
; break;
1259 case A_CNF_MEDIA_AUI
: result
= lp
->adapter_cnf
& A_CNF_AUI
; break;
1260 case A_CNF_MEDIA_10B_2
: result
= lp
->adapter_cnf
& A_CNF_10B_2
; break;
1261 default: result
= lp
->adapter_cnf
& (A_CNF_10B_T
| A_CNF_AUI
| A_CNF_10B_2
);
1264 pr_err("%s: EEPROM is configured for unavailable media\n",
1270 release_dma_buff(lp
);
1272 writereg(dev
, PP_LineCTL
, readreg(dev
, PP_LineCTL
) & ~(SERIAL_TX_ON
| SERIAL_RX_ON
));
1273 free_irq(dev
->irq
, dev
);
1278 /* set the hardware to the configured choice */
1279 switch (lp
->adapter_cnf
& A_CNF_MEDIA_TYPE
) {
1280 case A_CNF_MEDIA_10B_T
:
1281 result
= detect_tp(dev
);
1282 if (result
== DETECTED_NONE
) {
1283 pr_warn("%s: 10Base-T (RJ-45) has no cable\n",
1285 if (lp
->auto_neg_cnf
& IMM_BIT
) /* check "ignore missing media" bit */
1286 result
= DETECTED_RJ45H
; /* Yes! I don't care if I see a link pulse */
1289 case A_CNF_MEDIA_AUI
:
1290 result
= detect_aui(dev
);
1291 if (result
== DETECTED_NONE
) {
1292 pr_warn("%s: 10Base-5 (AUI) has no cable\n", dev
->name
);
1293 if (lp
->auto_neg_cnf
& IMM_BIT
) /* check "ignore missing media" bit */
1294 result
= DETECTED_AUI
; /* Yes! I don't care if I see a carrrier */
1297 case A_CNF_MEDIA_10B_2
:
1298 result
= detect_bnc(dev
);
1299 if (result
== DETECTED_NONE
) {
1300 pr_warn("%s: 10Base-2 (BNC) has no cable\n", dev
->name
);
1301 if (lp
->auto_neg_cnf
& IMM_BIT
) /* check "ignore missing media" bit */
1302 result
= DETECTED_BNC
; /* Yes! I don't care if I can xmit a packet */
1305 case A_CNF_MEDIA_AUTO
:
1306 writereg(dev
, PP_LineCTL
, lp
->linectl
| AUTO_AUI_10BASET
);
1307 if (lp
->adapter_cnf
& A_CNF_10B_T
)
1308 if ((result
= detect_tp(dev
)) != DETECTED_NONE
)
1310 if (lp
->adapter_cnf
& A_CNF_AUI
)
1311 if ((result
= detect_aui(dev
)) != DETECTED_NONE
)
1313 if (lp
->adapter_cnf
& A_CNF_10B_2
)
1314 if ((result
= detect_bnc(dev
)) != DETECTED_NONE
)
1316 pr_err("%s: no media detected\n", dev
->name
);
1321 pr_err("%s: no network cable attached to configured media\n",
1324 case DETECTED_RJ45H
:
1325 pr_info("%s: using half-duplex 10Base-T (RJ-45)\n", dev
->name
);
1327 case DETECTED_RJ45F
:
1328 pr_info("%s: using full-duplex 10Base-T (RJ-45)\n", dev
->name
);
1331 pr_info("%s: using 10Base-5 (AUI)\n", dev
->name
);
1334 pr_info("%s: using 10Base-2 (BNC)\n", dev
->name
);
1338 /* Turn on both receive and transmit operations */
1339 writereg(dev
, PP_LineCTL
, readreg(dev
, PP_LineCTL
) | SERIAL_RX_ON
| SERIAL_TX_ON
);
1341 /* Receive only error free packets addressed to this card */
1343 writereg(dev
, PP_RxCTL
, DEF_RX_ACCEPT
);
1345 lp
->curr_rx_cfg
= RX_OK_ENBL
| RX_CRC_ERROR_ENBL
;
1347 if (lp
->isa_config
& STREAM_TRANSFER
)
1348 lp
->curr_rx_cfg
|= RX_STREAM_ENBL
;
1352 writereg(dev
, PP_RxCFG
, lp
->curr_rx_cfg
);
1354 writereg(dev
, PP_TxCFG
, TX_LOST_CRS_ENBL
| TX_SQE_ERROR_ENBL
| TX_OK_ENBL
|
1355 TX_LATE_COL_ENBL
| TX_JBR_ENBL
| TX_ANY_COL_ENBL
| TX_16_COL_ENBL
);
1357 writereg(dev
, PP_BufCFG
, READY_FOR_TX_ENBL
| RX_MISS_COUNT_OVRFLOW_ENBL
|
1361 TX_COL_COUNT_OVRFLOW_ENBL
| TX_UNDERRUN_ENBL
);
1363 /* now that we've got our act together, enable everything */
1364 writereg(dev
, PP_BusCTL
, ENABLE_IRQ
1365 | (dev
->mem_start
? MEMORY_ON
: 0) /* turn memory on */
1370 netif_start_queue(dev
);
1372 printk("cs89x0: net_open() succeeded\n");
1378 static void net_timeout(struct net_device
*dev
)
1380 /* If we get here, some higher level has decided we are broken.
1381 There should really be a "kick me" function call instead. */
1382 if (net_debug
> 0) printk("%s: transmit timed out, %s?\n", dev
->name
,
1383 tx_done(dev
) ? "IRQ conflict ?" : "network cable problem");
1384 /* Try to restart the adaptor. */
1385 netif_wake_queue(dev
);
1388 static netdev_tx_t
net_send_packet(struct sk_buff
*skb
, struct net_device
*dev
)
1390 struct net_local
*lp
= netdev_priv(dev
);
1391 unsigned long flags
;
1393 if (net_debug
> 3) {
1394 printk("%s: sent %d byte packet of type %x\n",
1395 dev
->name
, skb
->len
,
1396 (skb
->data
[ETH_ALEN
+ ETH_ALEN
] << 8) | skb
->data
[ETH_ALEN
+ ETH_ALEN
+ 1]);
1399 /* keep the upload from being interrupted, since we
1400 ask the chip to start transmitting before the
1401 whole packet has been completely uploaded. */
1403 spin_lock_irqsave(&lp
->lock
, flags
);
1404 netif_stop_queue(dev
);
1406 /* initiate a transmit sequence */
1407 iowrite16(lp
->send_cmd
, lp
->virt_addr
+ TX_CMD_PORT
);
1408 iowrite16(skb
->len
, lp
->virt_addr
+ TX_LEN_PORT
);
1410 /* Test to see if the chip has allocated memory for the packet */
1411 if ((readreg(dev
, PP_BusST
) & READY_FOR_TX_NOW
) == 0) {
1412 /* Gasp! It hasn't. But that shouldn't happen since
1413 * we're waiting for TxOk, so return 1 and requeue this packet.
1416 spin_unlock_irqrestore(&lp
->lock
, flags
);
1417 if (net_debug
) printk("cs89x0: Tx buffer not free!\n");
1418 return NETDEV_TX_BUSY
;
1420 /* Write the contents of the packet */
1421 writewords(lp
, TX_FRAME_PORT
, skb
->data
, (skb
->len
+1) >> 1);
1422 spin_unlock_irqrestore(&lp
->lock
, flags
);
1423 dev
->stats
.tx_bytes
+= skb
->len
;
1426 /* We DO NOT call netif_wake_queue() here.
1427 * We also DO NOT call netif_start_queue().
1429 * Either of these would cause another bottom half run through
1430 * net_send_packet() before this packet has fully gone out. That causes
1431 * us to hit the "Gasp!" above and the send is rescheduled. it runs like
1432 * a dog. We just return and wait for the Tx completion interrupt handler
1433 * to restart the netdevice layer
1436 return NETDEV_TX_OK
;
1439 /* The typical workload of the driver:
1440 * Handle the network interface interrupts.
1443 static irqreturn_t
net_interrupt(int irq
, void *dev_id
)
1445 struct net_device
*dev
= dev_id
;
1446 struct net_local
*lp
;
1450 lp
= netdev_priv(dev
);
1452 /* we MUST read all the events out of the ISQ, otherwise we'll never
1453 * get interrupted again. As a consequence, we can't have any limit
1454 * on the number of times we loop in the interrupt handler. The
1455 * hardware guarantees that eventually we'll run out of events. Of
1456 * course, if you're on a slow machine, and packets are arriving
1457 * faster than you can read them off, you're screwed. Hasta la
1460 while ((status
= ioread16(lp
->virt_addr
+ ISQ_PORT
))) {
1461 if (net_debug
> 4)printk("%s: event=%04x\n", dev
->name
, status
);
1463 switch (status
& ISQ_EVENT_MASK
) {
1464 case ISQ_RECEIVER_EVENT
:
1465 /* Got a packet(s). */
1468 case ISQ_TRANSMITTER_EVENT
:
1469 dev
->stats
.tx_packets
++;
1470 netif_wake_queue(dev
); /* Inform upper layers. */
1471 if ((status
& (TX_OK
|
1475 TX_16_COL
)) != TX_OK
) {
1476 if ((status
& TX_OK
) == 0)
1477 dev
->stats
.tx_errors
++;
1478 if (status
& TX_LOST_CRS
)
1479 dev
->stats
.tx_carrier_errors
++;
1480 if (status
& TX_SQE_ERROR
)
1481 dev
->stats
.tx_heartbeat_errors
++;
1482 if (status
& TX_LATE_COL
)
1483 dev
->stats
.tx_window_errors
++;
1484 if (status
& TX_16_COL
)
1485 dev
->stats
.tx_aborted_errors
++;
1488 case ISQ_BUFFER_EVENT
:
1489 if (status
& READY_FOR_TX
) {
1490 /* we tried to transmit a packet earlier,
1491 * but inexplicably ran out of buffers.
1492 * That shouldn't happen since we only ever
1493 * load one packet. Shrug. Do the right
1496 netif_wake_queue(dev
); /* Inform upper layers. */
1498 if (status
& TX_UNDERRUN
) {
1499 if (net_debug
> 0) printk("%s: transmit underrun\n", dev
->name
);
1500 lp
->send_underrun
++;
1501 if (lp
->send_underrun
== 3) lp
->send_cmd
= TX_AFTER_381
;
1502 else if (lp
->send_underrun
== 6) lp
->send_cmd
= TX_AFTER_ALL
;
1503 /* transmit cycle is done, although
1504 * frame wasn't transmitted - this
1505 * avoids having to wait for the upper
1506 * layers to timeout on us, in the
1507 * event of a tx underrun
1509 netif_wake_queue(dev
); /* Inform upper layers. */
1512 if (lp
->use_dma
&& (status
& RX_DMA
)) {
1513 int count
= readreg(dev
, PP_DmaFrameCnt
);
1516 printk("%s: receiving %d DMA frames\n", dev
->name
, count
);
1517 if (net_debug
> 2 && count
> 1)
1518 printk("%s: receiving %d DMA frames\n", dev
->name
, count
);
1521 count
= readreg(dev
, PP_DmaFrameCnt
);
1522 if (net_debug
> 2 && count
> 0)
1523 printk("%s: continuing with %d DMA frames\n", dev
->name
, count
);
1528 case ISQ_RX_MISS_EVENT
:
1529 dev
->stats
.rx_missed_errors
+= (status
>> 6);
1531 case ISQ_TX_COL_EVENT
:
1532 dev
->stats
.collisions
+= (status
>> 6);
1536 return IRQ_RETVAL(handled
);
1540 count_rx_errors(int status
, struct net_device
*dev
)
1542 dev
->stats
.rx_errors
++;
1543 if (status
& RX_RUNT
)
1544 dev
->stats
.rx_length_errors
++;
1545 if (status
& RX_EXTRA_DATA
)
1546 dev
->stats
.rx_length_errors
++;
1547 if ((status
& RX_CRC_ERROR
) && !(status
& (RX_EXTRA_DATA
|RX_RUNT
)))
1549 dev
->stats
.rx_crc_errors
++;
1550 if (status
& RX_DRIBBLE
)
1551 dev
->stats
.rx_frame_errors
++;
1554 /* We have a good packet(s), get it/them out of the buffers. */
1556 net_rx(struct net_device
*dev
)
1558 struct net_local
*lp
= netdev_priv(dev
);
1559 struct sk_buff
*skb
;
1562 status
= ioread16(lp
->virt_addr
+ RX_FRAME_PORT
);
1563 length
= ioread16(lp
->virt_addr
+ RX_FRAME_PORT
);
1565 if ((status
& RX_OK
) == 0) {
1566 count_rx_errors(status
, dev
);
1570 /* Malloc up new buffer. */
1571 skb
= netdev_alloc_skb(dev
, length
+ 2);
1573 #if 0 /* Again, this seems a cruel thing to do */
1574 pr_warn("%s: Memory squeeze, dropping packet\n", dev
->name
);
1576 dev
->stats
.rx_dropped
++;
1579 skb_reserve(skb
, 2); /* longword align L3 header */
1581 readwords(lp
, RX_FRAME_PORT
, skb_put(skb
, length
), length
>> 1);
1583 skb
->data
[length
-1] = ioread16(lp
->virt_addr
+ RX_FRAME_PORT
);
1585 if (net_debug
> 3) {
1586 printk("%s: received %d byte packet of type %x\n",
1588 (skb
->data
[ETH_ALEN
+ ETH_ALEN
] << 8) | skb
->data
[ETH_ALEN
+ ETH_ALEN
+ 1]);
1591 skb
->protocol
= eth_type_trans(skb
, dev
);
1593 dev
->stats
.rx_packets
++;
1594 dev
->stats
.rx_bytes
+= length
;
1598 static void release_dma_buff(struct net_local
*lp
)
1601 free_pages((unsigned long)(lp
->dma_buff
), get_order(lp
->dmasize
* 1024));
1602 lp
->dma_buff
= NULL
;
1607 /* The inverse routine to net_open(). */
1609 net_close(struct net_device
*dev
)
1612 struct net_local
*lp
= netdev_priv(dev
);
1615 netif_stop_queue(dev
);
1617 writereg(dev
, PP_RxCFG
, 0);
1618 writereg(dev
, PP_TxCFG
, 0);
1619 writereg(dev
, PP_BufCFG
, 0);
1620 writereg(dev
, PP_BusCTL
, 0);
1622 free_irq(dev
->irq
, dev
);
1625 if (lp
->use_dma
&& lp
->dma
) {
1627 release_dma_buff(lp
);
1631 /* Update the statistics here. */
1635 /* Get the current statistics.
1636 * This may be called with the card open or closed.
1638 static struct net_device_stats
*
1639 net_get_stats(struct net_device
*dev
)
1641 struct net_local
*lp
= netdev_priv(dev
);
1642 unsigned long flags
;
1644 spin_lock_irqsave(&lp
->lock
, flags
);
1645 /* Update the statistics from the device registers. */
1646 dev
->stats
.rx_missed_errors
+= (readreg(dev
, PP_RxMiss
) >> 6);
1647 dev
->stats
.collisions
+= (readreg(dev
, PP_TxCol
) >> 6);
1648 spin_unlock_irqrestore(&lp
->lock
, flags
);
1653 static void set_multicast_list(struct net_device
*dev
)
1655 struct net_local
*lp
= netdev_priv(dev
);
1656 unsigned long flags
;
1658 spin_lock_irqsave(&lp
->lock
, flags
);
1659 if (dev
->flags
&IFF_PROMISC
)
1661 lp
->rx_mode
= RX_ALL_ACCEPT
;
1663 else if ((dev
->flags
& IFF_ALLMULTI
) || !netdev_mc_empty(dev
))
1665 /* The multicast-accept list is initialized to accept-all, and we
1666 rely on higher-level filtering for now. */
1667 lp
->rx_mode
= RX_MULTCAST_ACCEPT
;
1672 writereg(dev
, PP_RxCTL
, DEF_RX_ACCEPT
| lp
->rx_mode
);
1674 /* in promiscuous mode, we accept errored packets, so we have to enable interrupts on them also */
1675 writereg(dev
, PP_RxCFG
, lp
->curr_rx_cfg
|
1676 (lp
->rx_mode
== RX_ALL_ACCEPT
? (RX_CRC_ERROR_ENBL
|RX_RUNT_ENBL
|RX_EXTRA_DATA_ENBL
) : 0));
1677 spin_unlock_irqrestore(&lp
->lock
, flags
);
1681 static int set_mac_address(struct net_device
*dev
, void *p
)
1684 struct sockaddr
*addr
= p
;
1686 if (netif_running(dev
))
1689 memcpy(dev
->dev_addr
, addr
->sa_data
, dev
->addr_len
);
1692 printk("%s: Setting MAC address to %pM.\n",
1693 dev
->name
, dev
->dev_addr
);
1695 /* set the Ethernet address */
1696 for (i
= 0; i
< ETH_ALEN
/ 2; i
++)
1697 writereg(dev
, PP_IA
+ i
* 2, dev
->dev_addr
[i
* 2] | (dev
->dev_addr
[i
* 2 + 1] << 8));
1702 #if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
1704 static struct net_device
*dev_cs89x0
;
1706 /* Support the 'debug' module parm even if we're compiled for non-debug to
1707 * avoid breaking someone's startup scripts
1713 static char media
[8];
1714 static int duplex
= -1;
1716 static int use_dma
; /* These generate unused var warnings if ALLOW_DMA = 0 */
1718 static int dmasize
= 16; /* or 64 */
1720 module_param(io
, int, 0);
1721 module_param(irq
, int, 0);
1722 module_param(debug
, int, 0);
1723 module_param_string(media
, media
, sizeof(media
), 0);
1724 module_param(duplex
, int, 0);
1725 module_param(dma
, int, 0);
1726 module_param(dmasize
, int, 0);
1727 module_param(use_dma
, int, 0);
1728 MODULE_PARM_DESC(io
, "cs89x0 I/O base address");
1729 MODULE_PARM_DESC(irq
, "cs89x0 IRQ number");
1731 MODULE_PARM_DESC(debug
, "cs89x0 debug level (0-6)");
1733 MODULE_PARM_DESC(debug
, "(ignored)");
1735 MODULE_PARM_DESC(media
, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1736 /* No other value than -1 for duplex seems to be currently interpreted */
1737 MODULE_PARM_DESC(duplex
, "(ignored)");
1739 MODULE_PARM_DESC(dma
, "cs89x0 ISA DMA channel; ignored if use_dma=0");
1740 MODULE_PARM_DESC(dmasize
, "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1741 MODULE_PARM_DESC(use_dma
, "cs89x0 using DMA (0-1)");
1743 MODULE_PARM_DESC(dma
, "(ignored)");
1744 MODULE_PARM_DESC(dmasize
, "(ignored)");
1745 MODULE_PARM_DESC(use_dma
, "(ignored)");
1748 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton");
1749 MODULE_LICENSE("GPL");
1752 * media=t - specify media type
1756 * duplex=0 - specify forced half/full/autonegotiate duplex
1757 * debug=# - debug level
1759 * Default Chip Configuration:
1760 * DMA Burst = enabled
1761 * IOCHRDY Enabled = enabled
1763 * CS8900 defaults to half-duplex if not specified on command-line
1764 * CS8920 defaults to autoneg if not specified on command-line
1765 * Use reset defaults for other config parameters
1768 * media type specified is supported (circuitry is present)
1769 * if memory address is > 1MB, then required mem decode hw is present
1770 * if 10B-2, then agent other than driver will enable DC/DC converter
1771 * (hw or software util)
1774 int __init
init_module(void)
1776 struct net_device
*dev
= alloc_etherdev(sizeof(struct net_local
));
1777 struct net_local
*lp
;
1789 dev
->base_addr
= io
;
1790 lp
= netdev_priv(dev
);
1794 lp
->use_dma
= use_dma
;
1796 lp
->dmasize
= dmasize
;
1800 spin_lock_init(&lp
->lock
);
1802 /* boy, they'd better get these right */
1803 if (!strcmp(media
, "rj45"))
1804 lp
->adapter_cnf
= A_CNF_MEDIA_10B_T
| A_CNF_10B_T
;
1805 else if (!strcmp(media
, "aui"))
1806 lp
->adapter_cnf
= A_CNF_MEDIA_AUI
| A_CNF_AUI
;
1807 else if (!strcmp(media
, "bnc"))
1808 lp
->adapter_cnf
= A_CNF_MEDIA_10B_2
| A_CNF_10B_2
;
1810 lp
->adapter_cnf
= A_CNF_MEDIA_10B_T
| A_CNF_10B_T
;
1813 lp
->auto_neg_cnf
= AUTO_NEG_ENABLE
;
1816 pr_err("Module autoprobing not allowed\n");
1817 pr_err("Append io=0xNNN\n");
1820 } else if (io
<= 0x1ff) {
1826 if (use_dma
&& dmasize
!= 16 && dmasize
!= 64) {
1827 pr_err("dma size must be either 16K or 64K, not %dK\n",
1833 ret
= cs89x0_ioport_probe(dev
, io
, 1);
1845 cleanup_module(void)
1847 struct net_local
*lp
= netdev_priv(dev_cs89x0
);
1849 unregister_netdev(dev_cs89x0
);
1850 iowrite16(PP_ChipID
, lp
->virt_addr
+ ADD_PORT
);
1851 ioport_unmap(lp
->virt_addr
);
1852 release_region(dev_cs89x0
->base_addr
, NETCARD_IO_EXTENT
);
1853 free_netdev(dev_cs89x0
);
1855 #endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
1857 #ifdef CONFIG_CS89x0_PLATFORM
1858 static int __init
cs89x0_platform_probe(struct platform_device
*pdev
)
1860 struct net_device
*dev
= alloc_etherdev(sizeof(struct net_local
));
1861 struct net_local
*lp
;
1862 struct resource
*mem_res
;
1863 void __iomem
*virt_addr
;
1869 lp
= netdev_priv(dev
);
1871 mem_res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1872 dev
->irq
= platform_get_irq(pdev
, 0);
1873 if (mem_res
== NULL
|| dev
->irq
<= 0) {
1874 dev_warn(&dev
->dev
, "memory/interrupt resource missing.\n");
1879 lp
->size
= resource_size(mem_res
);
1880 if (!request_mem_region(mem_res
->start
, lp
->size
, DRV_NAME
)) {
1881 dev_warn(&dev
->dev
, "request_mem_region() failed.\n");
1886 virt_addr
= ioremap(mem_res
->start
, lp
->size
);
1888 dev_warn(&dev
->dev
, "ioremap() failed.\n");
1893 err
= cs89x0_probe1(dev
, virt_addr
, 0);
1895 dev_warn(&dev
->dev
, "no cs8900 or cs8920 detected.\n");
1899 platform_set_drvdata(pdev
, dev
);
1905 release_mem_region(mem_res
->start
, lp
->size
);
1911 static int cs89x0_platform_remove(struct platform_device
*pdev
)
1913 struct net_device
*dev
= platform_get_drvdata(pdev
);
1914 struct net_local
*lp
= netdev_priv(dev
);
1915 struct resource
*mem_res
;
1917 /* This platform_get_resource() call will not return NULL, because
1918 * the same call in cs89x0_platform_probe() has returned a non NULL
1921 mem_res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1922 unregister_netdev(dev
);
1923 iounmap(lp
->virt_addr
);
1924 release_mem_region(mem_res
->start
, lp
->size
);
1929 static struct platform_driver cs89x0_driver
= {
1932 .owner
= THIS_MODULE
,
1934 .remove
= cs89x0_platform_remove
,
1937 static int __init
cs89x0_init(void)
1939 return platform_driver_probe(&cs89x0_driver
, cs89x0_platform_probe
);
1942 module_init(cs89x0_init
);
1944 static void __exit
cs89x0_cleanup(void)
1946 platform_driver_unregister(&cs89x0_driver
);
1949 module_exit(cs89x0_cleanup
);
1951 #endif /* CONFIG_CS89x0_PLATFORM */