Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6
[linux-2.6] / drivers / net / tulip / xircom_tulip_cb.c
1 /* xircom_tulip_cb.c: A Xircom CBE-100 ethernet driver for Linux. */
2 /*
3         Written/copyright 1994-1999 by Donald Becker.
4
5         This software may be used and distributed according to the terms
6         of the GNU General Public License, incorporated herein by reference.
7
8         The author may be reached as becker@scyld.com, or C/O
9         Scyld Computing Corporation
10         410 Severn Ave., Suite 210
11         Annapolis MD 21403
12
13 */
14
15 #define DRV_NAME        "xircom_tulip_cb"
16 #define DRV_VERSION     "0.92"
17 #define DRV_RELDATE     "June 27, 2006"
18
19 /* A few user-configurable values. */
20
21 #define xircom_debug debug
22 #ifdef XIRCOM_DEBUG
23 static int xircom_debug = XIRCOM_DEBUG;
24 #else
25 static int xircom_debug = 1;
26 #endif
27
28 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
29 static int max_interrupt_work = 25;
30
31 #define MAX_UNITS 4
32 /* Used to pass the full-duplex flag, etc. */
33 static int full_duplex[MAX_UNITS];
34 static int options[MAX_UNITS];
35 static int mtu[MAX_UNITS];                      /* Jumbo MTU for interfaces. */
36
37 /* Keep the ring sizes a power of two for efficiency.
38    Making the Tx ring too large decreases the effectiveness of channel
39    bonding and packet priority.
40    There are no ill effects from too-large receive rings. */
41 #define TX_RING_SIZE    16
42 #define RX_RING_SIZE    32
43
44 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
45 #ifdef __alpha__
46 static int rx_copybreak = 1518;
47 #else
48 static int rx_copybreak = 100;
49 #endif
50
51 /*
52   Set the bus performance register.
53         Typical: Set 16 longword cache alignment, no burst limit.
54         Cache alignment bits 15:14           Burst length 13:8
55                 0000    No alignment  0x00000000 unlimited              0800 8 longwords
56                 4000    8  longwords            0100 1 longword         1000 16 longwords
57                 8000    16 longwords            0200 2 longwords        2000 32 longwords
58                 C000    32  longwords           0400 4 longwords
59         Warning: many older 486 systems are broken and require setting 0x00A04800
60            8 longword cache alignment, 8 longword burst.
61         ToDo: Non-Intel setting could be better.
62 */
63
64 #if defined(__alpha__) || defined(__ia64__) || defined(__x86_64__)
65 static int csr0 = 0x01A00000 | 0xE000;
66 #elif defined(__powerpc__)
67 static int csr0 = 0x01B00000 | 0x8000;
68 #elif defined(CONFIG_SPARC)
69 static int csr0 = 0x01B00080 | 0x8000;
70 #elif defined(__i386__)
71 static int csr0 = 0x01A00000 | 0x8000;
72 #else
73 #warning Processor architecture undefined!
74 static int csr0 = 0x00A00000 | 0x4800;
75 #endif
76
77 /* Operational parameters that usually are not changed. */
78 /* Time in jiffies before concluding the transmitter is hung. */
79 #define TX_TIMEOUT              (4 * HZ)
80 #define PKT_BUF_SZ              1536                    /* Size of each temporary Rx buffer.*/
81 #define PKT_SETUP_SZ            192                     /* Size of the setup frame */
82
83 /* PCI registers */
84 #define PCI_POWERMGMT   0x40
85
86 #include <linux/module.h>
87 #include <linux/moduleparam.h>
88 #include <linux/kernel.h>
89 #include <linux/pci.h>
90 #include <linux/netdevice.h>
91 #include <linux/etherdevice.h>
92 #include <linux/delay.h>
93 #include <linux/init.h>
94 #include <linux/mii.h>
95 #include <linux/ethtool.h>
96 #include <linux/crc32.h>
97
98 #include <asm/io.h>
99 #include <asm/processor.h>      /* Processor type for cache alignment. */
100 #include <asm/uaccess.h>
101
102
103 /* These identify the driver base version and may not be removed. */
104 static char version[] __devinitdata =
105 KERN_INFO DRV_NAME ".c derived from tulip.c:v0.91 4/14/99 becker@scyld.com\n"
106 KERN_INFO " unofficial 2.4.x kernel port, version " DRV_VERSION ", " DRV_RELDATE "\n";
107
108 MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
109 MODULE_DESCRIPTION("Xircom CBE-100 ethernet driver");
110 MODULE_LICENSE("GPL v2");
111 MODULE_VERSION(DRV_VERSION);
112
113 module_param(debug, int, 0);
114 module_param(max_interrupt_work, int, 0);
115 module_param(rx_copybreak, int, 0);
116 module_param(csr0, int, 0);
117
118 module_param_array(options, int, NULL, 0);
119 module_param_array(full_duplex, int, NULL, 0);
120
121 #define RUN_AT(x) (jiffies + (x))
122
123 /*
124                                 Theory of Operation
125
126 I. Board Compatibility
127
128 This device driver was forked from the driver for the DECchip "Tulip",
129 Digital's single-chip ethernet controllers for PCI.  It supports Xircom's
130 almost-Tulip-compatible CBE-100 CardBus adapters.
131
132 II. Board-specific settings
133
134 PCI bus devices are configured by the system at boot time, so no jumpers
135 need to be set on the board.  The system BIOS preferably should assign the
136 PCI INTA signal to an otherwise unused system IRQ line.
137
138 III. Driver operation
139
140 IIIa. Ring buffers
141
142 The Xircom can use either ring buffers or lists of Tx and Rx descriptors.
143 This driver uses statically allocated rings of Rx and Tx descriptors, set at
144 compile time by RX/TX_RING_SIZE.  This version of the driver allocates skbuffs
145 for the Rx ring buffers at open() time and passes the skb->data field to the
146 Xircom as receive data buffers.  When an incoming frame is less than
147 RX_COPYBREAK bytes long, a fresh skbuff is allocated and the frame is
148 copied to the new skbuff.  When the incoming frame is larger, the skbuff is
149 passed directly up the protocol stack and replaced by a newly allocated
150 skbuff.
151
152 The RX_COPYBREAK value is chosen to trade-off the memory wasted by
153 using a full-sized skbuff for small frames vs. the copying costs of larger
154 frames.  For small frames the copying cost is negligible (esp. considering
155 that we are pre-loading the cache with immediately useful header
156 information).  For large frames the copying cost is non-trivial, and the
157 larger copy might flush the cache of useful data.  A subtle aspect of this
158 choice is that the Xircom only receives into longword aligned buffers, thus
159 the IP header at offset 14 isn't longword aligned for further processing.
160 Copied frames are put into the new skbuff at an offset of "+2", thus copying
161 has the beneficial effect of aligning the IP header and preloading the
162 cache.
163
164 IIIC. Synchronization
165 The driver runs as two independent, single-threaded flows of control.  One
166 is the send-packet routine, which enforces single-threaded use by the
167 dev->tbusy flag.  The other thread is the interrupt handler, which is single
168 threaded by the hardware and other software.
169
170 The send packet thread has partial control over the Tx ring and 'dev->tbusy'
171 flag.  It sets the tbusy flag whenever it's queuing a Tx packet. If the next
172 queue slot is empty, it clears the tbusy flag when finished otherwise it sets
173 the 'tp->tx_full' flag.
174
175 The interrupt handler has exclusive control over the Rx ring and records stats
176 from the Tx ring.  (The Tx-done interrupt can't be selectively turned off, so
177 we can't avoid the interrupt overhead by having the Tx routine reap the Tx
178 stats.)  After reaping the stats, it marks the queue entry as empty by setting
179 the 'base' to zero.      Iff the 'tp->tx_full' flag is set, it clears both the
180 tx_full and tbusy flags.
181
182 IV. Notes
183
184 IVb. References
185
186 http://cesdis.gsfc.nasa.gov/linux/misc/NWay.html
187 http://www.digital.com  (search for current 21*4* datasheets and "21X4 SROM")
188 http://www.national.com/pf/DP/DP83840A.html
189
190 IVc. Errata
191
192 */
193
194 /* A full-duplex map for media types. */
195 enum MediaIs {
196         MediaIsFD = 1, MediaAlwaysFD=2, MediaIsMII=4, MediaIsFx=8,
197         MediaIs100=16};
198 static const char media_cap[] =
199 {0,0,0,16,  3,19,16,24,  27,4,7,5, 0,20,23,20 };
200
201 /* Offsets to the Command and Status Registers, "CSRs".  All accesses
202    must be longword instructions and quadword aligned. */
203 enum xircom_offsets {
204         CSR0=0,    CSR1=0x08, CSR2=0x10, CSR3=0x18, CSR4=0x20, CSR5=0x28,
205         CSR6=0x30, CSR7=0x38, CSR8=0x40, CSR9=0x48, CSR10=0x50, CSR11=0x58,
206         CSR12=0x60, CSR13=0x68, CSR14=0x70, CSR15=0x78, CSR16=0x04, };
207
208 /* The bits in the CSR5 status registers, mostly interrupt sources. */
209 enum status_bits {
210         LinkChange=0x08000000,
211         NormalIntr=0x10000, NormalIntrMask=0x00014045,
212         AbnormalIntr=0x8000, AbnormalIntrMask=0x0a00a5a2,
213         ReservedIntrMask=0xe0001a18,
214         EarlyRxIntr=0x4000, BusErrorIntr=0x2000,
215         EarlyTxIntr=0x400, RxDied=0x100, RxNoBuf=0x80, RxIntr=0x40,
216         TxFIFOUnderflow=0x20, TxNoBuf=0x04, TxDied=0x02, TxIntr=0x01,
217 };
218
219 enum csr0_control_bits {
220         EnableMWI=0x01000000, EnableMRL=0x00800000,
221         EnableMRM=0x00200000, EqualBusPrio=0x02,
222         SoftwareReset=0x01,
223 };
224
225 enum csr6_control_bits {
226         ReceiveAllBit=0x40000000, AllMultiBit=0x80, PromiscBit=0x40,
227         HashFilterBit=0x01, FullDuplexBit=0x0200,
228         TxThresh10=0x400000, TxStoreForw=0x200000,
229         TxThreshMask=0xc000, TxThreshShift=14,
230         EnableTx=0x2000, EnableRx=0x02,
231         ReservedZeroMask=0x8d930134, ReservedOneMask=0x320c0000,
232         EnableTxRx=(EnableTx | EnableRx),
233 };
234
235
236 enum tbl_flag {
237         HAS_MII=1, HAS_ACPI=2,
238 };
239 static struct xircom_chip_table {
240         char *chip_name;
241         int valid_intrs;                        /* CSR7 interrupt enable settings */
242         int flags;
243 } xircom_tbl[] = {
244   { "Xircom Cardbus Adapter",
245         LinkChange | NormalIntr | AbnormalIntr | BusErrorIntr |
246         RxDied | RxNoBuf | RxIntr | TxFIFOUnderflow | TxNoBuf | TxDied | TxIntr,
247         HAS_MII | HAS_ACPI, },
248   { NULL, },
249 };
250 /* This matches the table above. */
251 enum chips {
252         X3201_3,
253 };
254
255
256 /* The Xircom Rx and Tx buffer descriptors. */
257 struct xircom_rx_desc {
258         s32 status;
259         s32 length;
260         u32 buffer1, buffer2;
261 };
262
263 struct xircom_tx_desc {
264         s32 status;
265         s32 length;
266         u32 buffer1, buffer2;                           /* We use only buffer 1.  */
267 };
268
269 enum tx_desc0_status_bits {
270         Tx0DescOwned=0x80000000, Tx0DescError=0x8000, Tx0NoCarrier=0x0800,
271         Tx0LateColl=0x0200, Tx0ManyColl=0x0100, Tx0Underflow=0x02,
272 };
273 enum tx_desc1_status_bits {
274         Tx1ComplIntr=0x80000000, Tx1LastSeg=0x40000000, Tx1FirstSeg=0x20000000,
275         Tx1SetupPkt=0x08000000, Tx1DisableCRC=0x04000000, Tx1RingWrap=0x02000000,
276         Tx1ChainDesc=0x01000000, Tx1NoPad=0x800000, Tx1HashSetup=0x400000,
277         Tx1WholePkt=(Tx1FirstSeg | Tx1LastSeg),
278 };
279 enum rx_desc0_status_bits {
280         Rx0DescOwned=0x80000000, Rx0DescError=0x8000, Rx0NoSpace=0x4000,
281         Rx0Runt=0x0800, Rx0McastPkt=0x0400, Rx0FirstSeg=0x0200, Rx0LastSeg=0x0100,
282         Rx0HugeFrame=0x80, Rx0CRCError=0x02,
283         Rx0WholePkt=(Rx0FirstSeg | Rx0LastSeg),
284 };
285 enum rx_desc1_status_bits {
286         Rx1RingWrap=0x02000000, Rx1ChainDesc=0x01000000,
287 };
288
289 struct xircom_private {
290         struct xircom_rx_desc rx_ring[RX_RING_SIZE];
291         struct xircom_tx_desc tx_ring[TX_RING_SIZE];
292         /* The saved address of a sent-in-place packet/buffer, for skfree(). */
293         struct sk_buff* tx_skbuff[TX_RING_SIZE];
294
295         /* The X3201-3 requires 4-byte aligned tx bufs */
296         struct sk_buff* tx_aligned_skbuff[TX_RING_SIZE];
297
298         /* The addresses of receive-in-place skbuffs. */
299         struct sk_buff* rx_skbuff[RX_RING_SIZE];
300         u16 setup_frame[PKT_SETUP_SZ / sizeof(u16)];    /* Pseudo-Tx frame to init address table. */
301         int chip_id;
302         struct net_device_stats stats;
303         unsigned int cur_rx, cur_tx;            /* The next free ring entry */
304         unsigned int dirty_rx, dirty_tx;        /* The ring entries to be free()ed. */
305         unsigned int tx_full:1;                         /* The Tx queue is full. */
306         unsigned int speed100:1;
307         unsigned int full_duplex:1;                     /* Full-duplex operation requested. */
308         unsigned int autoneg:1;
309         unsigned int default_port:4;            /* Last dev->if_port value. */
310         unsigned int open:1;
311         unsigned int csr0;                                      /* CSR0 setting. */
312         unsigned int csr6;                                      /* Current CSR6 control settings. */
313         u16 to_advertise;                                       /* NWay capabilities advertised.  */
314         u16 advertising[4];
315         signed char phys[4], mii_cnt;           /* MII device addresses. */
316         int saved_if_port;
317         struct pci_dev *pdev;
318         spinlock_t lock;
319 };
320
321 static int mdio_read(struct net_device *dev, int phy_id, int location);
322 static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
323 static void xircom_up(struct net_device *dev);
324 static void xircom_down(struct net_device *dev);
325 static int xircom_open(struct net_device *dev);
326 static void xircom_tx_timeout(struct net_device *dev);
327 static void xircom_init_ring(struct net_device *dev);
328 static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev);
329 static int xircom_rx(struct net_device *dev);
330 static void xircom_media_change(struct net_device *dev);
331 static irqreturn_t xircom_interrupt(int irq, void *dev_instance);
332 static int xircom_close(struct net_device *dev);
333 static struct net_device_stats *xircom_get_stats(struct net_device *dev);
334 static int xircom_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
335 static void set_rx_mode(struct net_device *dev);
336 static void check_duplex(struct net_device *dev);
337 static const struct ethtool_ops ops;
338
339
340 /* The Xircom cards are picky about when certain bits in CSR6 can be
341    manipulated.  Keith Owens <kaos@ocs.com.au>. */
342 static void outl_CSR6(u32 newcsr6, long ioaddr)
343 {
344         const int strict_bits =
345                 TxThresh10 | TxStoreForw | TxThreshMask | EnableTxRx | FullDuplexBit;
346     int csr5, csr5_22_20, csr5_19_17, currcsr6, attempts = 200;
347     unsigned long flags;
348     save_flags(flags);
349     cli();
350         /* mask out the reserved bits that always read 0 on the Xircom cards */
351         newcsr6 &= ~ReservedZeroMask;
352         /* or in the reserved bits that always read 1 */
353         newcsr6 |= ReservedOneMask;
354     currcsr6 = inl(ioaddr + CSR6);
355     if (((newcsr6 & strict_bits) == (currcsr6 & strict_bits)) ||
356         ((currcsr6 & ~EnableTxRx) == 0)) {
357                 outl(newcsr6, ioaddr + CSR6);   /* safe */
358                 restore_flags(flags);
359                 return;
360     }
361     /* make sure the transmitter and receiver are stopped first */
362     currcsr6 &= ~EnableTxRx;
363     while (1) {
364                 csr5 = inl(ioaddr + CSR5);
365                 if (csr5 == 0xffffffff)
366                         break;  /* cannot read csr5, card removed? */
367                 csr5_22_20 = csr5 & 0x700000;
368                 csr5_19_17 = csr5 & 0x0e0000;
369                 if ((csr5_22_20 == 0 || csr5_22_20 == 0x600000) &&
370                         (csr5_19_17 == 0 || csr5_19_17 == 0x80000 || csr5_19_17 == 0xc0000))
371                         break;  /* both are stopped or suspended */
372                 if (!--attempts) {
373                         printk(KERN_INFO DRV_NAME ": outl_CSR6 too many attempts,"
374                                    "csr5=0x%08x\n", csr5);
375                         outl(newcsr6, ioaddr + CSR6);  /* unsafe but do it anyway */
376                         restore_flags(flags);
377                         return;
378                 }
379                 outl(currcsr6, ioaddr + CSR6);
380                 udelay(1);
381     }
382     /* now it is safe to change csr6 */
383     outl(newcsr6, ioaddr + CSR6);
384     restore_flags(flags);
385 }
386
387
388 static void __devinit read_mac_address(struct net_device *dev)
389 {
390         long ioaddr = dev->base_addr;
391         int i, j;
392         unsigned char tuple, link, data_id, data_count;
393
394         /* Xircom has its address stored in the CIS;
395          * we access it through the boot rom interface for now
396          * this might not work, as the CIS is not parsed but I
397          * (danilo) use the offset I found on my card's CIS !!!
398          *
399          * Doug Ledford: I changed this routine around so that it
400          * walks the CIS memory space, parsing the config items, and
401          * finds the proper lan_node_id tuple and uses the data
402          * stored there.
403          */
404         outl(1 << 12, ioaddr + CSR9); /* enable boot rom access */
405         for (i = 0x100; i < 0x1f7; i += link+2) {
406                 outl(i, ioaddr + CSR10);
407                 tuple = inl(ioaddr + CSR9) & 0xff;
408                 outl(i + 1, ioaddr + CSR10);
409                 link = inl(ioaddr + CSR9) & 0xff;
410                 outl(i + 2, ioaddr + CSR10);
411                 data_id = inl(ioaddr + CSR9) & 0xff;
412                 outl(i + 3, ioaddr + CSR10);
413                 data_count = inl(ioaddr + CSR9) & 0xff;
414                 if ( (tuple == 0x22) &&
415                          (data_id == 0x04) && (data_count == 0x06) ) {
416                         /*
417                          * This is it.  We have the data we want.
418                          */
419                         for (j = 0; j < 6; j++) {
420                                 outl(i + j + 4, ioaddr + CSR10);
421                                 dev->dev_addr[j] = inl(ioaddr + CSR9) & 0xff;
422                         }
423                         break;
424                 } else if (link == 0) {
425                         break;
426                 }
427         }
428 }
429
430
431 /*
432  * locate the MII interfaces and initialize them.
433  * we disable full-duplex modes here,
434  * because we don't know how to handle them.
435  */
436 static void find_mii_transceivers(struct net_device *dev)
437 {
438         struct xircom_private *tp = netdev_priv(dev);
439         int phy, phy_idx;
440
441         if (media_cap[tp->default_port] & MediaIsMII) {
442                 u16 media2advert[] = { 0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200 };
443                 tp->to_advertise = media2advert[tp->default_port - 9];
444         } else
445                 tp->to_advertise =
446                         /*ADVERTISE_100BASE4 | ADVERTISE_100FULL |*/ ADVERTISE_100HALF |
447                         /*ADVERTISE_10FULL |*/ ADVERTISE_10HALF | ADVERTISE_CSMA;
448
449         /* Find the connected MII xcvrs.
450            Doing this in open() would allow detecting external xcvrs later,
451            but takes much time. */
452         for (phy = 0, phy_idx = 0; phy < 32 && phy_idx < sizeof(tp->phys); phy++) {
453                 int mii_status = mdio_read(dev, phy, MII_BMSR);
454                 if ((mii_status & (BMSR_100BASE4 | BMSR_100HALF | BMSR_10HALF)) == BMSR_100BASE4 ||
455                         ((mii_status & BMSR_100BASE4) == 0 &&
456                          (mii_status & (BMSR_100FULL | BMSR_100HALF | BMSR_10FULL | BMSR_10HALF)) != 0)) {
457                         int mii_reg0 = mdio_read(dev, phy, MII_BMCR);
458                         int mii_advert = mdio_read(dev, phy, MII_ADVERTISE);
459                         int reg4 = ((mii_status >> 6) & tp->to_advertise) | ADVERTISE_CSMA;
460                         tp->phys[phy_idx] = phy;
461                         tp->advertising[phy_idx++] = reg4;
462                         printk(KERN_INFO "%s:  MII transceiver #%d "
463                                    "config %4.4x status %4.4x advertising %4.4x.\n",
464                                    dev->name, phy, mii_reg0, mii_status, mii_advert);
465                 }
466         }
467         tp->mii_cnt = phy_idx;
468         if (phy_idx == 0) {
469                 printk(KERN_INFO "%s: ***WARNING***: No MII transceiver found!\n",
470                            dev->name);
471                 tp->phys[0] = 0;
472         }
473 }
474
475
476 /*
477  * To quote Arjan van de Ven:
478  *   transceiver_voodoo() enables the external UTP plug thingy.
479  *   it's called voodoo as I stole this code and cannot cross-reference
480  *   it with the specification.
481  * Actually it seems to go like this:
482  * - GPIO2 enables the MII itself so we can talk to it. The MII gets reset
483  *   so any prior MII settings are lost.
484  * - GPIO0 enables the TP port so the MII can talk to the network.
485  * - a software reset will reset both GPIO pins.
486  * I also moved the software reset here, because doing it in xircom_up()
487  * required enabling the GPIO pins each time, which reset the MII each time.
488  * Thus we couldn't control the MII -- which sucks because we don't know
489  * how to handle full-duplex modes so we *must* disable them.
490  */
491 static void transceiver_voodoo(struct net_device *dev)
492 {
493         struct xircom_private *tp = netdev_priv(dev);
494         long ioaddr = dev->base_addr;
495
496         /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
497         outl(SoftwareReset, ioaddr + CSR0);
498         udelay(2);
499
500         /* Deassert reset. */
501         outl(tp->csr0, ioaddr + CSR0);
502
503         /* Reset the xcvr interface and turn on heartbeat. */
504         outl(0x0008, ioaddr + CSR15);
505         udelay(5);  /* The delays are Xircom-recommended to give the
506                                  * chipset time to reset the actual hardware
507                                  * on the PCMCIA card
508                                  */
509         outl(0xa8050000, ioaddr + CSR15);
510         udelay(5);
511         outl(0xa00f0000, ioaddr + CSR15);
512         udelay(5);
513
514         outl_CSR6(0, ioaddr);
515         //outl_CSR6(FullDuplexBit, ioaddr);
516 }
517
518
519 static int __devinit xircom_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
520 {
521         struct net_device *dev;
522         struct xircom_private *tp;
523         static int board_idx = -1;
524         int chip_idx = id->driver_data;
525         long ioaddr;
526         int i;
527
528 /* when built into the kernel, we only print version if device is found */
529 #ifndef MODULE
530         static int printed_version;
531         if (!printed_version++)
532                 printk(version);
533 #endif
534
535         //printk(KERN_INFO "xircom_init_one(%s)\n", pci_name(pdev));
536
537         board_idx++;
538
539         if (pci_enable_device(pdev))
540                 return -ENODEV;
541
542         pci_set_master(pdev);
543
544         ioaddr = pci_resource_start(pdev, 0);
545         dev = alloc_etherdev(sizeof(*tp));
546         if (!dev) {
547                 printk (KERN_ERR DRV_NAME "%d: cannot alloc etherdev, aborting\n", board_idx);
548                 return -ENOMEM;
549         }
550         SET_MODULE_OWNER(dev);
551         SET_NETDEV_DEV(dev, &pdev->dev);
552
553         dev->base_addr = ioaddr;
554         dev->irq = pdev->irq;
555
556         if (pci_request_regions(pdev, dev->name)) {
557                 printk (KERN_ERR DRV_NAME " %d: cannot reserve PCI resources, aborting\n", board_idx);
558                 goto err_out_free_netdev;
559         }
560
561         /* Bring the chip out of sleep mode.
562            Caution: Snooze mode does not work with some boards! */
563         if (xircom_tbl[chip_idx].flags & HAS_ACPI)
564                 pci_write_config_dword(pdev, PCI_POWERMGMT, 0);
565
566         /* Stop the chip's Tx and Rx processes. */
567         outl_CSR6(inl(ioaddr + CSR6) & ~EnableTxRx, ioaddr);
568         /* Clear the missed-packet counter. */
569         (volatile int)inl(ioaddr + CSR8);
570
571         tp = netdev_priv(dev);
572
573         spin_lock_init(&tp->lock);
574         tp->pdev = pdev;
575         tp->chip_id = chip_idx;
576         /* BugFixes: The 21143-TD hangs with PCI Write-and-Invalidate cycles. */
577         /* XXX: is this necessary for Xircom? */
578         tp->csr0 = csr0 & ~EnableMWI;
579
580         pci_set_drvdata(pdev, dev);
581
582         /* The lower four bits are the media type. */
583         if (board_idx >= 0 && board_idx < MAX_UNITS) {
584                 tp->default_port = options[board_idx] & 15;
585                 if ((options[board_idx] & 0x90) || full_duplex[board_idx] > 0)
586                         tp->full_duplex = 1;
587                 if (mtu[board_idx] > 0)
588                         dev->mtu = mtu[board_idx];
589         }
590         if (dev->mem_start)
591                 tp->default_port = dev->mem_start;
592         if (tp->default_port) {
593                 if (media_cap[tp->default_port] & MediaAlwaysFD)
594                         tp->full_duplex = 1;
595         }
596         if (tp->full_duplex)
597                 tp->autoneg = 0;
598         else
599                 tp->autoneg = 1;
600         tp->speed100 = 1;
601
602         /* The Xircom-specific entries in the device structure. */
603         dev->open = &xircom_open;
604         dev->hard_start_xmit = &xircom_start_xmit;
605         dev->stop = &xircom_close;
606         dev->get_stats = &xircom_get_stats;
607         dev->do_ioctl = &xircom_ioctl;
608 #ifdef HAVE_MULTICAST
609         dev->set_multicast_list = &set_rx_mode;
610 #endif
611         dev->tx_timeout = xircom_tx_timeout;
612         dev->watchdog_timeo = TX_TIMEOUT;
613         SET_ETHTOOL_OPS(dev, &ops);
614
615         transceiver_voodoo(dev);
616
617         read_mac_address(dev);
618
619         if (register_netdev(dev))
620                 goto err_out_cleardev;
621
622         printk(KERN_INFO "%s: %s rev %d at %#3lx,",
623                dev->name, xircom_tbl[chip_idx].chip_name, pdev->revision, ioaddr);
624         for (i = 0; i < 6; i++)
625                 printk("%c%2.2X", i ? ':' : ' ', dev->dev_addr[i]);
626         printk(", IRQ %d.\n", dev->irq);
627
628         if (xircom_tbl[chip_idx].flags & HAS_MII) {
629                 find_mii_transceivers(dev);
630                 check_duplex(dev);
631         }
632
633         return 0;
634
635 err_out_cleardev:
636         pci_set_drvdata(pdev, NULL);
637         pci_release_regions(pdev);
638 err_out_free_netdev:
639         free_netdev(dev);
640         return -ENODEV;
641 }
642
643
644 /* MII transceiver control section.
645    Read and write the MII registers using software-generated serial
646    MDIO protocol.  See the MII specifications or DP83840A data sheet
647    for details. */
648
649 /* The maximum data clock rate is 2.5 Mhz.  The minimum timing is usually
650    met by back-to-back PCI I/O cycles, but we insert a delay to avoid
651    "overclocking" issues or future 66Mhz PCI. */
652 #define mdio_delay() inl(mdio_addr)
653
654 /* Read and write the MII registers using software-generated serial
655    MDIO protocol.  It is just different enough from the EEPROM protocol
656    to not share code.  The maxium data clock rate is 2.5 Mhz. */
657 #define MDIO_SHIFT_CLK  0x10000
658 #define MDIO_DATA_WRITE0 0x00000
659 #define MDIO_DATA_WRITE1 0x20000
660 #define MDIO_ENB                0x00000         /* Ignore the 0x02000 databook setting. */
661 #define MDIO_ENB_IN             0x40000
662 #define MDIO_DATA_READ  0x80000
663
664 static int mdio_read(struct net_device *dev, int phy_id, int location)
665 {
666         int i;
667         int read_cmd = (0xf6 << 10) | (phy_id << 5) | location;
668         int retval = 0;
669         long ioaddr = dev->base_addr;
670         long mdio_addr = ioaddr + CSR9;
671
672         /* Establish sync by sending at least 32 logic ones. */
673         for (i = 32; i >= 0; i--) {
674                 outl(MDIO_ENB | MDIO_DATA_WRITE1, mdio_addr);
675                 mdio_delay();
676                 outl(MDIO_ENB | MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, mdio_addr);
677                 mdio_delay();
678         }
679         /* Shift the read command bits out. */
680         for (i = 15; i >= 0; i--) {
681                 int dataval = (read_cmd & (1 << i)) ? MDIO_DATA_WRITE1 : 0;
682
683                 outl(MDIO_ENB | dataval, mdio_addr);
684                 mdio_delay();
685                 outl(MDIO_ENB | dataval | MDIO_SHIFT_CLK, mdio_addr);
686                 mdio_delay();
687         }
688         /* Read the two transition, 16 data, and wire-idle bits. */
689         for (i = 19; i > 0; i--) {
690                 outl(MDIO_ENB_IN, mdio_addr);
691                 mdio_delay();
692                 retval = (retval << 1) | ((inl(mdio_addr) & MDIO_DATA_READ) ? 1 : 0);
693                 outl(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr);
694                 mdio_delay();
695         }
696         return (retval>>1) & 0xffff;
697 }
698
699
700 static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
701 {
702         int i;
703         int cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
704         long ioaddr = dev->base_addr;
705         long mdio_addr = ioaddr + CSR9;
706
707         /* Establish sync by sending 32 logic ones. */
708         for (i = 32; i >= 0; i--) {
709                 outl(MDIO_ENB | MDIO_DATA_WRITE1, mdio_addr);
710                 mdio_delay();
711                 outl(MDIO_ENB | MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, mdio_addr);
712                 mdio_delay();
713         }
714         /* Shift the command bits out. */
715         for (i = 31; i >= 0; i--) {
716                 int dataval = (cmd & (1 << i)) ? MDIO_DATA_WRITE1 : 0;
717                 outl(MDIO_ENB | dataval, mdio_addr);
718                 mdio_delay();
719                 outl(MDIO_ENB | dataval | MDIO_SHIFT_CLK, mdio_addr);
720                 mdio_delay();
721         }
722         /* Clear out extra bits. */
723         for (i = 2; i > 0; i--) {
724                 outl(MDIO_ENB_IN, mdio_addr);
725                 mdio_delay();
726                 outl(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr);
727                 mdio_delay();
728         }
729         return;
730 }
731
732
733 static void
734 xircom_up(struct net_device *dev)
735 {
736         struct xircom_private *tp = netdev_priv(dev);
737         long ioaddr = dev->base_addr;
738         int i;
739
740         xircom_init_ring(dev);
741         /* Clear the tx ring */
742         for (i = 0; i < TX_RING_SIZE; i++) {
743                 tp->tx_skbuff[i] = NULL;
744                 tp->tx_ring[i].status = 0;
745         }
746
747         if (xircom_debug > 1)
748                 printk(KERN_DEBUG "%s: xircom_up() irq %d.\n", dev->name, dev->irq);
749
750         outl(virt_to_bus(tp->rx_ring), ioaddr + CSR3);
751         outl(virt_to_bus(tp->tx_ring), ioaddr + CSR4);
752
753         tp->saved_if_port = dev->if_port;
754         if (dev->if_port == 0)
755                 dev->if_port = tp->default_port;
756
757         tp->csr6 = TxThresh10 /*| FullDuplexBit*/;                                              /* XXX: why 10 and not 100? */
758
759         set_rx_mode(dev);
760
761         /* Start the chip's Tx to process setup frame. */
762         outl_CSR6(tp->csr6, ioaddr);
763         outl_CSR6(tp->csr6 | EnableTx, ioaddr);
764
765         /* Acknowledge all outstanding interrupts sources */
766         outl(xircom_tbl[tp->chip_id].valid_intrs, ioaddr + CSR5);
767         /* Enable interrupts by setting the interrupt mask. */
768         outl(xircom_tbl[tp->chip_id].valid_intrs, ioaddr + CSR7);
769         /* Enable Rx */
770         outl_CSR6(tp->csr6 | EnableTxRx, ioaddr);
771         /* Rx poll demand */
772         outl(0, ioaddr + CSR2);
773
774         /* Tell the net layer we're ready */
775         netif_start_queue (dev);
776
777         /* Check current media state */
778         xircom_media_change(dev);
779
780         if (xircom_debug > 2) {
781                 printk(KERN_DEBUG "%s: Done xircom_up(), CSR0 %8.8x, CSR5 %8.8x CSR6 %8.8x.\n",
782                            dev->name, inl(ioaddr + CSR0), inl(ioaddr + CSR5),
783                            inl(ioaddr + CSR6));
784         }
785 }
786
787
788 static int
789 xircom_open(struct net_device *dev)
790 {
791         struct xircom_private *tp = netdev_priv(dev);
792
793         if (request_irq(dev->irq, &xircom_interrupt, IRQF_SHARED, dev->name, dev))
794                 return -EAGAIN;
795
796         xircom_up(dev);
797         tp->open = 1;
798
799         return 0;
800 }
801
802
803 static void xircom_tx_timeout(struct net_device *dev)
804 {
805         struct xircom_private *tp = netdev_priv(dev);
806         long ioaddr = dev->base_addr;
807
808         if (media_cap[dev->if_port] & MediaIsMII) {
809                 /* Do nothing -- the media monitor should handle this. */
810                 if (xircom_debug > 1)
811                         printk(KERN_WARNING "%s: Transmit timeout using MII device.\n",
812                                    dev->name);
813         }
814
815 #if defined(way_too_many_messages)
816         if (xircom_debug > 3) {
817                 int i;
818                 for (i = 0; i < RX_RING_SIZE; i++) {
819                         u8 *buf = (u8 *)(tp->rx_ring[i].buffer1);
820                         int j;
821                         printk(KERN_DEBUG "%2d: %8.8x %8.8x %8.8x %8.8x  "
822                                    "%2.2x %2.2x %2.2x.\n",
823                                    i, (unsigned int)tp->rx_ring[i].status,
824                                    (unsigned int)tp->rx_ring[i].length,
825                                    (unsigned int)tp->rx_ring[i].buffer1,
826                                    (unsigned int)tp->rx_ring[i].buffer2,
827                                    buf[0], buf[1], buf[2]);
828                         for (j = 0; buf[j] != 0xee && j < 1600; j++)
829                                 if (j < 100) printk(" %2.2x", buf[j]);
830                         printk(" j=%d.\n", j);
831                 }
832                 printk(KERN_DEBUG "  Rx ring %8.8x: ", (int)tp->rx_ring);
833                 for (i = 0; i < RX_RING_SIZE; i++)
834                         printk(" %8.8x", (unsigned int)tp->rx_ring[i].status);
835                 printk("\n" KERN_DEBUG "  Tx ring %8.8x: ", (int)tp->tx_ring);
836                 for (i = 0; i < TX_RING_SIZE; i++)
837                         printk(" %8.8x", (unsigned int)tp->tx_ring[i].status);
838                 printk("\n");
839         }
840 #endif
841
842         /* Stop and restart the chip's Tx/Rx processes . */
843         outl_CSR6(tp->csr6 | EnableRx, ioaddr);
844         outl_CSR6(tp->csr6 | EnableTxRx, ioaddr);
845         /* Trigger an immediate transmit demand. */
846         outl(0, ioaddr + CSR1);
847
848         dev->trans_start = jiffies;
849         netif_wake_queue (dev);
850         tp->stats.tx_errors++;
851 }
852
853
854 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
855 static void xircom_init_ring(struct net_device *dev)
856 {
857         struct xircom_private *tp = netdev_priv(dev);
858         int i;
859
860         tp->tx_full = 0;
861         tp->cur_rx = tp->cur_tx = 0;
862         tp->dirty_rx = tp->dirty_tx = 0;
863
864         for (i = 0; i < RX_RING_SIZE; i++) {
865                 tp->rx_ring[i].status = 0;
866                 tp->rx_ring[i].length = PKT_BUF_SZ;
867                 tp->rx_ring[i].buffer2 = virt_to_bus(&tp->rx_ring[i+1]);
868                 tp->rx_skbuff[i] = NULL;
869         }
870         /* Mark the last entry as wrapping the ring. */
871         tp->rx_ring[i-1].length = PKT_BUF_SZ | Rx1RingWrap;
872         tp->rx_ring[i-1].buffer2 = virt_to_bus(&tp->rx_ring[0]);
873
874         for (i = 0; i < RX_RING_SIZE; i++) {
875                 /* Note the receive buffer must be longword aligned.
876                    dev_alloc_skb() provides 16 byte alignment.  But do *not*
877                    use skb_reserve() to align the IP header! */
878                 struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ);
879                 tp->rx_skbuff[i] = skb;
880                 if (skb == NULL)
881                         break;
882                 skb->dev = dev;                 /* Mark as being used by this device. */
883                 tp->rx_ring[i].status = Rx0DescOwned;   /* Owned by Xircom chip */
884                 tp->rx_ring[i].buffer1 = virt_to_bus(skb->data);
885         }
886         tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
887
888         /* The Tx buffer descriptor is filled in as needed, but we
889            do need to clear the ownership bit. */
890         for (i = 0; i < TX_RING_SIZE; i++) {
891                 tp->tx_skbuff[i] = NULL;
892                 tp->tx_ring[i].status = 0;
893                 tp->tx_ring[i].buffer2 = virt_to_bus(&tp->tx_ring[i+1]);
894                 if (tp->chip_id == X3201_3)
895                         tp->tx_aligned_skbuff[i] = dev_alloc_skb(PKT_BUF_SZ);
896         }
897         tp->tx_ring[i-1].buffer2 = virt_to_bus(&tp->tx_ring[0]);
898 }
899
900
901 static int
902 xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
903 {
904         struct xircom_private *tp = netdev_priv(dev);
905         int entry;
906         u32 flag;
907
908         /* Caution: the write order is important here, set the base address
909            with the "ownership" bits last. */
910
911         /* Calculate the next Tx descriptor entry. */
912         entry = tp->cur_tx % TX_RING_SIZE;
913
914         tp->tx_skbuff[entry] = skb;
915         if (tp->chip_id == X3201_3) {
916                 skb_copy_from_linear_data(skb,
917                                           tp->tx_aligned_skbuff[entry]->data,
918                                           skb->len);
919                 tp->tx_ring[entry].buffer1 = virt_to_bus(tp->tx_aligned_skbuff[entry]->data);
920         } else
921                 tp->tx_ring[entry].buffer1 = virt_to_bus(skb->data);
922
923         if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE/2) {/* Typical path */
924                 flag = Tx1WholePkt; /* No interrupt */
925         } else if (tp->cur_tx - tp->dirty_tx == TX_RING_SIZE/2) {
926                 flag = Tx1WholePkt | Tx1ComplIntr; /* Tx-done intr. */
927         } else if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE - 2) {
928                 flag = Tx1WholePkt; /* No Tx-done intr. */
929         } else {
930                 /* Leave room for set_rx_mode() to fill entries. */
931                 flag = Tx1WholePkt | Tx1ComplIntr; /* Tx-done intr. */
932                 tp->tx_full = 1;
933         }
934         if (entry == TX_RING_SIZE - 1)
935                 flag |= Tx1WholePkt | Tx1ComplIntr | Tx1RingWrap;
936
937         tp->tx_ring[entry].length = skb->len | flag;
938         tp->tx_ring[entry].status = Tx0DescOwned;       /* Pass ownership to the chip. */
939         tp->cur_tx++;
940         if (tp->tx_full)
941                 netif_stop_queue (dev);
942         else
943                 netif_wake_queue (dev);
944
945         /* Trigger an immediate transmit demand. */
946         outl(0, dev->base_addr + CSR1);
947
948         dev->trans_start = jiffies;
949
950         return 0;
951 }
952
953
954 static void xircom_media_change(struct net_device *dev)
955 {
956         struct xircom_private *tp = netdev_priv(dev);
957         long ioaddr = dev->base_addr;
958         u16 reg0, reg1, reg4, reg5;
959         u32 csr6 = inl(ioaddr + CSR6), newcsr6;
960
961         /* reset status first */
962         mdio_read(dev, tp->phys[0], MII_BMCR);
963         mdio_read(dev, tp->phys[0], MII_BMSR);
964
965         reg0 = mdio_read(dev, tp->phys[0], MII_BMCR);
966         reg1 = mdio_read(dev, tp->phys[0], MII_BMSR);
967
968         if (reg1 & BMSR_LSTATUS) {
969                 /* link is up */
970                 if (reg0 & BMCR_ANENABLE) {
971                         /* autonegotiation is enabled */
972                         reg4 = mdio_read(dev, tp->phys[0], MII_ADVERTISE);
973                         reg5 = mdio_read(dev, tp->phys[0], MII_LPA);
974                         if (reg4 & ADVERTISE_100FULL && reg5 & LPA_100FULL) {
975                                 tp->speed100 = 1;
976                                 tp->full_duplex = 1;
977                         } else if (reg4 & ADVERTISE_100HALF && reg5 & LPA_100HALF) {
978                                 tp->speed100 = 1;
979                                 tp->full_duplex = 0;
980                         } else if (reg4 & ADVERTISE_10FULL && reg5 & LPA_10FULL) {
981                                 tp->speed100 = 0;
982                                 tp->full_duplex = 1;
983                         } else {
984                                 tp->speed100 = 0;
985                                 tp->full_duplex = 0;
986                         }
987                 } else {
988                         /* autonegotiation is disabled */
989                         if (reg0 & BMCR_SPEED100)
990                                 tp->speed100 = 1;
991                         else
992                                 tp->speed100 = 0;
993                         if (reg0 & BMCR_FULLDPLX)
994                                 tp->full_duplex = 1;
995                         else
996                                 tp->full_duplex = 0;
997                 }
998                 printk(KERN_DEBUG "%s: Link is up, running at %sMbit %s-duplex\n",
999                        dev->name,
1000                        tp->speed100 ? "100" : "10",
1001                        tp->full_duplex ? "full" : "half");
1002                 netif_carrier_on(dev);
1003                 newcsr6 = csr6 & ~FullDuplexBit;
1004                 if (tp->full_duplex)
1005                         newcsr6 |= FullDuplexBit;
1006                 if (newcsr6 != csr6)
1007                         outl_CSR6(newcsr6, ioaddr + CSR6);
1008         } else {
1009                 printk(KERN_DEBUG "%s: Link is down\n", dev->name);
1010                 netif_carrier_off(dev);
1011         }
1012 }
1013
1014
1015 static void check_duplex(struct net_device *dev)
1016 {
1017         struct xircom_private *tp = netdev_priv(dev);
1018         u16 reg0;
1019
1020         mdio_write(dev, tp->phys[0], MII_BMCR, BMCR_RESET);
1021         udelay(500);
1022         while (mdio_read(dev, tp->phys[0], MII_BMCR) & BMCR_RESET);
1023
1024         reg0 = mdio_read(dev, tp->phys[0], MII_BMCR);
1025         mdio_write(dev, tp->phys[0], MII_ADVERTISE, tp->advertising[0]);
1026
1027         if (tp->autoneg) {
1028                 reg0 &= ~(BMCR_SPEED100 | BMCR_FULLDPLX);
1029                 reg0 |= BMCR_ANENABLE | BMCR_ANRESTART;
1030         } else {
1031                 reg0 &= ~(BMCR_ANENABLE | BMCR_ANRESTART);
1032                 if (tp->speed100)
1033                         reg0 |= BMCR_SPEED100;
1034                 if (tp->full_duplex)
1035                         reg0 |= BMCR_FULLDPLX;
1036                 printk(KERN_DEBUG "%s: Link forced to %sMbit %s-duplex\n",
1037                        dev->name,
1038                        tp->speed100 ? "100" : "10",
1039                        tp->full_duplex ? "full" : "half");
1040         }
1041         mdio_write(dev, tp->phys[0], MII_BMCR, reg0);
1042 }
1043
1044
1045 /* The interrupt handler does all of the Rx thread work and cleans up
1046    after the Tx thread. */
1047 static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
1048 {
1049         struct net_device *dev = dev_instance;
1050         struct xircom_private *tp = netdev_priv(dev);
1051         long ioaddr = dev->base_addr;
1052         int csr5, work_budget = max_interrupt_work;
1053         int handled = 0;
1054
1055         spin_lock (&tp->lock);
1056
1057         do {
1058                 csr5 = inl(ioaddr + CSR5);
1059                 /* Acknowledge all of the current interrupt sources ASAP. */
1060                 outl(csr5 & 0x0001ffff, ioaddr + CSR5);
1061
1062                 if (xircom_debug > 4)
1063                         printk(KERN_DEBUG "%s: interrupt  csr5=%#8.8x new csr5=%#8.8x.\n",
1064                                    dev->name, csr5, inl(dev->base_addr + CSR5));
1065
1066                 if (csr5 == 0xffffffff)
1067                         break;  /* all bits set, assume PCMCIA card removed */
1068
1069                 if ((csr5 & (NormalIntr|AbnormalIntr)) == 0)
1070                         break;
1071
1072                 handled = 1;
1073
1074                 if (csr5 & (RxIntr | RxNoBuf))
1075                         work_budget -= xircom_rx(dev);
1076
1077                 if (csr5 & (TxNoBuf | TxDied | TxIntr)) {
1078                         unsigned int dirty_tx;
1079
1080                         for (dirty_tx = tp->dirty_tx; tp->cur_tx - dirty_tx > 0;
1081                                  dirty_tx++) {
1082                                 int entry = dirty_tx % TX_RING_SIZE;
1083                                 int status = tp->tx_ring[entry].status;
1084
1085                                 if (status < 0)
1086                                         break;                  /* It still hasn't been Txed */
1087                                 /* Check for Rx filter setup frames. */
1088                                 if (tp->tx_skbuff[entry] == NULL)
1089                                   continue;
1090
1091                                 if (status & Tx0DescError) {
1092                                         /* There was an major error, log it. */
1093 #ifndef final_version
1094                                         if (xircom_debug > 1)
1095                                                 printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",
1096                                                            dev->name, status);
1097 #endif
1098                                         tp->stats.tx_errors++;
1099                                         if (status & Tx0ManyColl) {
1100                                                 tp->stats.tx_aborted_errors++;
1101                                         }
1102                                         if (status & Tx0NoCarrier) tp->stats.tx_carrier_errors++;
1103                                         if (status & Tx0LateColl) tp->stats.tx_window_errors++;
1104                                         if (status & Tx0Underflow) tp->stats.tx_fifo_errors++;
1105                                 } else {
1106                                         tp->stats.tx_bytes += tp->tx_ring[entry].length & 0x7ff;
1107                                         tp->stats.collisions += (status >> 3) & 15;
1108                                         tp->stats.tx_packets++;
1109                                 }
1110
1111                                 /* Free the original skb. */
1112                                 dev_kfree_skb_irq(tp->tx_skbuff[entry]);
1113                                 tp->tx_skbuff[entry] = NULL;
1114                         }
1115
1116 #ifndef final_version
1117                         if (tp->cur_tx - dirty_tx > TX_RING_SIZE) {
1118                                 printk(KERN_ERR "%s: Out-of-sync dirty pointer, %d vs. %d, full=%d.\n",
1119                                            dev->name, dirty_tx, tp->cur_tx, tp->tx_full);
1120                                 dirty_tx += TX_RING_SIZE;
1121                         }
1122 #endif
1123
1124                         if (tp->tx_full &&
1125                             tp->cur_tx - dirty_tx  < TX_RING_SIZE - 2)
1126                                 /* The ring is no longer full */
1127                                 tp->tx_full = 0;
1128
1129                         if (tp->tx_full)
1130                                 netif_stop_queue (dev);
1131                         else
1132                                 netif_wake_queue (dev);
1133
1134                         tp->dirty_tx = dirty_tx;
1135                         if (csr5 & TxDied) {
1136                                 if (xircom_debug > 2)
1137                                         printk(KERN_WARNING "%s: The transmitter stopped."
1138                                                    "  CSR5 is %x, CSR6 %x, new CSR6 %x.\n",
1139                                                    dev->name, csr5, inl(ioaddr + CSR6), tp->csr6);
1140                                 outl_CSR6(tp->csr6 | EnableRx, ioaddr);
1141                                 outl_CSR6(tp->csr6 | EnableTxRx, ioaddr);
1142                         }
1143                 }
1144
1145                 /* Log errors. */
1146                 if (csr5 & AbnormalIntr) {      /* Abnormal error summary bit. */
1147                         if (csr5 & LinkChange)
1148                                 xircom_media_change(dev);
1149                         if (csr5 & TxFIFOUnderflow) {
1150                                 if ((tp->csr6 & TxThreshMask) != TxThreshMask)
1151                                         tp->csr6 += (1 << TxThreshShift);       /* Bump up the Tx threshold */
1152                                 else
1153                                         tp->csr6 |= TxStoreForw;  /* Store-n-forward. */
1154                                 /* Restart the transmit process. */
1155                                 outl_CSR6(tp->csr6 | EnableRx, ioaddr);
1156                                 outl_CSR6(tp->csr6 | EnableTxRx, ioaddr);
1157                         }
1158                         if (csr5 & RxDied) {            /* Missed a Rx frame. */
1159                                 tp->stats.rx_errors++;
1160                                 tp->stats.rx_missed_errors += inl(ioaddr + CSR8) & 0xffff;
1161                                 outl_CSR6(tp->csr6 | EnableTxRx, ioaddr);
1162                         }
1163                         /* Clear all error sources, included undocumented ones! */
1164                         outl(0x0800f7ba, ioaddr + CSR5);
1165                 }
1166                 if (--work_budget < 0) {
1167                         if (xircom_debug > 1)
1168                                 printk(KERN_WARNING "%s: Too much work during an interrupt, "
1169                                            "csr5=0x%8.8x.\n", dev->name, csr5);
1170                         /* Acknowledge all interrupt sources. */
1171                         outl(0x8001ffff, ioaddr + CSR5);
1172                         break;
1173                 }
1174         } while (1);
1175
1176         if (xircom_debug > 3)
1177                 printk(KERN_DEBUG "%s: exiting interrupt, csr5=%#4.4x.\n",
1178                            dev->name, inl(ioaddr + CSR5));
1179
1180         spin_unlock (&tp->lock);
1181         return IRQ_RETVAL(handled);
1182 }
1183
1184
1185 static int
1186 xircom_rx(struct net_device *dev)
1187 {
1188         struct xircom_private *tp = netdev_priv(dev);
1189         int entry = tp->cur_rx % RX_RING_SIZE;
1190         int rx_work_limit = tp->dirty_rx + RX_RING_SIZE - tp->cur_rx;
1191         int work_done = 0;
1192
1193         if (xircom_debug > 4)
1194                 printk(KERN_DEBUG " In xircom_rx(), entry %d %8.8x.\n", entry,
1195                            tp->rx_ring[entry].status);
1196         /* If we own the next entry, it's a new packet. Send it up. */
1197         while (tp->rx_ring[entry].status >= 0) {
1198                 s32 status = tp->rx_ring[entry].status;
1199
1200                 if (xircom_debug > 5)
1201                         printk(KERN_DEBUG " In xircom_rx(), entry %d %8.8x.\n", entry,
1202                                    tp->rx_ring[entry].status);
1203                 if (--rx_work_limit < 0)
1204                         break;
1205                 if ((status & 0x38008300) != 0x0300) {
1206                         if ((status & 0x38000300) != 0x0300) {
1207                                 /* Ignore earlier buffers. */
1208                                 if ((status & 0xffff) != 0x7fff) {
1209                                         if (xircom_debug > 1)
1210                                                 printk(KERN_WARNING "%s: Oversized Ethernet frame "
1211                                                            "spanned multiple buffers, status %8.8x!\n",
1212                                                            dev->name, status);
1213                                         tp->stats.rx_length_errors++;
1214                                 }
1215                         } else if (status & Rx0DescError) {
1216                                 /* There was a fatal error. */
1217                                 if (xircom_debug > 2)
1218                                         printk(KERN_DEBUG "%s: Receive error, Rx status %8.8x.\n",
1219                                                    dev->name, status);
1220                                 tp->stats.rx_errors++; /* end of a packet.*/
1221                                 if (status & (Rx0Runt | Rx0HugeFrame)) tp->stats.rx_length_errors++;
1222                                 if (status & Rx0CRCError) tp->stats.rx_crc_errors++;
1223                         }
1224                 } else {
1225                         /* Omit the four octet CRC from the length. */
1226                         short pkt_len = ((status >> 16) & 0x7ff) - 4;
1227                         struct sk_buff *skb;
1228
1229 #ifndef final_version
1230                         if (pkt_len > 1518) {
1231                                 printk(KERN_WARNING "%s: Bogus packet size of %d (%#x).\n",
1232                                            dev->name, pkt_len, pkt_len);
1233                                 pkt_len = 1518;
1234                                 tp->stats.rx_length_errors++;
1235                         }
1236 #endif
1237                         /* Check if the packet is long enough to accept without copying
1238                            to a minimally-sized skbuff. */
1239                         if (pkt_len < rx_copybreak
1240                                 && (skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
1241                                 skb_reserve(skb, 2);    /* 16 byte align the IP header */
1242 #if ! defined(__alpha__)
1243                                 skb_copy_to_linear_data(skb, bus_to_virt(tp->rx_ring[entry].buffer1),
1244                                                                  pkt_len);
1245                                 skb_put(skb, pkt_len);
1246 #else
1247                                 memcpy(skb_put(skb, pkt_len),
1248                                            bus_to_virt(tp->rx_ring[entry].buffer1), pkt_len);
1249 #endif
1250                                 work_done++;
1251                         } else {        /* Pass up the skb already on the Rx ring. */
1252                                 skb_put(skb = tp->rx_skbuff[entry], pkt_len);
1253                                 tp->rx_skbuff[entry] = NULL;
1254                         }
1255                         skb->protocol = eth_type_trans(skb, dev);
1256                         netif_rx(skb);
1257                         dev->last_rx = jiffies;
1258                         tp->stats.rx_packets++;
1259                         tp->stats.rx_bytes += pkt_len;
1260                 }
1261                 entry = (++tp->cur_rx) % RX_RING_SIZE;
1262         }
1263
1264         /* Refill the Rx ring buffers. */
1265         for (; tp->cur_rx - tp->dirty_rx > 0; tp->dirty_rx++) {
1266                 entry = tp->dirty_rx % RX_RING_SIZE;
1267                 if (tp->rx_skbuff[entry] == NULL) {
1268                         struct sk_buff *skb;
1269                         skb = tp->rx_skbuff[entry] = dev_alloc_skb(PKT_BUF_SZ);
1270                         if (skb == NULL)
1271                                 break;
1272                         skb->dev = dev;                 /* Mark as being used by this device. */
1273                         tp->rx_ring[entry].buffer1 = virt_to_bus(skb->data);
1274                         work_done++;
1275                 }
1276                 tp->rx_ring[entry].status = Rx0DescOwned;
1277         }
1278
1279         return work_done;
1280 }
1281
1282
1283 static void
1284 xircom_down(struct net_device *dev)
1285 {
1286         long ioaddr = dev->base_addr;
1287         struct xircom_private *tp = netdev_priv(dev);
1288
1289         /* Disable interrupts by clearing the interrupt mask. */
1290         outl(0, ioaddr + CSR7);
1291         /* Stop the chip's Tx and Rx processes. */
1292         outl_CSR6(inl(ioaddr + CSR6) & ~EnableTxRx, ioaddr);
1293
1294         if (inl(ioaddr + CSR6) != 0xffffffff)
1295                 tp->stats.rx_missed_errors += inl(ioaddr + CSR8) & 0xffff;
1296
1297         dev->if_port = tp->saved_if_port;
1298 }
1299
1300
1301 static int
1302 xircom_close(struct net_device *dev)
1303 {
1304         long ioaddr = dev->base_addr;
1305         struct xircom_private *tp = netdev_priv(dev);
1306         int i;
1307
1308         if (xircom_debug > 1)
1309                 printk(KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
1310                            dev->name, inl(ioaddr + CSR5));
1311
1312         netif_stop_queue(dev);
1313
1314         if (netif_device_present(dev))
1315                 xircom_down(dev);
1316
1317         free_irq(dev->irq, dev);
1318
1319         /* Free all the skbuffs in the Rx queue. */
1320         for (i = 0; i < RX_RING_SIZE; i++) {
1321                 struct sk_buff *skb = tp->rx_skbuff[i];
1322                 tp->rx_skbuff[i] = NULL;
1323                 tp->rx_ring[i].status = 0;              /* Not owned by Xircom chip. */
1324                 tp->rx_ring[i].length = 0;
1325                 tp->rx_ring[i].buffer1 = 0xBADF00D0; /* An invalid address. */
1326                 if (skb) {
1327                         dev_kfree_skb(skb);
1328                 }
1329         }
1330         for (i = 0; i < TX_RING_SIZE; i++) {
1331                 if (tp->tx_skbuff[i])
1332                         dev_kfree_skb(tp->tx_skbuff[i]);
1333                 tp->tx_skbuff[i] = NULL;
1334         }
1335
1336         tp->open = 0;
1337         return 0;
1338 }
1339
1340
1341 static struct net_device_stats *xircom_get_stats(struct net_device *dev)
1342 {
1343         struct xircom_private *tp = netdev_priv(dev);
1344         long ioaddr = dev->base_addr;
1345
1346         if (netif_device_present(dev))
1347                 tp->stats.rx_missed_errors += inl(ioaddr + CSR8) & 0xffff;
1348
1349         return &tp->stats;
1350 }
1351
1352 static int xircom_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1353 {
1354         struct xircom_private *tp = netdev_priv(dev);
1355         ecmd->supported =
1356                         SUPPORTED_10baseT_Half |
1357                         SUPPORTED_10baseT_Full |
1358                         SUPPORTED_100baseT_Half |
1359                         SUPPORTED_100baseT_Full |
1360                         SUPPORTED_Autoneg |
1361                         SUPPORTED_MII;
1362
1363         ecmd->advertising = ADVERTISED_MII;
1364         if (tp->advertising[0] & ADVERTISE_10HALF)
1365                 ecmd->advertising |= ADVERTISED_10baseT_Half;
1366         if (tp->advertising[0] & ADVERTISE_10FULL)
1367                 ecmd->advertising |= ADVERTISED_10baseT_Full;
1368         if (tp->advertising[0] & ADVERTISE_100HALF)
1369                 ecmd->advertising |= ADVERTISED_100baseT_Half;
1370         if (tp->advertising[0] & ADVERTISE_100FULL)
1371                 ecmd->advertising |= ADVERTISED_100baseT_Full;
1372         if (tp->autoneg) {
1373                 ecmd->advertising |= ADVERTISED_Autoneg;
1374                 ecmd->autoneg = AUTONEG_ENABLE;
1375         } else
1376                 ecmd->autoneg = AUTONEG_DISABLE;
1377
1378         ecmd->port = PORT_MII;
1379         ecmd->transceiver = XCVR_INTERNAL;
1380         ecmd->phy_address = tp->phys[0];
1381         ecmd->speed = tp->speed100 ? SPEED_100 : SPEED_10;
1382         ecmd->duplex = tp->full_duplex ? DUPLEX_FULL : DUPLEX_HALF;
1383         ecmd->maxtxpkt = TX_RING_SIZE / 2;
1384         ecmd->maxrxpkt = 0;
1385         return 0;
1386 }
1387
1388 static int xircom_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1389 {
1390         struct xircom_private *tp = netdev_priv(dev);
1391         u16 autoneg, speed100, full_duplex;
1392
1393         autoneg = (ecmd->autoneg == AUTONEG_ENABLE);
1394         speed100 = (ecmd->speed == SPEED_100);
1395         full_duplex = (ecmd->duplex == DUPLEX_FULL);
1396
1397         tp->autoneg = autoneg;
1398         if (speed100 != tp->speed100 ||
1399             full_duplex != tp->full_duplex) {
1400                 tp->speed100 = speed100;
1401                 tp->full_duplex = full_duplex;
1402                 /* change advertising bits */
1403                 tp->advertising[0] &= ~(ADVERTISE_10HALF |
1404                                      ADVERTISE_10FULL |
1405                                      ADVERTISE_100HALF |
1406                                      ADVERTISE_100FULL |
1407                                      ADVERTISE_100BASE4);
1408                 if (speed100) {
1409                         if (full_duplex)
1410                                 tp->advertising[0] |= ADVERTISE_100FULL;
1411                         else
1412                                 tp->advertising[0] |= ADVERTISE_100HALF;
1413                 } else {
1414                         if (full_duplex)
1415                                 tp->advertising[0] |= ADVERTISE_10FULL;
1416                         else
1417                                 tp->advertising[0] |= ADVERTISE_10HALF;
1418                 }
1419         }
1420         check_duplex(dev);
1421         return 0;
1422 }
1423
1424 static void xircom_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1425 {
1426         struct xircom_private *tp = netdev_priv(dev);
1427         strcpy(info->driver, DRV_NAME);
1428         strcpy(info->version, DRV_VERSION);
1429         strcpy(info->bus_info, pci_name(tp->pdev));
1430 }
1431
1432 static const struct ethtool_ops ops = {
1433         .get_settings = xircom_get_settings,
1434         .set_settings = xircom_set_settings,
1435         .get_drvinfo = xircom_get_drvinfo,
1436 };
1437
1438 /* Provide ioctl() calls to examine the MII xcvr state. */
1439 static int xircom_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1440 {
1441         struct xircom_private *tp = netdev_priv(dev);
1442         u16 *data = (u16 *)&rq->ifr_ifru;
1443         int phy = tp->phys[0] & 0x1f;
1444         unsigned long flags;
1445
1446         switch(cmd) {
1447         /* Legacy mii-diag interface */
1448         case SIOCGMIIPHY:               /* Get address of MII PHY in use. */
1449                 if (tp->mii_cnt)
1450                         data[0] = phy;
1451                 else
1452                         return -ENODEV;
1453                 return 0;
1454         case SIOCGMIIREG:               /* Read MII PHY register. */
1455                 save_flags(flags);
1456                 cli();
1457                 data[3] = mdio_read(dev, data[0] & 0x1f, data[1] & 0x1f);
1458                 restore_flags(flags);
1459                 return 0;
1460         case SIOCSMIIREG:               /* Write MII PHY register. */
1461                 if (!capable(CAP_NET_ADMIN))
1462                         return -EPERM;
1463                 save_flags(flags);
1464                 cli();
1465                 if (data[0] == tp->phys[0]) {
1466                         u16 value = data[2];
1467                         switch (data[1]) {
1468                         case 0:
1469                                 if (value & (BMCR_RESET | BMCR_ANENABLE))
1470                                         /* Autonegotiation. */
1471                                         tp->autoneg = 1;
1472                                 else {
1473                                         tp->full_duplex = (value & BMCR_FULLDPLX) ? 1 : 0;
1474                                         tp->autoneg = 0;
1475                                 }
1476                                 break;
1477                         case 4:
1478                                 tp->advertising[0] = value;
1479                                 break;
1480                         }
1481                         check_duplex(dev);
1482                 }
1483                 mdio_write(dev, data[0] & 0x1f, data[1] & 0x1f, data[2]);
1484                 restore_flags(flags);
1485                 return 0;
1486         default:
1487                 return -EOPNOTSUPP;
1488         }
1489
1490         return -EOPNOTSUPP;
1491 }
1492
1493 /* Set or clear the multicast filter for this adaptor.
1494    Note that we only use exclusion around actually queueing the
1495    new frame, not around filling tp->setup_frame.  This is non-deterministic
1496    when re-entered but still correct. */
1497 static void set_rx_mode(struct net_device *dev)
1498 {
1499         struct xircom_private *tp = netdev_priv(dev);
1500         struct dev_mc_list *mclist;
1501         long ioaddr = dev->base_addr;
1502         int csr6 = inl(ioaddr + CSR6);
1503         u16 *eaddrs, *setup_frm;
1504         u32 tx_flags;
1505         int i;
1506
1507         tp->csr6 &= ~(AllMultiBit | PromiscBit | HashFilterBit);
1508         csr6 &= ~(AllMultiBit | PromiscBit | HashFilterBit);
1509         if (dev->flags & IFF_PROMISC) {                 /* Set promiscuous. */
1510                 tp->csr6 |= PromiscBit;
1511                 csr6 |= PromiscBit;
1512                 goto out;
1513         }
1514
1515         if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
1516                 /* Too many to filter well -- accept all multicasts. */
1517                 tp->csr6 |= AllMultiBit;
1518                 csr6 |= AllMultiBit;
1519                 goto out;
1520         }
1521
1522         tx_flags = Tx1WholePkt | Tx1SetupPkt | PKT_SETUP_SZ;
1523
1524         /* Note that only the low-address shortword of setup_frame is valid! */
1525         setup_frm = tp->setup_frame;
1526         mclist = dev->mc_list;
1527
1528         /* Fill the first entry with our physical address. */
1529         eaddrs = (u16 *)dev->dev_addr;
1530         *setup_frm = cpu_to_le16(eaddrs[0]); setup_frm += 2;
1531         *setup_frm = cpu_to_le16(eaddrs[1]); setup_frm += 2;
1532         *setup_frm = cpu_to_le16(eaddrs[2]); setup_frm += 2;
1533
1534         if (dev->mc_count > 14) { /* Must use a multicast hash table. */
1535                 u32 *hash_table = (u32 *)(tp->setup_frame + 4 * 12);
1536                 u32 hash, hash2;
1537
1538                 tx_flags |= Tx1HashSetup;
1539                 tp->csr6 |= HashFilterBit;
1540                 csr6 |= HashFilterBit;
1541
1542                 /* Fill the unused 3 entries with the broadcast address.
1543                    At least one entry *must* contain the broadcast address!!!*/
1544                 for (i = 0; i < 3; i++) {
1545                         *setup_frm = 0xffff; setup_frm += 2;
1546                         *setup_frm = 0xffff; setup_frm += 2;
1547                         *setup_frm = 0xffff; setup_frm += 2;
1548                 }
1549
1550                 /* Truly brain-damaged hash filter layout */
1551                 /* XXX: not sure if I should take the last or the first 9 bits */
1552                 for (i = 0; i < dev->mc_count; i++, mclist = mclist->next) {
1553                         u32 *hptr;
1554                         hash = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
1555                         if (hash < 384) {
1556                                 hash2 = hash + ((hash >> 4) << 4) +
1557                                         ((hash >> 5) << 5);
1558                         } else {
1559                                 hash -= 384;
1560                                 hash2 = 64 + hash + (hash >> 4) * 80;
1561                         }
1562                         hptr = &hash_table[hash2 & ~0x1f];
1563                         *hptr |= cpu_to_le32(1 << (hash2 & 0x1f));
1564                 }
1565         } else {
1566                 /* We have <= 14 mcast addresses so we can use Xircom's
1567                    wonderful 16-address perfect filter. */
1568                 for (i = 0; i < dev->mc_count; i++, mclist = mclist->next) {
1569                         eaddrs = (u16 *)mclist->dmi_addr;
1570                         *setup_frm = cpu_to_le16(eaddrs[0]); setup_frm += 2;
1571                         *setup_frm = cpu_to_le16(eaddrs[1]); setup_frm += 2;
1572                         *setup_frm = cpu_to_le16(eaddrs[2]); setup_frm += 2;
1573                 }
1574                 /* Fill the unused entries with the broadcast address.
1575                    At least one entry *must* contain the broadcast address!!!*/
1576                 for (; i < 15; i++) {
1577                         *setup_frm = 0xffff; setup_frm += 2;
1578                         *setup_frm = 0xffff; setup_frm += 2;
1579                         *setup_frm = 0xffff; setup_frm += 2;
1580                 }
1581         }
1582
1583         /* Now add this frame to the Tx list. */
1584         if (tp->cur_tx - tp->dirty_tx > TX_RING_SIZE - 2) {
1585                 /* Same setup recently queued, we need not add it. */
1586                 /* XXX: Huh? All it means is that the Tx list is full...*/
1587         } else {
1588                 unsigned long flags;
1589                 unsigned int entry;
1590                 int dummy = -1;
1591
1592                 save_flags(flags); cli();
1593                 entry = tp->cur_tx++ % TX_RING_SIZE;
1594
1595                 if (entry != 0) {
1596                         /* Avoid a chip errata by prefixing a dummy entry. */
1597                         tp->tx_skbuff[entry] = NULL;
1598                         tp->tx_ring[entry].length =
1599                                 (entry == TX_RING_SIZE - 1) ? Tx1RingWrap : 0;
1600                         tp->tx_ring[entry].buffer1 = 0;
1601                         /* race with chip, set Tx0DescOwned later */
1602                         dummy = entry;
1603                         entry = tp->cur_tx++ % TX_RING_SIZE;
1604                 }
1605
1606                 tp->tx_skbuff[entry] = NULL;
1607                 /* Put the setup frame on the Tx list. */
1608                 if (entry == TX_RING_SIZE - 1)
1609                         tx_flags |= Tx1RingWrap;                /* Wrap ring. */
1610                 tp->tx_ring[entry].length = tx_flags;
1611                 tp->tx_ring[entry].buffer1 = virt_to_bus(tp->setup_frame);
1612                 tp->tx_ring[entry].status = Tx0DescOwned;
1613                 if (tp->cur_tx - tp->dirty_tx >= TX_RING_SIZE - 2) {
1614                         tp->tx_full = 1;
1615                         netif_stop_queue (dev);
1616                 }
1617                 if (dummy >= 0)
1618                         tp->tx_ring[dummy].status = Tx0DescOwned;
1619                 restore_flags(flags);
1620                 /* Trigger an immediate transmit demand. */
1621                 outl(0, ioaddr + CSR1);
1622         }
1623
1624 out:
1625         outl_CSR6(csr6, ioaddr);
1626 }
1627
1628
1629 static struct pci_device_id xircom_pci_table[] = {
1630   { 0x115D, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, X3201_3 },
1631   {0},
1632 };
1633 MODULE_DEVICE_TABLE(pci, xircom_pci_table);
1634
1635
1636 #ifdef CONFIG_PM
1637 static int xircom_suspend(struct pci_dev *pdev, pm_message_t state)
1638 {
1639         struct net_device *dev = pci_get_drvdata(pdev);
1640         struct xircom_private *tp = netdev_priv(dev);
1641         printk(KERN_INFO "xircom_suspend(%s)\n", dev->name);
1642         if (tp->open)
1643                 xircom_down(dev);
1644
1645         pci_save_state(pdev);
1646         pci_disable_device(pdev);
1647         pci_set_power_state(pdev, 3);
1648
1649         return 0;
1650 }
1651
1652
1653 static int xircom_resume(struct pci_dev *pdev)
1654 {
1655         struct net_device *dev = pci_get_drvdata(pdev);
1656         struct xircom_private *tp = netdev_priv(dev);
1657         printk(KERN_INFO "xircom_resume(%s)\n", dev->name);
1658
1659         pci_set_power_state(pdev,0);
1660         pci_enable_device(pdev);
1661         pci_restore_state(pdev);
1662
1663         /* Bring the chip out of sleep mode.
1664            Caution: Snooze mode does not work with some boards! */
1665         if (xircom_tbl[tp->chip_id].flags & HAS_ACPI)
1666                 pci_write_config_dword(tp->pdev, PCI_POWERMGMT, 0);
1667
1668         transceiver_voodoo(dev);
1669         if (xircom_tbl[tp->chip_id].flags & HAS_MII)
1670                 check_duplex(dev);
1671
1672         if (tp->open)
1673                 xircom_up(dev);
1674         return 0;
1675 }
1676 #endif /* CONFIG_PM */
1677
1678
1679 static void __devexit xircom_remove_one(struct pci_dev *pdev)
1680 {
1681         struct net_device *dev = pci_get_drvdata(pdev);
1682
1683         printk(KERN_INFO "xircom_remove_one(%s)\n", dev->name);
1684         unregister_netdev(dev);
1685         pci_release_regions(pdev);
1686         free_netdev(dev);
1687         pci_set_drvdata(pdev, NULL);
1688 }
1689
1690
1691 static struct pci_driver xircom_driver = {
1692         .name           = DRV_NAME,
1693         .id_table       = xircom_pci_table,
1694         .probe          = xircom_init_one,
1695         .remove         = __devexit_p(xircom_remove_one),
1696 #ifdef CONFIG_PM
1697         .suspend        = xircom_suspend,
1698         .resume         = xircom_resume
1699 #endif /* CONFIG_PM */
1700 };
1701
1702
1703 static int __init xircom_init(void)
1704 {
1705 /* when a module, this is printed whether or not devices are found in probe */
1706 #ifdef MODULE
1707         printk(version);
1708 #endif
1709         return pci_register_driver(&xircom_driver);
1710 }
1711
1712
1713 static void __exit xircom_exit(void)
1714 {
1715         pci_unregister_driver(&xircom_driver);
1716 }
1717
1718 module_init(xircom_init)
1719 module_exit(xircom_exit)
1720
1721 /*
1722  * Local variables:
1723  *  c-indent-level: 4
1724  *  c-basic-offset: 4
1725  *  tab-width: 4
1726  * End:
1727  */