]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/net/starfire.c
5785429ca0e2e6d8add6769adfe82544f0abf01e
[linux-2.6-omap-h63xx.git] / drivers / net / starfire.c
1 /* starfire.c: Linux device driver for the Adaptec Starfire network adapter. */
2 /*
3         Written 1998-2000 by Donald Becker.
4
5         Current maintainer is Ion Badulescu <ionut ta badula tod org>. Please
6         send all bug reports to me, and not to Donald Becker, as this code
7         has been heavily modified from Donald's original version.
8
9         This software may be used and distributed according to the terms of
10         the GNU General Public License (GPL), incorporated herein by reference.
11         Drivers based on or derived from this code fall under the GPL and must
12         retain the authorship, copyright and license notice.  This file is not
13         a complete program and may only be used when the entire operating
14         system is licensed under the GPL.
15
16         The information below comes from Donald Becker's original driver:
17
18         The author may be reached as becker@scyld.com, or C/O
19         Scyld Computing Corporation
20         410 Severn Ave., Suite 210
21         Annapolis MD 21403
22
23         Support and updates available at
24         http://www.scyld.com/network/starfire.html
25         [link no longer provides useful info -jgarzik]
26
27 */
28
29 #define DRV_NAME        "starfire"
30 #define DRV_VERSION     "2.0"
31 #define DRV_RELDATE     "June 27, 2006"
32
33 #include <linux/module.h>
34 #include <linux/kernel.h>
35 #include <linux/pci.h>
36 #include <linux/netdevice.h>
37 #include <linux/etherdevice.h>
38 #include <linux/init.h>
39 #include <linux/delay.h>
40 #include <linux/crc32.h>
41 #include <linux/ethtool.h>
42 #include <linux/mii.h>
43 #include <linux/if_vlan.h>
44 #include <linux/mm.h>
45 #include <asm/processor.h>              /* Processor type for cache alignment. */
46 #include <asm/uaccess.h>
47 #include <asm/io.h>
48
49 #include "starfire_firmware.h"
50 /*
51  * The current frame processor firmware fails to checksum a fragment
52  * of length 1. If and when this is fixed, the #define below can be removed.
53  */
54 #define HAS_BROKEN_FIRMWARE
55
56 /*
57  * If using the broken firmware, data must be padded to the next 32-bit boundary.
58  */
59 #ifdef HAS_BROKEN_FIRMWARE
60 #define PADDING_MASK 3
61 #endif
62
63 /*
64  * Define this if using the driver with the zero-copy patch
65  */
66 #define ZEROCOPY
67
68 #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
69 #define VLAN_SUPPORT
70 #endif
71
72 #ifndef CONFIG_ADAPTEC_STARFIRE_NAPI
73 #undef HAVE_NETDEV_POLL
74 #endif
75
76 /* The user-configurable values.
77    These may be modified when a driver module is loaded.*/
78
79 /* Used for tuning interrupt latency vs. overhead. */
80 static int intr_latency;
81 static int small_frames;
82
83 static int debug = 1;                   /* 1 normal messages, 0 quiet .. 7 verbose. */
84 static int max_interrupt_work = 20;
85 static int mtu;
86 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast).
87    The Starfire has a 512 element hash table based on the Ethernet CRC. */
88 static const int multicast_filter_limit = 512;
89 /* Whether to do TCP/UDP checksums in hardware */
90 static int enable_hw_cksum = 1;
91
92 #define PKT_BUF_SZ      1536            /* Size of each temporary Rx buffer.*/
93 /*
94  * Set the copy breakpoint for the copy-only-tiny-frames scheme.
95  * Setting to > 1518 effectively disables this feature.
96  *
97  * NOTE:
98  * The ia64 doesn't allow for unaligned loads even of integers being
99  * misaligned on a 2 byte boundary. Thus always force copying of
100  * packets as the starfire doesn't allow for misaligned DMAs ;-(
101  * 23/10/2000 - Jes
102  *
103  * The Alpha and the Sparc don't like unaligned loads, either. On Sparc64,
104  * at least, having unaligned frames leads to a rather serious performance
105  * penalty. -Ion
106  */
107 #if defined(__ia64__) || defined(__alpha__) || defined(__sparc__)
108 static int rx_copybreak = PKT_BUF_SZ;
109 #else
110 static int rx_copybreak /* = 0 */;
111 #endif
112
113 /* PCI DMA burst size -- on sparc64 we want to force it to 64 bytes, on the others the default of 128 is fine. */
114 #ifdef __sparc__
115 #define DMA_BURST_SIZE 64
116 #else
117 #define DMA_BURST_SIZE 128
118 #endif
119
120 /* Used to pass the media type, etc.
121    Both 'options[]' and 'full_duplex[]' exist for driver interoperability.
122    The media type is usually passed in 'options[]'.
123    These variables are deprecated, use ethtool instead. -Ion
124 */
125 #define MAX_UNITS 8             /* More are supported, limit only on options */
126 static int options[MAX_UNITS] = {0, };
127 static int full_duplex[MAX_UNITS] = {0, };
128
129 /* Operational parameters that are set at compile time. */
130
131 /* The "native" ring sizes are either 256 or 2048.
132    However in some modes a descriptor may be marked to wrap the ring earlier.
133 */
134 #define RX_RING_SIZE    256
135 #define TX_RING_SIZE    32
136 /* The completion queues are fixed at 1024 entries i.e. 4K or 8KB. */
137 #define DONE_Q_SIZE     1024
138 /* All queues must be aligned on a 256-byte boundary */
139 #define QUEUE_ALIGN     256
140
141 #if RX_RING_SIZE > 256
142 #define RX_Q_ENTRIES Rx2048QEntries
143 #else
144 #define RX_Q_ENTRIES Rx256QEntries
145 #endif
146
147 /* Operational parameters that usually are not changed. */
148 /* Time in jiffies before concluding the transmitter is hung. */
149 #define TX_TIMEOUT      (2 * HZ)
150
151 /*
152  * This SUCKS.
153  * We need a much better method to determine if dma_addr_t is 64-bit.
154  */
155 #if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || defined(__mips64__) || (defined(__mips__) && defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR))
156 /* 64-bit dma_addr_t */
157 #define ADDR_64BITS     /* This chip uses 64 bit addresses. */
158 #define netdrv_addr_t u64
159 #define cpu_to_dma(x) cpu_to_le64(x)
160 #define dma_to_cpu(x) le64_to_cpu(x)
161 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr64bit
162 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr64bit
163 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr64bit
164 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr64bit
165 #define RX_DESC_ADDR_SIZE RxDescAddr64bit
166 #else  /* 32-bit dma_addr_t */
167 #define netdrv_addr_t u32
168 #define cpu_to_dma(x) cpu_to_le32(x)
169 #define dma_to_cpu(x) le32_to_cpu(x)
170 #define RX_DESC_Q_ADDR_SIZE RxDescQAddr32bit
171 #define TX_DESC_Q_ADDR_SIZE TxDescQAddr32bit
172 #define RX_COMPL_Q_ADDR_SIZE RxComplQAddr32bit
173 #define TX_COMPL_Q_ADDR_SIZE TxComplQAddr32bit
174 #define RX_DESC_ADDR_SIZE RxDescAddr32bit
175 #endif
176
177 #define skb_first_frag_len(skb) skb_headlen(skb)
178 #define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1)
179
180 #ifdef HAVE_NETDEV_POLL
181 #define init_poll(dev, np) \
182         netif_napi_add(dev, &np->napi, netdev_poll, max_interrupt_work)
183 #define netdev_rx(dev, np, ioaddr) \
184 do { \
185         u32 intr_enable; \
186         if (netif_rx_schedule_prep(dev, &np->napi)) { \
187                 __netif_rx_schedule(dev, &np->napi); \
188                 intr_enable = readl(ioaddr + IntrEnable); \
189                 intr_enable &= ~(IntrRxDone | IntrRxEmpty); \
190                 writel(intr_enable, ioaddr + IntrEnable); \
191                 readl(ioaddr + IntrEnable); /* flush PCI posting buffers */ \
192         } else { \
193                 /* Paranoia check */ \
194                 intr_enable = readl(ioaddr + IntrEnable); \
195                 if (intr_enable & (IntrRxDone | IntrRxEmpty)) { \
196                         printk(KERN_INFO "%s: interrupt while in polling mode!\n", dev->name); \
197                         intr_enable &= ~(IntrRxDone | IntrRxEmpty); \
198                         writel(intr_enable, ioaddr + IntrEnable); \
199                 } \
200         } \
201 } while (0)
202 #define netdev_receive_skb(skb) netif_receive_skb(skb)
203 #define vlan_netdev_receive_skb(skb, vlgrp, vlid) vlan_hwaccel_receive_skb(skb, vlgrp, vlid)
204 static int      netdev_poll(struct napi_struct *napi, int budget);
205 #else  /* not HAVE_NETDEV_POLL */
206 #define init_poll(dev, np)
207 #define netdev_receive_skb(skb) netif_rx(skb)
208 #define vlan_netdev_receive_skb(skb, vlgrp, vlid) vlan_hwaccel_rx(skb, vlgrp, vlid)
209 #define netdev_rx(dev, np, ioaddr) \
210 do { \
211         int quota = np->dirty_rx + RX_RING_SIZE - np->cur_rx; \
212         __netdev_rx(dev, &quota);\
213 } while (0)
214 #endif /* not HAVE_NETDEV_POLL */
215 /* end of compatibility code */
216
217
218 /* These identify the driver base version and may not be removed. */
219 static const char version[] __devinitdata =
220 KERN_INFO "starfire.c:v1.03 7/26/2000  Written by Donald Becker <becker@scyld.com>\n"
221 KERN_INFO " (unofficial 2.2/2.4 kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n";
222
223 MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
224 MODULE_DESCRIPTION("Adaptec Starfire Ethernet driver");
225 MODULE_LICENSE("GPL");
226 MODULE_VERSION(DRV_VERSION);
227
228 module_param(max_interrupt_work, int, 0);
229 module_param(mtu, int, 0);
230 module_param(debug, int, 0);
231 module_param(rx_copybreak, int, 0);
232 module_param(intr_latency, int, 0);
233 module_param(small_frames, int, 0);
234 module_param_array(options, int, NULL, 0);
235 module_param_array(full_duplex, int, NULL, 0);
236 module_param(enable_hw_cksum, int, 0);
237 MODULE_PARM_DESC(max_interrupt_work, "Maximum events handled per interrupt");
238 MODULE_PARM_DESC(mtu, "MTU (all boards)");
239 MODULE_PARM_DESC(debug, "Debug level (0-6)");
240 MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
241 MODULE_PARM_DESC(intr_latency, "Maximum interrupt latency, in microseconds");
242 MODULE_PARM_DESC(small_frames, "Maximum size of receive frames that bypass interrupt latency (0,64,128,256,512)");
243 MODULE_PARM_DESC(options, "Deprecated: Bits 0-3: media type, bit 17: full duplex");
244 MODULE_PARM_DESC(full_duplex, "Deprecated: Forced full-duplex setting (0/1)");
245 MODULE_PARM_DESC(enable_hw_cksum, "Enable/disable hardware cksum support (0/1)");
246
247 /*
248                                 Theory of Operation
249
250 I. Board Compatibility
251
252 This driver is for the Adaptec 6915 "Starfire" 64 bit PCI Ethernet adapter.
253
254 II. Board-specific settings
255
256 III. Driver operation
257
258 IIIa. Ring buffers
259
260 The Starfire hardware uses multiple fixed-size descriptor queues/rings.  The
261 ring sizes are set fixed by the hardware, but may optionally be wrapped
262 earlier by the END bit in the descriptor.
263 This driver uses that hardware queue size for the Rx ring, where a large
264 number of entries has no ill effect beyond increases the potential backlog.
265 The Tx ring is wrapped with the END bit, since a large hardware Tx queue
266 disables the queue layer priority ordering and we have no mechanism to
267 utilize the hardware two-level priority queue.  When modifying the
268 RX/TX_RING_SIZE pay close attention to page sizes and the ring-empty warning
269 levels.
270
271 IIIb/c. Transmit/Receive Structure
272
273 See the Adaptec manual for the many possible structures, and options for
274 each structure.  There are far too many to document all of them here.
275
276 For transmit this driver uses type 0/1 transmit descriptors (depending
277 on the 32/64 bitness of the architecture), and relies on automatic
278 minimum-length padding.  It does not use the completion queue
279 consumer index, but instead checks for non-zero status entries.
280
281 For receive this driver uses type 2/3 receive descriptors.  The driver
282 allocates full frame size skbuffs for the Rx ring buffers, so all frames
283 should fit in a single descriptor.  The driver does not use the completion
284 queue consumer index, but instead checks for non-zero status entries.
285
286 When an incoming frame is less than RX_COPYBREAK bytes long, a fresh skbuff
287 is allocated and the frame is copied to the new skbuff.  When the incoming
288 frame is larger, the skbuff is passed directly up the protocol stack.
289 Buffers consumed this way are replaced by newly allocated skbuffs in a later
290 phase of receive.
291
292 A notable aspect of operation is that unaligned buffers are not permitted by
293 the Starfire hardware.  Thus the IP header at offset 14 in an ethernet frame
294 isn't longword aligned, which may cause problems on some machine
295 e.g. Alphas and IA64. For these architectures, the driver is forced to copy
296 the frame into a new skbuff unconditionally. Copied frames are put into the
297 skbuff at an offset of "+2", thus 16-byte aligning the IP header.
298
299 IIId. Synchronization
300
301 The driver runs as two independent, single-threaded flows of control.  One
302 is the send-packet routine, which enforces single-threaded use by the
303 dev->tbusy flag.  The other thread is the interrupt handler, which is single
304 threaded by the hardware and interrupt handling software.
305
306 The send packet thread has partial control over the Tx ring and the netif_queue
307 status. If the number of free Tx slots in the ring falls below a certain number
308 (currently hardcoded to 4), it signals the upper layer to stop the queue.
309
310 The interrupt handler has exclusive control over the Rx ring and records stats
311 from the Tx ring.  After reaping the stats, it marks the Tx queue entry as
312 empty by incrementing the dirty_tx mark. Iff the netif_queue is stopped and the
313 number of free Tx slow is above the threshold, it signals the upper layer to
314 restart the queue.
315
316 IV. Notes
317
318 IVb. References
319
320 The Adaptec Starfire manuals, available only from Adaptec.
321 http://www.scyld.com/expert/100mbps.html
322 http://www.scyld.com/expert/NWay.html
323
324 IVc. Errata
325
326 - StopOnPerr is broken, don't enable
327 - Hardware ethernet padding exposes random data, perform software padding
328   instead (unverified -- works correctly for all the hardware I have)
329
330 */
331
332
333
334 enum chip_capability_flags {CanHaveMII=1, };
335
336 enum chipset {
337         CH_6915 = 0,
338 };
339
340 static struct pci_device_id starfire_pci_tbl[] = {
341         { 0x9004, 0x6915, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_6915 },
342         { 0, }
343 };
344 MODULE_DEVICE_TABLE(pci, starfire_pci_tbl);
345
346 /* A chip capabilities table, matching the CH_xxx entries in xxx_pci_tbl[] above. */
347 static const struct chip_info {
348         const char *name;
349         int drv_flags;
350 } netdrv_tbl[] __devinitdata = {
351         { "Adaptec Starfire 6915", CanHaveMII },
352 };
353
354
355 /* Offsets to the device registers.
356    Unlike software-only systems, device drivers interact with complex hardware.
357    It's not useful to define symbolic names for every register bit in the
358    device.  The name can only partially document the semantics and make
359    the driver longer and more difficult to read.
360    In general, only the important configuration values or bits changed
361    multiple times should be defined symbolically.
362 */
363 enum register_offsets {
364         PCIDeviceConfig=0x50040, GenCtrl=0x50070, IntrTimerCtrl=0x50074,
365         IntrClear=0x50080, IntrStatus=0x50084, IntrEnable=0x50088,
366         MIICtrl=0x52000, TxStationAddr=0x50120, EEPROMCtrl=0x51000,
367         GPIOCtrl=0x5008C, TxDescCtrl=0x50090,
368         TxRingPtr=0x50098, HiPriTxRingPtr=0x50094, /* Low and High priority. */
369         TxRingHiAddr=0x5009C,           /* 64 bit address extension. */
370         TxProducerIdx=0x500A0, TxConsumerIdx=0x500A4,
371         TxThreshold=0x500B0,
372         CompletionHiAddr=0x500B4, TxCompletionAddr=0x500B8,
373         RxCompletionAddr=0x500BC, RxCompletionQ2Addr=0x500C0,
374         CompletionQConsumerIdx=0x500C4, RxDMACtrl=0x500D0,
375         RxDescQCtrl=0x500D4, RxDescQHiAddr=0x500DC, RxDescQAddr=0x500E0,
376         RxDescQIdx=0x500E8, RxDMAStatus=0x500F0, RxFilterMode=0x500F4,
377         TxMode=0x55000, VlanType=0x55064,
378         PerfFilterTable=0x56000, HashTable=0x56100,
379         TxGfpMem=0x58000, RxGfpMem=0x5a000,
380 };
381
382 /*
383  * Bits in the interrupt status/mask registers.
384  * Warning: setting Intr[Ab]NormalSummary in the IntrEnable register
385  * enables all the interrupt sources that are or'ed into those status bits.
386  */
387 enum intr_status_bits {
388         IntrLinkChange=0xf0000000, IntrStatsMax=0x08000000,
389         IntrAbnormalSummary=0x02000000, IntrGeneralTimer=0x01000000,
390         IntrSoftware=0x800000, IntrRxComplQ1Low=0x400000,
391         IntrTxComplQLow=0x200000, IntrPCI=0x100000,
392         IntrDMAErr=0x080000, IntrTxDataLow=0x040000,
393         IntrRxComplQ2Low=0x020000, IntrRxDescQ1Low=0x010000,
394         IntrNormalSummary=0x8000, IntrTxDone=0x4000,
395         IntrTxDMADone=0x2000, IntrTxEmpty=0x1000,
396         IntrEarlyRxQ2=0x0800, IntrEarlyRxQ1=0x0400,
397         IntrRxQ2Done=0x0200, IntrRxQ1Done=0x0100,
398         IntrRxGFPDead=0x80, IntrRxDescQ2Low=0x40,
399         IntrNoTxCsum=0x20, IntrTxBadID=0x10,
400         IntrHiPriTxBadID=0x08, IntrRxGfp=0x04,
401         IntrTxGfp=0x02, IntrPCIPad=0x01,
402         /* not quite bits */
403         IntrRxDone=IntrRxQ2Done | IntrRxQ1Done,
404         IntrRxEmpty=IntrRxDescQ1Low | IntrRxDescQ2Low,
405         IntrNormalMask=0xff00, IntrAbnormalMask=0x3ff00fe,
406 };
407
408 /* Bits in the RxFilterMode register. */
409 enum rx_mode_bits {
410         AcceptBroadcast=0x04, AcceptAllMulticast=0x02, AcceptAll=0x01,
411         AcceptMulticast=0x10, PerfectFilter=0x40, HashFilter=0x30,
412         PerfectFilterVlan=0x80, MinVLANPrio=0xE000, VlanMode=0x0200,
413         WakeupOnGFP=0x0800,
414 };
415
416 /* Bits in the TxMode register */
417 enum tx_mode_bits {
418         MiiSoftReset=0x8000, MIILoopback=0x4000,
419         TxFlowEnable=0x0800, RxFlowEnable=0x0400,
420         PadEnable=0x04, FullDuplex=0x02, HugeFrame=0x01,
421 };
422
423 /* Bits in the TxDescCtrl register. */
424 enum tx_ctrl_bits {
425         TxDescSpaceUnlim=0x00, TxDescSpace32=0x10, TxDescSpace64=0x20,
426         TxDescSpace128=0x30, TxDescSpace256=0x40,
427         TxDescType0=0x00, TxDescType1=0x01, TxDescType2=0x02,
428         TxDescType3=0x03, TxDescType4=0x04,
429         TxNoDMACompletion=0x08,
430         TxDescQAddr64bit=0x80, TxDescQAddr32bit=0,
431         TxHiPriFIFOThreshShift=24, TxPadLenShift=16,
432         TxDMABurstSizeShift=8,
433 };
434
435 /* Bits in the RxDescQCtrl register. */
436 enum rx_ctrl_bits {
437         RxBufferLenShift=16, RxMinDescrThreshShift=0,
438         RxPrefetchMode=0x8000, RxVariableQ=0x2000,
439         Rx2048QEntries=0x4000, Rx256QEntries=0,
440         RxDescAddr64bit=0x1000, RxDescAddr32bit=0,
441         RxDescQAddr64bit=0x0100, RxDescQAddr32bit=0,
442         RxDescSpace4=0x000, RxDescSpace8=0x100,
443         RxDescSpace16=0x200, RxDescSpace32=0x300,
444         RxDescSpace64=0x400, RxDescSpace128=0x500,
445         RxConsumerWrEn=0x80,
446 };
447
448 /* Bits in the RxDMACtrl register. */
449 enum rx_dmactrl_bits {
450         RxReportBadFrames=0x80000000, RxDMAShortFrames=0x40000000,
451         RxDMABadFrames=0x20000000, RxDMACrcErrorFrames=0x10000000,
452         RxDMAControlFrame=0x08000000, RxDMAPauseFrame=0x04000000,
453         RxChecksumIgnore=0, RxChecksumRejectTCPUDP=0x02000000,
454         RxChecksumRejectTCPOnly=0x01000000,
455         RxCompletionQ2Enable=0x800000,
456         RxDMAQ2Disable=0, RxDMAQ2FPOnly=0x100000,
457         RxDMAQ2SmallPkt=0x200000, RxDMAQ2HighPrio=0x300000,
458         RxDMAQ2NonIP=0x400000,
459         RxUseBackupQueue=0x080000, RxDMACRC=0x040000,
460         RxEarlyIntThreshShift=12, RxHighPrioThreshShift=8,
461         RxBurstSizeShift=0,
462 };
463
464 /* Bits in the RxCompletionAddr register */
465 enum rx_compl_bits {
466         RxComplQAddr64bit=0x80, RxComplQAddr32bit=0,
467         RxComplProducerWrEn=0x40,
468         RxComplType0=0x00, RxComplType1=0x10,
469         RxComplType2=0x20, RxComplType3=0x30,
470         RxComplThreshShift=0,
471 };
472
473 /* Bits in the TxCompletionAddr register */
474 enum tx_compl_bits {
475         TxComplQAddr64bit=0x80, TxComplQAddr32bit=0,
476         TxComplProducerWrEn=0x40,
477         TxComplIntrStatus=0x20,
478         CommonQueueMode=0x10,
479         TxComplThreshShift=0,
480 };
481
482 /* Bits in the GenCtrl register */
483 enum gen_ctrl_bits {
484         RxEnable=0x05, TxEnable=0x0a,
485         RxGFPEnable=0x10, TxGFPEnable=0x20,
486 };
487
488 /* Bits in the IntrTimerCtrl register */
489 enum intr_ctrl_bits {
490         Timer10X=0x800, EnableIntrMasking=0x60, SmallFrameBypass=0x100,
491         SmallFrame64=0, SmallFrame128=0x200, SmallFrame256=0x400, SmallFrame512=0x600,
492         IntrLatencyMask=0x1f,
493 };
494
495 /* The Rx and Tx buffer descriptors. */
496 struct starfire_rx_desc {
497         dma_addr_t rxaddr;
498 };
499 enum rx_desc_bits {
500         RxDescValid=1, RxDescEndRing=2,
501 };
502
503 /* Completion queue entry. */
504 struct short_rx_done_desc {
505         u32 status;                     /* Low 16 bits is length. */
506 };
507 struct basic_rx_done_desc {
508         u32 status;                     /* Low 16 bits is length. */
509         u16 vlanid;
510         u16 status2;
511 };
512 struct csum_rx_done_desc {
513         u32 status;                     /* Low 16 bits is length. */
514         u16 csum;                       /* Partial checksum */
515         u16 status2;
516 };
517 struct full_rx_done_desc {
518         u32 status;                     /* Low 16 bits is length. */
519         u16 status3;
520         u16 status2;
521         u16 vlanid;
522         u16 csum;                       /* partial checksum */
523         u32 timestamp;
524 };
525 /* XXX: this is ugly and I'm not sure it's worth the trouble -Ion */
526 #ifdef VLAN_SUPPORT
527 typedef struct full_rx_done_desc rx_done_desc;
528 #define RxComplType RxComplType3
529 #else  /* not VLAN_SUPPORT */
530 typedef struct csum_rx_done_desc rx_done_desc;
531 #define RxComplType RxComplType2
532 #endif /* not VLAN_SUPPORT */
533
534 enum rx_done_bits {
535         RxOK=0x20000000, RxFIFOErr=0x10000000, RxBufQ2=0x08000000,
536 };
537
538 /* Type 1 Tx descriptor. */
539 struct starfire_tx_desc_1 {
540         u32 status;                     /* Upper bits are status, lower 16 length. */
541         u32 addr;
542 };
543
544 /* Type 2 Tx descriptor. */
545 struct starfire_tx_desc_2 {
546         u32 status;                     /* Upper bits are status, lower 16 length. */
547         u32 reserved;
548         u64 addr;
549 };
550
551 #ifdef ADDR_64BITS
552 typedef struct starfire_tx_desc_2 starfire_tx_desc;
553 #define TX_DESC_TYPE TxDescType2
554 #else  /* not ADDR_64BITS */
555 typedef struct starfire_tx_desc_1 starfire_tx_desc;
556 #define TX_DESC_TYPE TxDescType1
557 #endif /* not ADDR_64BITS */
558 #define TX_DESC_SPACING TxDescSpaceUnlim
559
560 enum tx_desc_bits {
561         TxDescID=0xB0000000,
562         TxCRCEn=0x01000000, TxDescIntr=0x08000000,
563         TxRingWrap=0x04000000, TxCalTCP=0x02000000,
564 };
565 struct tx_done_desc {
566         u32 status;                     /* timestamp, index. */
567 #if 0
568         u32 intrstatus;                 /* interrupt status */
569 #endif
570 };
571
572 struct rx_ring_info {
573         struct sk_buff *skb;
574         dma_addr_t mapping;
575 };
576 struct tx_ring_info {
577         struct sk_buff *skb;
578         dma_addr_t mapping;
579         unsigned int used_slots;
580 };
581
582 #define PHY_CNT         2
583 struct netdev_private {
584         /* Descriptor rings first for alignment. */
585         struct starfire_rx_desc *rx_ring;
586         starfire_tx_desc *tx_ring;
587         dma_addr_t rx_ring_dma;
588         dma_addr_t tx_ring_dma;
589         /* The addresses of rx/tx-in-place skbuffs. */
590         struct rx_ring_info rx_info[RX_RING_SIZE];
591         struct tx_ring_info tx_info[TX_RING_SIZE];
592         /* Pointers to completion queues (full pages). */
593         rx_done_desc *rx_done_q;
594         dma_addr_t rx_done_q_dma;
595         unsigned int rx_done;
596         struct tx_done_desc *tx_done_q;
597         dma_addr_t tx_done_q_dma;
598         unsigned int tx_done;
599         struct napi_struct napi;
600         struct net_device *dev;
601         struct net_device_stats stats;
602         struct pci_dev *pci_dev;
603 #ifdef VLAN_SUPPORT
604         struct vlan_group *vlgrp;
605 #endif
606         void *queue_mem;
607         dma_addr_t queue_mem_dma;
608         size_t queue_mem_size;
609
610         /* Frequently used values: keep some adjacent for cache effect. */
611         spinlock_t lock;
612         unsigned int cur_rx, dirty_rx;  /* Producer/consumer ring indices */
613         unsigned int cur_tx, dirty_tx, reap_tx;
614         unsigned int rx_buf_sz;         /* Based on MTU+slack. */
615         /* These values keep track of the transceiver/media in use. */
616         int speed100;                   /* Set if speed == 100MBit. */
617         u32 tx_mode;
618         u32 intr_timer_ctrl;
619         u8 tx_threshold;
620         /* MII transceiver section. */
621         struct mii_if_info mii_if;              /* MII lib hooks/info */
622         int phy_cnt;                    /* MII device addresses. */
623         unsigned char phys[PHY_CNT];    /* MII device addresses. */
624         void __iomem *base;
625 };
626
627
628 static int      mdio_read(struct net_device *dev, int phy_id, int location);
629 static void     mdio_write(struct net_device *dev, int phy_id, int location, int value);
630 static int      netdev_open(struct net_device *dev);
631 static void     check_duplex(struct net_device *dev);
632 static void     tx_timeout(struct net_device *dev);
633 static void     init_ring(struct net_device *dev);
634 static int      start_tx(struct sk_buff *skb, struct net_device *dev);
635 static irqreturn_t intr_handler(int irq, void *dev_instance);
636 static void     netdev_error(struct net_device *dev, int intr_status);
637 static int      __netdev_rx(struct net_device *dev, int *quota);
638 static void     refill_rx_ring(struct net_device *dev);
639 static void     netdev_error(struct net_device *dev, int intr_status);
640 static void     set_rx_mode(struct net_device *dev);
641 static struct net_device_stats *get_stats(struct net_device *dev);
642 static int      netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
643 static int      netdev_close(struct net_device *dev);
644 static void     netdev_media_change(struct net_device *dev);
645 static const struct ethtool_ops ethtool_ops;
646
647
648 #ifdef VLAN_SUPPORT
649 static void netdev_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
650 {
651         struct netdev_private *np = netdev_priv(dev);
652
653         spin_lock(&np->lock);
654         if (debug > 2)
655                 printk("%s: Setting vlgrp to %p\n", dev->name, grp);
656         np->vlgrp = grp;
657         set_rx_mode(dev);
658         spin_unlock(&np->lock);
659 }
660
661 static void netdev_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
662 {
663         struct netdev_private *np = netdev_priv(dev);
664
665         spin_lock(&np->lock);
666         if (debug > 1)
667                 printk("%s: Adding vlanid %d to vlan filter\n", dev->name, vid);
668         set_rx_mode(dev);
669         spin_unlock(&np->lock);
670 }
671
672 static void netdev_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
673 {
674         struct netdev_private *np = netdev_priv(dev);
675
676         spin_lock(&np->lock);
677         if (debug > 1)
678                 printk("%s: removing vlanid %d from vlan filter\n", dev->name, vid);
679         vlan_group_set_device(np->vlgrp, vid, NULL);
680         set_rx_mode(dev);
681         spin_unlock(&np->lock);
682 }
683 #endif /* VLAN_SUPPORT */
684
685
686 static int __devinit starfire_init_one(struct pci_dev *pdev,
687                                        const struct pci_device_id *ent)
688 {
689         struct netdev_private *np;
690         int i, irq, option, chip_idx = ent->driver_data;
691         struct net_device *dev;
692         static int card_idx = -1;
693         long ioaddr;
694         void __iomem *base;
695         int drv_flags, io_size;
696         int boguscnt;
697
698 /* when built into the kernel, we only print version if device is found */
699 #ifndef MODULE
700         static int printed_version;
701         if (!printed_version++)
702                 printk(version);
703 #endif
704
705         card_idx++;
706
707         if (pci_enable_device (pdev))
708                 return -EIO;
709
710         ioaddr = pci_resource_start(pdev, 0);
711         io_size = pci_resource_len(pdev, 0);
712         if (!ioaddr || ((pci_resource_flags(pdev, 0) & IORESOURCE_MEM) == 0)) {
713                 printk(KERN_ERR DRV_NAME " %d: no PCI MEM resources, aborting\n", card_idx);
714                 return -ENODEV;
715         }
716
717         dev = alloc_etherdev(sizeof(*np));
718         if (!dev) {
719                 printk(KERN_ERR DRV_NAME " %d: cannot alloc etherdev, aborting\n", card_idx);
720                 return -ENOMEM;
721         }
722         SET_NETDEV_DEV(dev, &pdev->dev);
723
724         irq = pdev->irq;
725
726         if (pci_request_regions (pdev, DRV_NAME)) {
727                 printk(KERN_ERR DRV_NAME " %d: cannot reserve PCI resources, aborting\n", card_idx);
728                 goto err_out_free_netdev;
729         }
730
731         base = ioremap(ioaddr, io_size);
732         if (!base) {
733                 printk(KERN_ERR DRV_NAME " %d: cannot remap %#x @ %#lx, aborting\n",
734                         card_idx, io_size, ioaddr);
735                 goto err_out_free_res;
736         }
737
738         pci_set_master(pdev);
739
740         /* enable MWI -- it vastly improves Rx performance on sparc64 */
741         pci_try_set_mwi(pdev);
742
743 #ifdef ZEROCOPY
744         /* Starfire can do TCP/UDP checksumming */
745         if (enable_hw_cksum)
746                 dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
747 #endif /* ZEROCOPY */
748 #ifdef VLAN_SUPPORT
749         dev->features |= NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_FILTER;
750         dev->vlan_rx_register = netdev_vlan_rx_register;
751         dev->vlan_rx_add_vid = netdev_vlan_rx_add_vid;
752         dev->vlan_rx_kill_vid = netdev_vlan_rx_kill_vid;
753 #endif /* VLAN_RX_KILL_VID */
754 #ifdef ADDR_64BITS
755         dev->features |= NETIF_F_HIGHDMA;
756 #endif /* ADDR_64BITS */
757
758         /* Serial EEPROM reads are hidden by the hardware. */
759         for (i = 0; i < 6; i++)
760                 dev->dev_addr[i] = readb(base + EEPROMCtrl + 20 - i);
761
762 #if ! defined(final_version) /* Dump the EEPROM contents during development. */
763         if (debug > 4)
764                 for (i = 0; i < 0x20; i++)
765                         printk("%2.2x%s",
766                                (unsigned int)readb(base + EEPROMCtrl + i),
767                                i % 16 != 15 ? " " : "\n");
768 #endif
769
770         /* Issue soft reset */
771         writel(MiiSoftReset, base + TxMode);
772         udelay(1000);
773         writel(0, base + TxMode);
774
775         /* Reset the chip to erase previous misconfiguration. */
776         writel(1, base + PCIDeviceConfig);
777         boguscnt = 1000;
778         while (--boguscnt > 0) {
779                 udelay(10);
780                 if ((readl(base + PCIDeviceConfig) & 1) == 0)
781                         break;
782         }
783         if (boguscnt == 0)
784                 printk("%s: chipset reset never completed!\n", dev->name);
785         /* wait a little longer */
786         udelay(1000);
787
788         dev->base_addr = (unsigned long)base;
789         dev->irq = irq;
790
791         np = netdev_priv(dev);
792         np->dev = dev;
793         np->base = base;
794         spin_lock_init(&np->lock);
795         pci_set_drvdata(pdev, dev);
796
797         np->pci_dev = pdev;
798
799         np->mii_if.dev = dev;
800         np->mii_if.mdio_read = mdio_read;
801         np->mii_if.mdio_write = mdio_write;
802         np->mii_if.phy_id_mask = 0x1f;
803         np->mii_if.reg_num_mask = 0x1f;
804
805         drv_flags = netdrv_tbl[chip_idx].drv_flags;
806
807         option = card_idx < MAX_UNITS ? options[card_idx] : 0;
808         if (dev->mem_start)
809                 option = dev->mem_start;
810
811         /* The lower four bits are the media type. */
812         if (option & 0x200)
813                 np->mii_if.full_duplex = 1;
814
815         if (card_idx < MAX_UNITS && full_duplex[card_idx] > 0)
816                 np->mii_if.full_duplex = 1;
817
818         if (np->mii_if.full_duplex)
819                 np->mii_if.force_media = 1;
820         else
821                 np->mii_if.force_media = 0;
822         np->speed100 = 1;
823
824         /* timer resolution is 128 * 0.8us */
825         np->intr_timer_ctrl = (((intr_latency * 10) / 1024) & IntrLatencyMask) |
826                 Timer10X | EnableIntrMasking;
827
828         if (small_frames > 0) {
829                 np->intr_timer_ctrl |= SmallFrameBypass;
830                 switch (small_frames) {
831                 case 1 ... 64:
832                         np->intr_timer_ctrl |= SmallFrame64;
833                         break;
834                 case 65 ... 128:
835                         np->intr_timer_ctrl |= SmallFrame128;
836                         break;
837                 case 129 ... 256:
838                         np->intr_timer_ctrl |= SmallFrame256;
839                         break;
840                 default:
841                         np->intr_timer_ctrl |= SmallFrame512;
842                         if (small_frames > 512)
843                                 printk("Adjusting small_frames down to 512\n");
844                         break;
845                 }
846         }
847
848         /* The chip-specific entries in the device structure. */
849         dev->open = &netdev_open;
850         dev->hard_start_xmit = &start_tx;
851         dev->tx_timeout = tx_timeout;
852         dev->watchdog_timeo = TX_TIMEOUT;
853         init_poll(dev, np);
854         dev->stop = &netdev_close;
855         dev->get_stats = &get_stats;
856         dev->set_multicast_list = &set_rx_mode;
857         dev->do_ioctl = &netdev_ioctl;
858         SET_ETHTOOL_OPS(dev, &ethtool_ops);
859
860         if (mtu)
861                 dev->mtu = mtu;
862
863         if (register_netdev(dev))
864                 goto err_out_cleardev;
865
866         printk(KERN_INFO "%s: %s at %p, ",
867                    dev->name, netdrv_tbl[chip_idx].name, base);
868         for (i = 0; i < 5; i++)
869                 printk("%2.2x:", dev->dev_addr[i]);
870         printk("%2.2x, IRQ %d.\n", dev->dev_addr[i], irq);
871
872         if (drv_flags & CanHaveMII) {
873                 int phy, phy_idx = 0;
874                 int mii_status;
875                 for (phy = 0; phy < 32 && phy_idx < PHY_CNT; phy++) {
876                         mdio_write(dev, phy, MII_BMCR, BMCR_RESET);
877                         mdelay(100);
878                         boguscnt = 1000;
879                         while (--boguscnt > 0)
880                                 if ((mdio_read(dev, phy, MII_BMCR) & BMCR_RESET) == 0)
881                                         break;
882                         if (boguscnt == 0) {
883                                 printk("%s: PHY#%d reset never completed!\n", dev->name, phy);
884                                 continue;
885                         }
886                         mii_status = mdio_read(dev, phy, MII_BMSR);
887                         if (mii_status != 0) {
888                                 np->phys[phy_idx++] = phy;
889                                 np->mii_if.advertising = mdio_read(dev, phy, MII_ADVERTISE);
890                                 printk(KERN_INFO "%s: MII PHY found at address %d, status "
891                                            "%#4.4x advertising %#4.4x.\n",
892                                            dev->name, phy, mii_status, np->mii_if.advertising);
893                                 /* there can be only one PHY on-board */
894                                 break;
895                         }
896                 }
897                 np->phy_cnt = phy_idx;
898                 if (np->phy_cnt > 0)
899                         np->mii_if.phy_id = np->phys[0];
900                 else
901                         memset(&np->mii_if, 0, sizeof(np->mii_if));
902         }
903
904         printk(KERN_INFO "%s: scatter-gather and hardware TCP cksumming %s.\n",
905                dev->name, enable_hw_cksum ? "enabled" : "disabled");
906         return 0;
907
908 err_out_cleardev:
909         pci_set_drvdata(pdev, NULL);
910         iounmap(base);
911 err_out_free_res:
912         pci_release_regions (pdev);
913 err_out_free_netdev:
914         free_netdev(dev);
915         return -ENODEV;
916 }
917
918
919 /* Read the MII Management Data I/O (MDIO) interfaces. */
920 static int mdio_read(struct net_device *dev, int phy_id, int location)
921 {
922         struct netdev_private *np = netdev_priv(dev);
923         void __iomem *mdio_addr = np->base + MIICtrl + (phy_id<<7) + (location<<2);
924         int result, boguscnt=1000;
925         /* ??? Should we add a busy-wait here? */
926         do
927                 result = readl(mdio_addr);
928         while ((result & 0xC0000000) != 0x80000000 && --boguscnt > 0);
929         if (boguscnt == 0)
930                 return 0;
931         if ((result & 0xffff) == 0xffff)
932                 return 0;
933         return result & 0xffff;
934 }
935
936
937 static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
938 {
939         struct netdev_private *np = netdev_priv(dev);
940         void __iomem *mdio_addr = np->base + MIICtrl + (phy_id<<7) + (location<<2);
941         writel(value, mdio_addr);
942         /* The busy-wait will occur before a read. */
943 }
944
945
946 static int netdev_open(struct net_device *dev)
947 {
948         struct netdev_private *np = netdev_priv(dev);
949         void __iomem *ioaddr = np->base;
950         int i, retval;
951         size_t tx_done_q_size, rx_done_q_size, tx_ring_size, rx_ring_size;
952
953         /* Do we ever need to reset the chip??? */
954
955         retval = request_irq(dev->irq, &intr_handler, IRQF_SHARED, dev->name, dev);
956         if (retval)
957                 return retval;
958
959         /* Disable the Rx and Tx, and reset the chip. */
960         writel(0, ioaddr + GenCtrl);
961         writel(1, ioaddr + PCIDeviceConfig);
962         if (debug > 1)
963                 printk(KERN_DEBUG "%s: netdev_open() irq %d.\n",
964                        dev->name, dev->irq);
965
966         /* Allocate the various queues. */
967         if (np->queue_mem == 0) {
968                 tx_done_q_size = ((sizeof(struct tx_done_desc) * DONE_Q_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN;
969                 rx_done_q_size = ((sizeof(rx_done_desc) * DONE_Q_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN;
970                 tx_ring_size = ((sizeof(starfire_tx_desc) * TX_RING_SIZE + QUEUE_ALIGN - 1) / QUEUE_ALIGN) * QUEUE_ALIGN;
971                 rx_ring_size = sizeof(struct starfire_rx_desc) * RX_RING_SIZE;
972                 np->queue_mem_size = tx_done_q_size + rx_done_q_size + tx_ring_size + rx_ring_size;
973                 np->queue_mem = pci_alloc_consistent(np->pci_dev, np->queue_mem_size, &np->queue_mem_dma);
974                 if (np->queue_mem == NULL) {
975                         free_irq(dev->irq, dev);
976                         return -ENOMEM;
977                 }
978
979                 np->tx_done_q     = np->queue_mem;
980                 np->tx_done_q_dma = np->queue_mem_dma;
981                 np->rx_done_q     = (void *) np->tx_done_q + tx_done_q_size;
982                 np->rx_done_q_dma = np->tx_done_q_dma + tx_done_q_size;
983                 np->tx_ring       = (void *) np->rx_done_q + rx_done_q_size;
984                 np->tx_ring_dma   = np->rx_done_q_dma + rx_done_q_size;
985                 np->rx_ring       = (void *) np->tx_ring + tx_ring_size;
986                 np->rx_ring_dma   = np->tx_ring_dma + tx_ring_size;
987         }
988
989         /* Start with no carrier, it gets adjusted later */
990         netif_carrier_off(dev);
991         init_ring(dev);
992         /* Set the size of the Rx buffers. */
993         writel((np->rx_buf_sz << RxBufferLenShift) |
994                (0 << RxMinDescrThreshShift) |
995                RxPrefetchMode | RxVariableQ |
996                RX_Q_ENTRIES |
997                RX_DESC_Q_ADDR_SIZE | RX_DESC_ADDR_SIZE |
998                RxDescSpace4,
999                ioaddr + RxDescQCtrl);
1000
1001         /* Set up the Rx DMA controller. */
1002         writel(RxChecksumIgnore |
1003                (0 << RxEarlyIntThreshShift) |
1004                (6 << RxHighPrioThreshShift) |
1005                ((DMA_BURST_SIZE / 32) << RxBurstSizeShift),
1006                ioaddr + RxDMACtrl);
1007
1008         /* Set Tx descriptor */
1009         writel((2 << TxHiPriFIFOThreshShift) |
1010                (0 << TxPadLenShift) |
1011                ((DMA_BURST_SIZE / 32) << TxDMABurstSizeShift) |
1012                TX_DESC_Q_ADDR_SIZE |
1013                TX_DESC_SPACING | TX_DESC_TYPE,
1014                ioaddr + TxDescCtrl);
1015
1016         writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + RxDescQHiAddr);
1017         writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + TxRingHiAddr);
1018         writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + CompletionHiAddr);
1019         writel(np->rx_ring_dma, ioaddr + RxDescQAddr);
1020         writel(np->tx_ring_dma, ioaddr + TxRingPtr);
1021
1022         writel(np->tx_done_q_dma, ioaddr + TxCompletionAddr);
1023         writel(np->rx_done_q_dma |
1024                RxComplType |
1025                (0 << RxComplThreshShift),
1026                ioaddr + RxCompletionAddr);
1027
1028         if (debug > 1)
1029                 printk(KERN_DEBUG "%s: Filling in the station address.\n", dev->name);
1030
1031         /* Fill both the Tx SA register and the Rx perfect filter. */
1032         for (i = 0; i < 6; i++)
1033                 writeb(dev->dev_addr[i], ioaddr + TxStationAddr + 5 - i);
1034         /* The first entry is special because it bypasses the VLAN filter.
1035            Don't use it. */
1036         writew(0, ioaddr + PerfFilterTable);
1037         writew(0, ioaddr + PerfFilterTable + 4);
1038         writew(0, ioaddr + PerfFilterTable + 8);
1039         for (i = 1; i < 16; i++) {
1040                 u16 *eaddrs = (u16 *)dev->dev_addr;
1041                 void __iomem *setup_frm = ioaddr + PerfFilterTable + i * 16;
1042                 writew(cpu_to_be16(eaddrs[2]), setup_frm); setup_frm += 4;
1043                 writew(cpu_to_be16(eaddrs[1]), setup_frm); setup_frm += 4;
1044                 writew(cpu_to_be16(eaddrs[0]), setup_frm); setup_frm += 8;
1045         }
1046
1047         /* Initialize other registers. */
1048         /* Configure the PCI bus bursts and FIFO thresholds. */
1049         np->tx_mode = TxFlowEnable|RxFlowEnable|PadEnable;      /* modified when link is up. */
1050         writel(MiiSoftReset | np->tx_mode, ioaddr + TxMode);
1051         udelay(1000);
1052         writel(np->tx_mode, ioaddr + TxMode);
1053         np->tx_threshold = 4;
1054         writel(np->tx_threshold, ioaddr + TxThreshold);
1055
1056         writel(np->intr_timer_ctrl, ioaddr + IntrTimerCtrl);
1057
1058 #ifdef HAVE_NETDEV_POLL
1059         napi_enable(&np->napi);
1060 #endif
1061         netif_start_queue(dev);
1062
1063         if (debug > 1)
1064                 printk(KERN_DEBUG "%s: Setting the Rx and Tx modes.\n", dev->name);
1065         set_rx_mode(dev);
1066
1067         np->mii_if.advertising = mdio_read(dev, np->phys[0], MII_ADVERTISE);
1068         check_duplex(dev);
1069
1070         /* Enable GPIO interrupts on link change */
1071         writel(0x0f00ff00, ioaddr + GPIOCtrl);
1072
1073         /* Set the interrupt mask */
1074         writel(IntrRxDone | IntrRxEmpty | IntrDMAErr |
1075                IntrTxDMADone | IntrStatsMax | IntrLinkChange |
1076                IntrRxGFPDead | IntrNoTxCsum | IntrTxBadID,
1077                ioaddr + IntrEnable);
1078         /* Enable PCI interrupts. */
1079         writel(0x00800000 | readl(ioaddr + PCIDeviceConfig),
1080                ioaddr + PCIDeviceConfig);
1081
1082 #ifdef VLAN_SUPPORT
1083         /* Set VLAN type to 802.1q */
1084         writel(ETH_P_8021Q, ioaddr + VlanType);
1085 #endif /* VLAN_SUPPORT */
1086
1087         /* Load Rx/Tx firmware into the frame processors */
1088         for (i = 0; i < FIRMWARE_RX_SIZE * 2; i++)
1089                 writel(firmware_rx[i], ioaddr + RxGfpMem + i * 4);
1090         for (i = 0; i < FIRMWARE_TX_SIZE * 2; i++)
1091                 writel(firmware_tx[i], ioaddr + TxGfpMem + i * 4);
1092         if (enable_hw_cksum)
1093                 /* Enable the Rx and Tx units, and the Rx/Tx frame processors. */
1094                 writel(TxEnable|TxGFPEnable|RxEnable|RxGFPEnable, ioaddr + GenCtrl);
1095         else
1096                 /* Enable the Rx and Tx units only. */
1097                 writel(TxEnable|RxEnable, ioaddr + GenCtrl);
1098
1099         if (debug > 1)
1100                 printk(KERN_DEBUG "%s: Done netdev_open().\n",
1101                        dev->name);
1102
1103         return 0;
1104 }
1105
1106
1107 static void check_duplex(struct net_device *dev)
1108 {
1109         struct netdev_private *np = netdev_priv(dev);
1110         u16 reg0;
1111         int silly_count = 1000;
1112
1113         mdio_write(dev, np->phys[0], MII_ADVERTISE, np->mii_if.advertising);
1114         mdio_write(dev, np->phys[0], MII_BMCR, BMCR_RESET);
1115         udelay(500);
1116         while (--silly_count && mdio_read(dev, np->phys[0], MII_BMCR) & BMCR_RESET)
1117                 /* do nothing */;
1118         if (!silly_count) {
1119                 printk("%s: MII reset failed!\n", dev->name);
1120                 return;
1121         }
1122
1123         reg0 = mdio_read(dev, np->phys[0], MII_BMCR);
1124
1125         if (!np->mii_if.force_media) {
1126                 reg0 |= BMCR_ANENABLE | BMCR_ANRESTART;
1127         } else {
1128                 reg0 &= ~(BMCR_ANENABLE | BMCR_ANRESTART);
1129                 if (np->speed100)
1130                         reg0 |= BMCR_SPEED100;
1131                 if (np->mii_if.full_duplex)
1132                         reg0 |= BMCR_FULLDPLX;
1133                 printk(KERN_DEBUG "%s: Link forced to %sMbit %s-duplex\n",
1134                        dev->name,
1135                        np->speed100 ? "100" : "10",
1136                        np->mii_if.full_duplex ? "full" : "half");
1137         }
1138         mdio_write(dev, np->phys[0], MII_BMCR, reg0);
1139 }
1140
1141
1142 static void tx_timeout(struct net_device *dev)
1143 {
1144         struct netdev_private *np = netdev_priv(dev);
1145         void __iomem *ioaddr = np->base;
1146         int old_debug;
1147
1148         printk(KERN_WARNING "%s: Transmit timed out, status %#8.8x, "
1149                "resetting...\n", dev->name, (int) readl(ioaddr + IntrStatus));
1150
1151         /* Perhaps we should reinitialize the hardware here. */
1152
1153         /*
1154          * Stop and restart the interface.
1155          * Cheat and increase the debug level temporarily.
1156          */
1157         old_debug = debug;
1158         debug = 2;
1159         netdev_close(dev);
1160         netdev_open(dev);
1161         debug = old_debug;
1162
1163         /* Trigger an immediate transmit demand. */
1164
1165         dev->trans_start = jiffies;
1166         np->stats.tx_errors++;
1167         netif_wake_queue(dev);
1168 }
1169
1170
1171 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
1172 static void init_ring(struct net_device *dev)
1173 {
1174         struct netdev_private *np = netdev_priv(dev);
1175         int i;
1176
1177         np->cur_rx = np->cur_tx = np->reap_tx = 0;
1178         np->dirty_rx = np->dirty_tx = np->rx_done = np->tx_done = 0;
1179
1180         np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1181
1182         /* Fill in the Rx buffers.  Handle allocation failure gracefully. */
1183         for (i = 0; i < RX_RING_SIZE; i++) {
1184                 struct sk_buff *skb = dev_alloc_skb(np->rx_buf_sz);
1185                 np->rx_info[i].skb = skb;
1186                 if (skb == NULL)
1187                         break;
1188                 np->rx_info[i].mapping = pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1189                 skb->dev = dev;                 /* Mark as being used by this device. */
1190                 /* Grrr, we cannot offset to correctly align the IP header. */
1191                 np->rx_ring[i].rxaddr = cpu_to_dma(np->rx_info[i].mapping | RxDescValid);
1192         }
1193         writew(i - 1, np->base + RxDescQIdx);
1194         np->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
1195
1196         /* Clear the remainder of the Rx buffer ring. */
1197         for (  ; i < RX_RING_SIZE; i++) {
1198                 np->rx_ring[i].rxaddr = 0;
1199                 np->rx_info[i].skb = NULL;
1200                 np->rx_info[i].mapping = 0;
1201         }
1202         /* Mark the last entry as wrapping the ring. */
1203         np->rx_ring[RX_RING_SIZE - 1].rxaddr |= cpu_to_dma(RxDescEndRing);
1204
1205         /* Clear the completion rings. */
1206         for (i = 0; i < DONE_Q_SIZE; i++) {
1207                 np->rx_done_q[i].status = 0;
1208                 np->tx_done_q[i].status = 0;
1209         }
1210
1211         for (i = 0; i < TX_RING_SIZE; i++)
1212                 memset(&np->tx_info[i], 0, sizeof(np->tx_info[i]));
1213
1214         return;
1215 }
1216
1217
1218 static int start_tx(struct sk_buff *skb, struct net_device *dev)
1219 {
1220         struct netdev_private *np = netdev_priv(dev);
1221         unsigned int entry;
1222         u32 status;
1223         int i;
1224
1225         /*
1226          * be cautious here, wrapping the queue has weird semantics
1227          * and we may not have enough slots even when it seems we do.
1228          */
1229         if ((np->cur_tx - np->dirty_tx) + skb_num_frags(skb) * 2 > TX_RING_SIZE) {
1230                 netif_stop_queue(dev);
1231                 return 1;
1232         }
1233
1234 #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE)
1235         if (skb->ip_summed == CHECKSUM_PARTIAL) {
1236                 if (skb_padto(skb, (skb->len + PADDING_MASK) & ~PADDING_MASK))
1237                         return NETDEV_TX_OK;
1238         }
1239 #endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */
1240
1241         entry = np->cur_tx % TX_RING_SIZE;
1242         for (i = 0; i < skb_num_frags(skb); i++) {
1243                 int wrap_ring = 0;
1244                 status = TxDescID;
1245
1246                 if (i == 0) {
1247                         np->tx_info[entry].skb = skb;
1248                         status |= TxCRCEn;
1249                         if (entry >= TX_RING_SIZE - skb_num_frags(skb)) {
1250                                 status |= TxRingWrap;
1251                                 wrap_ring = 1;
1252                         }
1253                         if (np->reap_tx) {
1254                                 status |= TxDescIntr;
1255                                 np->reap_tx = 0;
1256                         }
1257                         if (skb->ip_summed == CHECKSUM_PARTIAL) {
1258                                 status |= TxCalTCP;
1259                                 np->stats.tx_compressed++;
1260                         }
1261                         status |= skb_first_frag_len(skb) | (skb_num_frags(skb) << 16);
1262
1263                         np->tx_info[entry].mapping =
1264                                 pci_map_single(np->pci_dev, skb->data, skb_first_frag_len(skb), PCI_DMA_TODEVICE);
1265                 } else {
1266                         skb_frag_t *this_frag = &skb_shinfo(skb)->frags[i - 1];
1267                         status |= this_frag->size;
1268                         np->tx_info[entry].mapping =
1269                                 pci_map_single(np->pci_dev, page_address(this_frag->page) + this_frag->page_offset, this_frag->size, PCI_DMA_TODEVICE);
1270                 }
1271
1272                 np->tx_ring[entry].addr = cpu_to_dma(np->tx_info[entry].mapping);
1273                 np->tx_ring[entry].status = cpu_to_le32(status);
1274                 if (debug > 3)
1275                         printk(KERN_DEBUG "%s: Tx #%d/#%d slot %d status %#8.8x.\n",
1276                                dev->name, np->cur_tx, np->dirty_tx,
1277                                entry, status);
1278                 if (wrap_ring) {
1279                         np->tx_info[entry].used_slots = TX_RING_SIZE - entry;
1280                         np->cur_tx += np->tx_info[entry].used_slots;
1281                         entry = 0;
1282                 } else {
1283                         np->tx_info[entry].used_slots = 1;
1284                         np->cur_tx += np->tx_info[entry].used_slots;
1285                         entry++;
1286                 }
1287                 /* scavenge the tx descriptors twice per TX_RING_SIZE */
1288                 if (np->cur_tx % (TX_RING_SIZE / 2) == 0)
1289                         np->reap_tx = 1;
1290         }
1291
1292         /* Non-x86: explicitly flush descriptor cache lines here. */
1293         /* Ensure all descriptors are written back before the transmit is
1294            initiated. - Jes */
1295         wmb();
1296
1297         /* Update the producer index. */
1298         writel(entry * (sizeof(starfire_tx_desc) / 8), np->base + TxProducerIdx);
1299
1300         /* 4 is arbitrary, but should be ok */
1301         if ((np->cur_tx - np->dirty_tx) + 4 > TX_RING_SIZE)
1302                 netif_stop_queue(dev);
1303
1304         dev->trans_start = jiffies;
1305
1306         return 0;
1307 }
1308
1309
1310 /* The interrupt handler does all of the Rx thread work and cleans up
1311    after the Tx thread. */
1312 static irqreturn_t intr_handler(int irq, void *dev_instance)
1313 {
1314         struct net_device *dev = dev_instance;
1315         struct netdev_private *np = netdev_priv(dev);
1316         void __iomem *ioaddr = np->base;
1317         int boguscnt = max_interrupt_work;
1318         int consumer;
1319         int tx_status;
1320         int handled = 0;
1321
1322         do {
1323                 u32 intr_status = readl(ioaddr + IntrClear);
1324
1325                 if (debug > 4)
1326                         printk(KERN_DEBUG "%s: Interrupt status %#8.8x.\n",
1327                                dev->name, intr_status);
1328
1329                 if (intr_status == 0 || intr_status == (u32) -1)
1330                         break;
1331
1332                 handled = 1;
1333
1334                 if (intr_status & (IntrRxDone | IntrRxEmpty))
1335                         netdev_rx(dev, np, ioaddr);
1336
1337                 /* Scavenge the skbuff list based on the Tx-done queue.
1338                    There are redundant checks here that may be cleaned up
1339                    after the driver has proven to be reliable. */
1340                 consumer = readl(ioaddr + TxConsumerIdx);
1341                 if (debug > 3)
1342                         printk(KERN_DEBUG "%s: Tx Consumer index is %d.\n",
1343                                dev->name, consumer);
1344
1345                 while ((tx_status = le32_to_cpu(np->tx_done_q[np->tx_done].status)) != 0) {
1346                         if (debug > 3)
1347                                 printk(KERN_DEBUG "%s: Tx completion #%d entry %d is %#8.8x.\n",
1348                                        dev->name, np->dirty_tx, np->tx_done, tx_status);
1349                         if ((tx_status & 0xe0000000) == 0xa0000000) {
1350                                 np->stats.tx_packets++;
1351                         } else if ((tx_status & 0xe0000000) == 0x80000000) {
1352                                 u16 entry = (tx_status & 0x7fff) / sizeof(starfire_tx_desc);
1353                                 struct sk_buff *skb = np->tx_info[entry].skb;
1354                                 np->tx_info[entry].skb = NULL;
1355                                 pci_unmap_single(np->pci_dev,
1356                                                  np->tx_info[entry].mapping,
1357                                                  skb_first_frag_len(skb),
1358                                                  PCI_DMA_TODEVICE);
1359                                 np->tx_info[entry].mapping = 0;
1360                                 np->dirty_tx += np->tx_info[entry].used_slots;
1361                                 entry = (entry + np->tx_info[entry].used_slots) % TX_RING_SIZE;
1362                                 {
1363                                         int i;
1364                                         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1365                                                 pci_unmap_single(np->pci_dev,
1366                                                                  np->tx_info[entry].mapping,
1367                                                                  skb_shinfo(skb)->frags[i].size,
1368                                                                  PCI_DMA_TODEVICE);
1369                                                 np->dirty_tx++;
1370                                                 entry++;
1371                                         }
1372                                 }
1373
1374                                 dev_kfree_skb_irq(skb);
1375                         }
1376                         np->tx_done_q[np->tx_done].status = 0;
1377                         np->tx_done = (np->tx_done + 1) % DONE_Q_SIZE;
1378                 }
1379                 writew(np->tx_done, ioaddr + CompletionQConsumerIdx + 2);
1380
1381                 if (netif_queue_stopped(dev) &&
1382                     (np->cur_tx - np->dirty_tx + 4 < TX_RING_SIZE)) {
1383                         /* The ring is no longer full, wake the queue. */
1384                         netif_wake_queue(dev);
1385                 }
1386
1387                 /* Stats overflow */
1388                 if (intr_status & IntrStatsMax)
1389                         get_stats(dev);
1390
1391                 /* Media change interrupt. */
1392                 if (intr_status & IntrLinkChange)
1393                         netdev_media_change(dev);
1394
1395                 /* Abnormal error summary/uncommon events handlers. */
1396                 if (intr_status & IntrAbnormalSummary)
1397                         netdev_error(dev, intr_status);
1398
1399                 if (--boguscnt < 0) {
1400                         if (debug > 1)
1401                                 printk(KERN_WARNING "%s: Too much work at interrupt, "
1402                                        "status=%#8.8x.\n",
1403                                        dev->name, intr_status);
1404                         break;
1405                 }
1406         } while (1);
1407
1408         if (debug > 4)
1409                 printk(KERN_DEBUG "%s: exiting interrupt, status=%#8.8x.\n",
1410                        dev->name, (int) readl(ioaddr + IntrStatus));
1411         return IRQ_RETVAL(handled);
1412 }
1413
1414
1415 /* This routine is logically part of the interrupt/poll handler, but separated
1416    for clarity, code sharing between NAPI/non-NAPI, and better register allocation. */
1417 static int __netdev_rx(struct net_device *dev, int *quota)
1418 {
1419         struct netdev_private *np = netdev_priv(dev);
1420         u32 desc_status;
1421         int retcode = 0;
1422
1423         /* If EOP is set on the next entry, it's a new packet. Send it up. */
1424         while ((desc_status = le32_to_cpu(np->rx_done_q[np->rx_done].status)) != 0) {
1425                 struct sk_buff *skb;
1426                 u16 pkt_len;
1427                 int entry;
1428                 rx_done_desc *desc = &np->rx_done_q[np->rx_done];
1429
1430                 if (debug > 4)
1431                         printk(KERN_DEBUG "  netdev_rx() status of %d was %#8.8x.\n", np->rx_done, desc_status);
1432                 if (!(desc_status & RxOK)) {
1433                         /* There was an error. */
1434                         if (debug > 2)
1435                                 printk(KERN_DEBUG "  netdev_rx() Rx error was %#8.8x.\n", desc_status);
1436                         np->stats.rx_errors++;
1437                         if (desc_status & RxFIFOErr)
1438                                 np->stats.rx_fifo_errors++;
1439                         goto next_rx;
1440                 }
1441
1442                 if (*quota <= 0) {      /* out of rx quota */
1443                         retcode = 1;
1444                         goto out;
1445                 }
1446                 (*quota)--;
1447
1448                 pkt_len = desc_status;  /* Implicitly Truncate */
1449                 entry = (desc_status >> 16) & 0x7ff;
1450
1451                 if (debug > 4)
1452                         printk(KERN_DEBUG "  netdev_rx() normal Rx pkt length %d, quota %d.\n", pkt_len, *quota);
1453                 /* Check if the packet is long enough to accept without copying
1454                    to a minimally-sized skbuff. */
1455                 if (pkt_len < rx_copybreak
1456                     && (skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
1457                         skb_reserve(skb, 2);    /* 16 byte align the IP header */
1458                         pci_dma_sync_single_for_cpu(np->pci_dev,
1459                                                     np->rx_info[entry].mapping,
1460                                                     pkt_len, PCI_DMA_FROMDEVICE);
1461                         skb_copy_to_linear_data(skb, np->rx_info[entry].skb->data, pkt_len);
1462                         pci_dma_sync_single_for_device(np->pci_dev,
1463                                                        np->rx_info[entry].mapping,
1464                                                        pkt_len, PCI_DMA_FROMDEVICE);
1465                         skb_put(skb, pkt_len);
1466                 } else {
1467                         pci_unmap_single(np->pci_dev, np->rx_info[entry].mapping, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1468                         skb = np->rx_info[entry].skb;
1469                         skb_put(skb, pkt_len);
1470                         np->rx_info[entry].skb = NULL;
1471                         np->rx_info[entry].mapping = 0;
1472                 }
1473 #ifndef final_version                   /* Remove after testing. */
1474                 /* You will want this info for the initial debug. */
1475                 if (debug > 5)
1476                         printk(KERN_DEBUG "  Rx data %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:"
1477                                "%2.2x %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x %2.2x%2.2x.\n",
1478                                skb->data[0], skb->data[1], skb->data[2], skb->data[3],
1479                                skb->data[4], skb->data[5], skb->data[6], skb->data[7],
1480                                skb->data[8], skb->data[9], skb->data[10],
1481                                skb->data[11], skb->data[12], skb->data[13]);
1482 #endif
1483
1484                 skb->protocol = eth_type_trans(skb, dev);
1485 #ifdef VLAN_SUPPORT
1486                 if (debug > 4)
1487                         printk(KERN_DEBUG "  netdev_rx() status2 of %d was %#4.4x.\n", np->rx_done, le16_to_cpu(desc->status2));
1488 #endif
1489                 if (le16_to_cpu(desc->status2) & 0x0100) {
1490                         skb->ip_summed = CHECKSUM_UNNECESSARY;
1491                         np->stats.rx_compressed++;
1492                 }
1493                 /*
1494                  * This feature doesn't seem to be working, at least
1495                  * with the two firmware versions I have. If the GFP sees
1496                  * an IP fragment, it either ignores it completely, or reports
1497                  * "bad checksum" on it.
1498                  *
1499                  * Maybe I missed something -- corrections are welcome.
1500                  * Until then, the printk stays. :-) -Ion
1501                  */
1502                 else if (le16_to_cpu(desc->status2) & 0x0040) {
1503                         skb->ip_summed = CHECKSUM_COMPLETE;
1504                         skb->csum = le16_to_cpu(desc->csum);
1505                         printk(KERN_DEBUG "%s: checksum_hw, status2 = %#x\n", dev->name, le16_to_cpu(desc->status2));
1506                 }
1507 #ifdef VLAN_SUPPORT
1508                 if (np->vlgrp && le16_to_cpu(desc->status2) & 0x0200) {
1509                         if (debug > 4)
1510                                 printk(KERN_DEBUG "  netdev_rx() vlanid = %d\n", le16_to_cpu(desc->vlanid));
1511                         /* vlan_netdev_receive_skb() expects a packet with the VLAN tag stripped out */
1512                         vlan_netdev_receive_skb(skb, np->vlgrp, le16_to_cpu(desc->vlanid) & VLAN_VID_MASK);
1513                 } else
1514 #endif /* VLAN_SUPPORT */
1515                         netdev_receive_skb(skb);
1516                 dev->last_rx = jiffies;
1517                 np->stats.rx_packets++;
1518
1519         next_rx:
1520                 np->cur_rx++;
1521                 desc->status = 0;
1522                 np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE;
1523         }
1524         writew(np->rx_done, np->base + CompletionQConsumerIdx);
1525
1526  out:
1527         refill_rx_ring(dev);
1528         if (debug > 5)
1529                 printk(KERN_DEBUG "  exiting netdev_rx(): %d, status of %d was %#8.8x.\n",
1530                        retcode, np->rx_done, desc_status);
1531         return retcode;
1532 }
1533
1534
1535 #ifdef HAVE_NETDEV_POLL
1536 static int netdev_poll(struct napi_struct *napi, int budget)
1537 {
1538         struct netdev_private *np = container_of(napi, struct netdev_private, napi);
1539         struct net_device *dev = np->dev;
1540         u32 intr_status;
1541         void __iomem *ioaddr = np->base;
1542         int quota = budget;
1543
1544         do {
1545                 writel(IntrRxDone | IntrRxEmpty, ioaddr + IntrClear);
1546
1547                 if (__netdev_rx(dev, &quota))
1548                         goto out;
1549
1550                 intr_status = readl(ioaddr + IntrStatus);
1551         } while (intr_status & (IntrRxDone | IntrRxEmpty));
1552
1553         netif_rx_complete(dev, napi);
1554         intr_status = readl(ioaddr + IntrEnable);
1555         intr_status |= IntrRxDone | IntrRxEmpty;
1556         writel(intr_status, ioaddr + IntrEnable);
1557
1558  out:
1559         if (debug > 5)
1560                 printk(KERN_DEBUG "  exiting netdev_poll(): %d.\n",
1561                        budget - quota);
1562
1563         /* Restart Rx engine if stopped. */
1564         return budget - quota;
1565 }
1566 #endif /* HAVE_NETDEV_POLL */
1567
1568
1569 static void refill_rx_ring(struct net_device *dev)
1570 {
1571         struct netdev_private *np = netdev_priv(dev);
1572         struct sk_buff *skb;
1573         int entry = -1;
1574
1575         /* Refill the Rx ring buffers. */
1576         for (; np->cur_rx - np->dirty_rx > 0; np->dirty_rx++) {
1577                 entry = np->dirty_rx % RX_RING_SIZE;
1578                 if (np->rx_info[entry].skb == NULL) {
1579                         skb = dev_alloc_skb(np->rx_buf_sz);
1580                         np->rx_info[entry].skb = skb;
1581                         if (skb == NULL)
1582                                 break;  /* Better luck next round. */
1583                         np->rx_info[entry].mapping =
1584                                 pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1585                         skb->dev = dev; /* Mark as being used by this device. */
1586                         np->rx_ring[entry].rxaddr =
1587                                 cpu_to_dma(np->rx_info[entry].mapping | RxDescValid);
1588                 }
1589                 if (entry == RX_RING_SIZE - 1)
1590                         np->rx_ring[entry].rxaddr |= cpu_to_dma(RxDescEndRing);
1591         }
1592         if (entry >= 0)
1593                 writew(entry, np->base + RxDescQIdx);
1594 }
1595
1596
1597 static void netdev_media_change(struct net_device *dev)
1598 {
1599         struct netdev_private *np = netdev_priv(dev);
1600         void __iomem *ioaddr = np->base;
1601         u16 reg0, reg1, reg4, reg5;
1602         u32 new_tx_mode;
1603         u32 new_intr_timer_ctrl;
1604
1605         /* reset status first */
1606         mdio_read(dev, np->phys[0], MII_BMCR);
1607         mdio_read(dev, np->phys[0], MII_BMSR);
1608
1609         reg0 = mdio_read(dev, np->phys[0], MII_BMCR);
1610         reg1 = mdio_read(dev, np->phys[0], MII_BMSR);
1611
1612         if (reg1 & BMSR_LSTATUS) {
1613                 /* link is up */
1614                 if (reg0 & BMCR_ANENABLE) {
1615                         /* autonegotiation is enabled */
1616                         reg4 = mdio_read(dev, np->phys[0], MII_ADVERTISE);
1617                         reg5 = mdio_read(dev, np->phys[0], MII_LPA);
1618                         if (reg4 & ADVERTISE_100FULL && reg5 & LPA_100FULL) {
1619                                 np->speed100 = 1;
1620                                 np->mii_if.full_duplex = 1;
1621                         } else if (reg4 & ADVERTISE_100HALF && reg5 & LPA_100HALF) {
1622                                 np->speed100 = 1;
1623                                 np->mii_if.full_duplex = 0;
1624                         } else if (reg4 & ADVERTISE_10FULL && reg5 & LPA_10FULL) {
1625                                 np->speed100 = 0;
1626                                 np->mii_if.full_duplex = 1;
1627                         } else {
1628                                 np->speed100 = 0;
1629                                 np->mii_if.full_duplex = 0;
1630                         }
1631                 } else {
1632                         /* autonegotiation is disabled */
1633                         if (reg0 & BMCR_SPEED100)
1634                                 np->speed100 = 1;
1635                         else
1636                                 np->speed100 = 0;
1637                         if (reg0 & BMCR_FULLDPLX)
1638                                 np->mii_if.full_duplex = 1;
1639                         else
1640                                 np->mii_if.full_duplex = 0;
1641                 }
1642                 netif_carrier_on(dev);
1643                 printk(KERN_DEBUG "%s: Link is up, running at %sMbit %s-duplex\n",
1644                        dev->name,
1645                        np->speed100 ? "100" : "10",
1646                        np->mii_if.full_duplex ? "full" : "half");
1647
1648                 new_tx_mode = np->tx_mode & ~FullDuplex;        /* duplex setting */
1649                 if (np->mii_if.full_duplex)
1650                         new_tx_mode |= FullDuplex;
1651                 if (np->tx_mode != new_tx_mode) {
1652                         np->tx_mode = new_tx_mode;
1653                         writel(np->tx_mode | MiiSoftReset, ioaddr + TxMode);
1654                         udelay(1000);
1655                         writel(np->tx_mode, ioaddr + TxMode);
1656                 }
1657
1658                 new_intr_timer_ctrl = np->intr_timer_ctrl & ~Timer10X;
1659                 if (np->speed100)
1660                         new_intr_timer_ctrl |= Timer10X;
1661                 if (np->intr_timer_ctrl != new_intr_timer_ctrl) {
1662                         np->intr_timer_ctrl = new_intr_timer_ctrl;
1663                         writel(new_intr_timer_ctrl, ioaddr + IntrTimerCtrl);
1664                 }
1665         } else {
1666                 netif_carrier_off(dev);
1667                 printk(KERN_DEBUG "%s: Link is down\n", dev->name);
1668         }
1669 }
1670
1671
1672 static void netdev_error(struct net_device *dev, int intr_status)
1673 {
1674         struct netdev_private *np = netdev_priv(dev);
1675
1676         /* Came close to underrunning the Tx FIFO, increase threshold. */
1677         if (intr_status & IntrTxDataLow) {
1678                 if (np->tx_threshold <= PKT_BUF_SZ / 16) {
1679                         writel(++np->tx_threshold, np->base + TxThreshold);
1680                         printk(KERN_NOTICE "%s: PCI bus congestion, increasing Tx FIFO threshold to %d bytes\n",
1681                                dev->name, np->tx_threshold * 16);
1682                 } else
1683                         printk(KERN_WARNING "%s: PCI Tx underflow -- adapter is probably malfunctioning\n", dev->name);
1684         }
1685         if (intr_status & IntrRxGFPDead) {
1686                 np->stats.rx_fifo_errors++;
1687                 np->stats.rx_errors++;
1688         }
1689         if (intr_status & (IntrNoTxCsum | IntrDMAErr)) {
1690                 np->stats.tx_fifo_errors++;
1691                 np->stats.tx_errors++;
1692         }
1693         if ((intr_status & ~(IntrNormalMask | IntrAbnormalSummary | IntrLinkChange | IntrStatsMax | IntrTxDataLow | IntrRxGFPDead | IntrNoTxCsum | IntrPCIPad)) && debug)
1694                 printk(KERN_ERR "%s: Something Wicked happened! %#8.8x.\n",
1695                        dev->name, intr_status);
1696 }
1697
1698
1699 static struct net_device_stats *get_stats(struct net_device *dev)
1700 {
1701         struct netdev_private *np = netdev_priv(dev);
1702         void __iomem *ioaddr = np->base;
1703
1704         /* This adapter architecture needs no SMP locks. */
1705         np->stats.tx_bytes = readl(ioaddr + 0x57010);
1706         np->stats.rx_bytes = readl(ioaddr + 0x57044);
1707         np->stats.tx_packets = readl(ioaddr + 0x57000);
1708         np->stats.tx_aborted_errors =
1709                 readl(ioaddr + 0x57024) + readl(ioaddr + 0x57028);
1710         np->stats.tx_window_errors = readl(ioaddr + 0x57018);
1711         np->stats.collisions =
1712                 readl(ioaddr + 0x57004) + readl(ioaddr + 0x57008);
1713
1714         /* The chip only need report frame silently dropped. */
1715         np->stats.rx_dropped += readw(ioaddr + RxDMAStatus);
1716         writew(0, ioaddr + RxDMAStatus);
1717         np->stats.rx_crc_errors = readl(ioaddr + 0x5703C);
1718         np->stats.rx_frame_errors = readl(ioaddr + 0x57040);
1719         np->stats.rx_length_errors = readl(ioaddr + 0x57058);
1720         np->stats.rx_missed_errors = readl(ioaddr + 0x5707C);
1721
1722         return &np->stats;
1723 }
1724
1725
1726 static void set_rx_mode(struct net_device *dev)
1727 {
1728         struct netdev_private *np = netdev_priv(dev);
1729         void __iomem *ioaddr = np->base;
1730         u32 rx_mode = MinVLANPrio;
1731         struct dev_mc_list *mclist;
1732         int i;
1733 #ifdef VLAN_SUPPORT
1734
1735         rx_mode |= VlanMode;
1736         if (np->vlgrp) {
1737                 int vlan_count = 0;
1738                 void __iomem *filter_addr = ioaddr + HashTable + 8;
1739                 for (i = 0; i < VLAN_VID_MASK; i++) {
1740                         if (vlan_group_get_device(np->vlgrp, i)) {
1741                                 if (vlan_count >= 32)
1742                                         break;
1743                                 writew(cpu_to_be16(i), filter_addr);
1744                                 filter_addr += 16;
1745                                 vlan_count++;
1746                         }
1747                 }
1748                 if (i == VLAN_VID_MASK) {
1749                         rx_mode |= PerfectFilterVlan;
1750                         while (vlan_count < 32) {
1751                                 writew(0, filter_addr);
1752                                 filter_addr += 16;
1753                                 vlan_count++;
1754                         }
1755                 }
1756         }
1757 #endif /* VLAN_SUPPORT */
1758
1759         if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
1760                 rx_mode |= AcceptAll;
1761         } else if ((dev->mc_count > multicast_filter_limit)
1762                    || (dev->flags & IFF_ALLMULTI)) {
1763                 /* Too many to match, or accept all multicasts. */
1764                 rx_mode |= AcceptBroadcast|AcceptAllMulticast|PerfectFilter;
1765         } else if (dev->mc_count <= 14) {
1766                 /* Use the 16 element perfect filter, skip first two entries. */
1767                 void __iomem *filter_addr = ioaddr + PerfFilterTable + 2 * 16;
1768                 u16 *eaddrs;
1769                 for (i = 2, mclist = dev->mc_list; mclist && i < dev->mc_count + 2;
1770                      i++, mclist = mclist->next) {
1771                         eaddrs = (u16 *)mclist->dmi_addr;
1772                         writew(cpu_to_be16(eaddrs[2]), filter_addr); filter_addr += 4;
1773                         writew(cpu_to_be16(eaddrs[1]), filter_addr); filter_addr += 4;
1774                         writew(cpu_to_be16(eaddrs[0]), filter_addr); filter_addr += 8;
1775                 }
1776                 eaddrs = (u16 *)dev->dev_addr;
1777                 while (i++ < 16) {
1778                         writew(cpu_to_be16(eaddrs[0]), filter_addr); filter_addr += 4;
1779                         writew(cpu_to_be16(eaddrs[1]), filter_addr); filter_addr += 4;
1780                         writew(cpu_to_be16(eaddrs[2]), filter_addr); filter_addr += 8;
1781                 }
1782                 rx_mode |= AcceptBroadcast|PerfectFilter;
1783         } else {
1784                 /* Must use a multicast hash table. */
1785                 void __iomem *filter_addr;
1786                 u16 *eaddrs;
1787                 u16 mc_filter[32] __attribute__ ((aligned(sizeof(long))));      /* Multicast hash filter */
1788
1789                 memset(mc_filter, 0, sizeof(mc_filter));
1790                 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
1791                      i++, mclist = mclist->next) {
1792                         /* The chip uses the upper 9 CRC bits
1793                            as index into the hash table */
1794                         int bit_nr = ether_crc_le(ETH_ALEN, mclist->dmi_addr) >> 23;
1795                         __u32 *fptr = (__u32 *) &mc_filter[(bit_nr >> 4) & ~1];
1796
1797                         *fptr |= cpu_to_le32(1 << (bit_nr & 31));
1798                 }
1799                 /* Clear the perfect filter list, skip first two entries. */
1800                 filter_addr = ioaddr + PerfFilterTable + 2 * 16;
1801                 eaddrs = (u16 *)dev->dev_addr;
1802                 for (i = 2; i < 16; i++) {
1803                         writew(cpu_to_be16(eaddrs[0]), filter_addr); filter_addr += 4;
1804                         writew(cpu_to_be16(eaddrs[1]), filter_addr); filter_addr += 4;
1805                         writew(cpu_to_be16(eaddrs[2]), filter_addr); filter_addr += 8;
1806                 }
1807                 for (filter_addr = ioaddr + HashTable, i = 0; i < 32; filter_addr+= 16, i++)
1808                         writew(mc_filter[i], filter_addr);
1809                 rx_mode |= AcceptBroadcast|PerfectFilter|HashFilter;
1810         }
1811         writel(rx_mode, ioaddr + RxFilterMode);
1812 }
1813
1814 static int check_if_running(struct net_device *dev)
1815 {
1816         if (!netif_running(dev))
1817                 return -EINVAL;
1818         return 0;
1819 }
1820
1821 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1822 {
1823         struct netdev_private *np = netdev_priv(dev);
1824         strcpy(info->driver, DRV_NAME);
1825         strcpy(info->version, DRV_VERSION);
1826         strcpy(info->bus_info, pci_name(np->pci_dev));
1827 }
1828
1829 static int get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1830 {
1831         struct netdev_private *np = netdev_priv(dev);
1832         spin_lock_irq(&np->lock);
1833         mii_ethtool_gset(&np->mii_if, ecmd);
1834         spin_unlock_irq(&np->lock);
1835         return 0;
1836 }
1837
1838 static int set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1839 {
1840         struct netdev_private *np = netdev_priv(dev);
1841         int res;
1842         spin_lock_irq(&np->lock);
1843         res = mii_ethtool_sset(&np->mii_if, ecmd);
1844         spin_unlock_irq(&np->lock);
1845         check_duplex(dev);
1846         return res;
1847 }
1848
1849 static int nway_reset(struct net_device *dev)
1850 {
1851         struct netdev_private *np = netdev_priv(dev);
1852         return mii_nway_restart(&np->mii_if);
1853 }
1854
1855 static u32 get_link(struct net_device *dev)
1856 {
1857         struct netdev_private *np = netdev_priv(dev);
1858         return mii_link_ok(&np->mii_if);
1859 }
1860
1861 static u32 get_msglevel(struct net_device *dev)
1862 {
1863         return debug;
1864 }
1865
1866 static void set_msglevel(struct net_device *dev, u32 val)
1867 {
1868         debug = val;
1869 }
1870
1871 static const struct ethtool_ops ethtool_ops = {
1872         .begin = check_if_running,
1873         .get_drvinfo = get_drvinfo,
1874         .get_settings = get_settings,
1875         .set_settings = set_settings,
1876         .nway_reset = nway_reset,
1877         .get_link = get_link,
1878         .get_msglevel = get_msglevel,
1879         .set_msglevel = set_msglevel,
1880 };
1881
1882 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1883 {
1884         struct netdev_private *np = netdev_priv(dev);
1885         struct mii_ioctl_data *data = if_mii(rq);
1886         int rc;
1887
1888         if (!netif_running(dev))
1889                 return -EINVAL;
1890
1891         spin_lock_irq(&np->lock);
1892         rc = generic_mii_ioctl(&np->mii_if, data, cmd, NULL);
1893         spin_unlock_irq(&np->lock);
1894
1895         if ((cmd == SIOCSMIIREG) && (data->phy_id == np->phys[0]))
1896                 check_duplex(dev);
1897
1898         return rc;
1899 }
1900
1901 static int netdev_close(struct net_device *dev)
1902 {
1903         struct netdev_private *np = netdev_priv(dev);
1904         void __iomem *ioaddr = np->base;
1905         int i;
1906
1907         netif_stop_queue(dev);
1908 #ifdef HAVE_NETDEV_POLL
1909         napi_disable(&np->napi);
1910 #endif
1911
1912         if (debug > 1) {
1913                 printk(KERN_DEBUG "%s: Shutting down ethercard, Intr status %#8.8x.\n",
1914                            dev->name, (int) readl(ioaddr + IntrStatus));
1915                 printk(KERN_DEBUG "%s: Queue pointers were Tx %d / %d, Rx %d / %d.\n",
1916                        dev->name, np->cur_tx, np->dirty_tx,
1917                        np->cur_rx, np->dirty_rx);
1918         }
1919
1920         /* Disable interrupts by clearing the interrupt mask. */
1921         writel(0, ioaddr + IntrEnable);
1922
1923         /* Stop the chip's Tx and Rx processes. */
1924         writel(0, ioaddr + GenCtrl);
1925         readl(ioaddr + GenCtrl);
1926
1927         if (debug > 5) {
1928                 printk(KERN_DEBUG"  Tx ring at %#llx:\n",
1929                        (long long) np->tx_ring_dma);
1930                 for (i = 0; i < 8 /* TX_RING_SIZE is huge! */; i++)
1931                         printk(KERN_DEBUG " #%d desc. %#8.8x %#llx -> %#8.8x.\n",
1932                                i, le32_to_cpu(np->tx_ring[i].status),
1933                                (long long) dma_to_cpu(np->tx_ring[i].addr),
1934                                le32_to_cpu(np->tx_done_q[i].status));
1935                 printk(KERN_DEBUG "  Rx ring at %#llx -> %p:\n",
1936                        (long long) np->rx_ring_dma, np->rx_done_q);
1937                 if (np->rx_done_q)
1938                         for (i = 0; i < 8 /* RX_RING_SIZE */; i++) {
1939                                 printk(KERN_DEBUG " #%d desc. %#llx -> %#8.8x\n",
1940                                        i, (long long) dma_to_cpu(np->rx_ring[i].rxaddr), le32_to_cpu(np->rx_done_q[i].status));
1941                 }
1942         }
1943
1944         free_irq(dev->irq, dev);
1945
1946         /* Free all the skbuffs in the Rx queue. */
1947         for (i = 0; i < RX_RING_SIZE; i++) {
1948                 np->rx_ring[i].rxaddr = cpu_to_dma(0xBADF00D0); /* An invalid address. */
1949                 if (np->rx_info[i].skb != NULL) {
1950                         pci_unmap_single(np->pci_dev, np->rx_info[i].mapping, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1951                         dev_kfree_skb(np->rx_info[i].skb);
1952                 }
1953                 np->rx_info[i].skb = NULL;
1954                 np->rx_info[i].mapping = 0;
1955         }
1956         for (i = 0; i < TX_RING_SIZE; i++) {
1957                 struct sk_buff *skb = np->tx_info[i].skb;
1958                 if (skb == NULL)
1959                         continue;
1960                 pci_unmap_single(np->pci_dev,
1961                                  np->tx_info[i].mapping,
1962                                  skb_first_frag_len(skb), PCI_DMA_TODEVICE);
1963                 np->tx_info[i].mapping = 0;
1964                 dev_kfree_skb(skb);
1965                 np->tx_info[i].skb = NULL;
1966         }
1967
1968         return 0;
1969 }
1970
1971 #ifdef CONFIG_PM
1972 static int starfire_suspend(struct pci_dev *pdev, pm_message_t state)
1973 {
1974         struct net_device *dev = pci_get_drvdata(pdev);
1975
1976         if (netif_running(dev)) {
1977                 netif_device_detach(dev);
1978                 netdev_close(dev);
1979         }
1980
1981         pci_save_state(pdev);
1982         pci_set_power_state(pdev, pci_choose_state(pdev,state));
1983
1984         return 0;
1985 }
1986
1987 static int starfire_resume(struct pci_dev *pdev)
1988 {
1989         struct net_device *dev = pci_get_drvdata(pdev);
1990
1991         pci_set_power_state(pdev, PCI_D0);
1992         pci_restore_state(pdev);
1993
1994         if (netif_running(dev)) {
1995                 netdev_open(dev);
1996                 netif_device_attach(dev);
1997         }
1998
1999         return 0;
2000 }
2001 #endif /* CONFIG_PM */
2002
2003
2004 static void __devexit starfire_remove_one (struct pci_dev *pdev)
2005 {
2006         struct net_device *dev = pci_get_drvdata(pdev);
2007         struct netdev_private *np = netdev_priv(dev);
2008
2009         BUG_ON(!dev);
2010
2011         unregister_netdev(dev);
2012
2013         if (np->queue_mem)
2014                 pci_free_consistent(pdev, np->queue_mem_size, np->queue_mem, np->queue_mem_dma);
2015
2016
2017         /* XXX: add wakeup code -- requires firmware for MagicPacket */
2018         pci_set_power_state(pdev, PCI_D3hot);   /* go to sleep in D3 mode */
2019         pci_disable_device(pdev);
2020
2021         iounmap(np->base);
2022         pci_release_regions(pdev);
2023
2024         pci_set_drvdata(pdev, NULL);
2025         free_netdev(dev);                       /* Will also free np!! */
2026 }
2027
2028
2029 static struct pci_driver starfire_driver = {
2030         .name           = DRV_NAME,
2031         .probe          = starfire_init_one,
2032         .remove         = __devexit_p(starfire_remove_one),
2033 #ifdef CONFIG_PM
2034         .suspend        = starfire_suspend,
2035         .resume         = starfire_resume,
2036 #endif /* CONFIG_PM */
2037         .id_table       = starfire_pci_tbl,
2038 };
2039
2040
2041 static int __init starfire_init (void)
2042 {
2043 /* when a module, this is printed whether or not devices are found in probe */
2044 #ifdef MODULE
2045         printk(version);
2046 #ifdef HAVE_NETDEV_POLL
2047         printk(KERN_INFO DRV_NAME ": polling (NAPI) enabled\n");
2048 #else
2049         printk(KERN_INFO DRV_NAME ": polling (NAPI) disabled\n");
2050 #endif
2051 #endif
2052
2053         /* we can do this test only at run-time... sigh */
2054         if (sizeof(dma_addr_t) != sizeof(netdrv_addr_t)) {
2055                 printk("This driver has dma_addr_t issues, please send email to maintainer\n");
2056                 return -ENODEV;
2057         }
2058
2059         return pci_register_driver(&starfire_driver);
2060 }
2061
2062
2063 static void __exit starfire_cleanup (void)
2064 {
2065         pci_unregister_driver (&starfire_driver);
2066 }
2067
2068
2069 module_init(starfire_init);
2070 module_exit(starfire_cleanup);
2071
2072
2073 /*
2074  * Local variables:
2075  *  c-basic-offset: 8
2076  *  tab-width: 8
2077  * End:
2078  */