1 /* cs89x0.c: A Crystal Semiconductor (Now Cirrus Logic) CS89[02]0
6 Written 1996 by Russell Nelson, with reference to skeleton.c
7 written 1993-1994 by Donald Becker.
9 This software may be used and distributed according to the terms
10 of the GNU General Public License, incorporated herein by reference.
12 The author may be reached at nelson@crynwr.com, Crynwr
13 Software, 521 Pleasant Valley Rd., Potsdam, NY 13676
17 Mike Cruse : mcruse@cti-ltd.com
18 : Changes for Linux 2.0 compatibility.
19 : Added dev_id parameter in net_interrupt(),
20 : request_irq() and free_irq(). Just NULL for now.
22 Mike Cruse : Added MOD_INC_USE_COUNT and MOD_DEC_USE_COUNT macros
23 : in net_open() and net_close() so kerneld would know
24 : that the module is in use and wouldn't eject the
27 Mike Cruse : Rewrote init_module() and cleanup_module using 8390.c
28 : as an example. Disabled autoprobing in init_module(),
29 : not a good thing to do to other devices while Linux
30 : is running from all accounts.
32 Russ Nelson : Jul 13 1998. Added RxOnly DMA support.
34 Melody Lee : Aug 10 1999. Changes for Linux 2.2.5 compatibility.
35 : email: ethernet@crystal.cirrus.com
37 Alan Cox : Removed 1.2 support, added 2.1 extra counters.
39 Andrew Morton : andrewm@uow.edu.au
41 : Handle kmalloc() failures
42 : Other resource allocation fixes
44 : Integrate Russ Nelson's ALLOW_DMA functionality back in.
45 : If ALLOW_DMA is true, make DMA runtime selectable
46 : Folded in changes from Cirrus (Melody Lee
47 : <klee@crystal.cirrus.com>)
48 : Don't call netif_wake_queue() in net_send_packet()
49 : Fixed an out-of-mem bug in dma_rx()
50 : Updated Documentation/networking/cs89x0.txt
52 Andrew Morton : andrewm@uow.edu.au / Kernel 2.3.99-pre1
53 : Use skb_reserve to longword align IP header (two places)
54 : Remove a delay loop from dma_rx()
55 : Replace '100' with HZ
56 : Clean up a couple of skb API abuses
57 : Added 'cs89x0_dma=N' kernel boot option
58 : Correctly initialise lp->lock in non-module compile
60 Andrew Morton : andrewm@uow.edu.au / Kernel 2.3.99-pre4-1
61 : MOD_INC/DEC race fix (see
62 : http://www.uwsg.indiana.edu/hypermail/linux/kernel/0003.3/1532.html)
64 Andrew Morton : andrewm@uow.edu.au / Kernel 2.4.0-test7-pre2
65 : Enhanced EEPROM support to cover more devices,
66 : abstracted IRQ mapping to support CONFIG_ARCH_CLPS7500 arch
67 : (Jason Gunthorpe <jgg@ualberta.ca>)
69 Andrew Morton : Kernel 2.4.0-test11-pre4
70 : Use dev->name in request_*() (Andrey Panin)
71 : Fix an error-path memleak in init_module()
72 : Preserve return value from request_irq()
73 : Fix type of `media' module parm (Keith Owens)
74 : Use SET_MODULE_OWNER()
75 : Tidied up strange request_irq() abuse in net_open().
77 Andrew Morton : Kernel 2.4.3-pre1
78 : Request correct number of pages for DMA (Hugh Dickens)
79 : Select PP_ChipID _after_ unregister_netdev in cleanup_module()
80 : because unregister_netdev() calls get_stats.
81 : Make `version[]' __initdata
82 : Uninlined the read/write reg/word functions.
84 Oskar Schirmer : oskar@scara.com
85 : HiCO.SH4 (superh) support added (irq#1, cs89x0_media=)
87 Deepak Saxena : dsaxena@plexity.net
88 : Intel IXDP2x01 (XScale ixp2x00 NPU) platform support
90 Dmitry Pervushin : dpervushin@ru.mvista.com
91 : PNX010X platform support
93 Deepak Saxena : dsaxena@plexity.net
94 : Intel IXDP2351 platform support
96 Dmitry Pervushin : dpervushin@ru.mvista.com
97 : PNX010X platform support
101 /* Always include 'config.h' first in case the user wants to turn on
102 or override something. */
103 #include <linux/module.h>
106 * Set this to zero to disable DMA code
108 * Note that even if DMA is turned off we still support the 'dma' and 'use_dma'
109 * module options so we don't break any startup scripts.
111 #ifndef CONFIG_ISA_DMA_API
118 * Set this to zero to remove all the debug statements via
119 * dead code elimination
126 Crynwr packet driver epktisa.
128 Crystal Semiconductor data sheets.
132 #include <linux/errno.h>
133 #include <linux/netdevice.h>
134 #include <linux/etherdevice.h>
135 #include <linux/kernel.h>
136 #include <linux/types.h>
137 #include <linux/fcntl.h>
138 #include <linux/interrupt.h>
139 #include <linux/ioport.h>
140 #include <linux/in.h>
141 #include <linux/skbuff.h>
142 #include <linux/slab.h>
143 #include <linux/spinlock.h>
144 #include <linux/string.h>
145 #include <linux/init.h>
146 #include <linux/bitops.h>
147 #include <linux/delay.h>
149 #include <asm/system.h>
158 static char version
[] __initdata
=
159 "cs89x0.c: v2.4.3-pre1 Russell Nelson <nelson@crynwr.com>, Andrew Morton <andrewm@uow.edu.au>\n";
161 #define DRV_NAME "cs89x0"
163 /* First, a few definitions that the brave might change.
164 A zero-terminated list of I/O addresses to be probed. Some special flags..
165 Addr & 1 = Read back the address port, look for signature and reset
166 the page window before probing
167 Addr & 3 = Reset the page window and probe
168 The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
169 but it is possible that a Cirrus board could be plugged into the ISA
171 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
172 them to system IRQ numbers. This mapping is card specific and is set to
173 the configuration of the Cirrus Eval board for this chip. */
174 #ifdef CONFIG_ARCH_CLPS7500
175 <<<<<<< HEAD
:drivers
/net
/cs89x0
.c
176 static unsigned int netcard_portlist
[] __initdata
=
178 static unsigned int netcard_portlist
[] __used __initdata
=
179 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:drivers
/net
/cs89x0
.c
180 { 0x80090303, 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
181 static unsigned int cs8900_irq_map
[] = {12,0,0,0};
182 #elif defined(CONFIG_SH_HICOSH4)
183 <<<<<<< HEAD
:drivers
/net
/cs89x0
.c
184 static unsigned int netcard_portlist
[] __initdata
=
186 static unsigned int netcard_portlist
[] __used __initdata
=
187 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:drivers
/net
/cs89x0
.c
189 static unsigned int cs8900_irq_map
[] = {1,0,0,0};
190 #elif defined(CONFIG_MACH_IXDP2351)
191 <<<<<<< HEAD
:drivers
/net
/cs89x0
.c
192 static unsigned int netcard_portlist
[] __initdata
= {IXDP2351_VIRT_CS8900_BASE
, 0};
194 static unsigned int netcard_portlist
[] __used __initdata
= {IXDP2351_VIRT_CS8900_BASE
, 0};
195 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:drivers
/net
/cs89x0
.c
196 static unsigned int cs8900_irq_map
[] = {IRQ_IXDP2351_CS8900
, 0, 0, 0};
198 #elif defined(CONFIG_ARCH_IXDP2X01)
200 <<<<<<< HEAD
:drivers
/net
/cs89x0
.c
201 static unsigned int netcard_portlist
[] __initdata
= {IXDP2X01_CS8900_VIRT_BASE
, 0};
203 static unsigned int netcard_portlist
[] __used __initdata
= {IXDP2X01_CS8900_VIRT_BASE
, 0};
204 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:drivers
/net
/cs89x0
.c
205 static unsigned int cs8900_irq_map
[] = {IRQ_IXDP2X01_CS8900
, 0, 0, 0};
206 #elif defined(CONFIG_ARCH_PNX010X)
208 #include <asm/arch/gpio.h>
209 #define CIRRUS_DEFAULT_BASE IO_ADDRESS(EXT_STATIC2_s0_BASE + 0x200000) /* = Physical address 0x48200000 */
210 #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */
211 <<<<<<< HEAD
:drivers
/net
/cs89x0
.c
212 static unsigned int netcard_portlist
[] __initdata
= {CIRRUS_DEFAULT_BASE
, 0};
214 static unsigned int netcard_portlist
[] __used __initdata
= {CIRRUS_DEFAULT_BASE
, 0};
215 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:drivers
/net
/cs89x0
.c
216 static unsigned int cs8900_irq_map
[] = {CIRRUS_DEFAULT_IRQ
, 0, 0, 0};
218 <<<<<<< HEAD
:drivers
/net
/cs89x0
.c
219 static unsigned int netcard_portlist
[] __initdata
=
221 static unsigned int netcard_portlist
[] __used __initdata
=
222 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:drivers
/net
/cs89x0
.c
223 { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
224 static unsigned int cs8900_irq_map
[] = {10,11,12,5};
228 static unsigned int net_debug
= DEBUGGING
;
230 #define net_debug 0 /* gcc will remove all the debug code for us */
233 /* The number of low I/O ports used by the ethercard. */
234 #define NETCARD_IO_EXTENT 16
236 /* we allow the user to override various values normally set in the EEPROM */
237 #define FORCE_RJ45 0x0001 /* pick one of these three */
238 #define FORCE_AUI 0x0002
239 #define FORCE_BNC 0x0004
241 #define FORCE_AUTO 0x0010 /* pick one of these three */
242 #define FORCE_HALF 0x0020
243 #define FORCE_FULL 0x0030
245 /* Information that need to be kept for each board. */
247 struct net_device_stats stats
;
248 int chip_type
; /* one of: CS8900, CS8920, CS8920M */
249 char chip_revision
; /* revision letter of the chip ('A'...) */
250 int send_cmd
; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
251 int auto_neg_cnf
; /* auto-negotiation word from EEPROM */
252 int adapter_cnf
; /* adapter configuration from EEPROM */
253 int isa_config
; /* ISA configuration from EEPROM */
254 int irq_map
; /* IRQ map from EEPROM */
255 int rx_mode
; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
256 int curr_rx_cfg
; /* a copy of PP_RxCFG */
257 int linectl
; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
258 int send_underrun
; /* keep track of how many underruns in a row we get */
259 int force
; /* force various values; see FORCE* above. */
262 int use_dma
; /* Flag: we're using dma */
263 int dma
; /* DMA channel */
264 int dmasize
; /* 16 or 64 */
265 unsigned char *dma_buff
; /* points to the beginning of the buffer */
266 unsigned char *end_dma_buff
; /* points to the end of the buffer */
267 unsigned char *rx_dma_ptr
; /* points to the next packet */
271 /* Index to functions, as function prototypes. */
273 static int cs89x0_probe1(struct net_device
*dev
, int ioaddr
, int modular
);
274 static int net_open(struct net_device
*dev
);
275 static int net_send_packet(struct sk_buff
*skb
, struct net_device
*dev
);
276 static irqreturn_t
net_interrupt(int irq
, void *dev_id
);
277 static void set_multicast_list(struct net_device
*dev
);
278 static void net_timeout(struct net_device
*dev
);
279 static void net_rx(struct net_device
*dev
);
280 static int net_close(struct net_device
*dev
);
281 static struct net_device_stats
*net_get_stats(struct net_device
*dev
);
282 static void reset_chip(struct net_device
*dev
);
283 static int get_eeprom_data(struct net_device
*dev
, int off
, int len
, int *buffer
);
284 static int get_eeprom_cksum(int off
, int len
, int *buffer
);
285 static int set_mac_address(struct net_device
*dev
, void *addr
);
286 static void count_rx_errors(int status
, struct net_local
*lp
);
287 #ifdef CONFIG_NET_POLL_CONTROLLER
288 static void net_poll_controller(struct net_device
*dev
);
291 static void get_dma_channel(struct net_device
*dev
);
292 static void release_dma_buff(struct net_local
*lp
);
295 /* Example routines you must write ;->. */
296 #define tx_done(dev) 1
299 * Permit 'cs89x0_dma=N' in the kernel boot environment
301 #if !defined(MODULE) && (ALLOW_DMA != 0)
302 static int g_cs89x0_dma
;
304 static int __init
dma_fn(char *str
)
306 g_cs89x0_dma
= simple_strtol(str
,NULL
,0);
310 __setup("cs89x0_dma=", dma_fn
);
311 #endif /* !defined(MODULE) && (ALLOW_DMA != 0) */
314 static int g_cs89x0_media__force
;
316 static int __init
media_fn(char *str
)
318 if (!strcmp(str
, "rj45")) g_cs89x0_media__force
= FORCE_RJ45
;
319 else if (!strcmp(str
, "aui")) g_cs89x0_media__force
= FORCE_AUI
;
320 else if (!strcmp(str
, "bnc")) g_cs89x0_media__force
= FORCE_BNC
;
324 __setup("cs89x0_media=", media_fn
);
327 /* Check for a network adaptor of this type, and return '0' iff one exists.
328 If dev->base_addr == 0, probe all likely locations.
329 If dev->base_addr == 1, always return failure.
330 If dev->base_addr == 2, allocate space for the device and return success
331 (detachable devices only).
335 struct net_device
* __init
cs89x0_probe(int unit
)
337 struct net_device
*dev
= alloc_etherdev(sizeof(struct net_local
));
344 return ERR_PTR(-ENODEV
);
346 sprintf(dev
->name
, "eth%d", unit
);
347 netdev_boot_setup_check(dev
);
352 printk("cs89x0:cs89x0_probe(0x%x)\n", io
);
354 if (io
> 0x1ff) { /* Check a single specified location. */
355 err
= cs89x0_probe1(dev
, io
, 0);
356 } else if (io
!= 0) { /* Don't probe at all. */
359 for (port
= netcard_portlist
; *port
; port
++) {
360 if (cs89x0_probe1(dev
, *port
, 0) == 0)
372 printk(KERN_WARNING
"cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
377 #if defined(CONFIG_MACH_IXDP2351)
379 readword(unsigned long base_addr
, int portno
)
381 return __raw_readw(base_addr
+ (portno
<< 1));
385 writeword(unsigned long base_addr
, int portno
, u16 value
)
387 __raw_writew(value
, base_addr
+ (portno
<< 1));
389 #elif defined(CONFIG_ARCH_IXDP2X01)
391 readword(unsigned long base_addr
, int portno
)
393 return __raw_readl(base_addr
+ (portno
<< 1));
397 writeword(unsigned long base_addr
, int portno
, u16 value
)
399 __raw_writel(value
, base_addr
+ (portno
<< 1));
401 #elif defined(CONFIG_ARCH_PNX010X)
403 readword(unsigned long base_addr
, int portno
)
405 return inw(base_addr
+ (portno
<< 1));
409 writeword(unsigned long base_addr
, int portno
, u16 value
)
411 outw(value
, base_addr
+ (portno
<< 1));
415 readword(unsigned long base_addr
, int portno
)
417 return inw(base_addr
+ portno
);
421 writeword(unsigned long base_addr
, int portno
, u16 value
)
423 outw(value
, base_addr
+ portno
);
428 readwords(unsigned long base_addr
, int portno
, void *buf
, int length
)
430 u8
*buf8
= (u8
*)buf
;
435 tmp16
= readword(base_addr
, portno
);
437 *buf8
++ = (u8
)(tmp16
>> 8);
442 writewords(unsigned long base_addr
, int portno
, void *buf
, int length
)
444 u8
*buf8
= (u8
*)buf
;
450 tmp16
|= (*buf8
++) << 8;
451 writeword(base_addr
, portno
, tmp16
);
456 readreg(struct net_device
*dev
, u16 regno
)
458 writeword(dev
->base_addr
, ADD_PORT
, regno
);
459 return readword(dev
->base_addr
, DATA_PORT
);
463 writereg(struct net_device
*dev
, u16 regno
, u16 value
)
465 writeword(dev
->base_addr
, ADD_PORT
, regno
);
466 writeword(dev
->base_addr
, DATA_PORT
, value
);
470 wait_eeprom_ready(struct net_device
*dev
)
472 int timeout
= jiffies
;
473 /* check to see if the EEPROM is ready, a timeout is used -
474 just in case EEPROM is ready when SI_BUSY in the
475 PP_SelfST is clear */
476 while(readreg(dev
, PP_SelfST
) & SI_BUSY
)
477 if (jiffies
- timeout
>= 40)
483 get_eeprom_data(struct net_device
*dev
, int off
, int len
, int *buffer
)
487 if (net_debug
> 3) printk("EEPROM data from %x for %x:\n",off
,len
);
488 for (i
= 0; i
< len
; i
++) {
489 if (wait_eeprom_ready(dev
) < 0) return -1;
490 /* Now send the EEPROM read command and EEPROM location to read */
491 writereg(dev
, PP_EECMD
, (off
+ i
) | EEPROM_READ_CMD
);
492 if (wait_eeprom_ready(dev
) < 0) return -1;
493 buffer
[i
] = readreg(dev
, PP_EEData
);
494 if (net_debug
> 3) printk("%04x ", buffer
[i
]);
496 if (net_debug
> 3) printk("\n");
501 get_eeprom_cksum(int off
, int len
, int *buffer
)
506 for (i
= 0; i
< len
; i
++)
514 #ifdef CONFIG_NET_POLL_CONTROLLER
516 * Polling receive - used by netconsole and other diagnostic tools
517 * to allow network i/o with interrupts disabled.
519 static void net_poll_controller(struct net_device
*dev
)
521 disable_irq(dev
->irq
);
522 net_interrupt(dev
->irq
, dev
);
523 enable_irq(dev
->irq
);
527 /* This is the real probe routine. Linux has a history of friendly device
528 probes on the ISA bus. A good device probes avoids doing writes, and
529 verifies that the correct device exists and functions.
534 cs89x0_probe1(struct net_device
*dev
, int ioaddr
, int modular
)
536 struct net_local
*lp
= netdev_priv(dev
);
537 static unsigned version_printed
;
540 unsigned rev_type
= 0;
541 int eeprom_buff
[CHKSUM_LEN
];
543 DECLARE_MAC_BUF(mac
);
545 /* Initialize the device structure. */
547 memset(lp
, 0, sizeof(*lp
));
548 spin_lock_init(&lp
->lock
);
553 lp
->dma
= g_cs89x0_dma
;
554 lp
->dmasize
= 16; /* Could make this an option... */
557 lp
->force
= g_cs89x0_media__force
;
561 #ifdef CONFIG_ARCH_PNX010X
564 /* Map GPIO registers for the pins connected to the CS8900a. */
565 if (map_cirrus_gpio() < 0)
570 /* Map event-router registers. */
571 if (map_event_router() < 0)
577 unmap_event_router();
579 dev
->base_addr
= ioaddr
;
581 for (i
= 0 ; i
< 3 ; i
++)
585 /* Grab the region so we can find another board if autoIRQ fails. */
586 /* WTF is going on here? */
587 if (!request_region(ioaddr
& ~3, NETCARD_IO_EXTENT
, DRV_NAME
)) {
588 printk(KERN_ERR
"%s: request_region(0x%x, 0x%x) failed\n",
589 DRV_NAME
, ioaddr
, NETCARD_IO_EXTENT
);
594 #ifdef CONFIG_SH_HICOSH4
595 /* truely reset the chip */
596 writeword(ioaddr
, ADD_PORT
, 0x0114);
597 writeword(ioaddr
, DATA_PORT
, 0x0040);
600 /* if they give us an odd I/O address, then do ONE write to
601 the address port, to get it back to address zero, where we
602 expect to find the EISA signature word. An IO with a base of 0x3
603 will skip the test for the ADD_PORT. */
606 printk(KERN_INFO
"%s: odd ioaddr 0x%x\n", dev
->name
, ioaddr
);
607 if ((ioaddr
& 2) != 2)
608 if ((readword(ioaddr
& ~3, ADD_PORT
) & ADD_MASK
) != ADD_SIG
) {
609 printk(KERN_ERR
"%s: bad signature 0x%x\n",
610 dev
->name
, readword(ioaddr
& ~3, ADD_PORT
));
617 printk(KERN_DEBUG
"PP_addr at %x[%x]: 0x%x\n",
618 ioaddr
, ADD_PORT
, readword(ioaddr
, ADD_PORT
));
619 writeword(ioaddr
, ADD_PORT
, PP_ChipID
);
621 tmp
= readword(ioaddr
, DATA_PORT
);
622 if (tmp
!= CHIP_EISA_ID_SIG
) {
623 printk(KERN_DEBUG
"%s: incorrect signature at %x[%x]: 0x%x!="
624 CHIP_EISA_ID_SIG_STR
"\n",
625 dev
->name
, ioaddr
, DATA_PORT
, tmp
);
630 /* Fill in the 'dev' fields. */
631 dev
->base_addr
= ioaddr
;
633 /* get the chip type */
634 rev_type
= readreg(dev
, PRODUCT_ID_ADD
);
635 lp
->chip_type
= rev_type
&~ REVISON_BITS
;
636 lp
->chip_revision
= ((rev_type
& REVISON_BITS
) >> 8) + 'A';
638 /* Check the chip type and revision in order to set the correct send command
639 CS8920 revision C and CS8900 revision F can use the faster send. */
640 lp
->send_cmd
= TX_AFTER_381
;
641 if (lp
->chip_type
== CS8900
&& lp
->chip_revision
>= 'F')
642 lp
->send_cmd
= TX_NOW
;
643 if (lp
->chip_type
!= CS8900
&& lp
->chip_revision
>= 'C')
644 lp
->send_cmd
= TX_NOW
;
646 if (net_debug
&& version_printed
++ == 0)
649 printk(KERN_INFO
"%s: cs89%c0%s rev %c found at %#3lx ",
651 lp
->chip_type
==CS8900
?'0':'2',
652 lp
->chip_type
==CS8920M
?"M":"",
658 /* Here we read the current configuration of the chip. If there
659 is no Extended EEPROM then the idea is to not disturb the chip
660 configuration, it should have been correctly setup by automatic
661 EEPROM read on reset. So, if the chip says it read the EEPROM
662 the driver will always do *something* instead of complain that
665 #ifdef CONFIG_SH_HICOSH4
667 /* For the HiCO.SH4 board, things are different: we don't
668 have EEPROM, but there is some data in flash, so we go
669 get it there directly (MAC). */
672 if (((* (volatile __u32
*) 0xa0013ff0) & 0x00ffffff)
674 confd
= (__u16
*) 0xa0013fc0;
676 confd
= (__u16
*) 0xa001ffc0;
678 cnt
= (*confd
++ & 0x00ff) >> 1;
682 switch (j
& 0x0fff) {
684 for (i
= 0; i
< ETH_ALEN
/2; i
++) {
685 dev
->dev_addr
[i
*2] = confd
[i
] & 0xFF;
686 dev
->dev_addr
[i
*2+1] = confd
[i
] >> 8;
697 if ((readreg(dev
, PP_SelfST
) & (EEPROM_OK
| EEPROM_PRESENT
)) ==
698 (EEPROM_OK
|EEPROM_PRESENT
)) {
700 for (i
=0; i
< ETH_ALEN
/2; i
++) {
702 Addr
= readreg(dev
, PP_IA
+i
*2);
703 dev
->dev_addr
[i
*2] = Addr
& 0xFF;
704 dev
->dev_addr
[i
*2+1] = Addr
>> 8;
707 /* Load the Adapter Configuration.
708 Note: Barring any more specific information from some
709 other source (ie EEPROM+Schematics), we would not know
710 how to operate a 10Base2 interface on the AUI port.
711 However, since we do read the status of HCB1 and use
712 settings that always result in calls to control_dc_dc(dev,0)
713 a BNC interface should work if the enable pin
714 (dc/dc converter) is on HCB1. It will be called AUI
718 i
= readreg(dev
, PP_LineCTL
);
719 /* Preserve the setting of the HCB1 pin. */
720 if ((i
& (HCB1
| HCB1_ENBL
)) == (HCB1
| HCB1_ENBL
))
721 lp
->adapter_cnf
|= A_CNF_DC_DC_POLARITY
;
722 /* Save the sqelch bit */
723 if ((i
& LOW_RX_SQUELCH
) == LOW_RX_SQUELCH
)
724 lp
->adapter_cnf
|= A_CNF_EXTND_10B_2
| A_CNF_LOW_RX_SQUELCH
;
725 /* Check if the card is in 10Base-t only mode */
726 if ((i
& (AUI_ONLY
| AUTO_AUI_10BASET
)) == 0)
727 lp
->adapter_cnf
|= A_CNF_10B_T
| A_CNF_MEDIA_10B_T
;
728 /* Check if the card is in AUI only mode */
729 if ((i
& (AUI_ONLY
| AUTO_AUI_10BASET
)) == AUI_ONLY
)
730 lp
->adapter_cnf
|= A_CNF_AUI
| A_CNF_MEDIA_AUI
;
731 /* Check if the card is in Auto mode. */
732 if ((i
& (AUI_ONLY
| AUTO_AUI_10BASET
)) == AUTO_AUI_10BASET
)
733 lp
->adapter_cnf
|= A_CNF_AUI
| A_CNF_10B_T
|
734 A_CNF_MEDIA_AUI
| A_CNF_MEDIA_10B_T
| A_CNF_MEDIA_AUTO
;
737 printk(KERN_INFO
"%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
738 dev
->name
, i
, lp
->adapter_cnf
);
740 /* IRQ. Other chips already probe, see below. */
741 if (lp
->chip_type
== CS8900
)
742 lp
->isa_config
= readreg(dev
, PP_CS8900_ISAINT
) & INT_NO_MASK
;
744 printk( "[Cirrus EEPROM] ");
749 /* First check to see if an EEPROM is attached. */
750 #ifdef CONFIG_SH_HICOSH4 /* no EEPROM on HiCO, don't hazzle with it here */
752 printk(KERN_NOTICE
"cs89x0: No EEPROM on HiCO.SH4\n");
755 if ((readreg(dev
, PP_SelfST
) & EEPROM_PRESENT
) == 0)
756 printk(KERN_WARNING
"cs89x0: No EEPROM, relying on command line....\n");
757 else if (get_eeprom_data(dev
, START_EEPROM_DATA
,CHKSUM_LEN
,eeprom_buff
) < 0) {
758 printk(KERN_WARNING
"\ncs89x0: EEPROM read failed, relying on command line.\n");
759 } else if (get_eeprom_cksum(START_EEPROM_DATA
,CHKSUM_LEN
,eeprom_buff
) < 0) {
760 /* Check if the chip was able to read its own configuration starting
762 if ((readreg(dev
, PP_SelfST
) & (EEPROM_OK
| EEPROM_PRESENT
)) !=
763 (EEPROM_OK
|EEPROM_PRESENT
))
764 printk(KERN_WARNING
"cs89x0: Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
767 /* This reads an extended EEPROM that is not documented
768 in the CS8900 datasheet. */
770 /* get transmission control word but keep the autonegotiation bits */
771 if (!lp
->auto_neg_cnf
) lp
->auto_neg_cnf
= eeprom_buff
[AUTO_NEG_CNF_OFFSET
/2];
772 /* Store adapter configuration */
773 if (!lp
->adapter_cnf
) lp
->adapter_cnf
= eeprom_buff
[ADAPTER_CNF_OFFSET
/2];
774 /* Store ISA configuration */
775 lp
->isa_config
= eeprom_buff
[ISA_CNF_OFFSET
/2];
776 dev
->mem_start
= eeprom_buff
[PACKET_PAGE_OFFSET
/2] << 8;
778 /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
779 /* store the initial memory base address */
780 for (i
= 0; i
< ETH_ALEN
/2; i
++) {
781 dev
->dev_addr
[i
*2] = eeprom_buff
[i
];
782 dev
->dev_addr
[i
*2+1] = eeprom_buff
[i
] >> 8;
785 printk(KERN_DEBUG
"%s: new adapter_cnf: 0x%x\n",
786 dev
->name
, lp
->adapter_cnf
);
789 /* allow them to force multiple transceivers. If they force multiple, autosense */
792 if (lp
->force
& FORCE_RJ45
) {lp
->adapter_cnf
|= A_CNF_10B_T
; count
++; }
793 if (lp
->force
& FORCE_AUI
) {lp
->adapter_cnf
|= A_CNF_AUI
; count
++; }
794 if (lp
->force
& FORCE_BNC
) {lp
->adapter_cnf
|= A_CNF_10B_2
; count
++; }
795 if (count
> 1) {lp
->adapter_cnf
|= A_CNF_MEDIA_AUTO
; }
796 else if (lp
->force
& FORCE_RJ45
){lp
->adapter_cnf
|= A_CNF_MEDIA_10B_T
; }
797 else if (lp
->force
& FORCE_AUI
) {lp
->adapter_cnf
|= A_CNF_MEDIA_AUI
; }
798 else if (lp
->force
& FORCE_BNC
) {lp
->adapter_cnf
|= A_CNF_MEDIA_10B_2
; }
802 printk(KERN_DEBUG
"%s: after force 0x%x, adapter_cnf=0x%x\n",
803 dev
->name
, lp
->force
, lp
->adapter_cnf
);
805 /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
807 /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
809 /* FIXME: we don't set the Ethernet address on the command line. Use
810 ifconfig IFACE hw ether AABBCCDDEEFF */
812 printk(KERN_INFO
"cs89x0 media %s%s%s",
813 (lp
->adapter_cnf
& A_CNF_10B_T
)?"RJ-45,":"",
814 (lp
->adapter_cnf
& A_CNF_AUI
)?"AUI,":"",
815 (lp
->adapter_cnf
& A_CNF_10B_2
)?"BNC,":"");
817 lp
->irq_map
= 0xffff;
819 /* If this is a CS8900 then no pnp soft */
820 if (lp
->chip_type
!= CS8900
&&
821 /* Check if the ISA IRQ has been set */
822 (i
= readreg(dev
, PP_CS8920_ISAINT
) & 0xff,
823 (i
!= 0 && i
< CS8920_NO_INTS
))) {
827 i
= lp
->isa_config
& INT_NO_MASK
;
828 if (lp
->chip_type
== CS8900
) {
829 #if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X)
830 i
= cs8900_irq_map
[0];
832 /* Translate the IRQ using the IRQ mapping table. */
833 if (i
>= ARRAY_SIZE(cs8900_irq_map
))
834 printk("\ncs89x0: invalid ISA interrupt number %d\n", i
);
836 i
= cs8900_irq_map
[i
];
838 lp
->irq_map
= CS8900_IRQ_MAP
; /* fixed IRQ map for CS8900 */
840 int irq_map_buff
[IRQ_MAP_LEN
/2];
842 if (get_eeprom_data(dev
, IRQ_MAP_EEPROM_DATA
,
844 irq_map_buff
) >= 0) {
845 if ((irq_map_buff
[0] & 0xff) == PNP_IRQ_FRMT
)
846 lp
->irq_map
= (irq_map_buff
[0]>>8) | (irq_map_buff
[1] << 8);
854 printk(" IRQ %d", dev
->irq
);
858 get_dma_channel(dev
);
859 printk(", DMA %d", dev
->dma
);
864 printk(", programmed I/O");
867 /* print the ethernet address. */
868 printk(", MAC %s", print_mac(mac
, dev
->dev_addr
));
870 dev
->open
= net_open
;
871 dev
->stop
= net_close
;
872 dev
->tx_timeout
= net_timeout
;
873 dev
->watchdog_timeo
= HZ
;
874 dev
->hard_start_xmit
= net_send_packet
;
875 dev
->get_stats
= net_get_stats
;
876 dev
->set_multicast_list
= set_multicast_list
;
877 dev
->set_mac_address
= set_mac_address
;
878 #ifdef CONFIG_NET_POLL_CONTROLLER
879 dev
->poll_controller
= net_poll_controller
;
884 printk("cs89x0_probe1() successful\n");
886 retval
= register_netdev(dev
);
891 writeword(dev
->base_addr
, ADD_PORT
, PP_ChipID
);
893 release_region(ioaddr
& ~3, NETCARD_IO_EXTENT
);
899 /*********************************
900 * This page contains DMA routines
901 **********************************/
905 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1)>>17 == (long)(ptr2)>>17)
908 get_dma_channel(struct net_device
*dev
)
910 struct net_local
*lp
= netdev_priv(dev
);
914 lp
->isa_config
|= ISA_RxDMA
;
916 if ((lp
->isa_config
& ANY_ISA_DMA
) == 0)
918 dev
->dma
= lp
->isa_config
& DMA_NO_MASK
;
919 if (lp
->chip_type
== CS8900
)
921 if (dev
->dma
< 5 || dev
->dma
> 7) {
922 lp
->isa_config
&= ~ANY_ISA_DMA
;
930 write_dma(struct net_device
*dev
, int chip_type
, int dma
)
932 struct net_local
*lp
= netdev_priv(dev
);
933 if ((lp
->isa_config
& ANY_ISA_DMA
) == 0)
935 if (chip_type
== CS8900
) {
936 writereg(dev
, PP_CS8900_ISADMA
, dma
-5);
938 writereg(dev
, PP_CS8920_ISADMA
, dma
);
943 set_dma_cfg(struct net_device
*dev
)
945 struct net_local
*lp
= netdev_priv(dev
);
948 if ((lp
->isa_config
& ANY_ISA_DMA
) == 0) {
950 printk("set_dma_cfg(): no DMA\n");
953 if (lp
->isa_config
& ISA_RxDMA
) {
954 lp
->curr_rx_cfg
|= RX_DMA_ONLY
;
956 printk("set_dma_cfg(): RX_DMA_ONLY\n");
958 lp
->curr_rx_cfg
|= AUTO_RX_DMA
; /* not that we support it... */
960 printk("set_dma_cfg(): AUTO_RX_DMA\n");
966 dma_bufcfg(struct net_device
*dev
)
968 struct net_local
*lp
= netdev_priv(dev
);
970 return (lp
->isa_config
& ANY_ISA_DMA
)? RX_DMA_ENBL
: 0;
976 dma_busctl(struct net_device
*dev
)
979 struct net_local
*lp
= netdev_priv(dev
);
981 if (lp
->isa_config
& ANY_ISA_DMA
)
982 retval
|= RESET_RX_DMA
; /* Reset the DMA pointer */
983 if (lp
->isa_config
& DMA_BURST
)
984 retval
|= DMA_BURST_MODE
; /* Does ISA config specify DMA burst ? */
985 if (lp
->dmasize
== 64)
986 retval
|= RX_DMA_SIZE_64K
; /* did they ask for 64K? */
987 retval
|= MEMORY_ON
; /* we need memory enabled to use DMA. */
993 dma_rx(struct net_device
*dev
)
995 struct net_local
*lp
= netdev_priv(dev
);
998 unsigned char *bp
= lp
->rx_dma_ptr
;
1000 status
= bp
[0] + (bp
[1]<<8);
1001 length
= bp
[2] + (bp
[3]<<8);
1003 if (net_debug
> 5) {
1004 printk( "%s: receiving DMA packet at %lx, status %x, length %x\n",
1005 dev
->name
, (unsigned long)bp
, status
, length
);
1007 if ((status
& RX_OK
) == 0) {
1008 count_rx_errors(status
, lp
);
1009 goto skip_this_frame
;
1012 /* Malloc up new buffer. */
1013 skb
= dev_alloc_skb(length
+ 2);
1015 if (net_debug
) /* I don't think we want to do this to a stressed system */
1016 printk("%s: Memory squeeze, dropping packet.\n", dev
->name
);
1017 lp
->stats
.rx_dropped
++;
1019 /* AKPM: advance bp to the next frame */
1021 bp
+= (length
+ 3) & ~3;
1022 if (bp
>= lp
->end_dma_buff
) bp
-= lp
->dmasize
*1024;
1023 lp
->rx_dma_ptr
= bp
;
1026 skb_reserve(skb
, 2); /* longword align L3 header */
1028 if (bp
+ length
> lp
->end_dma_buff
) {
1029 int semi_cnt
= lp
->end_dma_buff
- bp
;
1030 memcpy(skb_put(skb
,semi_cnt
), bp
, semi_cnt
);
1031 memcpy(skb_put(skb
,length
- semi_cnt
), lp
->dma_buff
,
1034 memcpy(skb_put(skb
,length
), bp
, length
);
1036 bp
+= (length
+ 3) & ~3;
1037 if (bp
>= lp
->end_dma_buff
) bp
-= lp
->dmasize
*1024;
1038 lp
->rx_dma_ptr
= bp
;
1040 if (net_debug
> 3) {
1041 printk( "%s: received %d byte DMA packet of type %x\n",
1043 (skb
->data
[ETH_ALEN
+ETH_ALEN
] << 8) | skb
->data
[ETH_ALEN
+ETH_ALEN
+1]);
1045 skb
->protocol
=eth_type_trans(skb
,dev
);
1047 dev
->last_rx
= jiffies
;
1048 lp
->stats
.rx_packets
++;
1049 lp
->stats
.rx_bytes
+= length
;
1052 #endif /* ALLOW_DMA */
1054 void __init
reset_chip(struct net_device
*dev
)
1056 #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
1057 struct net_local
*lp
= netdev_priv(dev
);
1058 int ioaddr
= dev
->base_addr
;
1060 int reset_start_time
;
1062 writereg(dev
, PP_SelfCTL
, readreg(dev
, PP_SelfCTL
) | POWER_ON_RESET
);
1067 #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
1068 if (lp
->chip_type
!= CS8900
) {
1069 /* Hardware problem requires PNP registers to be reconfigured after a reset */
1070 writeword(ioaddr
, ADD_PORT
, PP_CS8920_ISAINT
);
1071 outb(dev
->irq
, ioaddr
+ DATA_PORT
);
1072 outb(0, ioaddr
+ DATA_PORT
+ 1);
1074 writeword(ioaddr
, ADD_PORT
, PP_CS8920_ISAMemB
);
1075 outb((dev
->mem_start
>> 16) & 0xff, ioaddr
+ DATA_PORT
);
1076 outb((dev
->mem_start
>> 8) & 0xff, ioaddr
+ DATA_PORT
+ 1);
1078 #endif /* IXDP2x01 */
1080 /* Wait until the chip is reset */
1081 reset_start_time
= jiffies
;
1082 while( (readreg(dev
, PP_SelfST
) & INIT_DONE
) == 0 && jiffies
- reset_start_time
< 2)
1088 control_dc_dc(struct net_device
*dev
, int on_not_off
)
1090 struct net_local
*lp
= netdev_priv(dev
);
1091 unsigned int selfcontrol
;
1092 int timenow
= jiffies
;
1093 /* control the DC to DC convertor in the SelfControl register.
1094 Note: This is hooked up to a general purpose pin, might not
1095 always be a DC to DC convertor. */
1097 selfcontrol
= HCB1_ENBL
; /* Enable the HCB1 bit as an output */
1098 if (((lp
->adapter_cnf
& A_CNF_DC_DC_POLARITY
) != 0) ^ on_not_off
)
1099 selfcontrol
|= HCB1
;
1101 selfcontrol
&= ~HCB1
;
1102 writereg(dev
, PP_SelfCTL
, selfcontrol
);
1104 /* Wait for the DC/DC converter to power up - 500ms */
1105 while (jiffies
- timenow
< HZ
)
1109 #define DETECTED_NONE 0
1110 #define DETECTED_RJ45H 1
1111 #define DETECTED_RJ45F 2
1112 #define DETECTED_AUI 3
1113 #define DETECTED_BNC 4
1116 detect_tp(struct net_device
*dev
)
1118 struct net_local
*lp
= netdev_priv(dev
);
1119 int timenow
= jiffies
;
1122 if (net_debug
> 1) printk("%s: Attempting TP\n", dev
->name
);
1124 /* If connected to another full duplex capable 10-Base-T card the link pulses
1125 seem to be lost when the auto detect bit in the LineCTL is set.
1126 To overcome this the auto detect bit will be cleared whilst testing the
1127 10-Base-T interface. This would not be necessary for the sparrow chip but
1128 is simpler to do it anyway. */
1129 writereg(dev
, PP_LineCTL
, lp
->linectl
&~ AUI_ONLY
);
1130 control_dc_dc(dev
, 0);
1132 /* Delay for the hardware to work out if the TP cable is present - 150ms */
1133 for (timenow
= jiffies
; jiffies
- timenow
< 15; )
1135 if ((readreg(dev
, PP_LineST
) & LINK_OK
) == 0)
1136 return DETECTED_NONE
;
1138 if (lp
->chip_type
== CS8900
) {
1139 switch (lp
->force
& 0xf0) {
1142 printk("%s: cs8900 doesn't autonegotiate\n",dev
->name
);
1143 return DETECTED_NONE
;
1145 /* CS8900 doesn't support AUTO, change to HALF*/
1147 lp
->force
&= ~FORCE_AUTO
;
1148 lp
->force
|= FORCE_HALF
;
1153 writereg(dev
, PP_TestCTL
, readreg(dev
, PP_TestCTL
) | FDX_8900
);
1156 fdx
= readreg(dev
, PP_TestCTL
) & FDX_8900
;
1158 switch (lp
->force
& 0xf0) {
1160 lp
->auto_neg_cnf
= AUTO_NEG_ENABLE
;
1163 lp
->auto_neg_cnf
= 0;
1166 lp
->auto_neg_cnf
= RE_NEG_NOW
| ALLOW_FDX
;
1170 writereg(dev
, PP_AutoNegCTL
, lp
->auto_neg_cnf
& AUTO_NEG_MASK
);
1172 if ((lp
->auto_neg_cnf
& AUTO_NEG_BITS
) == AUTO_NEG_ENABLE
) {
1173 printk(KERN_INFO
"%s: negotiating duplex...\n",dev
->name
);
1174 while (readreg(dev
, PP_AutoNegST
) & AUTO_NEG_BUSY
) {
1175 if (jiffies
- timenow
> 4000) {
1176 printk(KERN_ERR
"**** Full / half duplex auto-negotiation timed out ****\n");
1181 fdx
= readreg(dev
, PP_AutoNegST
) & FDX_ACTIVE
;
1184 return DETECTED_RJ45F
;
1186 return DETECTED_RJ45H
;
1189 /* send a test packet - return true if carrier bits are ok */
1191 send_test_pkt(struct net_device
*dev
)
1193 char test_packet
[] = { 0,0,0,0,0,0, 0,0,0,0,0,0,
1194 0, 46, /* A 46 in network order */
1195 0, 0, /* DSAP=0 & SSAP=0 fields */
1196 0xf3, 0 /* Control (Test Req + P bit set) */ };
1197 long timenow
= jiffies
;
1199 writereg(dev
, PP_LineCTL
, readreg(dev
, PP_LineCTL
) | SERIAL_TX_ON
);
1201 memcpy(test_packet
, dev
->dev_addr
, ETH_ALEN
);
1202 memcpy(test_packet
+ETH_ALEN
, dev
->dev_addr
, ETH_ALEN
);
1204 writeword(dev
->base_addr
, TX_CMD_PORT
, TX_AFTER_ALL
);
1205 writeword(dev
->base_addr
, TX_LEN_PORT
, ETH_ZLEN
);
1207 /* Test to see if the chip has allocated memory for the packet */
1208 while (jiffies
- timenow
< 5)
1209 if (readreg(dev
, PP_BusST
) & READY_FOR_TX_NOW
)
1211 if (jiffies
- timenow
>= 5)
1212 return 0; /* this shouldn't happen */
1214 /* Write the contents of the packet */
1215 writewords(dev
->base_addr
, TX_FRAME_PORT
,test_packet
,(ETH_ZLEN
+1) >>1);
1217 if (net_debug
> 1) printk("Sending test packet ");
1218 /* wait a couple of jiffies for packet to be received */
1219 for (timenow
= jiffies
; jiffies
- timenow
< 3; )
1221 if ((readreg(dev
, PP_TxEvent
) & TX_SEND_OK_BITS
) == TX_OK
) {
1222 if (net_debug
> 1) printk("succeeded\n");
1225 if (net_debug
> 1) printk("failed\n");
1231 detect_aui(struct net_device
*dev
)
1233 struct net_local
*lp
= netdev_priv(dev
);
1235 if (net_debug
> 1) printk("%s: Attempting AUI\n", dev
->name
);
1236 control_dc_dc(dev
, 0);
1238 writereg(dev
, PP_LineCTL
, (lp
->linectl
&~ AUTO_AUI_10BASET
) | AUI_ONLY
);
1240 if (send_test_pkt(dev
))
1241 return DETECTED_AUI
;
1243 return DETECTED_NONE
;
1247 detect_bnc(struct net_device
*dev
)
1249 struct net_local
*lp
= netdev_priv(dev
);
1251 if (net_debug
> 1) printk("%s: Attempting BNC\n", dev
->name
);
1252 control_dc_dc(dev
, 1);
1254 writereg(dev
, PP_LineCTL
, (lp
->linectl
&~ AUTO_AUI_10BASET
) | AUI_ONLY
);
1256 if (send_test_pkt(dev
))
1257 return DETECTED_BNC
;
1259 return DETECTED_NONE
;
1264 write_irq(struct net_device
*dev
, int chip_type
, int irq
)
1268 if (chip_type
== CS8900
) {
1269 /* Search the mapping table for the corresponding IRQ pin. */
1270 for (i
= 0; i
!= ARRAY_SIZE(cs8900_irq_map
); i
++)
1271 if (cs8900_irq_map
[i
] == irq
)
1274 if (i
== ARRAY_SIZE(cs8900_irq_map
))
1276 writereg(dev
, PP_CS8900_ISAINT
, i
);
1278 writereg(dev
, PP_CS8920_ISAINT
, irq
);
1282 /* Open/initialize the board. This is called (in the current kernel)
1283 sometime after booting when the 'ifconfig' program is run.
1285 This routine should set everything up anew at each open, even
1286 registers that "should" only need to be set once at boot, so that
1287 there is non-reboot way to recover if something goes wrong.
1290 /* AKPM: do we need to do any locking here? */
1293 net_open(struct net_device
*dev
)
1295 struct net_local
*lp
= netdev_priv(dev
);
1300 #if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) /* uses irq#1, so this won't work */
1302 /* Allow interrupts to be generated by the chip */
1303 /* Cirrus' release had this: */
1305 writereg(dev
, PP_BusCTL
, readreg(dev
, PP_BusCTL
)|ENABLE_IRQ
);
1307 /* And 2.3.47 had this: */
1308 writereg(dev
, PP_BusCTL
, ENABLE_IRQ
| MEMORY_ON
);
1310 for (i
= 2; i
< CS8920_NO_INTS
; i
++) {
1311 if ((1 << i
) & lp
->irq_map
) {
1312 if (request_irq(i
, net_interrupt
, 0, dev
->name
, dev
) == 0) {
1314 write_irq(dev
, lp
->chip_type
, i
);
1315 /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
1321 if (i
>= CS8920_NO_INTS
) {
1322 writereg(dev
, PP_BusCTL
, 0); /* disable interrupts. */
1323 printk(KERN_ERR
"cs89x0: can't get an interrupt\n");
1331 #if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
1332 if (((1 << dev
->irq
) & lp
->irq_map
) == 0) {
1333 printk(KERN_ERR
"%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1334 dev
->name
, dev
->irq
, lp
->irq_map
);
1339 /* FIXME: Cirrus' release had this: */
1340 writereg(dev
, PP_BusCTL
, readreg(dev
, PP_BusCTL
)|ENABLE_IRQ
);
1341 /* And 2.3.47 had this: */
1343 writereg(dev
, PP_BusCTL
, ENABLE_IRQ
| MEMORY_ON
);
1345 write_irq(dev
, lp
->chip_type
, dev
->irq
);
1346 ret
= request_irq(dev
->irq
, &net_interrupt
, 0, dev
->name
, dev
);
1349 printk(KERN_DEBUG
"cs89x0: request_irq(%d) failed\n", dev
->irq
);
1356 if (lp
->isa_config
& ANY_ISA_DMA
) {
1357 unsigned long flags
;
1358 lp
->dma_buff
= (unsigned char *)__get_dma_pages(GFP_KERNEL
,
1359 get_order(lp
->dmasize
* 1024));
1361 if (!lp
->dma_buff
) {
1362 printk(KERN_ERR
"%s: cannot get %dK memory for DMA\n", dev
->name
, lp
->dmasize
);
1365 if (net_debug
> 1) {
1366 printk( "%s: dma %lx %lx\n",
1368 (unsigned long)lp
->dma_buff
,
1369 (unsigned long)isa_virt_to_bus(lp
->dma_buff
));
1371 if ((unsigned long) lp
->dma_buff
>= MAX_DMA_ADDRESS
||
1372 !dma_page_eq(lp
->dma_buff
, lp
->dma_buff
+lp
->dmasize
*1024-1)) {
1373 printk(KERN_ERR
"%s: not usable as DMA buffer\n", dev
->name
);
1376 memset(lp
->dma_buff
, 0, lp
->dmasize
* 1024); /* Why? */
1377 if (request_dma(dev
->dma
, dev
->name
)) {
1378 printk(KERN_ERR
"%s: cannot get dma channel %d\n", dev
->name
, dev
->dma
);
1381 write_dma(dev
, lp
->chip_type
, dev
->dma
);
1382 lp
->rx_dma_ptr
= lp
->dma_buff
;
1383 lp
->end_dma_buff
= lp
->dma_buff
+ lp
->dmasize
*1024;
1384 spin_lock_irqsave(&lp
->lock
, flags
);
1385 disable_dma(dev
->dma
);
1386 clear_dma_ff(dev
->dma
);
1387 set_dma_mode(dev
->dma
, 0x14); /* auto_init as well */
1388 set_dma_addr(dev
->dma
, isa_virt_to_bus(lp
->dma_buff
));
1389 set_dma_count(dev
->dma
, lp
->dmasize
*1024);
1390 enable_dma(dev
->dma
);
1391 spin_unlock_irqrestore(&lp
->lock
, flags
);
1394 #endif /* ALLOW_DMA */
1396 /* set the Ethernet address */
1397 for (i
=0; i
< ETH_ALEN
/2; i
++)
1398 writereg(dev
, PP_IA
+i
*2, dev
->dev_addr
[i
*2] | (dev
->dev_addr
[i
*2+1] << 8));
1400 /* while we're testing the interface, leave interrupts disabled */
1401 writereg(dev
, PP_BusCTL
, MEMORY_ON
);
1403 /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
1404 if ((lp
->adapter_cnf
& A_CNF_EXTND_10B_2
) && (lp
->adapter_cnf
& A_CNF_LOW_RX_SQUELCH
))
1405 lp
->linectl
= LOW_RX_SQUELCH
;
1409 /* check to make sure that they have the "right" hardware available */
1410 switch(lp
->adapter_cnf
& A_CNF_MEDIA_TYPE
) {
1411 case A_CNF_MEDIA_10B_T
: result
= lp
->adapter_cnf
& A_CNF_10B_T
; break;
1412 case A_CNF_MEDIA_AUI
: result
= lp
->adapter_cnf
& A_CNF_AUI
; break;
1413 case A_CNF_MEDIA_10B_2
: result
= lp
->adapter_cnf
& A_CNF_10B_2
; break;
1414 default: result
= lp
->adapter_cnf
& (A_CNF_10B_T
| A_CNF_AUI
| A_CNF_10B_2
);
1416 #ifdef CONFIG_ARCH_PNX010X
1417 result
= A_CNF_10B_T
;
1420 printk(KERN_ERR
"%s: EEPROM is configured for unavailable media\n", dev
->name
);
1423 release_dma_buff(lp
);
1425 writereg(dev
, PP_LineCTL
, readreg(dev
, PP_LineCTL
) & ~(SERIAL_TX_ON
| SERIAL_RX_ON
));
1426 free_irq(dev
->irq
, dev
);
1431 /* set the hardware to the configured choice */
1432 switch(lp
->adapter_cnf
& A_CNF_MEDIA_TYPE
) {
1433 case A_CNF_MEDIA_10B_T
:
1434 result
= detect_tp(dev
);
1435 if (result
==DETECTED_NONE
) {
1436 printk(KERN_WARNING
"%s: 10Base-T (RJ-45) has no cable\n", dev
->name
);
1437 if (lp
->auto_neg_cnf
& IMM_BIT
) /* check "ignore missing media" bit */
1438 result
= DETECTED_RJ45H
; /* Yes! I don't care if I see a link pulse */
1441 case A_CNF_MEDIA_AUI
:
1442 result
= detect_aui(dev
);
1443 if (result
==DETECTED_NONE
) {
1444 printk(KERN_WARNING
"%s: 10Base-5 (AUI) has no cable\n", dev
->name
);
1445 if (lp
->auto_neg_cnf
& IMM_BIT
) /* check "ignore missing media" bit */
1446 result
= DETECTED_AUI
; /* Yes! I don't care if I see a carrrier */
1449 case A_CNF_MEDIA_10B_2
:
1450 result
= detect_bnc(dev
);
1451 if (result
==DETECTED_NONE
) {
1452 printk(KERN_WARNING
"%s: 10Base-2 (BNC) has no cable\n", dev
->name
);
1453 if (lp
->auto_neg_cnf
& IMM_BIT
) /* check "ignore missing media" bit */
1454 result
= DETECTED_BNC
; /* Yes! I don't care if I can xmit a packet */
1457 case A_CNF_MEDIA_AUTO
:
1458 writereg(dev
, PP_LineCTL
, lp
->linectl
| AUTO_AUI_10BASET
);
1459 if (lp
->adapter_cnf
& A_CNF_10B_T
)
1460 if ((result
= detect_tp(dev
)) != DETECTED_NONE
)
1462 if (lp
->adapter_cnf
& A_CNF_AUI
)
1463 if ((result
= detect_aui(dev
)) != DETECTED_NONE
)
1465 if (lp
->adapter_cnf
& A_CNF_10B_2
)
1466 if ((result
= detect_bnc(dev
)) != DETECTED_NONE
)
1468 printk(KERN_ERR
"%s: no media detected\n", dev
->name
);
1473 printk(KERN_ERR
"%s: no network cable attached to configured media\n", dev
->name
);
1475 case DETECTED_RJ45H
:
1476 printk(KERN_INFO
"%s: using half-duplex 10Base-T (RJ-45)\n", dev
->name
);
1478 case DETECTED_RJ45F
:
1479 printk(KERN_INFO
"%s: using full-duplex 10Base-T (RJ-45)\n", dev
->name
);
1482 printk(KERN_INFO
"%s: using 10Base-5 (AUI)\n", dev
->name
);
1485 printk(KERN_INFO
"%s: using 10Base-2 (BNC)\n", dev
->name
);
1489 /* Turn on both receive and transmit operations */
1490 writereg(dev
, PP_LineCTL
, readreg(dev
, PP_LineCTL
) | SERIAL_RX_ON
| SERIAL_TX_ON
);
1492 /* Receive only error free packets addressed to this card */
1494 writereg(dev
, PP_RxCTL
, DEF_RX_ACCEPT
);
1496 lp
->curr_rx_cfg
= RX_OK_ENBL
| RX_CRC_ERROR_ENBL
;
1498 if (lp
->isa_config
& STREAM_TRANSFER
)
1499 lp
->curr_rx_cfg
|= RX_STREAM_ENBL
;
1503 writereg(dev
, PP_RxCFG
, lp
->curr_rx_cfg
);
1505 writereg(dev
, PP_TxCFG
, TX_LOST_CRS_ENBL
| TX_SQE_ERROR_ENBL
| TX_OK_ENBL
|
1506 TX_LATE_COL_ENBL
| TX_JBR_ENBL
| TX_ANY_COL_ENBL
| TX_16_COL_ENBL
);
1508 writereg(dev
, PP_BufCFG
, READY_FOR_TX_ENBL
| RX_MISS_COUNT_OVRFLOW_ENBL
|
1512 TX_COL_COUNT_OVRFLOW_ENBL
| TX_UNDERRUN_ENBL
);
1514 /* now that we've got our act together, enable everything */
1515 writereg(dev
, PP_BusCTL
, ENABLE_IRQ
1516 | (dev
->mem_start
?MEMORY_ON
: 0) /* turn memory on */
1521 netif_start_queue(dev
);
1523 printk("cs89x0: net_open() succeeded\n");
1529 static void net_timeout(struct net_device
*dev
)
1531 /* If we get here, some higher level has decided we are broken.
1532 There should really be a "kick me" function call instead. */
1533 if (net_debug
> 0) printk("%s: transmit timed out, %s?\n", dev
->name
,
1534 tx_done(dev
) ? "IRQ conflict ?" : "network cable problem");
1535 /* Try to restart the adaptor. */
1536 netif_wake_queue(dev
);
1539 static int net_send_packet(struct sk_buff
*skb
, struct net_device
*dev
)
1541 struct net_local
*lp
= netdev_priv(dev
);
1543 if (net_debug
> 3) {
1544 printk("%s: sent %d byte packet of type %x\n",
1545 dev
->name
, skb
->len
,
1546 (skb
->data
[ETH_ALEN
+ETH_ALEN
] << 8) | skb
->data
[ETH_ALEN
+ETH_ALEN
+1]);
1549 /* keep the upload from being interrupted, since we
1550 ask the chip to start transmitting before the
1551 whole packet has been completely uploaded. */
1553 spin_lock_irq(&lp
->lock
);
1554 netif_stop_queue(dev
);
1556 /* initiate a transmit sequence */
1557 writeword(dev
->base_addr
, TX_CMD_PORT
, lp
->send_cmd
);
1558 writeword(dev
->base_addr
, TX_LEN_PORT
, skb
->len
);
1560 /* Test to see if the chip has allocated memory for the packet */
1561 if ((readreg(dev
, PP_BusST
) & READY_FOR_TX_NOW
) == 0) {
1563 * Gasp! It hasn't. But that shouldn't happen since
1564 * we're waiting for TxOk, so return 1 and requeue this packet.
1567 spin_unlock_irq(&lp
->lock
);
1568 if (net_debug
) printk("cs89x0: Tx buffer not free!\n");
1571 /* Write the contents of the packet */
1572 writewords(dev
->base_addr
, TX_FRAME_PORT
,skb
->data
,(skb
->len
+1) >>1);
1573 spin_unlock_irq(&lp
->lock
);
1574 lp
->stats
.tx_bytes
+= skb
->len
;
1575 dev
->trans_start
= jiffies
;
1576 dev_kfree_skb (skb
);
1579 * We DO NOT call netif_wake_queue() here.
1580 * We also DO NOT call netif_start_queue().
1582 * Either of these would cause another bottom half run through
1583 * net_send_packet() before this packet has fully gone out. That causes
1584 * us to hit the "Gasp!" above and the send is rescheduled. it runs like
1585 * a dog. We just return and wait for the Tx completion interrupt handler
1586 * to restart the netdevice layer
1592 /* The typical workload of the driver:
1593 Handle the network interface interrupts. */
1595 static irqreturn_t
net_interrupt(int irq
, void *dev_id
)
1597 struct net_device
*dev
= dev_id
;
1598 struct net_local
*lp
;
1602 ioaddr
= dev
->base_addr
;
1603 lp
= netdev_priv(dev
);
1605 /* we MUST read all the events out of the ISQ, otherwise we'll never
1606 get interrupted again. As a consequence, we can't have any limit
1607 on the number of times we loop in the interrupt handler. The
1608 hardware guarantees that eventually we'll run out of events. Of
1609 course, if you're on a slow machine, and packets are arriving
1610 faster than you can read them off, you're screwed. Hasta la
1612 while ((status
= readword(dev
->base_addr
, ISQ_PORT
))) {
1613 if (net_debug
> 4)printk("%s: event=%04x\n", dev
->name
, status
);
1615 switch(status
& ISQ_EVENT_MASK
) {
1616 case ISQ_RECEIVER_EVENT
:
1617 /* Got a packet(s). */
1620 case ISQ_TRANSMITTER_EVENT
:
1621 lp
->stats
.tx_packets
++;
1622 netif_wake_queue(dev
); /* Inform upper layers. */
1623 if ((status
& ( TX_OK
|
1627 TX_16_COL
)) != TX_OK
) {
1628 if ((status
& TX_OK
) == 0) lp
->stats
.tx_errors
++;
1629 if (status
& TX_LOST_CRS
) lp
->stats
.tx_carrier_errors
++;
1630 if (status
& TX_SQE_ERROR
) lp
->stats
.tx_heartbeat_errors
++;
1631 if (status
& TX_LATE_COL
) lp
->stats
.tx_window_errors
++;
1632 if (status
& TX_16_COL
) lp
->stats
.tx_aborted_errors
++;
1635 case ISQ_BUFFER_EVENT
:
1636 if (status
& READY_FOR_TX
) {
1637 /* we tried to transmit a packet earlier,
1638 but inexplicably ran out of buffers.
1639 That shouldn't happen since we only ever
1640 load one packet. Shrug. Do the right
1642 netif_wake_queue(dev
); /* Inform upper layers. */
1644 if (status
& TX_UNDERRUN
) {
1645 if (net_debug
> 0) printk("%s: transmit underrun\n", dev
->name
);
1646 lp
->send_underrun
++;
1647 if (lp
->send_underrun
== 3) lp
->send_cmd
= TX_AFTER_381
;
1648 else if (lp
->send_underrun
== 6) lp
->send_cmd
= TX_AFTER_ALL
;
1649 /* transmit cycle is done, although
1650 frame wasn't transmitted - this
1651 avoids having to wait for the upper
1652 layers to timeout on us, in the
1653 event of a tx underrun */
1654 netif_wake_queue(dev
); /* Inform upper layers. */
1657 if (lp
->use_dma
&& (status
& RX_DMA
)) {
1658 int count
= readreg(dev
, PP_DmaFrameCnt
);
1661 printk("%s: receiving %d DMA frames\n", dev
->name
, count
);
1662 if (net_debug
> 2 && count
>1)
1663 printk("%s: receiving %d DMA frames\n", dev
->name
, count
);
1666 count
= readreg(dev
, PP_DmaFrameCnt
);
1667 if (net_debug
> 2 && count
> 0)
1668 printk("%s: continuing with %d DMA frames\n", dev
->name
, count
);
1673 case ISQ_RX_MISS_EVENT
:
1674 lp
->stats
.rx_missed_errors
+= (status
>>6);
1676 case ISQ_TX_COL_EVENT
:
1677 lp
->stats
.collisions
+= (status
>>6);
1681 return IRQ_RETVAL(handled
);
1685 count_rx_errors(int status
, struct net_local
*lp
)
1687 lp
->stats
.rx_errors
++;
1688 if (status
& RX_RUNT
) lp
->stats
.rx_length_errors
++;
1689 if (status
& RX_EXTRA_DATA
) lp
->stats
.rx_length_errors
++;
1690 if (status
& RX_CRC_ERROR
) if (!(status
& (RX_EXTRA_DATA
|RX_RUNT
)))
1692 lp
->stats
.rx_crc_errors
++;
1693 if (status
& RX_DRIBBLE
) lp
->stats
.rx_frame_errors
++;
1697 /* We have a good packet(s), get it/them out of the buffers. */
1699 net_rx(struct net_device
*dev
)
1701 struct net_local
*lp
= netdev_priv(dev
);
1702 struct sk_buff
*skb
;
1705 int ioaddr
= dev
->base_addr
;
1706 status
= readword(ioaddr
, RX_FRAME_PORT
);
1707 length
= readword(ioaddr
, RX_FRAME_PORT
);
1709 if ((status
& RX_OK
) == 0) {
1710 count_rx_errors(status
, lp
);
1714 /* Malloc up new buffer. */
1715 skb
= dev_alloc_skb(length
+ 2);
1717 #if 0 /* Again, this seems a cruel thing to do */
1718 printk(KERN_WARNING
"%s: Memory squeeze, dropping packet.\n", dev
->name
);
1720 lp
->stats
.rx_dropped
++;
1723 skb_reserve(skb
, 2); /* longword align L3 header */
1725 readwords(ioaddr
, RX_FRAME_PORT
, skb_put(skb
, length
), length
>> 1);
1727 skb
->data
[length
-1] = readword(ioaddr
, RX_FRAME_PORT
);
1729 if (net_debug
> 3) {
1730 printk( "%s: received %d byte packet of type %x\n",
1732 (skb
->data
[ETH_ALEN
+ETH_ALEN
] << 8) | skb
->data
[ETH_ALEN
+ETH_ALEN
+1]);
1735 skb
->protocol
=eth_type_trans(skb
,dev
);
1737 dev
->last_rx
= jiffies
;
1738 lp
->stats
.rx_packets
++;
1739 lp
->stats
.rx_bytes
+= length
;
1743 static void release_dma_buff(struct net_local
*lp
)
1746 free_pages((unsigned long)(lp
->dma_buff
), get_order(lp
->dmasize
* 1024));
1747 lp
->dma_buff
= NULL
;
1752 /* The inverse routine to net_open(). */
1754 net_close(struct net_device
*dev
)
1757 struct net_local
*lp
= netdev_priv(dev
);
1760 netif_stop_queue(dev
);
1762 writereg(dev
, PP_RxCFG
, 0);
1763 writereg(dev
, PP_TxCFG
, 0);
1764 writereg(dev
, PP_BufCFG
, 0);
1765 writereg(dev
, PP_BusCTL
, 0);
1767 free_irq(dev
->irq
, dev
);
1770 if (lp
->use_dma
&& lp
->dma
) {
1772 release_dma_buff(lp
);
1776 /* Update the statistics here. */
1780 /* Get the current statistics. This may be called with the card open or
1782 static struct net_device_stats
*
1783 net_get_stats(struct net_device
*dev
)
1785 struct net_local
*lp
= netdev_priv(dev
);
1786 unsigned long flags
;
1788 spin_lock_irqsave(&lp
->lock
, flags
);
1789 /* Update the statistics from the device registers. */
1790 lp
->stats
.rx_missed_errors
+= (readreg(dev
, PP_RxMiss
) >> 6);
1791 lp
->stats
.collisions
+= (readreg(dev
, PP_TxCol
) >> 6);
1792 spin_unlock_irqrestore(&lp
->lock
, flags
);
1797 static void set_multicast_list(struct net_device
*dev
)
1799 struct net_local
*lp
= netdev_priv(dev
);
1800 unsigned long flags
;
1802 spin_lock_irqsave(&lp
->lock
, flags
);
1803 if(dev
->flags
&IFF_PROMISC
)
1805 lp
->rx_mode
= RX_ALL_ACCEPT
;
1807 else if((dev
->flags
&IFF_ALLMULTI
)||dev
->mc_list
)
1809 /* The multicast-accept list is initialized to accept-all, and we
1810 rely on higher-level filtering for now. */
1811 lp
->rx_mode
= RX_MULTCAST_ACCEPT
;
1816 writereg(dev
, PP_RxCTL
, DEF_RX_ACCEPT
| lp
->rx_mode
);
1818 /* in promiscuous mode, we accept errored packets, so we have to enable interrupts on them also */
1819 writereg(dev
, PP_RxCFG
, lp
->curr_rx_cfg
|
1820 (lp
->rx_mode
== RX_ALL_ACCEPT
? (RX_CRC_ERROR_ENBL
|RX_RUNT_ENBL
|RX_EXTRA_DATA_ENBL
) : 0));
1821 spin_unlock_irqrestore(&lp
->lock
, flags
);
1825 static int set_mac_address(struct net_device
*dev
, void *p
)
1828 struct sockaddr
*addr
= p
;
1830 if (netif_running(dev
))
1833 memcpy(dev
->dev_addr
, addr
->sa_data
, dev
->addr_len
);
1836 DECLARE_MAC_BUF(mac
);
1837 printk("%s: Setting MAC address to %s.\n",
1838 dev
->name
, print_mac(mac
, dev
->dev_addr
));
1840 /* set the Ethernet address */
1841 for (i
=0; i
< ETH_ALEN
/2; i
++)
1842 writereg(dev
, PP_IA
+i
*2, dev
->dev_addr
[i
*2] | (dev
->dev_addr
[i
*2+1] << 8));
1849 static struct net_device
*dev_cs89x0
;
1852 * Support the 'debug' module parm even if we're compiled for non-debug to
1853 * avoid breaking someone's startup scripts
1859 static char media
[8];
1860 static int duplex
=-1;
1862 static int use_dma
; /* These generate unused var warnings if ALLOW_DMA = 0 */
1864 static int dmasize
=16; /* or 64 */
1866 module_param(io
, int, 0);
1867 module_param(irq
, int, 0);
1868 module_param(debug
, int, 0);
1869 module_param_string(media
, media
, sizeof(media
), 0);
1870 module_param(duplex
, int, 0);
1871 module_param(dma
, int, 0);
1872 module_param(dmasize
, int, 0);
1873 module_param(use_dma
, int, 0);
1874 MODULE_PARM_DESC(io
, "cs89x0 I/O base address");
1875 MODULE_PARM_DESC(irq
, "cs89x0 IRQ number");
1877 MODULE_PARM_DESC(debug
, "cs89x0 debug level (0-6)");
1879 MODULE_PARM_DESC(debug
, "(ignored)");
1881 MODULE_PARM_DESC(media
, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1882 /* No other value than -1 for duplex seems to be currently interpreted */
1883 MODULE_PARM_DESC(duplex
, "(ignored)");
1885 MODULE_PARM_DESC(dma
, "cs89x0 ISA DMA channel; ignored if use_dma=0");
1886 MODULE_PARM_DESC(dmasize
, "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1887 MODULE_PARM_DESC(use_dma
, "cs89x0 using DMA (0-1)");
1889 MODULE_PARM_DESC(dma
, "(ignored)");
1890 MODULE_PARM_DESC(dmasize
, "(ignored)");
1891 MODULE_PARM_DESC(use_dma
, "(ignored)");
1894 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <nelson@crynwr.com>, Andrew Morton <andrewm@uow.edu.au>");
1895 MODULE_LICENSE("GPL");
1899 * media=t - specify media type
1903 * duplex=0 - specify forced half/full/autonegotiate duplex
1904 * debug=# - debug level
1907 * Default Chip Configuration:
1908 * DMA Burst = enabled
1909 * IOCHRDY Enabled = enabled
1911 * CS8900 defaults to half-duplex if not specified on command-line
1912 * CS8920 defaults to autoneg if not specified on command-line
1913 * Use reset defaults for other config parameters
1916 * media type specified is supported (circuitry is present)
1917 * if memory address is > 1MB, then required mem decode hw is present
1918 * if 10B-2, then agent other than driver will enable DC/DC converter
1919 (hw or software util)
1924 int __init
init_module(void)
1926 struct net_device
*dev
= alloc_etherdev(sizeof(struct net_local
));
1927 struct net_local
*lp
;
1939 dev
->base_addr
= io
;
1940 lp
= netdev_priv(dev
);
1944 lp
->use_dma
= use_dma
;
1946 lp
->dmasize
= dmasize
;
1950 spin_lock_init(&lp
->lock
);
1952 /* boy, they'd better get these right */
1953 if (!strcmp(media
, "rj45"))
1954 lp
->adapter_cnf
= A_CNF_MEDIA_10B_T
| A_CNF_10B_T
;
1955 else if (!strcmp(media
, "aui"))
1956 lp
->adapter_cnf
= A_CNF_MEDIA_AUI
| A_CNF_AUI
;
1957 else if (!strcmp(media
, "bnc"))
1958 lp
->adapter_cnf
= A_CNF_MEDIA_10B_2
| A_CNF_10B_2
;
1960 lp
->adapter_cnf
= A_CNF_MEDIA_10B_T
| A_CNF_10B_T
;
1963 lp
->auto_neg_cnf
= AUTO_NEG_ENABLE
;
1966 printk(KERN_ERR
"cs89x0.c: Module autoprobing not allowed.\n");
1967 printk(KERN_ERR
"cs89x0.c: Append io=0xNNN\n");
1970 } else if (io
<= 0x1ff) {
1976 if (use_dma
&& dmasize
!= 16 && dmasize
!= 64) {
1977 printk(KERN_ERR
"cs89x0.c: dma size must be either 16K or 64K, not %dK\n", dmasize
);
1982 ret
= cs89x0_probe1(dev
, io
, 1);
1994 cleanup_module(void)
1996 unregister_netdev(dev_cs89x0
);
1997 writeword(dev_cs89x0
->base_addr
, ADD_PORT
, PP_ChipID
);
1998 release_region(dev_cs89x0
->base_addr
, NETCARD_IO_EXTENT
);
1999 free_netdev(dev_cs89x0
);
2005 * version-control: t
2006 * kept-new-versions: 5