MOXA linux-2.6.x / linux-2.6.9-uc0 from sdlinux-moxaart.tgz
[linux-2.6.9-moxart.git] / drivers / net / eepro.c
blob9f5ea60758b1c89634f9a186b24ed3f627649875
1 /* eepro.c: Intel EtherExpress Pro/10 device driver for Linux. */
2 /*
3 Written 1994, 1995,1996 by Bao C. Ha.
5 Copyright (C) 1994, 1995,1996 by Bao C. Ha.
7 This software may be used and distributed
8 according to the terms of the GNU General Public License,
9 incorporated herein by reference.
11 The author may be reached at bao.ha@srs.gov
12 or 418 Hastings Place, Martinez, GA 30907.
14 Things remaining to do:
15 Better record keeping of errors.
16 Eliminate transmit interrupt to reduce overhead.
17 Implement "concurrent processing". I won't be doing it!
19 Bugs:
21 If you have a problem of not detecting the 82595 during a
22 reboot (warm reset), disable the FLASH memory should fix it.
23 This is a compatibility hardware problem.
25 Versions:
26 0.13a in memory shortage, drop packets also in board
27 (Michael Westermann <mw@microdata-pos.de>, 07/30/2002)
28 0.13 irq sharing, rewrote probe function, fixed a nasty bug in
29 hardware_send_packet and a major cleanup (aris, 11/08/2001)
30 0.12d fixing a problem with single card detected as eight eth devices
31 fixing a problem with sudden drop in card performance
32 (chris (asdn@go2.pl), 10/29/2001)
33 0.12c fixing some problems with old cards (aris, 01/08/2001)
34 0.12b misc fixes (aris, 06/26/2000)
35 0.12a port of version 0.12a of 2.2.x kernels to 2.3.x
36 (aris (aris@conectiva.com.br), 05/19/2000)
37 0.11e some tweaks about multiple cards support (PdP, jul/aug 1999)
38 0.11d added __initdata, __init stuff; call spin_lock_init
39 in eepro_probe1. Replaced "eepro" by dev->name. Augmented
40 the code protected by spin_lock in interrupt routine
41 (PdP, 12/12/1998)
42 0.11c minor cleanup (PdP, RMC, 09/12/1998)
43 0.11b Pascal Dupuis (dupuis@lei.ucl.ac.be): works as a module
44 under 2.1.xx. Debug messages are flagged as KERN_DEBUG to
45 avoid console flooding. Added locking at critical parts. Now
46 the dawn thing is SMP safe.
47 0.11a Attempt to get 2.1.xx support up (RMC)
48 0.11 Brian Candler added support for multiple cards. Tested as
49 a module, no idea if it works when compiled into kernel.
51 0.10e Rick Bressler notified me that ifconfig up;ifconfig down fails
52 because the irq is lost somewhere. Fixed that by moving
53 request_irq and free_irq to eepro_open and eepro_close respectively.
54 0.10d Ugh! Now Wakeup works. Was seriously broken in my first attempt.
55 I'll need to find a way to specify an ioport other than
56 the default one in the PnP case. PnP definitively sucks.
57 And, yes, this is not the only reason.
58 0.10c PnP Wakeup Test for 595FX. uncomment #define PnPWakeup;
59 to use.
60 0.10b Should work now with (some) Pro/10+. At least for
61 me (and my two cards) it does. _No_ guarantee for
62 function with non-Pro/10+ cards! (don't have any)
63 (RMC, 9/11/96)
65 0.10 Added support for the Etherexpress Pro/10+. The
66 IRQ map was changed significantly from the old
67 pro/10. The new interrupt map was provided by
68 Rainer M. Canavan (Canavan@Zeus.cs.bonn.edu).
69 (BCH, 9/3/96)
71 0.09 Fixed a race condition in the transmit algorithm,
72 which causes crashes under heavy load with fast
73 pentium computers. The performance should also
74 improve a bit. The size of RX buffer, and hence
75 TX buffer, can also be changed via lilo or insmod.
76 (BCH, 7/31/96)
78 0.08 Implement 32-bit I/O for the 82595TX and 82595FX
79 based lan cards. Disable full-duplex mode if TPE
80 is not used. (BCH, 4/8/96)
82 0.07a Fix a stat report which counts every packet as a
83 heart-beat failure. (BCH, 6/3/95)
85 0.07 Modified to support all other 82595-based lan cards.
86 The IRQ vector of the EtherExpress Pro will be set
87 according to the value saved in the EEPROM. For other
88 cards, I will do autoirq_request() to grab the next
89 available interrupt vector. (BCH, 3/17/95)
91 0.06a,b Interim released. Minor changes in the comments and
92 print out format. (BCH, 3/9/95 and 3/14/95)
94 0.06 First stable release that I am comfortable with. (BCH,
95 3/2/95)
97 0.05 Complete testing of multicast. (BCH, 2/23/95)
99 0.04 Adding multicast support. (BCH, 2/14/95)
101 0.03 First widely alpha release for public testing.
102 (BCH, 2/14/95)
106 static const char version[] =
107 "eepro.c: v0.13 11/08/2001 aris@cathedrallabs.org\n";
109 #include <linux/module.h>
112 Sources:
114 This driver wouldn't have been written without the availability
115 of the Crynwr's Lan595 driver source code. It helps me to
116 familiarize with the 82595 chipset while waiting for the Intel
117 documentation. I also learned how to detect the 82595 using
118 the packet driver's technique.
120 This driver is written by cutting and pasting the skeleton.c driver
121 provided by Donald Becker. I also borrowed the EEPROM routine from
122 Donald Becker's 82586 driver.
124 Datasheet for the Intel 82595 (including the TX and FX version). It
125 provides just enough info that the casual reader might think that it
126 documents the i82595.
128 The User Manual for the 82595. It provides a lot of the missing
129 information.
133 #include <linux/kernel.h>
134 #include <linux/types.h>
135 #include <linux/fcntl.h>
136 #include <linux/interrupt.h>
137 #include <linux/ioport.h>
138 #include <linux/in.h>
139 #include <linux/slab.h>
140 #include <linux/string.h>
141 #include <linux/errno.h>
142 #include <linux/netdevice.h>
143 #include <linux/etherdevice.h>
144 #include <linux/skbuff.h>
145 #include <linux/spinlock.h>
146 #include <linux/init.h>
147 #include <linux/delay.h>
149 #include <asm/system.h>
150 #include <asm/bitops.h>
151 #include <asm/io.h>
152 #include <asm/dma.h>
154 #define DRV_NAME "eepro"
156 #define compat_dev_kfree_skb( skb, mode ) dev_kfree_skb( (skb) )
157 /* I had reports of looong delays with SLOW_DOWN defined as udelay(2) */
158 #define SLOW_DOWN inb(0x80)
159 /* udelay(2) */
160 #define compat_init_data __initdata
163 /* First, a few definitions that the brave might change. */
164 /* A zero-terminated list of I/O addresses to be probed. */
165 static unsigned int eepro_portlist[] compat_init_data =
166 { 0x300, 0x210, 0x240, 0x280, 0x2C0, 0x200, 0x320, 0x340, 0x360, 0};
167 /* note: 0x300 is default, the 595FX supports ALL IO Ports
168 from 0x000 to 0x3F0, some of which are reserved in PCs */
170 /* To try the (not-really PnP Wakeup: */
172 #define PnPWakeup
175 /* use 0 for production, 1 for verification, >2 for debug */
176 #ifndef NET_DEBUG
177 #define NET_DEBUG 0
178 #endif
179 static unsigned int net_debug = NET_DEBUG;
181 /* The number of low I/O ports used by the ethercard. */
182 #define EEPRO_IO_EXTENT 16
184 /* Different 82595 chips */
185 #define LAN595 0
186 #define LAN595TX 1
187 #define LAN595FX 2
188 #define LAN595FX_10ISA 3
190 /* Information that need to be kept for each board. */
191 struct eepro_local {
192 struct net_device_stats stats;
193 unsigned rx_start;
194 unsigned tx_start; /* start of the transmit chain */
195 int tx_last; /* pointer to last packet in the transmit chain */
196 unsigned tx_end; /* end of the transmit chain (plus 1) */
197 int eepro; /* 1 for the EtherExpress Pro/10,
198 2 for the EtherExpress Pro/10+,
199 3 for the EtherExpress 10 (blue cards),
200 0 for other 82595-based lan cards. */
201 int version; /* a flag to indicate if this is a TX or FX
202 version of the 82595 chip. */
203 int stepping;
205 spinlock_t lock; /* Serializing lock */
207 unsigned rcv_ram; /* pre-calculated space for rx */
208 unsigned xmt_ram; /* pre-calculated space for tx */
209 unsigned char xmt_bar;
210 unsigned char xmt_lower_limit_reg;
211 unsigned char xmt_upper_limit_reg;
212 short xmt_lower_limit;
213 short xmt_upper_limit;
214 short rcv_lower_limit;
215 short rcv_upper_limit;
216 unsigned char eeprom_reg;
219 /* The station (ethernet) address prefix, used for IDing the board. */
220 #define SA_ADDR0 0x00 /* Etherexpress Pro/10 */
221 #define SA_ADDR1 0xaa
222 #define SA_ADDR2 0x00
224 #define GetBit(x,y) ((x & (1<<y))>>y)
226 /* EEPROM Word 0: */
227 #define ee_PnP 0 /* Plug 'n Play enable bit */
228 #define ee_Word1 1 /* Word 1? */
229 #define ee_BusWidth 2 /* 8/16 bit */
230 #define ee_FlashAddr 3 /* Flash Address */
231 #define ee_FlashMask 0x7 /* Mask */
232 #define ee_AutoIO 6 /* */
233 #define ee_reserved0 7 /* =0! */
234 #define ee_Flash 8 /* Flash there? */
235 #define ee_AutoNeg 9 /* Auto Negotiation enabled? */
236 #define ee_IO0 10 /* IO Address LSB */
237 #define ee_IO0Mask 0x /*...*/
238 #define ee_IO1 15 /* IO MSB */
240 /* EEPROM Word 1: */
241 #define ee_IntSel 0 /* Interrupt */
242 #define ee_IntMask 0x7
243 #define ee_LI 3 /* Link Integrity 0= enabled */
244 #define ee_PC 4 /* Polarity Correction 0= enabled */
245 #define ee_TPE_AUI 5 /* PortSelection 1=TPE */
246 #define ee_Jabber 6 /* Jabber prevention 0= enabled */
247 #define ee_AutoPort 7 /* Auto Port Selection 1= Disabled */
248 #define ee_SMOUT 8 /* SMout Pin Control 0= Input */
249 #define ee_PROM 9 /* Flash EPROM / PROM 0=Flash */
250 #define ee_reserved1 10 /* .. 12 =0! */
251 #define ee_AltReady 13 /* Alternate Ready, 0=normal */
252 #define ee_reserved2 14 /* =0! */
253 #define ee_Duplex 15
255 /* Word2,3,4: */
256 #define ee_IA5 0 /*bit start for individual Addr Byte 5 */
257 #define ee_IA4 8 /*bit start for individual Addr Byte 5 */
258 #define ee_IA3 0 /*bit start for individual Addr Byte 5 */
259 #define ee_IA2 8 /*bit start for individual Addr Byte 5 */
260 #define ee_IA1 0 /*bit start for individual Addr Byte 5 */
261 #define ee_IA0 8 /*bit start for individual Addr Byte 5 */
263 /* Word 5: */
264 #define ee_BNC_TPE 0 /* 0=TPE */
265 #define ee_BootType 1 /* 00=None, 01=IPX, 10=ODI, 11=NDIS */
266 #define ee_BootTypeMask 0x3
267 #define ee_NumConn 3 /* Number of Connections 0= One or Two */
268 #define ee_FlashSock 4 /* Presence of Flash Socket 0= Present */
269 #define ee_PortTPE 5
270 #define ee_PortBNC 6
271 #define ee_PortAUI 7
272 #define ee_PowerMgt 10 /* 0= disabled */
273 #define ee_CP 13 /* Concurrent Processing */
274 #define ee_CPMask 0x7
276 /* Word 6: */
277 #define ee_Stepping 0 /* Stepping info */
278 #define ee_StepMask 0x0F
279 #define ee_BoardID 4 /* Manucaturer Board ID, reserved */
280 #define ee_BoardMask 0x0FFF
282 /* Word 7: */
283 #define ee_INT_TO_IRQ 0 /* int to IRQ Mapping = 0x1EB8 for Pro/10+ */
284 #define ee_FX_INT2IRQ 0x1EB8 /* the _only_ mapping allowed for FX chips */
286 /*..*/
287 #define ee_SIZE 0x40 /* total EEprom Size */
288 #define ee_Checksum 0xBABA /* initial and final value for adding checksum */
291 /* Card identification via EEprom: */
292 #define ee_addr_vendor 0x10 /* Word offset for EISA Vendor ID */
293 #define ee_addr_id 0x11 /* Word offset for Card ID */
294 #define ee_addr_SN 0x12 /* Serial Number */
295 #define ee_addr_CRC_8 0x14 /* CRC over last thee Bytes */
298 #define ee_vendor_intel0 0x25 /* Vendor ID Intel */
299 #define ee_vendor_intel1 0xD4
300 #define ee_id_eepro10p0 0x10 /* ID for eepro/10+ */
301 #define ee_id_eepro10p1 0x31
303 #define TX_TIMEOUT 40
305 /* Index to functions, as function prototypes. */
307 static int eepro_probe1(struct net_device *dev, int autoprobe);
308 static int eepro_open(struct net_device *dev);
309 static int eepro_send_packet(struct sk_buff *skb, struct net_device *dev);
310 static irqreturn_t eepro_interrupt(int irq, void *dev_id, struct pt_regs *regs);
311 static void eepro_rx(struct net_device *dev);
312 static void eepro_transmit_interrupt(struct net_device *dev);
313 static int eepro_close(struct net_device *dev);
314 static struct net_device_stats *eepro_get_stats(struct net_device *dev);
315 static void set_multicast_list(struct net_device *dev);
316 static void eepro_tx_timeout (struct net_device *dev);
318 static int read_eeprom(int ioaddr, int location, struct net_device *dev);
319 static int hardware_send_packet(struct net_device *dev, void *buf, short length);
320 static int eepro_grab_irq(struct net_device *dev);
323 Details of the i82595.
325 You will need either the datasheet or the user manual to understand what
326 is going on here. The 82595 is very different from the 82586, 82593.
328 The receive algorithm in eepro_rx() is just an implementation of the
329 RCV ring structure that the Intel 82595 imposes at the hardware level.
330 The receive buffer is set at 24K, and the transmit buffer is 8K. I
331 am assuming that the total buffer memory is 32K, which is true for the
332 Intel EtherExpress Pro/10. If it is less than that on a generic card,
333 the driver will be broken.
335 The transmit algorithm in the hardware_send_packet() is similar to the
336 one in the eepro_rx(). The transmit buffer is a ring linked list.
337 I just queue the next available packet to the end of the list. In my
338 system, the 82595 is so fast that the list seems to always contain a
339 single packet. In other systems with faster computers and more congested
340 network traffics, the ring linked list should improve performance by
341 allowing up to 8K worth of packets to be queued.
343 The sizes of the receive and transmit buffers can now be changed via lilo
344 or insmod. Lilo uses the appended line "ether=io,irq,debug,rx-buffer,eth0"
345 where rx-buffer is in KB unit. Modules uses the parameter mem which is
346 also in KB unit, for example "insmod io=io-address irq=0 mem=rx-buffer."
347 The receive buffer has to be more than 3K or less than 29K. Otherwise,
348 it is reset to the default of 24K, and, hence, 8K for the trasnmit
349 buffer (transmit-buffer = 32K - receive-buffer).
352 #define RAM_SIZE 0x8000
354 #define RCV_HEADER 8
355 #define RCV_DEFAULT_RAM 0x6000
357 #define XMT_HEADER 8
358 #define XMT_DEFAULT_RAM (RAM_SIZE - RCV_DEFAULT_RAM)
360 #define XMT_START_PRO RCV_DEFAULT_RAM
361 #define XMT_START_10 0x0000
362 #define RCV_START_PRO 0x0000
363 #define RCV_START_10 XMT_DEFAULT_RAM
365 #define RCV_DONE 0x0008
366 #define RX_OK 0x2000
367 #define RX_ERROR 0x0d81
369 #define TX_DONE_BIT 0x0080
370 #define TX_OK 0x2000
371 #define CHAIN_BIT 0x8000
372 #define XMT_STATUS 0x02
373 #define XMT_CHAIN 0x04
374 #define XMT_COUNT 0x06
376 #define BANK0_SELECT 0x00
377 #define BANK1_SELECT 0x40
378 #define BANK2_SELECT 0x80
380 /* Bank 0 registers */
381 #define COMMAND_REG 0x00 /* Register 0 */
382 #define MC_SETUP 0x03
383 #define XMT_CMD 0x04
384 #define DIAGNOSE_CMD 0x07
385 #define RCV_ENABLE_CMD 0x08
386 #define RCV_DISABLE_CMD 0x0a
387 #define STOP_RCV_CMD 0x0b
388 #define RESET_CMD 0x0e
389 #define POWER_DOWN_CMD 0x18
390 #define RESUME_XMT_CMD 0x1c
391 #define SEL_RESET_CMD 0x1e
392 #define STATUS_REG 0x01 /* Register 1 */
393 #define RX_INT 0x02
394 #define TX_INT 0x04
395 #define EXEC_STATUS 0x30
396 #define ID_REG 0x02 /* Register 2 */
397 #define R_ROBIN_BITS 0xc0 /* round robin counter */
398 #define ID_REG_MASK 0x2c
399 #define ID_REG_SIG 0x24
400 #define AUTO_ENABLE 0x10
401 #define INT_MASK_REG 0x03 /* Register 3 */
402 #define RX_STOP_MASK 0x01
403 #define RX_MASK 0x02
404 #define TX_MASK 0x04
405 #define EXEC_MASK 0x08
406 #define ALL_MASK 0x0f
407 #define IO_32_BIT 0x10
408 #define RCV_BAR 0x04 /* The following are word (16-bit) registers */
409 #define RCV_STOP 0x06
411 #define XMT_BAR_PRO 0x0a
412 #define XMT_BAR_10 0x0b
414 #define HOST_ADDRESS_REG 0x0c
415 #define IO_PORT 0x0e
416 #define IO_PORT_32_BIT 0x0c
418 /* Bank 1 registers */
419 #define REG1 0x01
420 #define WORD_WIDTH 0x02
421 #define INT_ENABLE 0x80
422 #define INT_NO_REG 0x02
423 #define RCV_LOWER_LIMIT_REG 0x08
424 #define RCV_UPPER_LIMIT_REG 0x09
426 #define XMT_LOWER_LIMIT_REG_PRO 0x0a
427 #define XMT_UPPER_LIMIT_REG_PRO 0x0b
428 #define XMT_LOWER_LIMIT_REG_10 0x0b
429 #define XMT_UPPER_LIMIT_REG_10 0x0a
431 /* Bank 2 registers */
432 #define XMT_Chain_Int 0x20 /* Interrupt at the end of the transmit chain */
433 #define XMT_Chain_ErrStop 0x40 /* Interrupt at the end of the chain even if there are errors */
434 #define RCV_Discard_BadFrame 0x80 /* Throw bad frames away, and continue to receive others */
435 #define REG2 0x02
436 #define PRMSC_Mode 0x01
437 #define Multi_IA 0x20
438 #define REG3 0x03
439 #define TPE_BIT 0x04
440 #define BNC_BIT 0x20
441 #define REG13 0x0d
442 #define FDX 0x00
443 #define A_N_ENABLE 0x02
445 #define I_ADD_REG0 0x04
446 #define I_ADD_REG1 0x05
447 #define I_ADD_REG2 0x06
448 #define I_ADD_REG3 0x07
449 #define I_ADD_REG4 0x08
450 #define I_ADD_REG5 0x09
452 #define EEPROM_REG_PRO 0x0a
453 #define EEPROM_REG_10 0x0b
455 #define EESK 0x01
456 #define EECS 0x02
457 #define EEDI 0x04
458 #define EEDO 0x08
460 /* do a full reset */
461 #define eepro_reset(ioaddr) outb(RESET_CMD, ioaddr)
463 /* do a nice reset */
464 #define eepro_sel_reset(ioaddr) { \
465 outb(SEL_RESET_CMD, ioaddr); \
466 SLOW_DOWN; \
467 SLOW_DOWN; \
470 /* disable all interrupts */
471 #define eepro_dis_int(ioaddr) outb(ALL_MASK, ioaddr + INT_MASK_REG)
473 /* clear all interrupts */
474 #define eepro_clear_int(ioaddr) outb(ALL_MASK, ioaddr + STATUS_REG)
476 /* enable tx/rx */
477 #define eepro_en_int(ioaddr) outb(ALL_MASK & ~(RX_MASK | TX_MASK), \
478 ioaddr + INT_MASK_REG)
480 /* enable exec event interrupt */
481 #define eepro_en_intexec(ioaddr) outb(ALL_MASK & ~(EXEC_MASK), ioaddr + INT_MASK_REG)
483 /* enable rx */
484 #define eepro_en_rx(ioaddr) outb(RCV_ENABLE_CMD, ioaddr)
486 /* disable rx */
487 #define eepro_dis_rx(ioaddr) outb(RCV_DISABLE_CMD, ioaddr)
489 /* switch bank */
490 #define eepro_sw2bank0(ioaddr) outb(BANK0_SELECT, ioaddr)
491 #define eepro_sw2bank1(ioaddr) outb(BANK1_SELECT, ioaddr)
492 #define eepro_sw2bank2(ioaddr) outb(BANK2_SELECT, ioaddr)
494 /* enable interrupt line */
495 #define eepro_en_intline(ioaddr) outb(inb(ioaddr + REG1) | INT_ENABLE,\
496 ioaddr + REG1)
498 /* disable interrupt line */
499 #define eepro_dis_intline(ioaddr) outb(inb(ioaddr + REG1) & 0x7f, \
500 ioaddr + REG1);
502 /* set diagnose flag */
503 #define eepro_diag(ioaddr) outb(DIAGNOSE_CMD, ioaddr)
505 /* ack for rx int */
506 #define eepro_ack_rx(ioaddr) outb (RX_INT, ioaddr + STATUS_REG)
508 /* ack for tx int */
509 #define eepro_ack_tx(ioaddr) outb (TX_INT, ioaddr + STATUS_REG)
511 /* a complete sel reset */
512 #define eepro_complete_selreset(ioaddr) { \
513 lp->stats.tx_errors++;\
514 eepro_sel_reset(ioaddr);\
515 lp->tx_end = \
516 lp->xmt_lower_limit;\
517 lp->tx_start = lp->tx_end;\
518 lp->tx_last = 0;\
519 dev->trans_start = jiffies;\
520 netif_wake_queue(dev);\
521 eepro_en_rx(ioaddr);\
524 /* Check for a network adaptor of this type, and return '0' if one exists.
525 If dev->base_addr == 0, probe all likely locations.
526 If dev->base_addr == 1, always return failure.
527 If dev->base_addr == 2, allocate space for the device and return success
528 (detachable devices only).
530 static int __init do_eepro_probe(struct net_device *dev)
532 int i;
533 int base_addr = dev->base_addr;
534 int irq = dev->irq;
536 SET_MODULE_OWNER(dev);
538 #ifdef PnPWakeup
539 /* XXXX for multiple cards should this only be run once? */
541 /* Wakeup: */
542 #define WakeupPort 0x279
543 #define WakeupSeq {0x6A, 0xB5, 0xDA, 0xED, 0xF6, 0xFB, 0x7D, 0xBE,\
544 0xDF, 0x6F, 0x37, 0x1B, 0x0D, 0x86, 0xC3, 0x61,\
545 0xB0, 0x58, 0x2C, 0x16, 0x8B, 0x45, 0xA2, 0xD1,\
546 0xE8, 0x74, 0x3A, 0x9D, 0xCE, 0xE7, 0x73, 0x43}
549 unsigned short int WS[32]=WakeupSeq;
551 if (check_region(WakeupPort, 2)==0) {
553 if (net_debug>5)
554 printk(KERN_DEBUG "Waking UP\n");
556 outb_p(0,WakeupPort);
557 outb_p(0,WakeupPort);
558 for (i=0; i<32; i++) {
559 outb_p(WS[i],WakeupPort);
560 if (net_debug>5) printk(KERN_DEBUG ": %#x ",WS[i]);
562 } else printk(KERN_WARNING "Checkregion Failed!\n");
564 #endif
566 if (base_addr > 0x1ff) /* Check a single specified location. */
567 return eepro_probe1(dev, 0);
569 else if (base_addr != 0) /* Don't probe at all. */
570 return -ENXIO;
572 for (i = 0; eepro_portlist[i]; i++) {
573 dev->base_addr = eepro_portlist[i];
574 dev->irq = irq;
575 if (eepro_probe1(dev, 1) == 0)
576 return 0;
579 return -ENODEV;
582 #ifndef MODULE
583 struct net_device * __init eepro_probe(int unit)
585 struct net_device *dev = alloc_etherdev(sizeof(struct eepro_local));
586 int err;
588 if (!dev)
589 return ERR_PTR(-ENODEV);
591 SET_MODULE_OWNER(dev);
593 sprintf(dev->name, "eth%d", unit);
594 netdev_boot_setup_check(dev);
596 err = do_eepro_probe(dev);
597 if (err)
598 goto out;
599 err = register_netdev(dev);
600 if (err)
601 goto out1;
602 return dev;
603 out1:
604 release_region(dev->base_addr, EEPRO_IO_EXTENT);
605 out:
606 free_netdev(dev);
607 return ERR_PTR(err);
609 #endif
611 static void __init printEEPROMInfo(short ioaddr, struct net_device *dev)
613 unsigned short Word;
614 int i,j;
616 for (i=0, j=ee_Checksum; i<ee_SIZE; i++)
617 j+=read_eeprom(ioaddr,i,dev);
618 printk(KERN_DEBUG "Checksum: %#x\n",j&0xffff);
620 Word=read_eeprom(ioaddr, 0, dev);
621 printk(KERN_DEBUG "Word0:\n");
622 printk(KERN_DEBUG " Plug 'n Pray: %d\n",GetBit(Word,ee_PnP));
623 printk(KERN_DEBUG " Buswidth: %d\n",(GetBit(Word,ee_BusWidth)+1)*8 );
624 printk(KERN_DEBUG " AutoNegotiation: %d\n",GetBit(Word,ee_AutoNeg));
625 printk(KERN_DEBUG " IO Address: %#x\n", (Word>>ee_IO0)<<4);
627 if (net_debug>4) {
628 Word=read_eeprom(ioaddr, 1, dev);
629 printk(KERN_DEBUG "Word1:\n");
630 printk(KERN_DEBUG " INT: %d\n", Word & ee_IntMask);
631 printk(KERN_DEBUG " LI: %d\n", GetBit(Word,ee_LI));
632 printk(KERN_DEBUG " PC: %d\n", GetBit(Word,ee_PC));
633 printk(KERN_DEBUG " TPE/AUI: %d\n", GetBit(Word,ee_TPE_AUI));
634 printk(KERN_DEBUG " Jabber: %d\n", GetBit(Word,ee_Jabber));
635 printk(KERN_DEBUG " AutoPort: %d\n", GetBit(!Word,ee_Jabber));
636 printk(KERN_DEBUG " Duplex: %d\n", GetBit(Word,ee_Duplex));
639 Word=read_eeprom(ioaddr, 5, dev);
640 printk(KERN_DEBUG "Word5:\n");
641 printk(KERN_DEBUG " BNC: %d\n",GetBit(Word,ee_BNC_TPE));
642 printk(KERN_DEBUG " NumConnectors: %d\n",GetBit(Word,ee_NumConn));
643 printk(KERN_DEBUG " Has ");
644 if (GetBit(Word,ee_PortTPE)) printk(KERN_DEBUG "TPE ");
645 if (GetBit(Word,ee_PortBNC)) printk(KERN_DEBUG "BNC ");
646 if (GetBit(Word,ee_PortAUI)) printk(KERN_DEBUG "AUI ");
647 printk(KERN_DEBUG "port(s) \n");
649 Word=read_eeprom(ioaddr, 6, dev);
650 printk(KERN_DEBUG "Word6:\n");
651 printk(KERN_DEBUG " Stepping: %d\n",Word & ee_StepMask);
652 printk(KERN_DEBUG " BoardID: %d\n",Word>>ee_BoardID);
654 Word=read_eeprom(ioaddr, 7, dev);
655 printk(KERN_DEBUG "Word7:\n");
656 printk(KERN_DEBUG " INT to IRQ:\n");
658 for (i=0, j=0; i<15; i++)
659 if (GetBit(Word,i)) printk(KERN_DEBUG " INT%d -> IRQ %d;",j++,i);
661 printk(KERN_DEBUG "\n");
664 /* function to recalculate the limits of buffer based on rcv_ram */
665 static void eepro_recalc (struct net_device *dev)
667 struct eepro_local * lp;
669 lp = netdev_priv(dev);
670 lp->xmt_ram = RAM_SIZE - lp->rcv_ram;
672 if (lp->eepro == LAN595FX_10ISA) {
673 lp->xmt_lower_limit = XMT_START_10;
674 lp->xmt_upper_limit = (lp->xmt_ram - 2);
675 lp->rcv_lower_limit = lp->xmt_ram;
676 lp->rcv_upper_limit = (RAM_SIZE - 2);
678 else {
679 lp->rcv_lower_limit = RCV_START_PRO;
680 lp->rcv_upper_limit = (lp->rcv_ram - 2);
681 lp->xmt_lower_limit = lp->rcv_ram;
682 lp->xmt_upper_limit = (RAM_SIZE - 2);
686 /* prints boot-time info */
687 static void __init eepro_print_info (struct net_device *dev)
689 struct eepro_local * lp = netdev_priv(dev);
690 int i;
691 const char * ifmap[] = {"AUI", "10Base2", "10BaseT"};
693 i = inb(dev->base_addr + ID_REG);
694 printk(KERN_DEBUG " id: %#x ",i);
695 printk(" io: %#x ", (unsigned)dev->base_addr);
697 switch (lp->eepro) {
698 case LAN595FX_10ISA:
699 printk("%s: Intel EtherExpress 10 ISA\n at %#x,",
700 dev->name, (unsigned)dev->base_addr);
701 break;
702 case LAN595FX:
703 printk("%s: Intel EtherExpress Pro/10+ ISA\n at %#x,",
704 dev->name, (unsigned)dev->base_addr);
705 break;
706 case LAN595TX:
707 printk("%s: Intel EtherExpress Pro/10 ISA at %#x,",
708 dev->name, (unsigned)dev->base_addr);
709 break;
710 case LAN595:
711 printk("%s: Intel 82595-based lan card at %#x,",
712 dev->name, (unsigned)dev->base_addr);
715 for (i=0; i < 6; i++)
716 printk("%c%02x", i ? ':' : ' ', dev->dev_addr[i]);
718 if (net_debug > 3)
719 printk(KERN_DEBUG ", %dK RCV buffer",
720 (int)(lp->rcv_ram)/1024);
722 if (dev->irq > 2)
723 printk(", IRQ %d, %s.\n", dev->irq, ifmap[dev->if_port]);
724 else
725 printk(", %s.\n", ifmap[dev->if_port]);
727 if (net_debug > 3) {
728 i = read_eeprom(dev->base_addr, 5, dev);
729 if (i & 0x2000) /* bit 13 of EEPROM word 5 */
730 printk(KERN_DEBUG "%s: Concurrent Processing is "
731 "enabled but not used!\n", dev->name);
734 /* Check the station address for the manufacturer's code */
735 if (net_debug>3)
736 printEEPROMInfo(dev->base_addr, dev);
739 /* This is the real probe routine. Linux has a history of friendly device
740 probes on the ISA bus. A good device probe avoids doing writes, and
741 verifies that the correct device exists and functions. */
743 static int __init eepro_probe1(struct net_device *dev, int autoprobe)
745 unsigned short station_addr[6], id, counter;
746 int i;
747 struct eepro_local *lp;
748 enum iftype { AUI=0, BNC=1, TPE=2 };
749 int ioaddr = dev->base_addr;
751 /* Grab the region so we can find another board if autoIRQ fails. */
752 if (!request_region(ioaddr, EEPRO_IO_EXTENT, DRV_NAME)) {
753 if (!autoprobe)
754 printk(KERN_WARNING "EEPRO: io-port 0x%04x in use \n",
755 ioaddr);
756 return -EBUSY;
759 /* Now, we are going to check for the signature of the
760 ID_REG (register 2 of bank 0) */
762 id = inb(ioaddr + ID_REG);
764 if ((id & ID_REG_MASK) != ID_REG_SIG)
765 goto exit;
767 /* We seem to have the 82595 signature, let's
768 play with its counter (last 2 bits of
769 register 2 of bank 0) to be sure. */
771 counter = id & R_ROBIN_BITS;
773 if ((inb(ioaddr + ID_REG) & R_ROBIN_BITS) != (counter + 0x40))
774 goto exit;
776 lp = netdev_priv(dev);
777 memset(lp, 0, sizeof(struct eepro_local));
778 lp->xmt_bar = XMT_BAR_PRO;
779 lp->xmt_lower_limit_reg = XMT_LOWER_LIMIT_REG_PRO;
780 lp->xmt_upper_limit_reg = XMT_UPPER_LIMIT_REG_PRO;
781 lp->eeprom_reg = EEPROM_REG_PRO;
782 spin_lock_init(&lp->lock);
784 /* Now, get the ethernet hardware address from
785 the EEPROM */
786 station_addr[0] = read_eeprom(ioaddr, 2, dev);
788 /* FIXME - find another way to know that we've found
789 * an Etherexpress 10
791 if (station_addr[0] == 0x0000 || station_addr[0] == 0xffff) {
792 lp->eepro = LAN595FX_10ISA;
793 lp->eeprom_reg = EEPROM_REG_10;
794 lp->xmt_lower_limit_reg = XMT_LOWER_LIMIT_REG_10;
795 lp->xmt_upper_limit_reg = XMT_UPPER_LIMIT_REG_10;
796 lp->xmt_bar = XMT_BAR_10;
797 station_addr[0] = read_eeprom(ioaddr, 2, dev);
799 station_addr[1] = read_eeprom(ioaddr, 3, dev);
800 station_addr[2] = read_eeprom(ioaddr, 4, dev);
802 if (!lp->eepro) {
803 if (read_eeprom(ioaddr,7,dev)== ee_FX_INT2IRQ)
804 lp->eepro = 2;
805 else if (station_addr[2] == SA_ADDR1)
806 lp->eepro = 1;
809 /* Fill in the 'dev' fields. */
810 for (i=0; i < 6; i++)
811 dev->dev_addr[i] = ((unsigned char *) station_addr)[5-i];
813 /* RX buffer must be more than 3K and less than 29K */
814 if (dev->mem_end < 3072 || dev->mem_end > 29696)
815 lp->rcv_ram = RCV_DEFAULT_RAM;
817 /* calculate {xmt,rcv}_{lower,upper}_limit */
818 eepro_recalc(dev);
820 if (GetBit( read_eeprom(ioaddr, 5, dev),ee_BNC_TPE))
821 dev->if_port = BNC;
822 else
823 dev->if_port = TPE;
825 if (dev->irq < 2 && lp->eepro != 0) {
826 /* Mask off INT number */
827 int count = read_eeprom(ioaddr, 1, dev) & 7;
828 unsigned irqMask = read_eeprom(ioaddr, 7, dev);
830 while (count--)
831 irqMask &= irqMask - 1;
833 count = ffs(irqMask);
835 if (count)
836 dev->irq = count - 1;
838 if (dev->irq < 2) {
839 printk(KERN_ERR " Duh! illegal interrupt vector stored in EEPROM.\n");
840 goto exit;
841 } else if (dev->irq == 2) {
842 dev->irq = 9;
846 dev->open = eepro_open;
847 dev->stop = eepro_close;
848 dev->hard_start_xmit = eepro_send_packet;
849 dev->get_stats = eepro_get_stats;
850 dev->set_multicast_list = &set_multicast_list;
851 dev->tx_timeout = eepro_tx_timeout;
852 dev->watchdog_timeo = TX_TIMEOUT;
854 /* print boot time info */
855 eepro_print_info(dev);
857 /* reset 82595 */
858 eepro_reset(ioaddr);
859 return 0;
860 exit:
861 release_region(dev->base_addr, EEPRO_IO_EXTENT);
862 return -ENODEV;
865 /* Open/initialize the board. This is called (in the current kernel)
866 sometime after booting when the 'ifconfig' program is run.
868 This routine should set everything up anew at each open, even
869 registers that "should" only need to be set once at boot, so that
870 there is non-reboot way to recover if something goes wrong.
873 static char irqrmap[] = {-1,-1,0,1,-1,2,-1,-1,-1,0,3,4,-1,-1,-1,-1};
874 static char irqrmap2[] = {-1,-1,4,0,1,2,-1,3,-1,4,5,6,7,-1,-1,-1};
875 static int eepro_grab_irq(struct net_device *dev)
877 int irqlist[] = { 3, 4, 5, 7, 9, 10, 11, 12, 0 };
878 int *irqp = irqlist, temp_reg, ioaddr = dev->base_addr;
880 eepro_sw2bank1(ioaddr); /* be CAREFUL, BANK 1 now */
882 /* Enable the interrupt line. */
883 eepro_en_intline(ioaddr);
885 /* be CAREFUL, BANK 0 now */
886 eepro_sw2bank0(ioaddr);
888 /* clear all interrupts */
889 eepro_clear_int(ioaddr);
891 /* Let EXEC event to interrupt */
892 eepro_en_intexec(ioaddr);
894 do {
895 eepro_sw2bank1(ioaddr); /* be CAREFUL, BANK 1 now */
897 temp_reg = inb(ioaddr + INT_NO_REG);
898 outb((temp_reg & 0xf8) | irqrmap[*irqp], ioaddr + INT_NO_REG);
900 eepro_sw2bank0(ioaddr); /* Switch back to Bank 0 */
902 if (request_irq (*irqp, NULL, SA_SHIRQ, "bogus", dev) != EBUSY) {
903 unsigned long irq_mask;
904 /* Twinkle the interrupt, and check if it's seen */
905 irq_mask = probe_irq_on();
907 eepro_diag(ioaddr); /* RESET the 82595 */
908 mdelay(20);
910 if (*irqp == probe_irq_off(irq_mask)) /* It's a good IRQ line */
911 break;
913 /* clear all interrupts */
914 eepro_clear_int(ioaddr);
916 } while (*++irqp);
918 eepro_sw2bank1(ioaddr); /* Switch back to Bank 1 */
920 /* Disable the physical interrupt line. */
921 eepro_dis_intline(ioaddr);
923 eepro_sw2bank0(ioaddr); /* Switch back to Bank 0 */
925 /* Mask all the interrupts. */
926 eepro_dis_int(ioaddr);
928 /* clear all interrupts */
929 eepro_clear_int(ioaddr);
931 return dev->irq;
934 static int eepro_open(struct net_device *dev)
936 unsigned short temp_reg, old8, old9;
937 int irqMask;
938 int i, ioaddr = dev->base_addr;
939 struct eepro_local *lp = netdev_priv(dev);
941 if (net_debug > 3)
942 printk(KERN_DEBUG "%s: entering eepro_open routine.\n", dev->name);
944 irqMask = read_eeprom(ioaddr,7,dev);
946 if (lp->eepro == LAN595FX_10ISA) {
947 if (net_debug > 3) printk(KERN_DEBUG "p->eepro = 3;\n");
949 else if (irqMask == ee_FX_INT2IRQ) /* INT to IRQ Mask */
951 lp->eepro = 2; /* Yes, an Intel EtherExpress Pro/10+ */
952 if (net_debug > 3) printk(KERN_DEBUG "p->eepro = 2;\n");
955 else if ((dev->dev_addr[0] == SA_ADDR0 &&
956 dev->dev_addr[1] == SA_ADDR1 &&
957 dev->dev_addr[2] == SA_ADDR2))
959 lp->eepro = 1;
960 if (net_debug > 3) printk(KERN_DEBUG "p->eepro = 1;\n");
961 } /* Yes, an Intel EtherExpress Pro/10 */
963 else lp->eepro = 0; /* No, it is a generic 82585 lan card */
965 /* Get the interrupt vector for the 82595 */
966 if (dev->irq < 2 && eepro_grab_irq(dev) == 0) {
967 printk(KERN_ERR "%s: unable to get IRQ %d.\n", dev->name, dev->irq);
968 return -EAGAIN;
971 if (request_irq(dev->irq , &eepro_interrupt, 0, dev->name, dev)) {
972 printk(KERN_ERR "%s: unable to get IRQ %d.\n", dev->name, dev->irq);
973 return -EAGAIN;
976 #ifdef irq2dev_map
977 if (((irq2dev_map[dev->irq] != 0)
978 || (irq2dev_map[dev->irq] = dev) == 0) &&
979 (irq2dev_map[dev->irq]!=dev)) {
980 /* printk("%s: IRQ map wrong\n", dev->name); */
981 free_irq(dev->irq, dev);
982 return -EAGAIN;
984 #endif
986 /* Initialize the 82595. */
988 eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */
989 temp_reg = inb(ioaddr + lp->eeprom_reg);
991 lp->stepping = temp_reg >> 5; /* Get the stepping number of the 595 */
993 if (net_debug > 3)
994 printk(KERN_DEBUG "The stepping of the 82595 is %d\n", lp->stepping);
996 if (temp_reg & 0x10) /* Check the TurnOff Enable bit */
997 outb(temp_reg & 0xef, ioaddr + lp->eeprom_reg);
998 for (i=0; i < 6; i++)
999 outb(dev->dev_addr[i] , ioaddr + I_ADD_REG0 + i);
1001 temp_reg = inb(ioaddr + REG1); /* Setup Transmit Chaining */
1002 outb(temp_reg | XMT_Chain_Int | XMT_Chain_ErrStop /* and discard bad RCV frames */
1003 | RCV_Discard_BadFrame, ioaddr + REG1);
1005 temp_reg = inb(ioaddr + REG2); /* Match broadcast */
1006 outb(temp_reg | 0x14, ioaddr + REG2);
1008 temp_reg = inb(ioaddr + REG3);
1009 outb(temp_reg & 0x3f, ioaddr + REG3); /* clear test mode */
1011 /* Set the receiving mode */
1012 eepro_sw2bank1(ioaddr); /* be CAREFUL, BANK 1 now */
1014 /* Set the interrupt vector */
1015 temp_reg = inb(ioaddr + INT_NO_REG);
1016 if (lp->eepro == LAN595FX || lp->eepro == LAN595FX_10ISA)
1017 outb((temp_reg & 0xf8) | irqrmap2[dev->irq], ioaddr + INT_NO_REG);
1018 else outb((temp_reg & 0xf8) | irqrmap[dev->irq], ioaddr + INT_NO_REG);
1021 temp_reg = inb(ioaddr + INT_NO_REG);
1022 if (lp->eepro == LAN595FX || lp->eepro == LAN595FX_10ISA)
1023 outb((temp_reg & 0xf0) | irqrmap2[dev->irq] | 0x08,ioaddr+INT_NO_REG);
1024 else outb((temp_reg & 0xf8) | irqrmap[dev->irq], ioaddr + INT_NO_REG);
1026 if (net_debug > 3)
1027 printk(KERN_DEBUG "eepro_open: content of INT Reg is %x\n", temp_reg);
1030 /* Initialize the RCV and XMT upper and lower limits */
1031 outb(lp->rcv_lower_limit >> 8, ioaddr + RCV_LOWER_LIMIT_REG);
1032 outb(lp->rcv_upper_limit >> 8, ioaddr + RCV_UPPER_LIMIT_REG);
1033 outb(lp->xmt_lower_limit >> 8, ioaddr + lp->xmt_lower_limit_reg);
1034 outb(lp->xmt_upper_limit >> 8, ioaddr + lp->xmt_upper_limit_reg);
1036 /* Enable the interrupt line. */
1037 eepro_en_intline(ioaddr);
1039 /* Switch back to Bank 0 */
1040 eepro_sw2bank0(ioaddr);
1042 /* Let RX and TX events to interrupt */
1043 eepro_en_int(ioaddr);
1045 /* clear all interrupts */
1046 eepro_clear_int(ioaddr);
1048 /* Initialize RCV */
1049 outw(lp->rcv_lower_limit, ioaddr + RCV_BAR);
1050 lp->rx_start = lp->rcv_lower_limit;
1051 outw(lp->rcv_upper_limit | 0xfe, ioaddr + RCV_STOP);
1053 /* Initialize XMT */
1054 outw(lp->xmt_lower_limit, ioaddr + lp->xmt_bar);
1055 lp->tx_start = lp->tx_end = lp->xmt_lower_limit;
1056 lp->tx_last = 0;
1058 /* Check for the i82595TX and i82595FX */
1059 old8 = inb(ioaddr + 8);
1060 outb(~old8, ioaddr + 8);
1062 if ((temp_reg = inb(ioaddr + 8)) == old8) {
1063 if (net_debug > 3)
1064 printk(KERN_DEBUG "i82595 detected!\n");
1065 lp->version = LAN595;
1067 else {
1068 lp->version = LAN595TX;
1069 outb(old8, ioaddr + 8);
1070 old9 = inb(ioaddr + 9);
1072 if (irqMask==ee_FX_INT2IRQ) {
1073 enum iftype { AUI=0, BNC=1, TPE=2 };
1075 if (net_debug > 3) {
1076 printk(KERN_DEBUG "IrqMask: %#x\n",irqMask);
1077 printk(KERN_DEBUG "i82595FX detected!\n");
1079 lp->version = LAN595FX;
1080 outb(old9, ioaddr + 9);
1081 if (dev->if_port != TPE) { /* Hopefully, this will fix the
1082 problem of using Pentiums and
1083 pro/10 w/ BNC. */
1084 eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */
1085 temp_reg = inb(ioaddr + REG13);
1086 /* disable the full duplex mode since it is not
1087 applicable with the 10Base2 cable. */
1088 outb(temp_reg & ~(FDX | A_N_ENABLE), REG13);
1089 eepro_sw2bank0(ioaddr); /* be CAREFUL, BANK 0 now */
1092 else if (net_debug > 3) {
1093 printk(KERN_DEBUG "temp_reg: %#x ~old9: %#x\n",temp_reg,((~old9)&0xff));
1094 printk(KERN_DEBUG "i82595TX detected!\n");
1098 eepro_sel_reset(ioaddr);
1100 netif_start_queue(dev);
1102 if (net_debug > 3)
1103 printk(KERN_DEBUG "%s: exiting eepro_open routine.\n", dev->name);
1105 /* enabling rx */
1106 eepro_en_rx(ioaddr);
1108 return 0;
1111 static void eepro_tx_timeout (struct net_device *dev)
1113 struct eepro_local *lp = netdev_priv(dev);
1114 int ioaddr = dev->base_addr;
1116 /* if (net_debug > 1) */
1117 printk (KERN_ERR "%s: transmit timed out, %s?\n", dev->name,
1118 "network cable problem");
1119 /* This is not a duplicate. One message for the console,
1120 one for the the log file */
1121 printk (KERN_DEBUG "%s: transmit timed out, %s?\n", dev->name,
1122 "network cable problem");
1123 eepro_complete_selreset(ioaddr);
1127 static int eepro_send_packet(struct sk_buff *skb, struct net_device *dev)
1129 struct eepro_local *lp = netdev_priv(dev);
1130 unsigned long flags;
1131 int ioaddr = dev->base_addr;
1132 short length = skb->len;
1134 if (net_debug > 5)
1135 printk(KERN_DEBUG "%s: entering eepro_send_packet routine.\n", dev->name);
1137 if (length < ETH_ZLEN) {
1138 skb = skb_padto(skb, ETH_ZLEN);
1139 if (skb == NULL)
1140 return 0;
1141 length = ETH_ZLEN;
1143 netif_stop_queue (dev);
1145 eepro_dis_int(ioaddr);
1146 spin_lock_irqsave(&lp->lock, flags);
1149 unsigned char *buf = skb->data;
1151 if (hardware_send_packet(dev, buf, length))
1152 /* we won't wake queue here because we're out of space */
1153 lp->stats.tx_dropped++;
1154 else {
1155 lp->stats.tx_bytes+=skb->len;
1156 dev->trans_start = jiffies;
1157 netif_wake_queue(dev);
1162 dev_kfree_skb (skb);
1164 /* You might need to clean up and record Tx statistics here. */
1165 /* lp->stats.tx_aborted_errors++; */
1167 if (net_debug > 5)
1168 printk(KERN_DEBUG "%s: exiting eepro_send_packet routine.\n", dev->name);
1170 eepro_en_int(ioaddr);
1171 spin_unlock_irqrestore(&lp->lock, flags);
1173 return 0;
1177 /* The typical workload of the driver:
1178 Handle the network interface interrupts. */
1180 static irqreturn_t
1181 eepro_interrupt(int irq, void *dev_id, struct pt_regs * regs)
1183 struct net_device *dev = (struct net_device *)dev_id;
1184 /* (struct net_device *)(irq2dev_map[irq]);*/
1185 struct eepro_local *lp;
1186 int ioaddr, status, boguscount = 20;
1187 int handled = 0;
1189 if (dev == NULL) {
1190 printk (KERN_ERR "eepro_interrupt(): irq %d for unknown device.\\n", irq);
1191 return IRQ_NONE;
1194 lp = netdev_priv(dev);
1196 spin_lock(&lp->lock);
1198 if (net_debug > 5)
1199 printk(KERN_DEBUG "%s: entering eepro_interrupt routine.\n", dev->name);
1201 ioaddr = dev->base_addr;
1203 while (((status = inb(ioaddr + STATUS_REG)) & (RX_INT|TX_INT)) && (boguscount--))
1205 handled = 1;
1206 if (status & RX_INT) {
1207 if (net_debug > 4)
1208 printk(KERN_DEBUG "%s: packet received interrupt.\n", dev->name);
1210 eepro_dis_int(ioaddr);
1212 /* Get the received packets */
1213 eepro_ack_rx(ioaddr);
1214 eepro_rx(dev);
1216 eepro_en_int(ioaddr);
1218 if (status & TX_INT) {
1219 if (net_debug > 4)
1220 printk(KERN_DEBUG "%s: packet transmit interrupt.\n", dev->name);
1223 eepro_dis_int(ioaddr);
1225 /* Process the status of transmitted packets */
1226 eepro_ack_tx(ioaddr);
1227 eepro_transmit_interrupt(dev);
1229 eepro_en_int(ioaddr);
1233 if (net_debug > 5)
1234 printk(KERN_DEBUG "%s: exiting eepro_interrupt routine.\n", dev->name);
1236 spin_unlock(&lp->lock);
1237 return IRQ_RETVAL(handled);
1240 static int eepro_close(struct net_device *dev)
1242 struct eepro_local *lp = netdev_priv(dev);
1243 int ioaddr = dev->base_addr;
1244 short temp_reg;
1246 netif_stop_queue(dev);
1248 eepro_sw2bank1(ioaddr); /* Switch back to Bank 1 */
1250 /* Disable the physical interrupt line. */
1251 temp_reg = inb(ioaddr + REG1);
1252 outb(temp_reg & 0x7f, ioaddr + REG1);
1254 eepro_sw2bank0(ioaddr); /* Switch back to Bank 0 */
1256 /* Flush the Tx and disable Rx. */
1257 outb(STOP_RCV_CMD, ioaddr);
1258 lp->tx_start = lp->tx_end = lp->xmt_lower_limit;
1259 lp->tx_last = 0;
1261 /* Mask all the interrupts. */
1262 eepro_dis_int(ioaddr);
1264 /* clear all interrupts */
1265 eepro_clear_int(ioaddr);
1267 /* Reset the 82595 */
1268 eepro_reset(ioaddr);
1270 /* release the interrupt */
1271 free_irq(dev->irq, dev);
1273 #ifdef irq2dev_map
1274 irq2dev_map[dev->irq] = 0;
1275 #endif
1277 /* Update the statistics here. What statistics? */
1279 return 0;
1282 /* Get the current statistics. This may be called with the card open or
1283 closed. */
1284 static struct net_device_stats *
1285 eepro_get_stats(struct net_device *dev)
1287 struct eepro_local *lp = netdev_priv(dev);
1289 return &lp->stats;
1292 /* Set or clear the multicast filter for this adaptor.
1294 static void
1295 set_multicast_list(struct net_device *dev)
1297 struct eepro_local *lp = netdev_priv(dev);
1298 short ioaddr = dev->base_addr;
1299 unsigned short mode;
1300 struct dev_mc_list *dmi=dev->mc_list;
1302 if (dev->flags&(IFF_ALLMULTI|IFF_PROMISC) || dev->mc_count > 63)
1305 * We must make the kernel realise we had to move
1306 * into promisc mode or we start all out war on
1307 * the cable. If it was a promisc request the
1308 * flag is already set. If not we assert it.
1310 dev->flags|=IFF_PROMISC;
1312 eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */
1313 mode = inb(ioaddr + REG2);
1314 outb(mode | PRMSC_Mode, ioaddr + REG2);
1315 mode = inb(ioaddr + REG3);
1316 outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
1317 eepro_sw2bank0(ioaddr); /* Return to BANK 0 now */
1318 printk(KERN_INFO "%s: promiscuous mode enabled.\n", dev->name);
1321 else if (dev->mc_count==0 )
1323 eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */
1324 mode = inb(ioaddr + REG2);
1325 outb(mode & 0xd6, ioaddr + REG2); /* Turn off Multi-IA and PRMSC_Mode bits */
1326 mode = inb(ioaddr + REG3);
1327 outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
1328 eepro_sw2bank0(ioaddr); /* Return to BANK 0 now */
1331 else
1333 unsigned short status, *eaddrs;
1334 int i, boguscount = 0;
1336 /* Disable RX and TX interrupts. Necessary to avoid
1337 corruption of the HOST_ADDRESS_REG by interrupt
1338 service routines. */
1339 eepro_dis_int(ioaddr);
1341 eepro_sw2bank2(ioaddr); /* be CAREFUL, BANK 2 now */
1342 mode = inb(ioaddr + REG2);
1343 outb(mode | Multi_IA, ioaddr + REG2);
1344 mode = inb(ioaddr + REG3);
1345 outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
1346 eepro_sw2bank0(ioaddr); /* Return to BANK 0 now */
1347 outw(lp->tx_end, ioaddr + HOST_ADDRESS_REG);
1348 outw(MC_SETUP, ioaddr + IO_PORT);
1349 outw(0, ioaddr + IO_PORT);
1350 outw(0, ioaddr + IO_PORT);
1351 outw(6*(dev->mc_count + 1), ioaddr + IO_PORT);
1353 for (i = 0; i < dev->mc_count; i++)
1355 eaddrs=(unsigned short *)dmi->dmi_addr;
1356 dmi=dmi->next;
1357 outw(*eaddrs++, ioaddr + IO_PORT);
1358 outw(*eaddrs++, ioaddr + IO_PORT);
1359 outw(*eaddrs++, ioaddr + IO_PORT);
1362 eaddrs = (unsigned short *) dev->dev_addr;
1363 outw(eaddrs[0], ioaddr + IO_PORT);
1364 outw(eaddrs[1], ioaddr + IO_PORT);
1365 outw(eaddrs[2], ioaddr + IO_PORT);
1366 outw(lp->tx_end, ioaddr + lp->xmt_bar);
1367 outb(MC_SETUP, ioaddr);
1369 /* Update the transmit queue */
1370 i = lp->tx_end + XMT_HEADER + 6*(dev->mc_count + 1);
1372 if (lp->tx_start != lp->tx_end)
1374 /* update the next address and the chain bit in the
1375 last packet */
1376 outw(lp->tx_last + XMT_CHAIN, ioaddr + HOST_ADDRESS_REG);
1377 outw(i, ioaddr + IO_PORT);
1378 outw(lp->tx_last + XMT_COUNT, ioaddr + HOST_ADDRESS_REG);
1379 status = inw(ioaddr + IO_PORT);
1380 outw(status | CHAIN_BIT, ioaddr + IO_PORT);
1381 lp->tx_end = i ;
1383 else {
1384 lp->tx_start = lp->tx_end = i ;
1387 /* Acknowledge that the MC setup is done */
1388 do { /* We should be doing this in the eepro_interrupt()! */
1389 SLOW_DOWN;
1390 SLOW_DOWN;
1391 if (inb(ioaddr + STATUS_REG) & 0x08)
1393 i = inb(ioaddr);
1394 outb(0x08, ioaddr + STATUS_REG);
1396 if (i & 0x20) { /* command ABORTed */
1397 printk(KERN_NOTICE "%s: multicast setup failed.\n",
1398 dev->name);
1399 break;
1400 } else if ((i & 0x0f) == 0x03) { /* MC-Done */
1401 printk(KERN_DEBUG "%s: set Rx mode to %d address%s.\n",
1402 dev->name, dev->mc_count,
1403 dev->mc_count > 1 ? "es":"");
1404 break;
1407 } while (++boguscount < 100);
1409 /* Re-enable RX and TX interrupts */
1410 eepro_en_int(ioaddr);
1412 if (lp->eepro == LAN595FX_10ISA) {
1413 eepro_complete_selreset(ioaddr);
1415 else
1416 eepro_en_rx(ioaddr);
1419 /* The horrible routine to read a word from the serial EEPROM. */
1420 /* IMPORTANT - the 82595 will be set to Bank 0 after the eeprom is read */
1422 /* The delay between EEPROM clock transitions. */
1423 #define eeprom_delay() { udelay(40); }
1424 #define EE_READ_CMD (6 << 6)
1427 read_eeprom(int ioaddr, int location, struct net_device *dev)
1429 int i;
1430 unsigned short retval = 0;
1431 struct eepro_local *lp = netdev_priv(dev);
1432 short ee_addr = ioaddr + lp->eeprom_reg;
1433 int read_cmd = location | EE_READ_CMD;
1434 short ctrl_val = EECS ;
1436 /* XXXX - black magic */
1437 eepro_sw2bank1(ioaddr);
1438 outb(0x00, ioaddr + STATUS_REG);
1439 /* XXXX - black magic */
1441 eepro_sw2bank2(ioaddr);
1442 outb(ctrl_val, ee_addr);
1444 /* Shift the read command bits out. */
1445 for (i = 8; i >= 0; i--) {
1446 short outval = (read_cmd & (1 << i)) ? ctrl_val | EEDI
1447 : ctrl_val;
1448 outb(outval, ee_addr);
1449 outb(outval | EESK, ee_addr); /* EEPROM clock tick. */
1450 eeprom_delay();
1451 outb(outval, ee_addr); /* Finish EEPROM a clock tick. */
1452 eeprom_delay();
1454 outb(ctrl_val, ee_addr);
1456 for (i = 16; i > 0; i--) {
1457 outb(ctrl_val | EESK, ee_addr); eeprom_delay();
1458 retval = (retval << 1) | ((inb(ee_addr) & EEDO) ? 1 : 0);
1459 outb(ctrl_val, ee_addr); eeprom_delay();
1462 /* Terminate the EEPROM access. */
1463 ctrl_val &= ~EECS;
1464 outb(ctrl_val | EESK, ee_addr);
1465 eeprom_delay();
1466 outb(ctrl_val, ee_addr);
1467 eeprom_delay();
1468 eepro_sw2bank0(ioaddr);
1469 return retval;
1472 static int
1473 hardware_send_packet(struct net_device *dev, void *buf, short length)
1475 struct eepro_local *lp = netdev_priv(dev);
1476 short ioaddr = dev->base_addr;
1477 unsigned status, tx_available, last, end;
1479 if (net_debug > 5)
1480 printk(KERN_DEBUG "%s: entering hardware_send_packet routine.\n", dev->name);
1482 /* determine how much of the transmit buffer space is available */
1483 if (lp->tx_end > lp->tx_start)
1484 tx_available = lp->xmt_ram - (lp->tx_end - lp->tx_start);
1485 else if (lp->tx_end < lp->tx_start)
1486 tx_available = lp->tx_start - lp->tx_end;
1487 else tx_available = lp->xmt_ram;
1489 if (((((length + 3) >> 1) << 1) + 2*XMT_HEADER) >= tx_available) {
1490 /* No space available ??? */
1491 return 1;
1494 last = lp->tx_end;
1495 end = last + (((length + 3) >> 1) << 1) + XMT_HEADER;
1497 if (end >= lp->xmt_upper_limit + 2) { /* the transmit buffer is wrapped around */
1498 if ((lp->xmt_upper_limit + 2 - last) <= XMT_HEADER) {
1499 /* Arrrr!!!, must keep the xmt header together,
1500 several days were lost to chase this one down. */
1501 last = lp->xmt_lower_limit;
1502 end = last + (((length + 3) >> 1) << 1) + XMT_HEADER;
1504 else end = lp->xmt_lower_limit + (end -
1505 lp->xmt_upper_limit + 2);
1508 outw(last, ioaddr + HOST_ADDRESS_REG);
1509 outw(XMT_CMD, ioaddr + IO_PORT);
1510 outw(0, ioaddr + IO_PORT);
1511 outw(end, ioaddr + IO_PORT);
1512 outw(length, ioaddr + IO_PORT);
1514 if (lp->version == LAN595)
1515 outsw(ioaddr + IO_PORT, buf, (length + 3) >> 1);
1516 else { /* LAN595TX or LAN595FX, capable of 32-bit I/O processing */
1517 unsigned short temp = inb(ioaddr + INT_MASK_REG);
1518 outb(temp | IO_32_BIT, ioaddr + INT_MASK_REG);
1519 outsl(ioaddr + IO_PORT_32_BIT, buf, (length + 3) >> 2);
1520 outb(temp & ~(IO_32_BIT), ioaddr + INT_MASK_REG);
1523 /* A dummy read to flush the DRAM write pipeline */
1524 status = inw(ioaddr + IO_PORT);
1526 if (lp->tx_start == lp->tx_end) {
1527 outw(last, ioaddr + lp->xmt_bar);
1528 outb(XMT_CMD, ioaddr);
1529 lp->tx_start = last; /* I don't like to change tx_start here */
1531 else {
1532 /* update the next address and the chain bit in the
1533 last packet */
1535 if (lp->tx_end != last) {
1536 outw(lp->tx_last + XMT_CHAIN, ioaddr + HOST_ADDRESS_REG);
1537 outw(last, ioaddr + IO_PORT);
1540 outw(lp->tx_last + XMT_COUNT, ioaddr + HOST_ADDRESS_REG);
1541 status = inw(ioaddr + IO_PORT);
1542 outw(status | CHAIN_BIT, ioaddr + IO_PORT);
1544 /* Continue the transmit command */
1545 outb(RESUME_XMT_CMD, ioaddr);
1548 lp->tx_last = last;
1549 lp->tx_end = end;
1551 if (net_debug > 5)
1552 printk(KERN_DEBUG "%s: exiting hardware_send_packet routine.\n", dev->name);
1554 return 0;
1557 static void
1558 eepro_rx(struct net_device *dev)
1560 struct eepro_local *lp = netdev_priv(dev);
1561 short ioaddr = dev->base_addr;
1562 short boguscount = 20;
1563 short rcv_car = lp->rx_start;
1564 unsigned rcv_event, rcv_status, rcv_next_frame, rcv_size;
1566 if (net_debug > 5)
1567 printk(KERN_DEBUG "%s: entering eepro_rx routine.\n", dev->name);
1569 /* Set the read pointer to the start of the RCV */
1570 outw(rcv_car, ioaddr + HOST_ADDRESS_REG);
1572 rcv_event = inw(ioaddr + IO_PORT);
1574 while (rcv_event == RCV_DONE) {
1576 rcv_status = inw(ioaddr + IO_PORT);
1577 rcv_next_frame = inw(ioaddr + IO_PORT);
1578 rcv_size = inw(ioaddr + IO_PORT);
1580 if ((rcv_status & (RX_OK | RX_ERROR)) == RX_OK) {
1582 /* Malloc up new buffer. */
1583 struct sk_buff *skb;
1585 lp->stats.rx_bytes+=rcv_size;
1586 rcv_size &= 0x3fff;
1587 skb = dev_alloc_skb(rcv_size+5);
1588 if (skb == NULL) {
1589 printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name);
1590 lp->stats.rx_dropped++;
1591 rcv_car = lp->rx_start + RCV_HEADER + rcv_size;
1592 lp->rx_start = rcv_next_frame;
1593 outw(rcv_next_frame, ioaddr + HOST_ADDRESS_REG);
1595 break;
1597 skb->dev = dev;
1598 skb_reserve(skb,2);
1600 if (lp->version == LAN595)
1601 insw(ioaddr+IO_PORT, skb_put(skb,rcv_size), (rcv_size + 3) >> 1);
1602 else { /* LAN595TX or LAN595FX, capable of 32-bit I/O processing */
1603 unsigned short temp = inb(ioaddr + INT_MASK_REG);
1604 outb(temp | IO_32_BIT, ioaddr + INT_MASK_REG);
1605 insl(ioaddr+IO_PORT_32_BIT, skb_put(skb,rcv_size),
1606 (rcv_size + 3) >> 2);
1607 outb(temp & ~(IO_32_BIT), ioaddr + INT_MASK_REG);
1610 skb->protocol = eth_type_trans(skb,dev);
1611 netif_rx(skb);
1612 dev->last_rx = jiffies;
1613 lp->stats.rx_packets++;
1616 else { /* Not sure will ever reach here,
1617 I set the 595 to discard bad received frames */
1618 lp->stats.rx_errors++;
1620 if (rcv_status & 0x0100)
1621 lp->stats.rx_over_errors++;
1623 else if (rcv_status & 0x0400)
1624 lp->stats.rx_frame_errors++;
1626 else if (rcv_status & 0x0800)
1627 lp->stats.rx_crc_errors++;
1629 printk(KERN_DEBUG "%s: event = %#x, status = %#x, next = %#x, size = %#x\n",
1630 dev->name, rcv_event, rcv_status, rcv_next_frame, rcv_size);
1633 if (rcv_status & 0x1000)
1634 lp->stats.rx_length_errors++;
1636 rcv_car = lp->rx_start + RCV_HEADER + rcv_size;
1637 lp->rx_start = rcv_next_frame;
1639 if (--boguscount == 0)
1640 break;
1642 outw(rcv_next_frame, ioaddr + HOST_ADDRESS_REG);
1643 rcv_event = inw(ioaddr + IO_PORT);
1646 if (rcv_car == 0)
1647 rcv_car = lp->rcv_upper_limit | 0xff;
1649 outw(rcv_car - 1, ioaddr + RCV_STOP);
1651 if (net_debug > 5)
1652 printk(KERN_DEBUG "%s: exiting eepro_rx routine.\n", dev->name);
1655 static void
1656 eepro_transmit_interrupt(struct net_device *dev)
1658 struct eepro_local *lp = netdev_priv(dev);
1659 short ioaddr = dev->base_addr;
1660 short boguscount = 25;
1661 short xmt_status;
1663 while ((lp->tx_start != lp->tx_end) && boguscount--) {
1665 outw(lp->tx_start, ioaddr + HOST_ADDRESS_REG);
1666 xmt_status = inw(ioaddr+IO_PORT);
1668 if (!(xmt_status & TX_DONE_BIT))
1669 break;
1671 xmt_status = inw(ioaddr+IO_PORT);
1672 lp->tx_start = inw(ioaddr+IO_PORT);
1674 netif_wake_queue (dev);
1676 if (xmt_status & TX_OK)
1677 lp->stats.tx_packets++;
1678 else {
1679 lp->stats.tx_errors++;
1680 if (xmt_status & 0x0400) {
1681 lp->stats.tx_carrier_errors++;
1682 printk(KERN_DEBUG "%s: carrier error\n",
1683 dev->name);
1684 printk(KERN_DEBUG "%s: XMT status = %#x\n",
1685 dev->name, xmt_status);
1687 else {
1688 printk(KERN_DEBUG "%s: XMT status = %#x\n",
1689 dev->name, xmt_status);
1690 printk(KERN_DEBUG "%s: XMT status = %#x\n",
1691 dev->name, xmt_status);
1694 if (xmt_status & 0x000f) {
1695 lp->stats.collisions += (xmt_status & 0x000f);
1698 if ((xmt_status & 0x0040) == 0x0) {
1699 lp->stats.tx_heartbeat_errors++;
1704 #ifdef MODULE
1706 #define MAX_EEPRO 8
1707 static struct net_device *dev_eepro[MAX_EEPRO];
1709 static int io[MAX_EEPRO];
1710 static int irq[MAX_EEPRO];
1711 static int mem[MAX_EEPRO] = { /* Size of the rx buffer in KB */
1712 [0 ... MAX_EEPRO-1] = RCV_DEFAULT_RAM/1024
1714 static int autodetect;
1716 static int n_eepro;
1717 /* For linux 2.1.xx */
1719 MODULE_AUTHOR("Pascal Dupuis, and aris@cathedrallabs.org");
1720 MODULE_DESCRIPTION("Intel i82595 ISA EtherExpressPro10/10+ driver");
1721 MODULE_LICENSE("GPL");
1723 MODULE_PARM(io, "1-" __MODULE_STRING(MAX_EEPRO) "i");
1724 MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_EEPRO) "i");
1725 MODULE_PARM(mem, "1-" __MODULE_STRING(MAX_EEPRO) "i");
1726 MODULE_PARM(autodetect, "1-" __MODULE_STRING(1) "i");
1727 MODULE_PARM_DESC(io, "EtherExpress Pro/10 I/O base addres(es)");
1728 MODULE_PARM_DESC(irq, "EtherExpress Pro/10 IRQ number(s)");
1729 MODULE_PARM_DESC(mem, "EtherExpress Pro/10 Rx buffer size(es) in kB (3-29)");
1730 MODULE_PARM_DESC(autodetect, "EtherExpress Pro/10 force board(s) detection (0-1)");
1733 init_module(void)
1735 struct net_device *dev;
1736 int i;
1737 if (io[0] == 0 && autodetect == 0) {
1738 printk(KERN_WARNING "eepro_init_module: Probe is very dangerous in ISA boards!\n");
1739 printk(KERN_WARNING "eepro_init_module: Please add \"autodetect=1\" to force probe\n");
1740 return 1;
1742 else if (autodetect) {
1743 /* if autodetect is set then we must force detection */
1744 io[0] = 0;
1746 printk(KERN_INFO "eepro_init_module: Auto-detecting boards (May God protect us...)\n");
1749 for (i = 0; i < MAX_EEPRO; i++) {
1750 dev = alloc_etherdev(sizeof(struct eepro_local));
1751 if (!dev)
1752 break;
1754 dev->mem_end = mem[i];
1755 dev->base_addr = io[i];
1756 dev->irq = irq[i];
1758 if (do_eepro_probe(dev) == 0) {
1759 if (register_netdev(dev) == 0) {
1760 dev_eepro[n_eepro++] = dev;
1761 continue;
1763 release_region(dev->base_addr, EEPRO_IO_EXTENT);
1765 free_netdev(dev);
1766 break;
1769 if (n_eepro)
1770 printk(KERN_INFO "%s", version);
1772 return n_eepro ? 0 : -ENODEV;
1775 void
1776 cleanup_module(void)
1778 int i;
1780 for (i=0; i<n_eepro; i++) {
1781 struct net_device *dev = dev_eepro[i];
1782 unregister_netdev(dev);
1783 release_region(dev->base_addr, EEPRO_IO_EXTENT);
1784 free_netdev(dev);
1787 #endif /* MODULE */