[NET]: Nuke SET_MODULE_OWNER macro.
[linux-2.6-block.git] / drivers / net / starfire.c
CommitLineData
1da177e4
LT
1/* starfire.c: Linux device driver for the Adaptec Starfire network adapter. */
2/*
3 Written 1998-2000 by Donald Becker.
4
fdecea66 5 Current maintainer is Ion Badulescu <ionut ta badula tod org>. Please
1da177e4
LT
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
03a8c661 25 [link no longer provides useful info -jgarzik]
1da177e4 26
1da177e4
LT
27*/
28
29#define DRV_NAME "starfire"
03a8c661
JG
30#define DRV_VERSION "2.0"
31#define DRV_RELDATE "June 27, 2006"
1da177e4 32
1da177e4
LT
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>
fdecea66
JG
40#include <linux/crc32.h>
41#include <linux/ethtool.h>
42#include <linux/mii.h>
43#include <linux/if_vlan.h>
d7fe0f24 44#include <linux/mm.h>
1da177e4
LT
45#include <asm/processor.h> /* Processor type for cache alignment. */
46#include <asm/uaccess.h>
47#include <asm/io.h>
48
fdecea66 49#include "starfire_firmware.h"
1da177e4
LT
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
67974231
IB
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
1da177e4
LT
63/*
64 * Define this if using the driver with the zero-copy patch
65 */
1da177e4 66#define ZEROCOPY
1da177e4
LT
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. */
80static int intr_latency;
81static int small_frames;
82
83static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */
84static int max_interrupt_work = 20;
85static 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. */
f71e1309 88static const int multicast_filter_limit = 512;
1da177e4 89/* Whether to do TCP/UDP checksums in hardware */
1da177e4 90static int enable_hw_cksum = 1;
1da177e4
LT
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__)
108static int rx_copybreak = PKT_BUF_SZ;
109#else
110static 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 */
126static int options[MAX_UNITS] = {0, };
127static 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 */
983b7dc0 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))
1da177e4
LT
156/* 64-bit dma_addr_t */
157#define ADDR_64BITS /* This chip uses 64 bit addresses. */
67974231 158#define netdrv_addr_t u64
1da177e4
LT
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 */
67974231 167#define netdrv_addr_t u32
1da177e4
LT
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
1da177e4
LT
177#define skb_first_frag_len(skb) skb_headlen(skb)
178#define skb_num_frags(skb) (skb_shinfo(skb)->nr_frags + 1)
1da177e4
LT
179
180#ifdef HAVE_NETDEV_POLL
bea3348e
SH
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) \
1da177e4
LT
184do { \
185 u32 intr_enable; \
bea3348e
SH
186 if (netif_rx_schedule_prep(dev, &np->napi)) { \
187 __netif_rx_schedule(dev, &np->napi); \
1da177e4
LT
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)) { \
fdecea66 196 printk(KERN_INFO "%s: interrupt while in polling mode!\n", dev->name); \
1da177e4
LT
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)
bea3348e 204static int netdev_poll(struct napi_struct *napi, int budget);
1da177e4 205#else /* not HAVE_NETDEV_POLL */
bea3348e 206#define init_poll(dev, np)
1da177e4
LT
207#define netdev_receive_skb(skb) netif_rx(skb)
208#define vlan_netdev_receive_skb(skb, vlgrp, vlid) vlan_hwaccel_rx(skb, vlgrp, vlid)
bea3348e 209#define netdev_rx(dev, np, ioaddr) \
1da177e4
LT
210do { \
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. */
e19360f2 219static const char version[] __devinitdata =
1da177e4
LT
220KERN_INFO "starfire.c:v1.03 7/26/2000 Written by Donald Becker <becker@scyld.com>\n"
221KERN_INFO " (unofficial 2.2/2.4 kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n";
222
223MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
224MODULE_DESCRIPTION("Adaptec Starfire Ethernet driver");
225MODULE_LICENSE("GPL");
fdecea66 226MODULE_VERSION(DRV_VERSION);
1da177e4
LT
227
228module_param(max_interrupt_work, int, 0);
229module_param(mtu, int, 0);
230module_param(debug, int, 0);
231module_param(rx_copybreak, int, 0);
232module_param(intr_latency, int, 0);
233module_param(small_frames, int, 0);
234module_param_array(options, int, NULL, 0);
235module_param_array(full_duplex, int, NULL, 0);
236module_param(enable_hw_cksum, int, 0);
237MODULE_PARM_DESC(max_interrupt_work, "Maximum events handled per interrupt");
238MODULE_PARM_DESC(mtu, "MTU (all boards)");
239MODULE_PARM_DESC(debug, "Debug level (0-6)");
240MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
241MODULE_PARM_DESC(intr_latency, "Maximum interrupt latency, in microseconds");
242MODULE_PARM_DESC(small_frames, "Maximum size of receive frames that bypass interrupt latency (0,64,128,256,512)");
243MODULE_PARM_DESC(options, "Deprecated: Bits 0-3: media type, bit 17: full duplex");
244MODULE_PARM_DESC(full_duplex, "Deprecated: Forced full-duplex setting (0/1)");
245MODULE_PARM_DESC(enable_hw_cksum, "Enable/disable hardware cksum support (0/1)");
246
247/*
248 Theory of Operation
249
250I. Board Compatibility
251
252This driver is for the Adaptec 6915 "Starfire" 64 bit PCI Ethernet adapter.
253
254II. Board-specific settings
255
256III. Driver operation
257
258IIIa. Ring buffers
259
260The Starfire hardware uses multiple fixed-size descriptor queues/rings. The
261ring sizes are set fixed by the hardware, but may optionally be wrapped
262earlier by the END bit in the descriptor.
263This driver uses that hardware queue size for the Rx ring, where a large
264number of entries has no ill effect beyond increases the potential backlog.
265The Tx ring is wrapped with the END bit, since a large hardware Tx queue
266disables the queue layer priority ordering and we have no mechanism to
267utilize the hardware two-level priority queue. When modifying the
268RX/TX_RING_SIZE pay close attention to page sizes and the ring-empty warning
269levels.
270
271IIIb/c. Transmit/Receive Structure
272
273See the Adaptec manual for the many possible structures, and options for
274each structure. There are far too many to document all of them here.
275
276For transmit this driver uses type 0/1 transmit descriptors (depending
277on the 32/64 bitness of the architecture), and relies on automatic
278minimum-length padding. It does not use the completion queue
279consumer index, but instead checks for non-zero status entries.
280
fdecea66 281For receive this driver uses type 2/3 receive descriptors. The driver
1da177e4
LT
282allocates full frame size skbuffs for the Rx ring buffers, so all frames
283should fit in a single descriptor. The driver does not use the completion
284queue consumer index, but instead checks for non-zero status entries.
285
286When an incoming frame is less than RX_COPYBREAK bytes long, a fresh skbuff
287is allocated and the frame is copied to the new skbuff. When the incoming
288frame is larger, the skbuff is passed directly up the protocol stack.
289Buffers consumed this way are replaced by newly allocated skbuffs in a later
290phase of receive.
291
292A notable aspect of operation is that unaligned buffers are not permitted by
293the Starfire hardware. Thus the IP header at offset 14 in an ethernet frame
294isn't longword aligned, which may cause problems on some machine
295e.g. Alphas and IA64. For these architectures, the driver is forced to copy
296the frame into a new skbuff unconditionally. Copied frames are put into the
297skbuff at an offset of "+2", thus 16-byte aligning the IP header.
298
299IIId. Synchronization
300
301The driver runs as two independent, single-threaded flows of control. One
302is the send-packet routine, which enforces single-threaded use by the
303dev->tbusy flag. The other thread is the interrupt handler, which is single
304threaded by the hardware and interrupt handling software.
305
306The send packet thread has partial control over the Tx ring and the netif_queue
307status. 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
310The interrupt handler has exclusive control over the Rx ring and records stats
311from the Tx ring. After reaping the stats, it marks the Tx queue entry as
312empty by incrementing the dirty_tx mark. Iff the netif_queue is stopped and the
313number of free Tx slow is above the threshold, it signals the upper layer to
314restart the queue.
315
316IV. Notes
317
318IVb. References
319
320The Adaptec Starfire manuals, available only from Adaptec.
321http://www.scyld.com/expert/100mbps.html
322http://www.scyld.com/expert/NWay.html
323
324IVc. 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
fdecea66 332
1da177e4
LT
333
334enum chip_capability_flags {CanHaveMII=1, };
335
336enum chipset {
337 CH_6915 = 0,
338};
339
340static struct pci_device_id starfire_pci_tbl[] = {
341 { 0x9004, 0x6915, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_6915 },
342 { 0, }
343};
344MODULE_DEVICE_TABLE(pci, starfire_pci_tbl);
345
346/* A chip capabilities table, matching the CH_xxx entries in xxx_pci_tbl[] above. */
f71e1309 347static const struct chip_info {
1da177e4
LT
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*/
363enum 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 */
387enum 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. */
409enum 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 */
417enum 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. */
424enum 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. */
436enum 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. */
449enum 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 */
465enum 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 */
474enum 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 */
483enum gen_ctrl_bits {
484 RxEnable=0x05, TxEnable=0x0a,
485 RxGFPEnable=0x10, TxGFPEnable=0x20,
486};
487
488/* Bits in the IntrTimerCtrl register */
489enum 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. */
496struct starfire_rx_desc {
497 dma_addr_t rxaddr;
498};
499enum rx_desc_bits {
500 RxDescValid=1, RxDescEndRing=2,
501};
502
503/* Completion queue entry. */
504struct short_rx_done_desc {
505 u32 status; /* Low 16 bits is length. */
506};
507struct basic_rx_done_desc {
508 u32 status; /* Low 16 bits is length. */
509 u16 vlanid;
510 u16 status2;
511};
512struct csum_rx_done_desc {
513 u32 status; /* Low 16 bits is length. */
514 u16 csum; /* Partial checksum */
515 u16 status2;
516};
517struct 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 */
1da177e4
LT
526#ifdef VLAN_SUPPORT
527typedef struct full_rx_done_desc rx_done_desc;
528#define RxComplType RxComplType3
529#else /* not VLAN_SUPPORT */
530typedef struct csum_rx_done_desc rx_done_desc;
531#define RxComplType RxComplType2
532#endif /* not VLAN_SUPPORT */
1da177e4
LT
533
534enum rx_done_bits {
535 RxOK=0x20000000, RxFIFOErr=0x10000000, RxBufQ2=0x08000000,
536};
537
538/* Type 1 Tx descriptor. */
539struct starfire_tx_desc_1 {
540 u32 status; /* Upper bits are status, lower 16 length. */
541 u32 addr;
542};
543
544/* Type 2 Tx descriptor. */
545struct 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
552typedef struct starfire_tx_desc_2 starfire_tx_desc;
553#define TX_DESC_TYPE TxDescType2
554#else /* not ADDR_64BITS */
555typedef 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
560enum tx_desc_bits {
561 TxDescID=0xB0000000,
562 TxCRCEn=0x01000000, TxDescIntr=0x08000000,
563 TxRingWrap=0x04000000, TxCalTCP=0x02000000,
564};
565struct tx_done_desc {
566 u32 status; /* timestamp, index. */
567#if 0
568 u32 intrstatus; /* interrupt status */
569#endif
570};
571
572struct rx_ring_info {
573 struct sk_buff *skb;
574 dma_addr_t mapping;
575};
576struct 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
583struct 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;
bea3348e
SH
599 struct napi_struct napi;
600 struct net_device *dev;
1da177e4
LT
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
628static int mdio_read(struct net_device *dev, int phy_id, int location);
629static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
630static int netdev_open(struct net_device *dev);
631static void check_duplex(struct net_device *dev);
632static void tx_timeout(struct net_device *dev);
633static void init_ring(struct net_device *dev);
634static int start_tx(struct sk_buff *skb, struct net_device *dev);
7d12e780 635static irqreturn_t intr_handler(int irq, void *dev_instance);
1da177e4
LT
636static void netdev_error(struct net_device *dev, int intr_status);
637static int __netdev_rx(struct net_device *dev, int *quota);
638static void refill_rx_ring(struct net_device *dev);
639static void netdev_error(struct net_device *dev, int intr_status);
640static void set_rx_mode(struct net_device *dev);
641static struct net_device_stats *get_stats(struct net_device *dev);
642static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
643static int netdev_close(struct net_device *dev);
644static void netdev_media_change(struct net_device *dev);
7282d491 645static const struct ethtool_ops ethtool_ops;
1da177e4
LT
646
647
648#ifdef VLAN_SUPPORT
649static 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
661static 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
672static 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);
5c15bdec 679 vlan_group_set_device(np->vlgrp, vid, NULL);
1da177e4
LT
680 set_rx_mode(dev);
681 spin_unlock(&np->lock);
682}
683#endif /* VLAN_SUPPORT */
684
685
686static 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 }
1da177e4
LT
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
1da177e4
LT
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 */
694625c0 741 pci_try_set_mwi(pdev);
1da177e4 742
1da177e4
LT
743#ifdef ZEROCOPY
744 /* Starfire can do TCP/UDP checksumming */
745 if (enable_hw_cksum)
fdecea66 746 dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
1da177e4
LT
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);
bea3348e 792 np->dev = dev;
1da177e4
LT
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;
fdecea66
JG
851 dev->tx_timeout = tx_timeout;
852 dev->watchdog_timeo = TX_TIMEOUT;
bea3348e 853 init_poll(dev, np);
1da177e4
LT
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) {
fdecea66 883 printk("%s: PHY#%d reset never completed!\n", dev->name, phy);
1da177e4
LT
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
908err_out_cleardev:
909 pci_set_drvdata(pdev, NULL);
910 iounmap(base);
911err_out_free_res:
912 pci_release_regions (pdev);
913err_out_free_netdev:
914 free_netdev(dev);
915 return -ENODEV;
916}
917
918
919/* Read the MII Management Data I/O (MDIO) interfaces. */
920static 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
937static 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
946static 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??? */
fdecea66 954
1fb9df5d 955 retval = request_irq(dev->irq, &intr_handler, IRQF_SHARED, dev->name, dev);
1da177e4
LT
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);
d8840ac9
AD
974 if (np->queue_mem == NULL) {
975 free_irq(dev->irq, dev);
1da177e4 976 return -ENOMEM;
d8840ac9 977 }
1da177e4
LT
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
bea3348e
SH
1058#ifdef HAVE_NETDEV_POLL
1059 napi_enable(&np->napi);
1060#endif
1da177e4
LT
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
1da177e4
LT
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);
1da177e4
LT
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
1107static 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
1142static 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. */
1172static 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;
689be439 1188 np->rx_info[i].mapping = pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1da177e4
LT
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
1218static 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
1da177e4
LT
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)
84fa7933 1235 if (skb->ip_summed == CHECKSUM_PARTIAL) {
5b057c6b 1236 if (skb_padto(skb, (skb->len + PADDING_MASK) & ~PADDING_MASK))
67974231 1237 return NETDEV_TX_OK;
1da177e4
LT
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 }
84fa7933 1257 if (skb->ip_summed == CHECKSUM_PARTIAL) {
1da177e4
LT
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 {
1da177e4
LT
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);
1da177e4
LT
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. */
7d12e780 1312static irqreturn_t intr_handler(int irq, void *dev_instance)
1da177e4
LT
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))
bea3348e 1335 netdev_rx(dev, np, ioaddr);
1da177e4
LT
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;
1da177e4
LT
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 }
fdecea66 1373
1da177e4
LT
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. */
1417static 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)) {
fdecea66 1433 /* There was an error. */
1da177e4
LT
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) {
1da177e4
LT
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);
8c7b7faa 1461 skb_copy_to_linear_data(skb, np->rx_info[entry].skb->data, pkt_len);
1da177e4
LT
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);
fdecea66 1485#ifdef VLAN_SUPPORT
1da177e4
LT
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
1da177e4
LT
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) {
84fa7933 1503 skb->ip_summed = CHECKSUM_COMPLETE;
1da177e4
LT
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 }
1da177e4
LT
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
bea3348e 1536static int netdev_poll(struct napi_struct *napi, int budget)
1da177e4 1537{
bea3348e
SH
1538 struct netdev_private *np = container_of(napi, struct netdev_private, napi);
1539 struct net_device *dev = np->dev;
1da177e4 1540 u32 intr_status;
1da177e4 1541 void __iomem *ioaddr = np->base;
bea3348e 1542 int quota = budget;
1da177e4
LT
1543
1544 do {
1545 writel(IntrRxDone | IntrRxEmpty, ioaddr + IntrClear);
1546
bea3348e 1547 if (__netdev_rx(dev, &quota))
1da177e4
LT
1548 goto out;
1549
1550 intr_status = readl(ioaddr + IntrStatus);
1551 } while (intr_status & (IntrRxDone | IntrRxEmpty));
1552
bea3348e 1553 netif_rx_complete(dev, napi);
1da177e4
LT
1554 intr_status = readl(ioaddr + IntrEnable);
1555 intr_status |= IntrRxDone | IntrRxEmpty;
1556 writel(intr_status, ioaddr + IntrEnable);
1557
1558 out:
1559 if (debug > 5)
bea3348e
SH
1560 printk(KERN_DEBUG " exiting netdev_poll(): %d.\n",
1561 budget - quota);
1da177e4
LT
1562
1563 /* Restart Rx engine if stopped. */
bea3348e 1564 return budget - quota;
1da177e4
LT
1565}
1566#endif /* HAVE_NETDEV_POLL */
1567
1568
1569static 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 =
689be439 1584 pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1da177e4
LT
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
1597static 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
1672static 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
1699static 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
1da177e4
LT
1726static 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++) {
5c15bdec 1740 if (vlan_group_get_device(np->vlgrp, i)) {
1da177e4
LT
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) {
fdecea66
JG
1792 /* The chip uses the upper 9 CRC bits
1793 as index into the hash table */
1da177e4
LT
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
1814static int check_if_running(struct net_device *dev)
1815{
1816 if (!netif_running(dev))
1817 return -EINVAL;
1818 return 0;
1819}
1820
1821static 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);
fdecea66 1826 strcpy(info->bus_info, pci_name(np->pci_dev));
1da177e4
LT
1827}
1828
1829static 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
1838static 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
1849static 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
1855static 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
1861static u32 get_msglevel(struct net_device *dev)
1862{
1863 return debug;
1864}
1865
1866static void set_msglevel(struct net_device *dev, u32 val)
1867{
1868 debug = val;
1869}
1870
7282d491 1871static const struct ethtool_ops ethtool_ops = {
1da177e4
LT
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
1882static 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
1901static 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);
bea3348e
SH
1908#ifdef HAVE_NETDEV_POLL
1909 napi_disable(&np->napi);
1910#endif
1da177e4
LT
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
d4fbeabb
SR
1971#ifdef CONFIG_PM
1972static 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
1987static int starfire_resume(struct pci_dev *pdev)
1988{
1989 struct net_device *dev = pci_get_drvdata(pdev);
6aa20a22 1990
d4fbeabb
SR
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
1da177e4
LT
2003
2004static 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
5d9428de 2009 BUG_ON(!dev);
1da177e4
LT
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
2029static struct pci_driver starfire_driver = {
2030 .name = DRV_NAME,
2031 .probe = starfire_init_one,
2032 .remove = __devexit_p(starfire_remove_one),
d4fbeabb
SR
2033#ifdef CONFIG_PM
2034 .suspend = starfire_suspend,
2035 .resume = starfire_resume,
2036#endif /* CONFIG_PM */
1da177e4
LT
2037 .id_table = starfire_pci_tbl,
2038};
2039
2040
2041static 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);
fdecea66
JG
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");
1da177e4 2050#endif
fdecea66
JG
2051#endif
2052
1da177e4 2053 /* we can do this test only at run-time... sigh */
67974231
IB
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");
1da177e4
LT
2056 return -ENODEV;
2057 }
67974231 2058
29917620 2059 return pci_register_driver(&starfire_driver);
1da177e4
LT
2060}
2061
2062
2063static void __exit starfire_cleanup (void)
2064{
2065 pci_unregister_driver (&starfire_driver);
2066}
2067
2068
2069module_init(starfire_init);
2070module_exit(starfire_cleanup);
2071
2072
2073/*
2074 * Local variables:
2075 * c-basic-offset: 8
2076 * tab-width: 8
2077 * End:
2078 */